Python:皮尔逊的 r
Python: Pearson's r
这是我使用皮尔逊 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)
我想你对皮尔逊系数的公式感到困惑。假设您有两个随机变量 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
.
好的,现在我们有了公式,那么如何计算呢。实际上你不能,因为你无法访问 real 标准偏差和 real 预期值。相反,我们通常做的是计算样本相关系数,该系数基于此公式,但用估计器给出的值替换 真实 值。
公式中期望值的自然(最小方差无偏)估计量,就是平均值(由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)
这是我使用皮尔逊 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)
我想你对皮尔逊系数的公式感到困惑。假设您有两个随机变量 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
.
好的,现在我们有了公式,那么如何计算呢。实际上你不能,因为你无法访问 real 标准偏差和 real 预期值。相反,我们通常做的是计算样本相关系数,该系数基于此公式,但用估计器给出的值替换 真实 值。
公式中期望值的自然(最小方差无偏)估计量,就是平均值(由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)