- ·上一篇文章:PHP安全配置之实现安全的两个重点
- ·下一篇文章:用PHP读取和编写XML DOM
PHP实现简单线性回归之数据研究工具
有帮助的,SimpleLinearRegression支持此类用法。
然而,另一种用于输出结果的方法是将输出的各部分系统化地进行分组。如果研究用于回归分析的主要统计软件包的输出,就会发现它们往往是用同样的方式对输出进行分组的。它们往往有摘要表(SummaryTable)、偏离值分析(AnalysisOfVariance)表、参数估计值(ParameterEstimate)表和R值(RValue)。类似地,我创建了一些输出方法,名称如下:
所有这些方法都假定输出媒介是网页。考虑到您有可能希望用非网页的其它媒介输出这些汇总值,所以我决定将这些输出方法包装在一个继承了SimpleLinearRegression类的类中。清单2中的代码旨在演示输出类的通用逻辑。为了使通用逻辑更突出,所以除去了实现各种show方法的代码。
清单2.演示输出类的通用逻辑
这个类的构造函数只是SimpleLinearRegression类构造函数的包装器。这意味着如果您想显示SimpleLinearRegression分析的HTML输出,则应该实例化SimpleLinearRegressionHTML类,而不是直接实例化SimpleLinearRegression类。其优点是不会有许多未使用的方法充斥SimpleLinearRegression类,并且可以更自由地定义用于其它输出媒介的类(也许会对不同媒介类型实现同一API)。
图形输出
迄今为止,您已经实现的输出方法都以HTML格式显示汇总值。它也适合于用GIF、JPEG或PNG格式显示这些数据的分布图(scatterplot)或线图(lineplot)。
与其亲自编写生成线图和分布图的代码,我认为最好使用名为JpGraph的基于PHP的图形库。JpGraph正由JohanPersson积极开发,其项目网站这样描述它:
无论是对于只有最少代码的“以快捷但不恰当方式获得的”图形,还是对于需要非常细粒度控制的复杂专业图形,JpGraph都可以使它们的绘制变得简单。JpGraph同样适用于科学和商业类型的图形。
JpGraph分发版中包含大量可以根据特定需求进行定制的示例脚本。将JpGraph用于数据研究工具非常简单,只需找到功能与我的需求类似的示例脚本,然后对该脚本进行改写以满足我的特定需求即可。
清单3中的脚本是从样本数据研究工具(explore.php)中抽取的,它演示了如何调用该库以及如何将来自于SimpleLinearRegression分析的数据填入Line和Scatter类。这段代码中的注释是JohanPersson编写的(JPGraph代码库的文档化工作做得很好)。
清单3.来自于样本数据研究工具explore.php的函数的详细内容
数据研究脚本
该数据研究工具由单个脚本(explore.php)构成,该脚本调用SimpleLinearRegressionHTML类和JpGraph库的方法。
该脚本使用了简单的处理逻辑。该脚本的第一部分对所提交的表单数据执行基本验证。如果这些表单数据通过验证,则执行该脚本的第二部分。
该脚本的第二部分所包含的代码用于分析数据,并以HTML和图形格式显示汇总结果。清单4中显示了explore.php脚本的基本结构:
清单4.explore.php的结构
火灾损失研究
为
然而,另一种用于输出结果的方法是将输出的各部分系统化地进行分组。如果研究用于回归分析的主要统计软件包的输出,就会发现它们往往是用同样的方式对输出进行分组的。它们往往有摘要表(SummaryTable)、偏离值分析(AnalysisOfVariance)表、参数估计值(ParameterEstimate)表和R值(RValue)。类似地,我创建了一些输出方法,名称如下:
- showSummaryTable()
- showAnalysisOfVariance()
- showParameterEstimates()
- showRValues()
- Y轴截距没有有意义的解释,或者
- 输入值可能是经过转换的,而您可能需要取消对它们的转换以获取最终的解释。
所有这些方法都假定输出媒介是网页。考虑到您有可能希望用非网页的其它媒介输出这些汇总值,所以我决定将这些输出方法包装在一个继承了SimpleLinearRegression类的类中。清单2中的代码旨在演示输出类的通用逻辑。为了使通用逻辑更突出,所以除去了实现各种show方法的代码。
清单2.演示输出类的通用逻辑
<?php//HTML.php//Copyright2003,PaulMeagher//DistributedunderGPLinclude_once"slr/SimpleLinearRegression.php";classSimpleLinearRegressionHTMLextendsSimpleLinearRegression{functionSimpleLinearRegressionHTML($X,$Y,$conf_int){SimpleLinearRegression::SimpleLinearRegression($X,$Y,$conf_int);}functionshowTableSummary($x_name,$y_name){}functionshowAnalysisOfVariance(){}functionshowParameterEstimates(){}functionshowFormula($x_name,$y_name){}functionshowRValues(){}}?>
这个类的构造函数只是SimpleLinearRegression类构造函数的包装器。这意味着如果您想显示SimpleLinearRegression分析的HTML输出,则应该实例化SimpleLinearRegressionHTML类,而不是直接实例化SimpleLinearRegression类。其优点是不会有许多未使用的方法充斥SimpleLinearRegression类,并且可以更自由地定义用于其它输出媒介的类(也许会对不同媒介类型实现同一API)。
图形输出
迄今为止,您已经实现的输出方法都以HTML格式显示汇总值。它也适合于用GIF、JPEG或PNG格式显示这些数据的分布图(scatterplot)或线图(lineplot)。
与其亲自编写生成线图和分布图的代码,我认为最好使用名为JpGraph的基于PHP的图形库。JpGraph正由JohanPersson积极开发,其项目网站这样描述它:
无论是对于只有最少代码的“以快捷但不恰当方式获得的”图形,还是对于需要非常细粒度控制的复杂专业图形,JpGraph都可以使它们的绘制变得简单。JpGraph同样适用于科学和商业类型的图形。
JpGraph分发版中包含大量可以根据特定需求进行定制的示例脚本。将JpGraph用于数据研究工具非常简单,只需找到功能与我的需求类似的示例脚本,然后对该脚本进行改写以满足我的特定需求即可。
清单3中的脚本是从样本数据研究工具(explore.php)中抽取的,它演示了如何调用该库以及如何将来自于SimpleLinearRegression分析的数据填入Line和Scatter类。这段代码中的注释是JohanPersson编写的(JPGraph代码库的文档化工作做得很好)。
清单3.来自于样本数据研究工具explore.php的函数的详细内容
<?php//Snippetextractedfromexplore.phpscriptinclude("jpgraph/jpgraph.php");include("jpgraph/jpgraph_scatter.php");include("jpgraph/jpgraph_line.php");//Createthegraph$graph=newGraph(300,200,'auto');$graph->SetScale("linlin");//Setuptitle$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);//makesurethattheX-axisisalwaysatthe//bottomattheplotandnotjustatY=0whichis//thedefaultposition$graph->xaxis->SetPos('min');//Createthescatterplotwithsomenicecolors$sp1=newScatterPlot($slr->Y,$slr->X);$sp1->mark->SetType(MARK_FILLEDCIRCLE);$sp1->mark->SetFillColor("red");$sp1->SetColor("blue");$sp1->SetWeight(3);$sp1->mark->SetWidth(4);//Createtheregressionline$lplot=newLinePlot($slr->PredictedY,$slr->X);$lplot->SetWeight(2);$lplot->SetColor('navy');//Addthepltostotheline$graph->Add($sp1);$graph->Add($lplot);//...andstroke$graph_name="temp/test.png";$graph->Stroke($graph_name);?><imgsrc='<?phpecho$graph_name?>'vspace='15'>?>
该数据研究工具由单个脚本(explore.php)构成,该脚本调用SimpleLinearRegressionHTML类和JpGraph库的方法。
该脚本使用了简单的处理逻辑。该脚本的第一部分对所提交的表单数据执行基本验证。如果这些表单数据通过验证,则执行该脚本的第二部分。
该脚本的第二部分所包含的代码用于分析数据,并以HTML和图形格式显示汇总结果。清单4中显示了explore.php脚本的基本结构:
清单4.explore.php的结构
<?php//explore.phpif(!empty($x_values)){$X=explode(",",$x_values);$numX=count($X);}if(!empty($y_values)){$Y=explode(",",$y_values);$numY=count($Y);}//displayentrydataentryformifvariablesnotsetif((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)){//Omittedcodefordisplayingentryform}else{include_once"slr/SimpleLinearRegressionHTML.php";$slr=newSimpleLinearRegressionHTML($X,$Y,$conf_int);echo"<h2>$title</h2>";$slr->showTableSummary($x_name,$y_name);echo"<br><br>";$slr->showAnalysisOfVariance();echo"<br><br>";$slr->showParameterEstimates($x_name,$y_name);echo"<br>";$slr->showFormula($x_name,$y_name);echo"<br><br>";$slr->showRValues($x_name,$y_name);echo"<br>";include("jpgraph/jpgraph.php");include("jpgraph/jpgraph_scatter.php");include("jpgraph/jpgraph_line.php");//Thecodefordisplayingthegraphicsisinlineinthe//explore.phpscript.Thecodeforthesetwolineplots//finishesoffthescript://Omittedcodefordisplayingscatterpluslineplot//Omittedcodefordisplayingresidualsplot}?>
为
