亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

??
$title
? php教程 php手冊(cè) 用 PHP 實(shí)現(xiàn)的簡(jiǎn)單線性回歸(二)

用 PHP 實(shí)現(xiàn)的簡(jiǎn)單線性回歸(二)

Jun 21, 2016 am 09:14 AM
gt jpgraph php quot

解決輸出和概率函數(shù)缺陷的數(shù)據(jù)研究工具

本系列文章的第 1 部分結(jié)尾處提到了簡(jiǎn)單線性回歸(Simple Linear Regression)類中缺少的三個(gè)元素。在本文中,作者 Paul Meagher 用基于 PHP 的概率函數(shù)彌補(bǔ)了這些缺陷,演示了如何將輸出方法集成到 SimpleLinearRegression 類中并創(chuàng)建了圖形輸出。他通過(guò)構(gòu)建數(shù)據(jù)研究工具解決了這些問(wèn)題,該工具旨在深層次地研究中小規(guī)模的數(shù)據(jù)集所包含的信息。(在第 1 部分中,作者演示了如何用 PHP 作為實(shí)現(xiàn)語(yǔ)言來(lái)開發(fā)和實(shí)現(xiàn)簡(jiǎn)單線性回歸算法包的核心部分。)


在這個(gè)由兩部分組成的系列文章的第 1 部分(“用 PHP 實(shí)現(xiàn)的簡(jiǎn)單線性回歸”)中,我說(shuō)明了數(shù)學(xué)庫(kù)對(duì) PHP 有用的原因。我還演示了如何用 PHP 作為實(shí)現(xiàn)語(yǔ)言來(lái)開發(fā)和實(shí)現(xiàn)簡(jiǎn)單線性回歸算法的核心部分。

本文的目標(biāo)是向您展示如何使用第 1 部分中討論的 SimpleLinearRegression 類來(lái)構(gòu)建一個(gè)重要的數(shù)據(jù)研究工具。

簡(jiǎn)要回顧:概念
簡(jiǎn)單線性回歸建模背后的基本目標(biāo)是從成對(duì)的 X 值和 Y 值(即 X 和 Y 測(cè)量值)組成的二維平面中找到最吻合的直線。一旦用最小方差法找到這條直線,就可以執(zhí)行各種統(tǒng)計(jì)測(cè)試,以確定這條直線與觀測(cè)到的 Y 值的偏離量吻合程度。

線性方程(y = mx + b)有兩個(gè)參數(shù)必須根據(jù)所提供的 X 和 Y 數(shù)據(jù)估算出來(lái),它們是斜率(m)和 y 軸截距(b)。一旦估算出這兩個(gè)參數(shù),就可以將觀測(cè)值輸入線性方程,并觀察方程所生成的 Y 預(yù)測(cè)值。

要使用最小方差法估算出 m 和 b 參數(shù),就要找到 m 和 b 的估計(jì)值,使它們對(duì)于所有的 X 值得到的 Y 值的觀測(cè)值和預(yù)測(cè)值最小。觀測(cè)值和預(yù)測(cè)值之差稱為誤差(yi - (mxi + b)),并且,如果對(duì)每個(gè)誤差值都求平方,然后求這些殘差的和,其結(jié)果是一個(gè)被稱為預(yù)測(cè)平方差的數(shù)。使用最小方差法來(lái)確定最吻合的直線涉及尋找使預(yù)測(cè)方差最小的 m 和 b 的估計(jì)值。

可以用兩種基本方法來(lái)找到滿足最小方差法的估計(jì)值 m 和 b。第一種方法,可以使用數(shù)值搜索過(guò)程設(shè)定不同的 m 和 b 值并對(duì)它們求值,最終決定產(chǎn)生最小方差的估計(jì)值。第二種方法是使用微積分找到用于估算 m 和 b 的方程。我不打算深入討論推導(dǎo)出這些方程所涉及的微積分,但我確實(shí)在 SimpleLinearRegression 類中使用了這些分析方程,以找到 m 和 b 的最小平方估計(jì)值(請(qǐng)參閱 SimpleLinearRegression 類中的 getSlope() 和 getYIntercept 方法)。

即使擁有了可以用來(lái)找到 m 和 b 的最小平方估計(jì)值的方程,也并不意味著只要將這些參數(shù)代入線性方程,其結(jié)果就是一條與數(shù)據(jù)良好吻合的直線。這個(gè)簡(jiǎn)單線性回歸過(guò)程中的下一步是確定其余的預(yù)測(cè)方差是否可以接受。

可以使用統(tǒng)計(jì)決策過(guò)程來(lái)否決“直線與數(shù)據(jù)吻合”這個(gè)備擇假設(shè)。這個(gè)過(guò)程基于對(duì) T 統(tǒng)計(jì)值的計(jì)算,使用概率函數(shù)求得隨機(jī)大的觀測(cè)值的概率。正如第 1 部分所提到的,SimpleLinearRegression 類生成了為數(shù)眾多的匯總值,其中一個(gè)重要的匯總值是 T 統(tǒng)計(jì)值,它可以用來(lái)衡量線性方程與數(shù)據(jù)的吻合程度。如果吻合良好,則 T 統(tǒng)計(jì)值往往是一個(gè)較大的值;如果 T 值很小,就應(yīng)該用一個(gè)缺省模型代替您的線性方程,該模型假定 Y 值的平均值是最佳預(yù)測(cè)值(因?yàn)橐唤M值的平均值通??梢允窍乱粋€(gè)觀測(cè)值的有用的預(yù)測(cè)值)。

要測(cè)試 T 統(tǒng)計(jì)值是否大到可以不用 Y 值的平均值作為最佳預(yù)測(cè)值,需要計(jì)算隨機(jī)獲得 T 統(tǒng)計(jì)值的概率。如果概率很低,那就可以不采用平均值是最佳預(yù)測(cè)值這一無(wú)效假設(shè),并且相應(yīng)地可以確信簡(jiǎn)單線性模型是與數(shù)據(jù)良好吻合的。(有關(guān)計(jì)算 T 統(tǒng)計(jì)值概率的更多信息,請(qǐng)參閱第 1 部分。)

回過(guò)頭討論統(tǒng)計(jì)決策過(guò)程。它告訴您何時(shí)不采用無(wú)效假設(shè),卻沒有告訴您是否接受備擇假設(shè)。在研究環(huán)境中,需要通過(guò)理論參數(shù)和統(tǒng)計(jì)參數(shù)來(lái)建立線性模型備擇假設(shè)。

您將構(gòu)建的數(shù)據(jù)研究工具實(shí)現(xiàn)了用于線性模型(T 測(cè)試)的統(tǒng)計(jì)決策過(guò)程,并提供了可以用來(lái)構(gòu)造理論和統(tǒng)計(jì)參數(shù)的匯總數(shù)據(jù),這些參數(shù)是建立線性模型所需要的。數(shù)據(jù)研究工具可以歸類為決策支持工具,供知識(shí)工作者在中小規(guī)模的數(shù)據(jù)集中研究模式。

從學(xué)習(xí)的角度來(lái)看,簡(jiǎn)單線性回歸建模值得研究,因?yàn)樗抢斫飧呒?jí)形式的統(tǒng)計(jì)建模的必由之路。例如,簡(jiǎn)單線性回歸中的許多核心概念為理解多次回歸(Multiple Regression)、要素分析(Factor Analysis)和時(shí)間序列(Time Series)等建立了良好的基礎(chǔ)。

簡(jiǎn)單線性回歸還是一種多用途的建模技術(shù)。通過(guò)轉(zhuǎn)換原始數(shù)據(jù)(通常用對(duì)數(shù)或冪轉(zhuǎn)換),可以用它來(lái)為曲線數(shù)據(jù)建模。這些轉(zhuǎn)換可以使數(shù)據(jù)線性化,這樣就可以使用簡(jiǎn)單線性回歸來(lái)為數(shù)據(jù)建模。所生成的線性模型將被表示為與被轉(zhuǎn)換值相關(guān)的線性公式。

概率函數(shù)

在前一篇文章中,我通過(guò)交由 R 來(lái)求得概率值,從而避開了用 PHP 實(shí)現(xiàn)概率函數(shù)的問(wèn)題。我對(duì)這個(gè)解決方案并非完全滿意,因此我開始研究這個(gè)問(wèn)題:開發(fā)基于 PHP 的概率函數(shù)需要些什么。

我開始上網(wǎng)查找信息和代碼。一個(gè)兩者兼有的來(lái)源是書籍 [url=http://www.library.cornell.edu/nr/bookcpdf.html]Numerical Recipes in C [/url] 中的概率函數(shù)。我用 PHP 重新實(shí)現(xiàn)了一些概率函數(shù)代碼(gammln.c 和 betai.c 函數(shù)),但我對(duì)結(jié)果還是不滿意。與其它一些實(shí)現(xiàn)相比,其代碼似乎多了些。此外,我還需要反概率函數(shù)。

幸運(yùn)的是,我偶然發(fā)現(xiàn)了 John Pezzullo 的 Interactive Statistical Calculation。John 關(guān)于概率分布函數(shù)的網(wǎng)站上有我需要的所有函數(shù),為便于學(xué)習(xí),這些函數(shù)已用 JavaScript 實(shí)現(xiàn)。

我將 Student T 和 Fisher F 函數(shù)移植到了 PHP。我對(duì) API 作了一點(diǎn)改動(dòng),以便符合 Java 命名風(fēng)格,并將所有函數(shù)嵌入到名為 Distribution 的類中。該實(shí)現(xiàn)的一個(gè)很棒的功能是 doCommonMath 方法,這個(gè)庫(kù)中的所有函數(shù)都重用了它。我沒有花費(fèi)力氣去實(shí)現(xiàn)的其它測(cè)試(正態(tài)測(cè)試和卡方測(cè)試)也都使用 doCommonMath 方法。

這次移植的另一個(gè)方面也值得注意。通過(guò)使用 JavaScript,用戶可以將動(dòng)態(tài)確定的值賦給實(shí)例變量,譬如:

var PiD2 = pi() / 2


在 PHP 中不能這樣做。只能把簡(jiǎn)單的常量值賦給實(shí)例變量。希望在 PHP5 中會(huì)解決這個(gè)缺陷。

請(qǐng)注意清單 1 中的代碼并未定義實(shí)例變量 — 這是因?yàn)樵?JavaScript 版本中,它們是動(dòng)態(tài)賦予的值。

清單 1. 實(shí)現(xiàn)概率函數(shù)

// Distribution.php

// Copyright John Pezullo
// Released under same terms as PHP.
// PHP Port and OO'fying by Paul Meagher

