我想为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
答案 0 :(得分:1)
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%