如何在 Python 中使用 numpy for 循环手动计算相关系数?

How to manually calculate correlation coefficiant using numpy for loops in Python?

所以我在 Python 上了我的第一门正式课程,我在尝试计算数据集的相关系数时偶然发现了一些问题。我知道我可以只使用 np.coercoef 但我也希望能够“手动”完成。我已经尝试了以下代码的各种组合,但我一直得到的答案比 np.coercoef 给我的答案要高(大约 0.62 与 0.57 相比)。

我希望这里有人可以帮助我找出代码中的问题?

此致,

k_m = np.array([22, 48, 76, 10, 22, 4, 68, 44, 10, 76, 14, 56])
km = np.array([63, 39, 61, 30, 51, 44, 74, 78, 55, 58, 41, 69])

gns_k_m = 0
gns_km = 0
cov = 0
sum_k_m = 0
sum_km = 0

for k in range(len(k_m)):
    gns_k_m += k_m[k]/len(k_m)

for k in range(len(km)):
    gns_km += km[k]/len(km)
    
print(gns_k_m, gns_km)

for k in range(len(k_m)):
    cov += (k_m[k]-gns_k_m)*(km[k]-gns_km)/(len(k_m)-1)

print(cov)

for k in range(len(k_m)):
    sum_k_m += (k_m[k]-gns_k_m)**2

sa_k_m = np.sqrt(sum_k_m/len(k_m))

for k in range(len(km)):
    sum_km += (km[k]-gns_km)**2
    
sa_km = np.sqrt(sum_km/len(km))

cor = cov/(sa_k_m*sa_km)

print(cor)
print(np.corrcoef(k_m,km))

问题是 np.corrcoef 使用协方差除以 len(k_m) 而不是您的 len(k_m) - 1.

的归一化

因此,如果您重新规范化 np.corrcoef 给出的结果,您将获得与手动实施给出的相同的值。

In [26]: new_res = (np.corrcoef(k_m, km) * len(k_m) / (len(k_m) - 1))[0, 1]

In [28]: np.allclose(new_res, cor)
Out[28]: True

In [29]: new_res
Out[29]: 0.6165427925911239