Python:Pearson' s

时间:2018-04-05 15:54:02

标签: python correlation data-analysis pearson

所以这是我用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()

据我所知,为了做到这一点,我们需要:

  1. 标准化每个变量
  2. 将每对值相乘,取平均值
  3. 这让我想到了我的问题,为什么使用以下行:

    std_x = (x - x.mean()) / x.std(ddof=0)
    

    而不仅仅是:

    r = (x.std(ddof=0)*y.std(ddof=0))/len(x)
    

1 个答案:

答案 0 :(得分:0)

我认为你对Pearson系数的公式感到困惑。假设您有两个随机变量X和Y.然后Pearson的系数定义为

r = Cov(X, Y)/(s_X*s_Y)

其中Cov(X, Y)是X和Y之间的协方差,s_Ys_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)