首页 > 解决方案 > 手动计算 R 中的皮尔逊相关性?

问题描述

在此处输入图像描述 我正在尝试计算两个数据向量之间的皮尔逊相关性。

x = c(5,5,4,5,5,5)
y = c(0,5,0,3,5,4)
mx = mean(x)
my = mean(y)
newx = c(x-mx)
newy = c(y-my)
corr = (newx%*%t(newy)/sqrt((newx^2)%*%(sqrt(newy^2)))

我的第一个主要问题是这种相关性是通过忽略 0 值来计算的。但是,如果我完全省略它们,我不相信我的最终计算是可能的。

如果您知道一种更优雅的编码方式,或者我做错了什么,我将不胜感激。

标签: rcorrelation

解决方案


你有几个错误。首先,您缺少右括号。二是分子倒数。您想要第一个组件的转置,而不是第二个。你忘了把分母相加。

c(t(newx) %*% newy) / (sqrt(sum(newx^2)) * sqrt(sum(newy^2)))
#[1] 0.5991713

cor(x, y)
#[1] 0.5991713

或者,您可以使用crossprod.

crossprod(newx, newy) / (sqrt(sum(newx^2)) * sqrt(sum(newy^2)))
          [,1]
[1,] 0.5991713

推荐阅读