2013-09-26 79 views
1

我想从预先指定的相关矩阵创建相关的二元变量,其中大部分变量高度相关,某些变量相对不相关。指定相关矩阵用于生成相关二元变量

例如我的相关矩阵将是:

cor.mat<-matrix(0.8,nrow=50,ncol=50) 
cor.mat[,sample(1:50,10)]<-0.2 
diag(cor.mat) <- 1 

然后我会用rmvbin:

library(bindata) 
rmvbin(100, margprob=rep(.6,50), bincorr=cor.mat) 

然而,在这种情况下,我得到NaNs作为输出,因为六西格玛不是正定。

如何指定一个符合我的标准的相关矩阵(即大多数高相关性和少数低相关性)?

+5

这个问题似乎是脱离主题,因为它是关于应用数学/统计。 – Frank

回答

0

您的相关矩阵应该是对称的。这意味着如果您将对角线以下的所有内容都放在对角线上方,则它与对角线上方所有内容的镜像一样。相关矩阵必须是这种情况,因为xi和xj的相关性应与xj和xi的相关性相同。

我将制作一个11x11矩阵,因为我不想输入您的50x50矩阵。高度相关部分看起来像这样。

1 .8 .8 .8 .8 .8 .8 .8 
.8 1 .8 .8 .8 .8 .8 .8 
.8 .8 1 .8 .8 .8 .8 .8 
.8 .8 .8 1 .8 .8 .8 .8 
.8 .8 .8 .8 1 .8 .8 .8 
.8 .8 .8 .8 .8 1 .8 .8 
.8 .8 .8 .8 .8 .8 1 .8 
.8 .8 .8 .8 .8 .8 .8 1 

这是你的第8个变量的矩阵。然后再添加3个与你拥有的8个和对方相关性较低的另外3个。

1 .8 .8 .8 .8 .8 .8 .8 .2 .2 .2 
.8 1 .8 .8 .8 .8 .8 .8 .2 .2 .2 
.8 .8 1 .8 .8 .8 .8 .8 .2 .2 .2 
.8 .8 .8 1 .8 .8 .8 .8 .2 .2 .2 
.8 .8 .8 .8 1 .8 .8 .8 .2 .2 .2 
.8 .8 .8 .8 .8 1 .8 .8 .2 .2 .2 
.8 .8 .8 .8 .8 .8 1 .8 .2 .2 .2 
.8 .8 .8 .8 .8 .8 .8 1 .2 .2 .2 
.2 .2 .2 .2 .2 .2 .2 .2 1 .2 .2 
.2 .2 .2 .2 .2 .2 .2 .2 .2 1 .2 
.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 1 

该矩阵可以分为4部分。只与高度相关的变量x1至x8之间存在相关性的部分,即左上部分。低相关变量x9到x11之间的相关部分,右下角。最后,右上角和左下角是三个和八个之间的相关性。这两个必须彼此转置。

有很多方法如果你担心建立这个矩阵中R.

cormat=matrix(.8,nrow=11,ncol=11) 
cormat[,9:11]=.2 #set the right columns 
cormat[9:11,]=.2 #set the bottom rows 
diag(cormat)=1  #set the diagonal 

该矩阵不是正定只是检查特征值都与阳性

eigen(cormat)$values 
+0

感谢您的帮助。这似乎并没有解决西格玛不确定的事实。我正在寻找满足这个标准的矩阵。 – ghb

+0

上面的矩阵是正定的。我也认为它符合你上面的其他要求。 – Seth

+0

我添加了一些语法来检查矩阵实际上是pos-def,所以你可以检查你的确定。 – Seth