AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > PHP编程

PHP实现简单线性回归之数学库的重要性

51自学网 2015-09-11 http://www.wanshiok.com

 

  构造函数

  SimpleLinearRegression 类的构造函数方法接受一个 X和一个 Y向量,每个向量都有相同数量的值。您还可以为您预计的 Y值设置一个缺省为 95% 的置信区间(confidence interval)。

  构造函数方法从验证数据形式是否适合于处理开始。一旦输入向量通过了“大小相等”和“值大于 1”测试,就执行算法的核心部分。

  执行这项任务涉及到通过一系列 getter 方法计算统计过程的中间值和汇总值。将每个方法调用的返回值赋给该类的一个实例变量。用这种方法存储计算结果确保了前后链接的计算中的调用例程可以使用中间值和汇总值。还可以通过调用该类的输出方法来显示这些结果,如清单 2 所描述的那样。

  清单 2. 调用类输出方法

 <?php  // Copyright 2003, Paul Meagher  // Distributed under GPL    function SimpleLinearRegression($X, $Y, $ConfidenceInterval="95") {   $numX = count($X);   $numY = count($Y);   if ($numX != $numY) {     die("Error: Size of X and Y vectors must be the same.");   }    if ($numX <= 1) {      die("Error: Size of input array must be at least 2.");   }      $this->n               = $numX;   $this->X               = $X;   $this->Y               = $Y;        $this->ConfInt         = $ConfidenceInterval;    $this->Alpha           = (1 + ($this->ConfInt / 100) ) / 2;   $this->XMean           = $this->getMean($this->X);   $this->YMean           = $this->getMean($this->Y);   $this->SumXX           = $this->getSumXX();   $this->SumYY           = $this->getSumYY();   $this->SumXY           = $this->getSumXY();       $this->Slope           = $this->getSlope();   $this->YInt            = $this->getYInt();   $this->PredictedY      = $this->getPredictedY();   $this->Error           = $this->getError();   $this->SquaredError    = $this->getSquaredError();   $this->SumError        = $this->getSumError();   $this->TotalError      = $this->getTotalError();       $this->SumSquaredError = $this->getSumSquaredError();   $this->ErrorVariance   = $this->getErrorVariance();   $this->StdErr          = $this->getStdErr();     $this->SlopeStdErr     = $this->getSlopeStdErr();        $this->YIntStdErr      = $this->getYIntStdErr();            $this->SlopeTVal       = $this->getSlopeTVal();               $this->YIntTVal        = $this->getYIntTVal();                   $this->R               = $this->getR();      $this->RSquared        = $this->getRSquared();   $this->DF              = $this->getDF();             $this->SlopeProb       = $this->getStudentProb($this->SlopeTVal, $this->DF);   $this->YIntProb        = $this->getStudentProb($this->YIntTVal, $this->DF);   $this->AlphaTVal       = $this->getInverseStudentProb($this->Alpha, $this->DF);   $this->ConfIntOfSlope  = $this->getConfIntOfSlope();    return true; } ?> 

  方法名及其序列是通过结合逆向链接和参考大学本科学生使用的统计学教科书推导得出的,该教科书一步一步地说明了如何计算中间值。我需要计算的中间值的名称带有“get”前缀,从而推导出方法名。

  使模型与数据相吻合

  SimpleLinearRegression 过程用于产生与数据相吻合的直线,其中直线具有以下标准方程:

  y = b + mx

  该方程的 PHP 格式看起来类似于清单 3:

  清单 3. 使模型与数据相吻合的 PHP 方程

 $PredictedY[$i] = $YIntercept + $Slope * $X[$i] 


  SimpleLinearRegression 类使用最小二乘法准则推导出 Y 轴截距(Y Intercept)和斜率(Slope)参数的估计值。这些估计的参数用来构造线性方程(请参阅 清单 3),该方程对 XY值之间的关系进行建模。

  使用推导出的线性方程,您就可以得到每个 X值对应的预测 Y值。如果线性方程与数据非常吻合,那么 Y的观测值与预测值趋近于一致。

  如何确定是否非常吻合

  SimpleLinearRegression 类生成了相当多的汇总值。一个重要的汇总值是 T统计值,它可以用来衡量一个线性方程与数据的 吻合程度。如果非常吻合,那么 T 统计值往往很大。如果 T 统计值很小,那么应当用一个模型替换该线性方程,该模型假设 Y值的均值是最佳预测值(也就是说,一组值的均值通常是下一个观测值有用的预测值,使之成为缺省模型)。

  要测试 T 统计值是否大得足以不把 Y值的均值作为最佳预测值,您需要计算获取 T 统计值的随机概率。如果获取 T 统计值的概率很低,那么您可以否定均值是最佳预测值这个无效假设,与此相对应,也就确信简单线性模型与数据非常吻合。

  那么,如何计算 T 统计值的概率呢?

 

说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
 

上一篇:正确理解PHP程序编译时的错误信息  下一篇:用PHP读取和编写XML&nbsp;DOM