<?php /**
* @author Son Nguyen
* @since 11/18/2005
* @package Framework.Data
* @subpackage Math
*/ class CRegressionLinear {
private $mDatas;
/** constructor */
function __construct($pDatas) {
$this->mDatas = $pDatas;
}
/** get the coefficients */
function calculate() {
$n = count($this->mDatas);
$vSumXX = $vSumXY = $vSumX = $vSumY = 0;
foreach ($this->mDatas AS $x=>$y) {
$vSumXY += $x*$y;
$vSumXX += $x*$x;
$vSumX += $x;
$vSumY += $y;
} // rof
$a = ($n*$vSumXY - $vSumX*$vSumY)/($n*$vSumXX - $vSumX*$vSumX);
$b = ($vSumY - $a*$vSumX)/$n;
return array($a,$b);
}
/** given x, return the prediction */
function predict($x) {
list($a,$b) = $this->calculate();
$y = $a*$x+$b;
return $y;
}
} ?>
|
|