400-696-8028

用 PHP 实现的简单线性回归(二)

长沙北大青鸟作者:科泰校区Paul Meagher

摘要:解决输出和概率函数缺陷的数据研究工具
本系列文章的第 1 部分结尾处提到了简单线性回归(Simple Linear Regression)类中缺少的三个元素。在本文中,作者 Paul Meagher 用基于 PHP 的概率函数弥补了这些缺陷,演示
解决输出和概率函数缺陷的数据研究工具
本系列文章的第 1 部分结尾处提到了简单线性回归(Simple Linear Regression)类中缺少的三个元素。在本文中,作者 Paul Meagher 用基于 PHP 的概率函数弥补了这些缺陷,演示了如何将输出方法集成到 SimpleLinearRegression 类中并创建了图形输出。他通过构建数据研究工具解决了这些问题,该工具旨在深层次地研究中小规模的数据集所包含的信息。(在第 1 部分中,作者演示了如何用 PHP 作为实现语言来开发和实现简单线性回归算法包的核心部分。)


在这个由两部分组成的系列文章的第 1 部分(“Click to fullsize


数据被提交之后,会对它进行分析,并显示这些分析的结果。第一个显示的结果集是 Table Summary,如图 2 所示。

图 2. Table Summary 是所显示的第一个结果集
Click to fullsize


Table Summary 以表格形式显示了输入数据和其它列,这些列指出了对应于观测值 X 的预测值 Y、Y 值的预测值和观测值之间的差以及预测 Y 值置信区间的下限和上限。

图 3 显示了 Table Summary 之后的三个高级别数据汇总表。

图 3. 显示了 Table Summary 之后的三个高级别数据汇总表
Click to fullsize


Analysis of Variance 表显示了如何将 Y 值的偏离值归为两个主要的偏离值来源,由模型解释的方差(请看 Model 行)和模型不能解释的方差(请看 Error 行)。较大的 F 值意味着该线性模型捕获了 Y 测量值中的大多数偏离值。这个表在多次回归环境中更有用,在那里每个独立变量都在表中占有一行。

Parameter Estimates 表显示了估算的 Y 轴截距(Intercept)和斜率(Slope)。每行都包括一个 T 值以及观测到极限 T 值的概率(请看 Prob > T 列)。斜率的 Prob > T 可用于否决线性模型。

如果 T 值的概率大于 0.05(或者是类似的小概率),那么您可以否决该无效假设,因为随机观测到极限值的可能性很小。否则您就必须使用该无效假设。

在火灾损失研究中,随机获得大小为 12.57 的 T 值的概率小于 0.00000。这意味着对于与该研究中观测到的 X 值区间相对应的 Y 值而言,线性模型是有用的预测器(比 Y 值的平均值更好)。

最终报告显示了相关性系数或 R 值。可以用它们来评估线性模型与数据的吻合程度。高的 R 值表明吻合良好。

每个汇总报告对有关线性模型和数据之间关系的各种分析问题提供了答案。请查阅 Hamilton、Neter 或 Pedhauzeur 编写的教科书,以了解更高级的回归分析处理(请参阅参考资料)。

要显示的最终报告元素是数据的分布图和线图,如图 4 所示。

图 4. 最终报告元素 — 分布图和线图
Click to fullsize


大多数人都熟悉线图(如本系列中的第一幅图)的说明,因此我将不对此进行注释,只想说 JPGraph 库可以产生用于 Web 的高质量科学图表。当您输入分布或直线数据时,它也做得很好。

第二幅图将残差(观测的 Y、预测的 Y)与您预测的 Y 值关联起来。这是研究性数据分析(Exploratory Data Analysis,EDA)的倡导者所使用的图形示例,用以帮助将分析人员对数据中的模式的检测和理解能力提到最高程度。行家可以使用这幅图回答关于下列方面的问题:

可能的非正常值或影响力过度的例子
可能的曲线关系(使用转换?)
非正态残差分布
非常量误差方差或异方差性

可以轻松地扩展这个数据研究工具,以生成更多类型的图形 — 直方图、框图和四分位数图 — 这些都是标准的 EDA 工具。

数学库体系结构
对数学的业余爱好使我在最近几个月中保持着对数学库的浓厚兴趣。此类研究推动我思考如何组织我的代码库以及使其预期在未来能不断增长。

我暂时采用清单 5 中的目录结构:

清单 5. 易于增长的目录结构
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/ 


例如,未来有关多次回归的工作,将涉及扩展这个库以包括 matrix 目录,该目录用来容纳执行矩阵操作(这是对于更高级形式的回归分析的需求)的 PHP 代码。我还将创建一个 mr 目录,以容纳实现多次回归分析输入方法、逻辑和输出方法的 PHP 代码。

请注意这个目录结构包含一个 temp 目录。必须设置该目录的许可权,使 explore.php 脚本能够将输出图写到该目录。在尝试安装 phpmath_002.tar.gz 源代码时请牢记这一点。此外,请在 JpGraph 项目网站上阅读安装 JpGraph 的指示信息(请参阅参考资料)。

最后提一点,如果采取以下作法,可以将所有软件类移到 Web 根目录之外的文档根目录:

使某个全局 PHP_MATH 变量有权访问非 Web 根目录位置,并且
确保在所有需要或包括的文件路径前面加上这个已定义的常量作为前缀。

将来,对 PHP_MATH 变量的设置将通过一个用于整个 PHP 数学库的配置文件来完成。

您学到了什么?
在本文中,您了解了如何使用 SimpleLinearRegression 类开发用于中小规模的数据集的数据研究工具。在此过程中,我还开发了一个供 SimpleLinearRegression 类使用的本机概率函数,并用 HTML 输出方法和基于 JpGraph 库的图形生成代码扩展该类。

从学习的角度来看,简单线性回归建模是值得进一步研究的,因为事实证明,它是理解更高级形式的统计建模的必由之路。在深入学习更高级的技术(如多次回归或多变量方差分析)之前,对于简单线性回归的透彻理解将使您受益匪浅。

即使简单线性回归只用一个变量来说明或预测另一个变量的偏离值,在所有的研究变量之间寻找简单线性关系仍然常常是研究性数据分析的第一步。仅因为数据是多元的并不意味着就必须使用多元工具研究它。实际上,在开始时使用简单线性回归这样的基本工具是着手探究数据模式的好方法。

本系列研究了简单线性回归分析的两个应用。在本文中,我研究了“到消防站的距离”和“火灾损失”之间的强线性关系。在第一篇文章中,我研究了“社会集中度”和称为“消耗指数”的测量值之间的线性关系,尽管这种关系相对弱一些,但仍然十分明显。(作为练习,用本文中讨论的数据研究工具重新研究第一个研究案例中较为凌乱的数据可能会很有趣。您可能会注意到 y 轴截距是负数的情况,这意味着“社会集中度”为 0,预测消耗指数为 -29.50。这有意义吗?在对一种现象建模时,您应该问问自己:方程是否应该包含可选的 y 轴截距,如果可以,那么该 y 轴截距在线性方程中会起什么作用。)

对于简单线性回归的进一步研究可能包括对这些主题的研究:

*如果想从您的方程以及可以使用的其它计算公式中略去截距,则何时可以这样做
*何时以及如何使用幂、对数和其它转换来对数据进行线性化,以便用简单线性回归来对该数据建模
*可以用来评估您的建模假设的充分性,并可以更清晰地洞察数据中的模式的其它可视化方法

这些是有待学习简单线性回归的学生研究的一部分更高级的主题。参考资料包含了几个指向高级主题文章的链接,您可以从中参考更多关于回归分析的信息。

标准 PHP 安装提供了开发基于数学的重要应用程序所必须的许多资源。我希望这个系列的文章能启发其他开发人员出于乐趣、技术或学习挑战的目的而用 PHP 来实现数学例程。


相关附件:本文所用源代码下载

参考资料
1.请参考由 James T. McClave 和 Terry Sincich 编著的广受欢迎的大学教科书 Statistics,第 9 版(Prentice-Hall,在线),本文中所使用的算法步骤和“燃耗研究”示例参考了该书。
2.请查阅 PEAR 资源库,它目前包含了少量低级别的 PHP 数学类。最终,应该会很高兴地看到 PEAR 包含实现标准的较高级别的数值方法(比如 SimpleLinearRegression、MultipleRegression、TimeSeries、ANOVA、FactorAnalysis、FourierAnalysis 及其它)的包。
3.查看作者的 SimpleLinearRegression 类的所有源代码。
4.了解一下Numerical Python 项目,它用非常科学的数组语言以及成熟的建立下标方法扩展了 Python。有了该扩展,数学操作就非常接近人们期望从编译语言所获得的功能。
5.研究可用于 Perl 的许多数学参考资料,包括 CPAN 数学模块的索引和 CPAN 中算法部分的模块,以及 Perl 数据语言(Perl Data Language),它旨在为 Perl 提供压缩存储以及快速操作大型 N 维数据数组的能力。
6.有关 John Chambers 的 S 编程语言的更多信息,请查阅关于他的出版物以及他在贝尔实验室的各项研究项目的链接。还可以了解在 1998 年因语言设计而获得的 ACM 奖
7.R 是用于统计计算和图形的语言和环境,类似于获奖的 S System,R 提供了诸如线性和非线性建模、统计测试、时间序列分析、分类、群集之类的统计和图形技术。请在 R Project 主页上了解 R。
8.如果您刚接触 PHP,那么请阅读 Amol Hatwar 的 developerWorks 系列文章:“用 PHP 开发健壮的代码:”“第 1 部分: 高屋建瓴的介绍 ”(2002 年 8 月)、“第 2 部分: 有效地使用变量”(2002 年 9 月)和“第 3 部分: 编写可重用函数”(2002 年 11 月)。
9.访问 John Pezzullo 的优秀站点,该站点专门提供执行统计计算的网页。基于 PHP 的概率函数是以在 John 的概率函数页面所找到的代码为基础的。
10.到 Digital Library of Mathematical Functions 了解关于 M. Abramowitz 和 I.A. Stegun 编写的书籍 The Handbook of Mathematical Functions(也称为 AMS55)的更多信息。
11.查看 JpGraph 站点,以获取关于 PHP 的主要 OO 图形库的大量信息。
12.阅读美国国家标准与技术研究所(National Institute of Standards,NIST)出版的 The Engineering Handbook of Statistics,该手册上有几章是关于 Exploratory Data Analysis 的,非常不错。
13.如果您对于更详尽地学习关于回归的主题感兴趣的话,请尝试阅读以下有用的参考资料:
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 需要更好的数学工具来参与这个不断成长的市场(developerWorks,2002 年 11 月)。
15.查看 RWeb,它是基于 Web 的 R 接口。
关于我们
公司简介
发展历程
青鸟荣誉
联系我们
加入我们
青鸟课程
BCVE视频特效课程
BCUI全链路UI设计
BCSP软件开发专业
BCNT网络工程师
启能职业教育基础课程
长沙初中生学什么
长沙高中生学什么
长沙大学生学什么