與其它開放源碼語言(比如 Perl 和 Python)相比
造成這種狀況的一個原因可能是由於已經存在大量成熟的數學工具
難道這不是在浪費開發人員的精力嗎?如果開發 PHP 數學庫的動機是出自節省開發人員的精力以及使用最好的工具來完成工作
另一方面
通過指導和訓練
指導原則
我使用了六個通用原則來指導 SimpleLinearRegression 類的開發
每個分析模型建立一個類
使用逆向鏈接來開發類
預計有大量的 getter
存儲中間結果
為詳細的 API 制定首選項
盡善盡美並非目標
讓我們更詳細地逐條研究這些指導方針
每個分析模型建立一個類
每種主要的分析測試或過程應當有一個名稱與測試或過程名相同的 PHP 類
使用逆向鏈接來開發類
在數學編程中
例如
預計有大量的 getter
數學類的大部分類開發工作都涉及到計算中間值和匯總值
存儲中間結果
將中間計算結果存儲在結果對象內
為詳細的 API 制定首選項
當為 SimpleLinearRegression 類中的成員函數和實例變量制定命名方案時
我沒有完全放棄簡寫名稱
盡善盡美並非目標
這個編碼練習的目標不是一定要為 PHP 開發高度優化和嚴格的數學引擎
實例變量
當對統計測試或過程進行建模時
實例變量的選擇可以通過說明由分析過程生成的中間值和匯總值來確定
我采用這樣的分析來確定為清單
清單
<?php
// Copyright
// Distributed under GPL
class SimpleLinearRegression {
var $n;
var $X = array();
var $Y = array();
var $ConfInt;
var $Alpha;
var $XMean;
var $YMean;
var $SumXX;
var $SumXY;
var $SumYY;
var $Slope;
var $YInt;
var $PredictedY = array();
var $Error = array();
var $SquaredError = array();
var $TotalError;
var $SumError;
var $SumSquaredError;
var $ErrorVariance;
var $StdErr;
var $SlopeStdErr;
var $SlopeVal; // T value of Slope
var $YIntStdErr;
var $YIntTVal; // T value for Y Intercept
var $R;
var $RSquared;
var $DF; // Degrees of Freedom
var $SlopeProb; // Probability of Slope Estimate
var $YIntProb; // Probability of Y Intercept Estimate
var $AlphaTVal; // T Value for given alpha setting
var $ConfIntOfSlope;
var $RPath = "/usr/local/bin/R"; // Your path here
var $format = "%
}
?>
構造函數
SimpleLinearRegression 類的構造函數方法接受一個 X和一個 Y向量
構造函數方法從驗證數據形式是否適合於處理開始
執行這項任務涉及到通過一系列 getter 方法計算統計過程的中間值和匯總值
清單
<?php
// Copyright
// Distributed under GPL
function SimpleLinearRegression($X
$numX = count($X);
$numY = count($Y);
if ($numX != $numY) {
die("Error: Size of X and Y vectors must be the same
}
if ($numX <=
die("Error: Size of input array must be at least
}
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
$this
return true;
}
?>
方法名及其序列是通過結合逆向鏈接和參考大學本科學生使用的統計學教科書推導得出的
使模型與數據相吻合
SimpleLinearRegression 過程用於產生與數據相吻合的直線
y = b + mx
該方程的 PHP 格式看起來類似於清單
清單
$PredictedY[$i] = $YIntercept + $Slope * $X[$i]
SimpleLinearRegression 類使用最小二乘法准則推導出 Y 軸截距(Y Intercept)和斜率(Slope)參數的估計值
使用推導出的線性方程
如何確定是否非常吻合
SimpleLinearRegression 類生成了相當多的匯總值
要測試 T 統計值是否大得足以不把 Y值的均值作為最佳預測值
那麼
計算 T 統計值概率
由於 PHP 缺少計算 T 統計值概率的數學例程
R 提供了許多想法
有了 R
清單
清單
<?php
// Copyright
// Distributed under GPL
class SimpleLinearRegression {
var $RPath = "/usr/local/bin/R"; // Your path here
function getStudentProb($T
$Probability =
$cmd = "echo
$result = shell_exec($cmd);
list($LineNumber
return $Probability;
}
function getInverseStudentProb($alpha
$InverseProbability =
$cmd = "echo
$result = shell_exec($cmd);
list($LineNumber
return $InverseProbability;
}
}
?>
請注意
由於篇幅有限
燃耗研究
要演示如何使用該類
要研究他們樣本中個人的消耗指數值與集中度值之間的關系
清單
清單
<?php
// BurnoutStudy
// Copyright
// Distributed under GPL
include "SimpleLinearRegression
// Load data from burnout study
$Concentration = array(
$ExhaustionIndex = array(
$slr = new SimpleLinearRegression($Concentration
$YInt = sprintf($slr
$Slope = sprintf($slr
$SlopeTVal = sprintf($slr
$SlopeProb = sprintf("%
?>
<table border=
<tr>
<th align=
<td></td>
</tr>
<tr>
<th align=
<td></td>
</tr>
<tr>
<th align=
<td><td>
</tr>
</table>
通過 Web 浏覽器運行該腳本
Equation: Exhaustion =
T:
Prob > T:
這張表的最後一行指出獲取這樣大 T值的 隨機概率非常低
知道了某個人的工作場所聯系的集中度
這只是粗略地描述了這些結果可能表示的含義
您學到了什麼?
其一
從教學的觀點出發
要實現統計測試通常需要超出所給定的信息范圍並創造性地解決和發現問題
不利的一面
另一個問題是
最後
From:http://tw.wingwit.com/Article/program/PHP/201311/20872.html