繁体   English   中英

r中三个变量的相关系数

[英]Correlation coefficient for three variables in r

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

r ^ 2(abc)=(r ^ 2(ab)+ r ^ 2(bc)+ r ^ 2(ac))-(2 xr(ab)xr(bc)xr(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)。

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中拥有所有想要的变量,这也会推广到较大的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM