Pearson Correlation在完全匹配时返回0
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pearson Correlation在完全匹配时返回0相关的知识,希望对你有一定的参考价值。
我正在使用此php例程来计算Pearson相关性:
function correlation ($x,$y) {
$length = count($x);
$mean1 = array_sum($x)/$length;
$mean2 = array_sum($y)/$length;
$a = $b = 0;
$a2 = $b2 = 0;
$axb = 0;
for ($i = 0; $i < $length; $i++) {
$a = $x[$i]-$mean1;
$b = $y[$i]-$mean2;
$axb +=$a*$b;
$a2 += pow($a,2);
$b2 += pow($b,2);
}
if ($sqrt = sqrt($a2*$b2))
return $axb/$sqrt;
return 0;
}
当我在多个条件下对其进行测试时,它在完全匹配时返回0:
echo correlation([0,0,0,0,0],[0,0,0,0,0]); // Returns 0!!
echo correlation([0,0,0,0,0],[1,1,1,1,1]); // Returns 0!!
echo correlation([1,1,1,1,1],[1,1,1,1,1]); // Returns 0!!
echo correlation([0,0,0,0,0],[9,9,9,9,9]); // Returns 0!!
echo correlation([0,0,0,0,0],[0,1,2,3,4]); // Returns 0 OK
echo correlation([9,9,9,9,9],[0,1,2,3,4]); // Returns 0 OK
echo correlation([0,1,2,3,4],[0,1,2,3,4]); // Returns 1 OK
为什么?以及如何做到这一点?谢谢!
有关信息:
Pearson相关性是介于-1和1之间的数字,表示两个变量线性相关的程度。皮尔逊相关性也称为“乘积矩相关性”系数”(PMCC)或简称为“相关”。
方法1(自行完成):
使用PHP进行统计是很难的路径。
首先,由于您使用的是弱类型语言(不需要在变量上指定类型),该语言可以解释为int
,因此,您需要将所有变量设置为类型[ C0],然后再次执行运行。
另一件事。如果需要精度,则需要使用float
扩展名,因为PHP中的浮点是一个问题,可能会影响结果。
在此处查看有关bc
扩展名的更多信息:bc math
或尝试使用其他语言。
关于浮点的一些参考:
- https://www.php.net/manual/en/book.bc.php
- https://www.leaseweb.com/labs/2013/06/the-php-floating-point-precision-is-wrong-by-default/
方法2(使用语言功能):
而且,PHP有一些功能可以帮助您。因此,如果这不是要学习的家庭作业或类似的内容,则可以尝试以下操作:Problem with Floats! (in PHP)
以上是关于Pearson Correlation在完全匹配时返回0的主要内容,如果未能解决你的问题,请参考以下文章
数学笔记:pearson correlation coefficient VS spearman correlation coefficient
皮尔逊相关系数(Pearson Correlation Coefficient, Pearson's r)
python 使用Pearson Correlation Heatmap绘制相关矩阵
[Statistics] Comparison of Three Correlation Coefficients: Pearson, Kendall, Spearman
SciKit Learn R-squared 与 Pearson's Correlation R 的平方非常不同
皮尔逊相关系数与余弦相似度(Pearson Correlation Coefficient & Cosine Similarity)