class Distribution {

function doCommonMath($q, $i, $j, $b) {

$zz = 1;
$z = $zz;
$k = $i;


while($k $zz = $zz * $q * $k / ($k - $b);
$z = $z + $zz;
$k = $k + 2;
}
return $z;
}

function getStudentT($t, $df) {

$t = abs($t);
$w = $t / sqrt($df);
$th = atan($w);

if ($df == 1) {
return 1 - $th / (pi() / 2);
}

$sth = sin($th);
$cth = cos($th);

if( ($df % 2) ==1 ) {
return
1 - ($th + $sth * $cth * $this->doCommonMath($cth * $cth, 2, $df - 3, -1))
/ (pi()/2);
} else {
return 1 - $sth * $this->doCommonMath($cth * $cth, 1, $df - 3, -1);
}

}

function getInverseStudentT($p, $df) {

$v = 0.5;
$dv = 0.5;
$t = 0;

while($dv > 1e-6) {
$t = (1 / $v) - 1;
$dv = $dv / 2;
if ( $this->getStudentT($t, $df) > $p) {
$v = $v - $dv;
} else {
$v = $v + $dv;
}
}
return $t;
}


function getFisherF($f, $n1, $n2) {
// implemented but not shown
}

function getInverseFisherF($p, $n1, $n2) {
// implemented but not shown
}

}
?>




輸出方法
既然您已經(jīng)用 PHP 實(shí)現(xiàn)了概率函數(shù),那么開發(fā)基于 PHP 的數(shù)據(jù)研究工具剩下的唯一難題就是設(shè)計(jì)用于顯示分析結(jié)果的方法。

簡(jiǎn)單的解決方案是根據(jù)需要將所有實(shí)例變量的值都顯示到屏幕上。在第一篇文章中,當(dāng)顯示燃耗研究(Burnout Study)的線性方程、T 值和 T 概率時(shí),我就是這么做的。能根據(jù)特定目的而訪問(wèn)特定值是很有幫助的,SimpleLinearRegression 支持此類用法。

然而,另一種用于輸出結(jié)果的方法是將輸出的各部分系統(tǒng)化地進(jìn)行分組。如果研究用于回歸分析的主要統(tǒng)計(jì)軟件包的輸出,就會(huì)發(fā)現(xiàn)它們往往是用同樣的方式對(duì)輸出進(jìn)行分組的。它們往往有摘要表(Summary Table)、偏離值分析(Analysis Of Variance)表、參數(shù)估計(jì)值(Parameter Estimate)表和 R 值(R Value)。類似地,我創(chuàng)建了一些輸出方法,名稱如下:

showSummaryTable()
showAnalysisOfVariance()
showParameterEstimates()
showRValues()

我還有一個(gè)用于顯示線性預(yù)測(cè)公式的方法(getFormula())。許多統(tǒng)計(jì)軟件包不輸出公式,而是希望用戶根據(jù)上述方法的輸出構(gòu)造公式。部分是由于您最后用來(lái)對(duì)數(shù)據(jù)建模的公式的最終形式可能由于下列原因而與缺省公式不同:

1.Y 軸截距沒有有意義的解釋
2.或者輸入值可能是經(jīng)過(guò)轉(zhuǎn)換的,而您可能需要取消對(duì)它們的轉(zhuǎn)換以獲取最終的解釋。

所有這些方法都假定輸出媒介是網(wǎng)頁(yè)??紤]到您有可能希望用非網(wǎng)頁(yè)的其它媒介輸出這些匯總值,所以我決定將這些輸出方法包裝在一個(gè)繼承了 SimpleLinearRegression 類的類中。清單 2 中的代碼旨在演示輸出類的通用邏輯。為了使通用邏輯更突出,所以除去了實(shí)現(xiàn)各種 show 方法的代碼。

清單 2. 演示輸出類的通用邏輯

// HTML.php

// Copyright 2003, Paul Meagher
// Distributed under GPL

include_once "slr/SimpleLinearRegression.php";

class SimpleLinearRegressionHTML extends SimpleLinearRegression {

function SimpleLinearRegressionHTML($X, $Y, $conf_int) {
SimpleLinearRegression::SimpleLinearRegression($X, $Y, $conf_int);
}

function showTableSummary($x_name, $y_name) { }

function showAnalysisOfVariance() { }

function showParameterEstimates() { }

function showFormula($x_name, $y_name) { }

function showRValues() {}
}

?>




這個(gè)類的構(gòu)造函數(shù)只是 SimpleLinearRegression 類構(gòu)造函數(shù)的包裝器。這意味著如果您想顯示 SimpleLinearRegression 分析的 HTML 輸出,則應(yīng)該實(shí)例化 SimpleLinearRegressionHTML 類,而不是直接實(shí)例化 SimpleLinearRegression 類。其優(yōu)點(diǎn)是不會(huì)有許多未使用的方法充斥 SimpleLinearRegression 類,并且可以更自由地定義用于其它輸出媒介的類(也許會(huì)對(duì)不同媒介類型實(shí)現(xiàn)同一 API)。

圖形輸出
迄今為止,您已經(jīng)實(shí)現(xiàn)的輸出方法都以 HTML 格式顯示匯總值。它也適合于用 GIF、JPEG 或 PNG 格式顯示這些數(shù)據(jù)的分布圖(scatter plot)或線圖(line plot)。

與其親自編寫生成線圖和分布圖的代碼,我認(rèn)為最好使用名為 JpGraph 的基于 PHP 的圖形庫(kù)。JpGraph 正由 Johan Persson 積極開發(fā),其項(xiàng)目網(wǎng)站這樣描述它:


無(wú)論是對(duì)于只有最少代碼的“以快捷但不恰當(dāng)方式獲得的”圖形,還是對(duì)于需要非常細(xì)粒度控制的復(fù)雜專業(yè)圖形,JpGraph 都可以使它們的繪制變得簡(jiǎn)單。JpGraph 同樣適用于科學(xué)和商業(yè)類型的圖形。

