创建具有不同相关值的大相关矩阵

时间:2013-09-16 09:04:57

标签: r matrix

我想为50个变量创建一个相关矩阵,其中不同的变量具有不同的相关性。

在每个变量具有相同相关性的完美情况下,我将使用:

cor.table <- matrix(rep(0.8,2500),50,50)
diag(cor.table) <- 1

但是,现在我希望有40个变量具有相关性.6,其余10个具有相关性-.2

如何使用matrix()命令设置这样的表?

例如:

      1     2     3     4     5

1     1   -0.2   0.6   0.6   0.6

2   -0.2    1    0.6  -0.2   0.6

3    0.6   0.6    1    0.6  -0.2

4    0.6  -0.2   0.6    1    0.6

5    0.6   0.6  -0.2   0.6    1

1 个答案:

答案 0 :(得分:1)

你是说这个意思吗? [用小100倍的例子!] ......

cor.table <- matrix( c( rep(0.8,20) , rep( -0.8 , 5) ) , 5 , 5 )
diag(cor.table) <- 1

#  Make matrix symmetric - the 't()' is necessary for this
cor.table[ lower.tri(cor.table) ] <- t( cor.table )[ lower.tri( cor.table ) ]
cor.table
     [,1] [,2] [,3] [,4] [,5]
[1,]  1.0  0.8  0.8  0.8 -0.8
[2,]  0.8  1.0  0.8  0.8 -0.8
[3,]  0.8  0.8  1.0  0.8 -0.8
[4,]  0.8  0.8  0.8  1.0 -0.8
[5,] -0.8 -0.8 -0.8 -0.8  1.0

要改变负相关只是使用随机抽样的地方。用这个替换第一行:

cor.table <- matrix( sample( c(0.6,-0.2) , 25 , prob = c( 0.8 , 0.2 ) , repl = TRUE ) , 5 , 5 )

prob的{​​{1}}参数告诉我们,我们希望得到sample 0.6的时间和负相关,80%-0.2 } 的时间。您可以根据需要调整这些。按照剩下的代码来获取......

20%