计算皮尔逊相关系数

11
我试图计算两个变量的Pearson相关系数。这些变量是为了确定邮政编码数量与一系列距离之间是否存在关系。因此,我想看看随着距离范围的变化,邮政编码数量是否增加/减少。
我将拥有一个列表,其中将计算距离范围内的邮政编码数量,另一个列表将包含实际范围。
列表中是否可以包含一系列距离?还是像这样 [50, 100, 500, 1000] 这样的列表会更好,其中每个元素都包含该数量的范围。例如,该列表表示达到50公里,然后从50公里到100公里,依此类推。

4
根据 Stack Overflow 的规定,我已经删除了不必要的信息。SO 是一个问答网站,所以说“我希望得到帮助”是多余的。如果你想要表达感谢,可以点赞并接受回答。如果你想要了解更多信息,请阅读 FAQ 并在 Meta Stack Overflow 上进行探索。 - Chris Seymour
4个回答

16

使用Scipy:

scipy.stats.pearsonr(x, y)
计算 Pearson 相关系数和检验非相关性的 p 值。
Pearson 相关系数衡量两个数据集之间的线性关系。严格来说,Pearson 的相关性要求每个数据集都服从正态分布。与其他相关系数一样,这个系数在 -1 和 +1 之间变化,其中 0 表示没有相关性。-1 或 +1 的相关性表示一个精确的线性关系。正相关意味着随着 x 的增加,y 也会增加。负相关意味着随着 x 的增加,y 会减少。 p 值大致指示了不相关系统产生的数据集中具有与从这些数据集计算出的 Pearson 相关系数至少一样极端的概率。p 值并不完全可靠,但对于大于 500 左右的数据集可能是合理的。
参数:
x: 1D 数组
y:与 x 长度相同的 1D 数组
返回:
(Pearson 相关系数,2 尾 p 值)

2
好的,更重要的是x和y数组具有相同的长度。然后您将比较元素x [i]与元素y [i]吗? - user94628
1
是的。在你的情况下,x应该等于所考虑的距离,y[i]应该返回距离[i]处的邮政编码数量。要查看Pearson的实际计算过程,请访问:https://dev59.com/qG865IYBdhLWcg3wLbar - lucasg
很酷,所以x[i]可以表示到那个距离? - user94628
是的,x[i] 可能意味着到那个距离为止。如果所有的距离都是从特定的起点计算出来的,那么 x[i] 就是该距离的一个区域,相应的 y[i] 就是覆盖在该区域内的邮政编码数量。 - Antimony
确保数组x和y的平均值为0。否则,您将得到一个不正确的值。 - DollarAkshay

7

您也可以使用numpy

numpy.corrcoef(x, y)

这将为您提供一个类似于以下的相关矩阵:

[[1          correlation(x, y)]
[correlation(y, x)          1]]

0
在Python 3.10中,correlation()函数被添加到Python标准库的statistics模块中,可以通过导入statistics模块直接使用:
import statistics

statistics.correlation(words, views)

0

试试这个:

 val=Top15[['Energy Supply per Capita','Citable docs per Capita']].rank().corr(method='pearson')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接