JpGraph 分發(fā)版中包含大量可以根據(jù)特定需求進(jìn)行定制的示例腳本。將 JpGraph 用于數(shù)據(jù)研究工具非常簡(jiǎn)單,只需找到功能與我的需求類似的示例腳本,然后對(duì)該腳本進(jìn)行改寫以滿足我的特定需求即可。

清單 3 中的腳本是從樣本數(shù)據(jù)研究工具(explore.php)中抽取的,它演示了如何調(diào)用該庫(kù)以及如何將來(lái)自于 SimpleLinearRegression 分析的數(shù)據(jù)填入 Line 和 Scatter 類。這段代碼中的注釋是 Johan Persson 編寫的(JPGraph 代碼庫(kù)的文檔化工作做得很好)。

清單 3. 來(lái)自于樣本數(shù)據(jù)研究工具 explore.php 的函數(shù)的詳細(xì)內(nèi)容
// Snippet extracted from explore.php script

include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_scatter.php");
include ("jpgraph/jpgraph_line.php");

// Create the graph
$graph = new Graph(300,200,'auto');
$graph->SetScale("linlin");

// Setup title
$graph->title->Set("$title");
$graph->img->SetMargin(50,20,20,40);
$graph->xaxis->SetTitle("$x_name","center");
$graph->yaxis->SetTitleMargin(30);
$graph->yaxis->title->Set("$y_name");

$graph->title->SetFont(FF_FONT1,FS_BOLD);

// make sure that the X-axis is always at the
// bottom at the plot and not just at Y=0 which is
// the default position
$graph->xaxis->SetPos('min');

// Create the scatter plot with some nice colors
$sp1 = new ScatterPlot($slr->Y, $slr->X);
$sp1->mark->SetType(MARK_FILLEDCIRCLE);
$sp1->mark->SetFillColor("red");
$sp1->SetColor("blue");
$sp1->SetWeight(3);
$sp1->mark->SetWidth(4);

// Create the regression line
$lplot = new LinePlot($slr->PredictedY, $slr->X);
$lplot->SetWeight(2);
$lplot->SetColor('navy');

// Add the pltos to the line
$graph->Add($sp1);
$graph->Add($lplot);

// ... and stroke
$graph_name = "temp/test.png";
$graph->Stroke($graph_name);
?>
用 PHP 實(shí)現(xiàn)的簡(jiǎn)單線性回歸(二)' vspace='15'>

?>


數(shù)據(jù)研究腳本
該數(shù)據(jù)研究工具由單個(gè)腳本(explore.php)構(gòu)成,該腳本調(diào)用 SimpleLinearRegressionHTML 類和 JpGraph 庫(kù)的方法。

該腳本使用了簡(jiǎn)單的處理邏輯。該腳本的第一部分對(duì)所提交的表單數(shù)據(jù)執(zhí)行基本驗(yàn)證。如果這些表單數(shù)據(jù)通過(guò)驗(yàn)證,則執(zhí)行該腳本的第二部分。

該腳本的第二部分所包含的代碼用于分析數(shù)據(jù),并以 HTML 和圖形格式顯示匯總結(jié)果。清單 4 中顯示了 explore.php 腳本的基本結(jié)構(gòu):

清單 4. explore.php 的結(jié)構(gòu)

// explore.php

if (!empty($x_values)) {
$X = explode(",", $x_values);
$numX = count($X);
}

if (!empty($y_values)) {
$Y = explode(",", $y_values);
$numY = count($Y);
}

// display entry data entry form if variables not set

if ( (empty($title)) OR (empty($x_name)) OR (empty($x_values)) OR
(empty($y_name)) OR (empty($conf_int)) OR (empty($y_values)) OR
($numX != $numY) ) {

// Omitted code for displaying entry form

} else {

include_once "slr/SimpleLinearRegressionHTML.php";
$slr = new SimpleLinearRegressionHTML($X, $Y, $conf_int);

echo "

$title

";

$slr->showTableSummary($x_name, $y_name);
echo "

";

$slr->showAnalysisOfVariance();
echo "

";

$slr->showParameterEstimates($x_name, $y_name);
echo "
";

$slr->showFormula($x_name, $y_name);
echo "

";

$slr->showRValues($x_name, $y_name);
echo "
";

include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_scatter.php");
include ("jpgraph/jpgraph_line.php");

// The code for displaying the graphics is inline in the
// explore.php script. The code for these two line plots
// finishes off the script:

// Omitted code for displaying scatter plus line plot
// Omitted code for displaying residuals plot

}

?>


火災(zāi)損失研究
為了演示如何使用數(shù)據(jù)研究工具,我將使用來(lái)自假想的火災(zāi)損失研究的數(shù)據(jù)。這個(gè)研究將主要住宅區(qū)火災(zāi)損失的金額與它們到最近消防站的距離關(guān)聯(lián)起來(lái)。例如,出于確定保險(xiǎn)費(fèi)的目的,保險(xiǎn)公司會(huì)對(duì)這種關(guān)系的研究感興趣。

該研究的數(shù)據(jù)如圖 1 中的輸入屏幕所示。

圖 1. 顯示研究數(shù)據(jù)的輸入屏幕



數(shù)據(jù)被提交之后,會(huì)對(duì)它進(jìn)行分析,并顯示這些分析的結(jié)果。第一個(gè)顯示的結(jié)果集是 Table Summary,如圖 2 所示。

圖 2. Table Summary 是所顯示的第一個(gè)結(jié)果集



