【问题标题】:Correlation coefficient for three variables in rr中三个变量的相关系数
【发布时间】:2019-02-16 01:18:14
【问题描述】:

对于三个 n 维非零方差变量 a、b 和 c,n > 2,如果 r(ab)、r(bc) 和 r(ac) 分别是 a 和 b、b 和 c 以及 a 和 c 之间的皮尔逊相关系数,然后是 a、b 和c 定义为:

r^2(abc) = ( r^2(ab) + r^2(bc) + r^2(ac) ) - ( 2 x r(ab) x r(bc) x r(ac) )

我能够以手动方式获取代码:

a <- c(4, 6, 2, 7)
b <- c(8, 1, 3, 5)
c <- c(6, 3, 1, 9)

al <- data.frame(a, b, c)
al


ab_cor <- cor(al$a, al$b, method = c("pearson"))
bc_cor <- cor(al$b, al$c, method = c("pearson"))
ac_cor <- cor(al$a, al$c, method = c("pearson"))

abc_cor <- sqrt( ( (ab_cor)^2 + (bc_cor)^2 + (ac_cor)^2 ) - ( 2 * ab_cor * bc_cor * ac_cor) )
abc_cor

但我想知道这是否可以用更少的代码行来完成,例如使用 for 循环。另外,我将如何编写它以便我可以使用超过 3 个变量来完成它,例如,r(abcd) 即 r(ab)、r(ac)、r(ad)、r(bc)、r (bd) 和 r(cd)。

【问题讨论】:

  • 对我来说,对于超过 3 个变量,您希望计算看起来像什么并不清楚。如果您提供更通用版本的示例(甚至仅针对 4 个变量),那将很有帮助。
  • 等式如下所示: r^2(abcd) = ( r^2(ab) + r^2(ac) + r^2(ad) + r^2(bc) + r^2(bd)+ r^2(cd) ) - ( 2 x r(ab) x r(ac) x r(ad) x r(bc) x r(bd) x r(cd) )
  • 你的意思是那里有更多的东西吗?
  • 但是手动执行此操作会很乏味,尤其是当我们开始添加越来越多的变量时。等式会以指数方式变长,但如果有一种方法可以通过 for 循环实现,它应该能够重复所有相关组合,并将值转储到列表中。
  • 该公式基本上是所有相关组合的平方和减去所有相关组合的倍数的2倍。如果以文本形式写出时更难看到,我可以添加图片链接

标签: r correlation equation


【解决方案1】:

cor 函数已经创建了一个相关矩阵。你只需要挑选出相关的,然后使用一些向量操作。

cs <- cor(al, method = "pearson")

cs <- cs[upper.tri(cs)]

#sqrt(sum(cs^2)) - 2*prod(cs)
# apparently it's
sqrt(sum(cs^2) - 2*prod(cs))

这也适用于更大的情况,并假设您在 al data.frame 中拥有所需的所有变量。

【讨论】:

  • @IceCreamToucan 感谢您的关注
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 2020-03-15
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
相关资源
最近更新 更多