1

我想为 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
4

1 回答 1

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论点sample告诉我们,我们期望得到0.6 80%时间和负相关,-0.2只是20%时间。您可以根据需要调整这些。按照其余代码获取...

#     [,1] [,2] [,3] [,4] [,5]
#[1,]  1.0  0.6 -0.2 -0.2  0.6
#[2,]  0.6  1.0  0.6  0.6 -0.2
#[3,] -0.2  0.6  1.0 -0.2  0.6
#[4,] -0.2  0.6 -0.2  1.0  0.6
#[5,]  0.6 -0.2  0.6  0.6  1.0
于 2013-09-16T09:12:14.593 回答