Table Summary 以表格形式顯示了輸入數(shù)據(jù)和其它列,這些列指出了對(duì)應(yīng)于觀測(cè)值 X 的預(yù)測(cè)值 Y、Y 值的預(yù)測(cè)值和觀測(cè)值之間的差以及預(yù)測(cè) Y 值置信區(qū)間的下限和上限。

圖 3 顯示了 Table Summary 之后的三個(gè)高級(jí)別數(shù)據(jù)匯總表。

圖 3. 顯示了 Table Summary 之后的三個(gè)高級(jí)別數(shù)據(jù)匯總表



Analysis of Variance 表顯示了如何將 Y 值的偏離值歸為兩個(gè)主要的偏離值來(lái)源,由模型解釋的方差(請(qǐng)看 Model 行)和模型不能解釋的方差(請(qǐng)看 Error 行)。較大的 F 值意味著該線性模型捕獲了 Y 測(cè)量值中的大多數(shù)偏離值。這個(gè)表在多次回歸環(huán)境中更有用,在那里每個(gè)獨(dú)立變量都在表中占有一行。

Parameter Estimates 表顯示了估算的 Y 軸截距(Intercept)和斜率(Slope)。每行都包括一個(gè) T 值以及觀測(cè)到極限 T 值的概率(請(qǐng)看 Prob > T 列)。斜率的 Prob > T 可用于否決線性模型。

如果 T 值的概率大于 0.05(或者是類似的小概率),那么您可以否決該無(wú)效假設(shè),因?yàn)殡S機(jī)觀測(cè)到極限值的可能性很小。否則您就必須使用該無(wú)效假設(shè)。

在火災(zāi)損失研究中,隨機(jī)獲得大小為 12.57 的 T 值的概率小于 0.00000。這意味著對(duì)于與該研究中觀測(cè)到的 X 值區(qū)間相對(duì)應(yīng)的 Y 值而言,線性模型是有用的預(yù)測(cè)器(比 Y 值的平均值更好)。

最終報(bào)告顯示了相關(guān)性系數(shù)或 R 值。可以用它們來(lái)評(píng)估線性模型與數(shù)據(jù)的吻合程度。高的 R 值表明吻合良好。

每個(gè)匯總報(bào)告對(duì)有關(guān)線性模型和數(shù)據(jù)之間關(guān)系的各種分析問(wèn)題提供了答案。請(qǐng)查閱 Hamilton、Neter 或 Pedhauzeur 編寫的教科書,以了解更高級(jí)的回歸分析處理(請(qǐng)參閱參考資料)。

要顯示的最終報(bào)告元素是數(shù)據(jù)的分布圖和線圖,如圖 4 所示。

圖 4. 最終報(bào)告元素 — 分布圖和線圖



大多數(shù)人都熟悉線圖(如本系列中的第一幅圖)的說(shuō)明,因此我將不對(duì)此進(jìn)行注釋,只想說(shuō) JPGraph 庫(kù)可以產(chǎn)生用于 Web 的高質(zhì)量科學(xué)圖表。當(dāng)您輸入分布或直線數(shù)據(jù)時(shí),它也做得很好。

第二幅圖將殘差(觀測(cè)的 Y、預(yù)測(cè)的 Y)與您預(yù)測(cè)的 Y 值關(guān)聯(lián)起來(lái)。這是研究性數(shù)據(jù)分析(Exploratory Data Analysis,EDA)的倡導(dǎo)者所使用的圖形示例,用以幫助將分析人員對(duì)數(shù)據(jù)中的模式的檢測(cè)和理解能力提到最高程度。行家可以使用這幅圖回答關(guān)于下列方面的問(wèn)題:

可能的非正常值或影響力過(guò)度的例子
可能的曲線關(guān)系(使用轉(zhuǎn)換?)
非正態(tài)殘差分布
非常量誤差方差或異方差性

可以輕松地?cái)U(kuò)展這個(gè)數(shù)據(jù)研究工具,以生成更多類型的圖形 — 直方圖、框圖和四分位數(shù)圖 — 這些都是標(biāo)準(zhǔn)的 EDA 工具。

數(shù)學(xué)庫(kù)體系結(jié)構(gòu)
對(duì)數(shù)學(xué)的業(yè)余愛好使我在最近幾個(gè)月中保持著對(duì)數(shù)學(xué)庫(kù)的濃厚興趣。此類研究推動(dòng)我思考如何組織我的代碼庫(kù)以及使其預(yù)期在未來(lái)能不斷增長(zhǎng)。

我暫時(shí)采用清單 5 中的目錄結(jié)構(gòu):

清單 5. 易于增長(zhǎng)的目錄結(jié)構(gòu)
phpmath/

burnout_study.php
explore.php
fire_study.php
navbar.php

dist/
Distribution.php
fisher.php
student.php
source.php

jpgraph/
etc...

slr/
SimpleLinearRegression.php
SimpleLinearRegressionHTML.php

temp/




例如,未來(lái)有關(guān)多次回歸的工作,將涉及擴(kuò)展這個(gè)庫(kù)以包括 matrix 目錄,該目錄用來(lái)容納執(zhí)行矩陣操作(這是對(duì)于更高級(jí)形式的回歸分析的需求)的 PHP 代碼。我還將創(chuàng)建一個(gè) mr 目錄,以容納實(shí)現(xiàn)多次回歸分析輸入方法、邏輯和輸出方法的 PHP 代碼。

