首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python: Pearson's r

Python: Pearson's r
EN

Stack Overflow用户
提问于 2018-04-05 15:54:02
回答 1查看 678关注 0票数 0

这是我的代码,用pearson's r计算两个变量之间的相关性。

代码语言:javascript
运行
复制
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. 将每一对值相乘,取平均值

这就引出了我的问题,为什么使用下面这一行:

代码语言:javascript
运行
复制
std_x = (x - x.mean()) / x.std(ddof=0)

而不是简单地:

代码语言:javascript
运行
复制
r = (x.std(ddof=0)*y.std(ddof=0))/len(x)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-05 16:17:14

我想你对皮尔逊系数的公式搞糊涂了。假设你有两个随机变量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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49676630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档