所以这是我用pearson&r; s r计算两个变量之间相关性的代码。
def correlation(x, y):
std_x = (x - x.mean()) / x.std(ddof=0)
std_y = (y - y.mean()) / y.std(ddof=0)
return (std_x * std_y).mean()
据我所知,为了做到这一点,我们需要:
这让我想到了我的问题,为什么使用以下行:
std_x = (x - x.mean()) / x.std(ddof=0)
而不仅仅是:
r = (x.std(ddof=0)*y.std(ddof=0))/len(x)
答案 0 :(得分:0)
我认为你对Pearson系数的公式感到困惑。假设您有两个随机变量X和Y.然后Pearson的系数定义为
r = Cov(X, Y)/(s_X*s_Y)
其中Cov(X, Y)
是X和Y之间的协方差,s_Y
和s_Y
是它们的标准偏差。
Cov(X, Y) = E[(X-E[X])*(Y - E[Y])]
E[Z]
设计随机变量Z
的预期值。
好的,现在我们有了公式,所以如何计算它。实际上你不能,因为你无法访问真正的标准偏差和真正的期望值。相反,我们通常做的是计算样本相关系数,该系数基于此公式,但将实值替换为估算器给出的值。
公式中预期值的自然(最小方差非偏差)估计量就是均值(由np.mean
给出),同样,标准差的右估计量是给出的经验标准差np.std
。
所以把它们放在一起,公式就会变成
r = np.mean((x-np.mean(x))*(y-np.mean(y)))/(np.std(x)*np.std(y))
实际上与
相同 np.mean(X*Y)
其中X = (x-np.mean(x))/np.std(x)
和Y = (y-np.mean(y))/np.std(y)