R 基于协方差矩阵的相关数据仿真

R 基于协方差矩阵的相关数据仿真,r,covariance,R,Covariance,嗨,我想一次生成60个变量的相关二进制数据(0/1)。 我尝试了一些软件包,比如bindata,和mvrnorm,但我经常收到一个错误,告诉我我给出的随机相关矩阵不正确。(我试图从截断的正态分布创建它…) 我唯一想做的就是指定变量之间的平均相关性,比如0.7,并且也有一些负相关性。可能吗?谢谢 编辑:我的脚本 set.seed(1) mymatrix <- matrix(rnorm(25, mean=0.7, sd=0.2), ncol=5) # random matrix mean 0.

嗨,我想一次生成60个变量的相关二进制数据(0/1)。 我尝试了一些软件包,比如
bindata
,和
mvrnorm
,但我经常收到一个错误,告诉我我给出的随机相关矩阵不正确。(我试图从截断的正态分布创建它…)

我唯一想做的就是指定变量之间的平均相关性,比如0.7,并且也有一些负相关性。可能吗?谢谢

编辑:我的脚本

set.seed(1)
mymatrix <- matrix(rnorm(25, mean=0.7, sd=0.2), ncol=5) # random matrix mean 0.7
mymatrix[lower.tri(mymatrix)] = t(mymatrix)[lower.tri(mymatrix)] # make it symmetric
mymatrix[mymatrix>1]<-0.7 # make numbers between 0 and 1
mymatrix[mymatrix<0]<-0.7
library(bindata)
res=rmvbin(1000, margprob=diag(mymatrix), bincorr = mymatrix)
#### Error in commonprob2sigma(commonprob, simulvals) : 
#### Matrix commonprob not admissible.
set.seed(1)
mymatrix 1]您的矩阵(代码段中的mymatrix)不是正定矩阵,它不能是有效的协方差矩阵,更不用说是有效的相关矩阵,因为它的对角项不是1。尝试通过将随机矩阵与其转置相乘来建立一个随机协方差矩阵,使其至少是正定的。要构建相关矩阵,需要相应地重新缩放协方差矩阵。例如,

rmat <- matrix(rnorm(25),5,5)
cov_mat <- rmat%*%t(rmat)
corr_mat <- cov_mat/sqrt(diag(cov_mat)%*%t(diag(cov_mat)))

也许你应该提供一个玩具示例,并提供“错误告诉我我给出的随机相关矩阵不正确”的确切文本。@lmo谢谢,请参阅编辑。.谢谢回答,我理解你的第一段,但你提到的文章对我的数学知识来说实在太复杂了。。。。我试图用你的modif重新运行我的代码,但它说:“警告:结果协方差矩阵不是正定的”。返回的所有值都是NA。请参阅上面的编辑。感谢你的广泛输入。我现在明白了为什么很难找到一个有效的矩阵。然而,通过您的代码,我确实获得了一些没有错误的随机数据输出,尽管我仍在努力控制corr_mat中相关性的分布。
rmvbin(1000,margprob=rep(0.5,5),sigma=corr_mat)