public static function pearson(array $x, array $y)
{
if (count($x) !== count($y)) {
throw InvalidArgumentException::arraySizeNotMatch();
}
$count = count($x);
$meanX = Mean::arithmetic($x);
$meanY = Mean::arithmetic($y);
$axb = 0;
$a2 = 0;
$b2 = 0;
for ($i = 0; $i < $count; ++$i) {
$a = $x[$i] - $meanX;
$b = $y[$i] - $meanY;
$axb = $axb + $a * $b;
$a2 = $a2 + pow($a, 2);
$b2 = $b2 + pow($b, 2);
}
$corr = $axb / sqrt((double) ($a2 * $b2));
return $corr;
}
/** * @expectedException \Phpml\Exception\InvalidArgumentException */ public function testThrowExceptionOnInvalidArgumentsForPearsonCorrelation() { Correlation::pearson([1, 2, 4], [3, 5]); }