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或尝试使用其他语言。

关于浮点的一些参考:


方法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)