請(qǐng)注意這個(gè)目錄結(jié)構(gòu)包含一個(gè) temp 目錄。必須設(shè)置該目錄的許可權(quán),使 explore.php 腳本能夠?qū)⑤敵鰣D寫到該目錄。在嘗試安裝 phpmath_002.tar.gz 源代碼時(shí)請(qǐng)牢記這一點(diǎn)。此外,請(qǐng)?jiān)?JpGraph 項(xiàng)目網(wǎng)站上閱讀安裝 JpGraph 的指示信息(請(qǐng)參閱參考資料)。

最后提一點(diǎn),如果采取以下作法,可以將所有軟件類移到 Web 根目錄之外的文檔根目錄:


使某個(gè)全局 PHP_MATH 變量有權(quán)訪問(wèn)非 Web 根目錄位置,并且
確保在所有需要或包括的文件路徑前面加上這個(gè)已定義的常量作為前綴。

將來(lái),對(duì) PHP_MATH 變量的設(shè)置將通過(guò)一個(gè)用于整個(gè) PHP 數(shù)學(xué)庫(kù)的配置文件來(lái)完成。

您學(xué)到了什么?
在本文中,您了解了如何使用 SimpleLinearRegression 類開發(fā)用于中小規(guī)模的數(shù)據(jù)集的數(shù)據(jù)研究工具。在此過(guò)程中,我還開發(fā)了一個(gè)供 SimpleLinearRegression 類使用的本機(jī)概率函數(shù),并用 HTML 輸出方法和基于 JpGraph 庫(kù)的圖形生成代碼擴(kuò)展該類。

從學(xué)習(xí)的角度來(lái)看,簡(jiǎn)單線性回歸建模是值得進(jìn)一步研究的,因?yàn)槭聦?shí)證明,它是理解更高級(jí)形式的統(tǒng)計(jì)建模的必由之路。在深入學(xué)習(xí)更高級(jí)的技術(shù)(如多次回歸或多變量方差分析)之前,對(duì)于簡(jiǎn)單線性回歸的透徹理解將使您受益匪淺。

即使簡(jiǎn)單線性回歸只用一個(gè)變量來(lái)說(shuō)明或預(yù)測(cè)另一個(gè)變量的偏離值,在所有的研究變量之間尋找簡(jiǎn)單線性關(guān)系仍然常常是研究性數(shù)據(jù)分析的第一步。僅因?yàn)閿?shù)據(jù)是多元的并不意味著就必須使用多元工具研究它。實(shí)際上,在開始時(shí)使用簡(jiǎn)單線性回歸這樣的基本工具是著手探究數(shù)據(jù)模式的好方法。

本系列研究了簡(jiǎn)單線性回歸分析的兩個(gè)應(yīng)用。在本文中,我研究了“到消防站的距離”和“火災(zāi)損失”之間的強(qiáng)線性關(guān)系。在第一篇文章中,我研究了“社會(huì)集中度”和稱為“消耗指數(shù)”的測(cè)量值之間的線性關(guān)系,盡管這種關(guān)系相對(duì)弱一些,但仍然十分明顯。(作為練習(xí),用本文中討論的數(shù)據(jù)研究工具重新研究第一個(gè)研究案例中較為凌亂的數(shù)據(jù)可能會(huì)很有趣。您可能會(huì)注意到 y 軸截距是負(fù)數(shù)的情況,這意味著“社會(huì)集中度”為 0,預(yù)測(cè)消耗指數(shù)為 -29.50。這有意義嗎?在對(duì)一種現(xiàn)象建模時(shí),您應(yīng)該問(wèn)問(wèn)自己:方程是否應(yīng)該包含可選的 y 軸截距,如果可以,那么該 y 軸截距在線性方程中會(huì)起什么作用。)

對(duì)于簡(jiǎn)單線性回歸的進(jìn)一步研究可能包括對(duì)這些主題的研究:


*如果想從您的方程以及可以使用的其它計(jì)算公式中略去截距,則何時(shí)可以這樣做
*何時(shí)以及如何使用冪、對(duì)數(shù)和其它轉(zhuǎn)換來(lái)對(duì)數(shù)據(jù)進(jìn)行線性化,以便用簡(jiǎn)單線性回歸來(lái)對(duì)該數(shù)據(jù)建模
*可以用來(lái)評(píng)估您的建模假設(shè)的充分性,并可以更清晰地洞察數(shù)據(jù)中的模式的其它可視化方法

這些是有待學(xué)習(xí)簡(jiǎn)單線性回歸的學(xué)生研究的一部分更高級(jí)的主題。參考資料包含了幾個(gè)指向高級(jí)主題文章的鏈接,您可以從中參考更多關(guān)于回歸分析的信息。

標(biāo)準(zhǔn) PHP 安裝提供了開發(fā)基于數(shù)學(xué)的重要應(yīng)用程序所必須的許多資源。我希望這個(gè)系列的文章能啟發(fā)其他開發(fā)人員出于樂趣、技術(shù)或?qū)W習(xí)挑戰(zhàn)的目的而用 PHP 來(lái)實(shí)現(xiàn)數(shù)學(xué)例程。


相關(guān)附件:本文所用源代碼下載

