【发布时间】: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