PHP 日本大会 2024

stats_stat_correlation

(PECL stats >= 1.0.0)

stats_stat_correlation返回两个数据集的皮尔逊相关系数

描述

stats_stat_correlation(数组 $arr1, 数组 $arr2): 浮点数

返回arr1arr2之间的皮尔逊相关系数。

参数

arr1

第一个数组

arr2

第二个数组

返回值

返回arr1arr2之间的皮尔逊相关系数,失败则返回false

添加注释

用户贡献的注释 3 个注释

16
non at dot com
9 年前
对我来说未定义,因此我实现了自己的相关性,它比上面提供的相关性更快更简单。

function Corr($x, $y){

$length= count($x);
$mean1=array_sum($x) / $length;
$mean2=array_sum($y) / $length;

$a=0;
$b=0;
$axb=0;
$a2=0;
$b2=0;

for($i=0;$i<$length;$i++)
{
$a=$x[$i]-$mean1;
$b=$y[$i]-$mean2;
$axb=$axb+($a*$b);
$a2=$a2+ pow($a,2);
$b2=$b2+ pow($b,2);
}

$corr= $axb / sqrt($a2*$b2);

return $corr;
}
1
admin at maychu dot net (Le Cong)
15 年前
请注意,此函数仅适用于内部包含连续数字(仅整数)的两个数组。
我测试了此函数,发现它计算了两个数组的皮尔逊相关系数。
---
以下是建议的文档

stats_stat_correlation — 计算两个连续数字数组的皮尔逊相关系数。

参数
arr1 = array (整数1a, 整数2a ...)
arr2 = array (整数1b, 整数2b ...))
(注意两个数组中元素的数量必须相等)

返回值:十进制格式的皮尔逊相关系数(例如 0.934399822094)

代码示例

<?php
// 由 [email protected] 提供
$array_x = array(5,3,6,7,4,2,9,5);
$array_y = array(4,3,4,8,3,2,10,5);
$pearson = stats_stat_correlation($array_x,$array_y);
echo
$pearson;
?>
2
umar dot anjum at ymail dot com
15 年前
我尝试使用此函数,但收到未定义错误。无论如何,我已经创建了一组函数来替换它

<?php

//由于相关性计算需要两个数组,这里直接硬编码
$array1[0] = 59.3;
$array1[1] = 61.2;
$array1[2] = 56.8
$array1
[3] = 97.55;

$array2[0] = 565.82;
$array2[1] = 54.568;
$array2[2] = 84.22;
$array2[3] = 483.55;

//要计算这两个数组的相关性,只需调用
//Correlation 函数,该函数接受两个数组作为参数:

$correlation = Correlation($array1, $array2);

//显示计算出的相关性:
print $correlation;

//后台计算相关性的函数

function Correlation($arr1, $arr2)
{
$correlation = 0;

$k = SumProductMeanDeviation($arr1, $arr2);
$ssmd1 = SumSquareMeanDeviation($arr1);
$ssmd2 = SumSquareMeanDeviation($arr2);

$product = $ssmd1 * $ssmd2;

$res = sqrt($product);

$correlation = $k / $res;

return
$correlation;
}

function
SumProductMeanDeviation($arr1, $arr2)
{
$sum = 0;

$num = count($arr1);

for(
$i=0; $i<$num; $i++)
{
$sum = $sum + ProductMeanDeviation($arr1, $arr2, $i);
}

return
$sum;
}

function
ProductMeanDeviation($arr1, $arr2, $item)
{
return (
MeanDeviation($arr1, $item) * MeanDeviation($arr2, $item));
}

function
SumSquareMeanDeviation($arr)
{
$sum = 0;

$num = count($arr);

for(
$i=0; $i<$num; $i++)
{
$sum = $sum + SquareMeanDeviation($arr, $i);
}

return
$sum;
}

function
SquareMeanDeviation($arr, $item)
{
return
MeanDeviation($arr, $item) * MeanDeviation($arr, $item);
}

function
SumMeanDeviation($arr)
{
$sum = 0;

$num = count($arr);

for(
$i=0; $i<$num; $i++)
{
$sum = $sum + MeanDeviation($arr, $i);
}

return
$sum;
}

function
MeanDeviation($arr, $item)
{
$average = Average($arr);

return
$arr[$item] - $average;
}

function
Average($arr)
{
$sum = Sum($arr);
$num = count($arr);

return
$sum/$num;
}

function
Sum($arr)
{
return
array_sum($arr);
}

?>
To Top