參考資料
1.請(qǐng)參考由 James T. McClave 和 Terry Sincich 編著的廣受歡迎的大學(xué)教科書 Statistics,第 9 版(Prentice-Hall,在線),本文中所使用的算法步驟和“燃耗研究”示例參考了該書。
2.請(qǐng)查閱 PEAR 資源庫(kù),它目前包含了少量低級(jí)別的 PHP 數(shù)學(xué)類。最終,應(yīng)該會(huì)很高興地看到 PEAR 包含實(shí)現(xiàn)標(biāo)準(zhǔn)的較高級(jí)別的數(shù)值方法(比如 SimpleLinearRegression、MultipleRegression、TimeSeries、ANOVA、FactorAnalysis、FourierAnalysis 及其它)的包。
3.查看作者的 SimpleLinearRegression 類的所有源代碼。
4.了解一下Numerical Python 項(xiàng)目,它用非常科學(xué)的數(shù)組語(yǔ)言以及成熟的建立下標(biāo)方法擴(kuò)展了 Python。有了該擴(kuò)展,數(shù)學(xué)操作就非常接近人們期望從編譯語(yǔ)言所獲得的功能。
5.研究可用于 Perl 的許多數(shù)學(xué)參考資料,包括 CPAN 數(shù)學(xué)模塊的索引和 CPAN 中算法部分的模塊,以及 Perl 數(shù)據(jù)語(yǔ)言(Perl Data Language),它旨在為 Perl 提供壓縮存儲(chǔ)以及快速操作大型 N 維數(shù)據(jù)數(shù)組的能力。
6.有關(guān) John Chambers 的 S 編程語(yǔ)言的更多信息,請(qǐng)查閱關(guān)于他的出版物以及他在貝爾實(shí)驗(yàn)室的各項(xiàng)研究項(xiàng)目的鏈接。還可以了解在 1998 年因語(yǔ)言設(shè)計(jì)而獲得的 ACM 獎(jiǎng)。
7.R 是用于統(tǒng)計(jì)計(jì)算和圖形的語(yǔ)言和環(huán)境,類似于獲獎(jiǎng)的 S System,R 提供了諸如線性和非線性建模、統(tǒng)計(jì)測(cè)試、時(shí)間序列分析、分類、群集之類的統(tǒng)計(jì)和圖形技術(shù)。請(qǐng)?jiān)?R Project 主頁(yè)上了解 R。
8.如果您剛接觸 PHP,那么請(qǐng)閱讀 Amol Hatwar 的 developerWorks 系列文章:“用 PHP 開發(fā)健壯的代碼:”“第 1 部分: 高屋建瓴的介紹 ”(2002 年 8 月)、“第 2 部分: 有效地使用變量”(2002 年 9 月)和“第 3 部分: 編寫可重用函數(shù)”(2002 年 11 月)。
9.訪問(wèn) John Pezzullo 的優(yōu)秀站點(diǎn),該站點(diǎn)專門提供執(zhí)行統(tǒng)計(jì)計(jì)算的網(wǎng)頁(yè)?;?PHP 的概率函數(shù)是以在 John 的概率函數(shù)頁(yè)面所找到的代碼為基礎(chǔ)的。
10.到 Digital Library of Mathematical Functions 了解關(guān)于 M. Abramowitz 和 I.A. Stegun 編寫的書籍 The Handbook of Mathematical Functions(也稱為 AMS55)的更多信息。
11.查看 JpGraph 站點(diǎn),以獲取關(guān)于 PHP 的主要 OO 圖形庫(kù)的大量信息。
12.閱讀美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究所(National Institute of Standards,NIST)出版的 The Engineering Handbook of Statistics,該手冊(cè)上有幾章是關(guān)于 Exploratory Data Analysis 的,非常不錯(cuò)。
13.如果您對(duì)于更詳盡地學(xué)習(xí)關(guān)于回歸的主題感興趣的話,請(qǐng)嘗試閱讀以下有用的參考資料:

L. C. Hamilton(1992年)。Regression with Graphics。加州 Pacific Grove:Brooks/Cole Publishing Company。
J Neter、M.H. Kutner 和 W Wasserman W(1990 年)。Applied Linear Regression Models(第 3 版)。芝加哥 Irwin。
E. J. Pedhazur(1982 年)。Multiple regression in behavioral research。紐約州,紐約市:Holt,Rinehart and Winston。

14.閱讀 Cameron Laird 的文章“Open source in the biosciences”。PHP 需要更好的數(shù)學(xué)工具來(lái)參與這個(gè)不斷成長(zhǎng)的市場(chǎng)(developerWorks,2002 年 11 月)。
15.查看 RWeb,它是基于 Web 的 R 接口。



? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

??? ????
1597
29
PHP ????
1488
72
???
PHP? ???? ?? ?? ??? ???? ?? PHP ?? ????? ?? ?? PHP? ???? ?? ?? ??? ???? ?? PHP ?? ????? ?? ?? Jul 25, 2025 pm 08:51 PM

PHP?? ?? ?? ??? ???? ?? ??? ? ???? ?? ??? ???? ?? ??? ???? ???? ????. 1. ?? ?? ??? ?? ??? URL ? ?? ??? ????. 2. UrlenCode? ???? ?? ??? ???????. 3. ? ???? ????? ?? ?? ??? ? ?? ??? ?????. 4. ???? ???? ?? ? ? ??? ??? ??? ??? ?????. 5. ??? ?? ??? ????? ?? ????? OG ??? ???? ?????. 6. XSS ??? ???? ?? ??? ??? ?????. ? ???? ??? ??? ???? ??? ?? ?? ??? ??? ???? ??? ?? ??? ?????.

PHP? AI ??? ?? ?? PHP ?? ?? ?? ??? ??? ?????. PHP? AI ??? ?? ?? PHP ?? ?? ?? ??? ??? ?????. Jul 25, 2025 pm 08:45 PM

