计算皮尔逊相关性

Posted

技术标签:

【中文标题】计算皮尔逊相关性【英文标题】:Calculating Pearson correlation 【发布时间】:2012-11-18 20:33:50 【问题描述】:

我正在尝试计算两个变量的 Pearson 相关系数。这些变量用于确定邮政编码数量与距离范围之间是否存在关系。所以我想看看邮政编码的数量是否随着距离范围的变化而增加/减少。

我将有一个列表来计算距离范围内的邮政编码数量,而另一个列表将包含实际范围。

可以有一个包含一系列距离的列表吗?或者最好有一个像这样的列表 [50, 100, 500, 1000] ,其中每个元素将包含该数量的范围。因此,例如列表代表最长 50 公里,然后从 50 公里到 100 公里等等。

【问题讨论】:

@Krab 删除了符合 SO 政策的不必要信息,SO 是一个问答网站,所以说我会很感激帮助是多余的,说谢谢你支持并接受答案..如果你想了解更多信息这阅读了常见问题解答并在 meta *** 上四处挖掘 【参考方案1】:

使用 scipy:

scipy.stats.pearsonr(x, y)

计算 Pearson 相关系数和用于检验非相关性的 p 值。

皮尔逊相关系数衡量两个数据集之间的线性关系。严格来说,皮尔逊相关性要求每个数据集都是正态分布的。与其他相关系数一样,这个系数在 -1 和 +1 之间变化,0 表示没有相关性。 -1 或 +1 的相关性意味着精确的线性关系。正相关意味着随着 x 的增加,y 也会增加。负相关意味着随着 x 增加,y 减少。

p 值大致表示不相关系统产生的数据集的概率,这些数据集的 Pearson 相关性至少与从这些数据集计算得出的数据集一样极端。 p 值并不完全可靠,但对于大于 500 左右的数据集可能是合理的。

参数:

x : 一维数组

y : 与 x 长度相同的一维数组

返回:

(皮尔逊相关系数, : 2 尾 p 值)

【讨论】:

好的,所以更重要的是 x 和 y 数组的长度相同。然后你正在比较元素 x[i] 和元素 y[i]? 是的。在您的情况下,x 应该等于所考虑的距离,并且 y[i] 应该返回距离 [i] 处的邮政编码数量。要查看 Pearson 的实际计算:***.com/questions/3949226/… 酷,所以 x[i] 可能意味着达到那个距离? 是的,x[i] 可能意味着到那个距离。如果所有距离都是从特定起点计算的,那么 x[i] 只是该距离的一个区域,对应的 y[i] 将是该区域覆盖的邮政编码数量。 确保数组 x 和 y 的平均值为 0。否则会得到不正确的值。【参考方案2】:

你也可以使用numpy:

numpy.corrcoef(x, y)

这将为您提供如下所示的相关矩阵:

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

【讨论】:

【参考方案3】:

试试这个:

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

【讨论】:

【参考方案4】:

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

import statistics

statistics.correlation(words, views)

【讨论】:

以上是关于计算皮尔逊相关性的主要内容,如果未能解决你的问题,请参考以下文章

在python中计算皮尔逊相关性

如何用matlab计算皮尔逊相关系数

利用Spark ML计算皮尔逊相关系数矩阵

pandas通过皮尔逊积矩线性相关系数(Pearson's r)计算数据相关性

求问:余弦相似度和皮尔逊相关系数的区别

皮尔森相关系数和余弦相似度