Для трех n-мерных переменных ненулевой дисперсии a, b и c, n> 2, если r (ab), r (bc) и r (ac) - коэффициенты корреляции Пирсона между a и b,между b и c и между a и c соответственно коэффициент корреляции r (abc) среди a, b и c определяется как:
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).