??? ?? ??? ??? ?? JavaScript? MediareCorder API? ?? PHP ???? ???? ?????. 2. PHP? ???? ?? ??? ???? STTAPI (? : Google ?? Baidu ?? ??)? ???? ???? ?????. 3. PHP? ???? AI ??? (? : OpenAigpt)? ????. 4. ?? ?? PHP? TTSAPI (? : Baidu ?? Google ?? ??)? ???? ??? ?? ??? ?????. 5. PHP? ?? ??? ??? ??? ??? ?? ?? ??? ?????. ?? ????? PHP? ?? ???? ?? ?? ?? ??? ??? ?????.

PHP? ???? AI? ???? ??? ?? ?? PHP ?? ?? ? ???? ?????. PHP? ???? AI? ???? ??? ?? ?? PHP ?? ?? ? ???? ?????. Jul 25, 2025 pm 08:57 PM

AI? ??? ??? ?? ?? ? ?? ???? ????? ?? ??? ??????. 1. Baidu, Tencent API ?? ?? ?? NLP ?????? ?? ??? AI ?? ?? API? ??????. 2. PHP? ? ?? guzzle? ?? API? ???? ?? ??? ??????. 3. ?? ????? ?? ?? ??? ???? ???? ???? ??? ??? ? ????. 4. ?? ?? ? ?? ???? ?? PHP-L ? PHP_CODESNIFFER? ??????. 5. ???? ????? ???? ?? ?? ??? ?????? ??? ??????. AIAPI? ??? ? ???, ?? ??, ?? ? PHP ?? ??? ??? ???. ?? ???? PSR ??? ???, ??? ????? ????, ?? ??? ???, ????? ??? ????, X? ???????.

PHP? PHP ?? ?? ? ?? ??? ??? ?????? ??? ??? ???? ????. PHP? PHP ?? ?? ? ?? ??? ??? ?????? ??? ??? ???? ????. Jul 25, 2025 pm 08:27 PM

1. ?? ???? ??? ??? ?????? ?? ?? ??? ??, ??? ?? ???? ??? (? : ?? ???, ? ? ??), ?? ??? ?? ???? ???? ? ?? ?? ??? ??? ?? ??? ????????. 2. ?? ??? ??? ?? ? ??? ???? ?? ?? ?? ???? ?? ? ?? AUDIT ?? ??? ??? ? ????? ????? ??? ???????. 3. ?? ?? ??? ?? ??? ???????. Recaptchav3 ???? ??, ??? ?? ?? ?? ?? ??, IP ? ?? ??? ??? ??? ?? ???? ??? ?? ??? ????? ??? ???? ????? ??? ?????.

PHP? ???? AI? ???? ???? ???? ??. PHP? ???? ?? ??? ????? PHP? ???? AI? ???? ???? ???? ??. PHP? ???? ?? ??? ????? Jul 25, 2025 pm 07:21 PM

PHP? AI ??? ??? ?? ????? ??? API? ?? ?????. ??? ??? ????? ? ??? ???? ?????. API ??? ?? ?? ??? ???? ??? ??? ???? ???? ? ????. 2. ?? ?? ???? guzzle ?? curl? ???? HTTP ??? ???, JSON ??? ??? ? ???, API ? ?? ??, ??? ? ?? ??? ???? ??, ??? ?? ?? ? ? ?? ????, ??? ?? ? ?????? ?????. 3. ???? ???? ?? ???? API ??, ?? ? ??? ?? ??, ??? ?? ??, ?? ?? ? ??? ??? ??? ?????. ?? ??? ??? ??? ? ??? ???? Propt ?? ? ?? ?? ??, ??? ?? ? ?? ????, ?? ?? ?? ???? ? ??? ?? ? ???? ????? ?????.

PHP? ?? ?? ?? ? ?? ?? PHP ?? ??? ? ?? ????? ?? PHP? ?? ?? ?? ? ?? ?? PHP ?? ??? ? ?? ????? ?? Jul 25, 2025 pm 08:30 PM

PHP? ?????? ????? ?? ?? ?? ???? ???? ?? ???? ???? ?? ?? ???? ?????. 2. ?? ??? ???? ???? ?? ??? ?? ? ??? ??? ???? ?? API/Webhook ??? ??? ?? ???? ??? ??? ??? ??? ?????. 3. ?? ????? ?? ??, ??/???? ????, ???? ??, ???? ? ??? ?????? ????? ?? ??? ???? ???? ?? Dingtalk, SMS ?? ??? ???? ??? ?????? ???? ?? ? ??? ??? ????? ?? ??? ???? ???????.

?? ?? ?? : ?? ?? ?????? PHP? ?? ?? ?? ?? : ?? ?? ?????? PHP? ?? Jul 27, 2025 am 04:31 AM

PhpisstillRelevantinmodernenterpriseenvironments.1. Modernphp (7.xand8.x)? ??? ??, ??? ??, jitcompilation ? modernsyntax, mateitsuilableforlarge-scalepplications

PHP ?? AI ?? ?? ? ??? PHP ?? ??? ?? ?? ??? PHP ?? AI ?? ?? ? ??? PHP ?? ??? ?? ?? ??? Jul 25, 2025 pm 07:06 PM

??? AI ?? ?? ???? ???? PHPSDK? ??????. 2. PHP? ???? FFMPEG? ???? ???? API ?? ?? (? : WAV)?? ?????. 3. ??? ???? ????? ????? API ???? ??? ??????. 4. NLP ??? ???? JSON ??? ???? ???? ?????. 5. ?? ??? ???? ???? ?? ?? ?? ?? ?? ??? ?????. ?? ????? ?? ?? ? ??? ???? ?? ??? ???, ??? ?? ? ??? ???????.

See all articles