【问题标题】:Create large correlation matrix with different correlation values创建具有不同相关值的大型相关矩阵
【发布时间】:2013-09-16 09:04:57
【问题描述】:

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

【问题讨论】:

  • Simon,是的,这就是我要找的东西,你能转发一下吗?
  • 我必须先使其对称 - 缺少 t() !!

标签: r matrix


【解决方案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 )

sampleprob 参数告诉我们,我们期望得到 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

【讨论】:

  • 一件小事。在这种情况下,似乎所有负相关的变量都与变量 5 负相关。是否可以将其混为一谈?这样不仅变量 5 具有负相关性,而且它们实际上是随机分布在矩阵中的?
  • @user1984076 显示一个 5x5(ish)大小的矩阵,展示您所追求的示例。我不想花时间制定一个不正确的解决方案。谢谢!
  • @user1984076 是的,这是非常可行的。给我几分钟——我只是在做别的事情。更新后我会发消息的。
  • @user1984076 已更新。我希望这就是你要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
相关资源
最近更新 更多