手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Php编程>列表

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

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

$Probability = 0.0;
$cmd = "echo 'dt($T, $df)' | $this->RPath --slave";
$result = shell_exec($cmd);
list($LineNumber, $Probability) = explode(" ", trim($result));
return $Probability;
}
function getInverseStudentProb($alpha, $df) {
$InverseProbability = 0.0;
$cmd = "echo 'qt($alpha, $df)' | $this->RPath --slave";
$result = shell_exec($cmd);
list($LineNumber, $InverseProbability) = explode(" ", trim($result));
return $InverseProbability;
}
}
?>

  请注意,这里已经设置了到 R 可执行文件的路径,并在两个函数中使用了该路径。第一个函数根据学生的 T 分布返回了与 T 统计值相关的概率值,而第二个反函数计算了与给定的 alpha 设置相对应的 T 统计值。 getStudentProb 方法用来评估线性模型的吻合程度; getInverseStudentProb 方法返回一个中间值,它用来计算每个预测的 Y值的置信区间。

  由于篇幅有限,我不可能逐个详细说明这个类中的所有函数,因此如果您想搞清楚简单线性回归分析中所涉及的术语和步骤,我鼓励您参考大学本科学生使用的统计学教科书。

  燃耗研究

  要演示如何使用该类,我可以使用来自公共事业中燃耗(burnout)研究中的数据。Michael Leiter 和 Kimberly Ann Meechan 研究了称为 消耗指数(Exhaustion Index)的燃耗度量单位和称之为 集中度(Concentration)的独立变量之间的关系。集中度是指人们的社交接触中来自其工作环境的那部分比例。

  要研究他们样本中个人的消耗指数值与集中度值之间的关系,请将这些值装入适当命名的数组中,并用这些数组值对该类进行实例化。对类进行实例化后,显示该类所生成的某些汇总值以评估线性模型与数据的吻合程度。

  清单 5 显示了装入数据和显示汇总值的脚本:

  清单 5. 用于装入数据并显示汇总值的脚本


<?php
// BurnoutStudy.php
// Copyright 2003, Paul Meagher
// Distributed under GPL
include "SimpleLinearRegression.php";
// Load data from burnout study
$Concentration = array(20,60,38,88,79,87,
68,12,35,70,80,92,
77,86,83,79,75,81,
75,77,77,77,17,85,96);

$ExhaustionIndex = array(100,525,300,980,310,900,
410,296,120,501,920,810,
506,493,892,527,600,855,
709,791,718,684,141,400,970);

$slr = new SimpleLinearRegression($Concentration, $ExhaustionIndex);
$YInt = sprintf($slr->format, $slr->YInt);
$Slope = sprintf($slr->format, $slr->Slope);
$SlopeTVal = sprintf($slr->format, $slr->SlopeTVal);
$SlopeProb = sprintf(".6f", $slr->SlopeProb);
?>
<table border='1' cellpadding='5'>
<tr>
<th align='right'>Equation:</th>
<td></td>
</tr>
<tr>
<th align='right'>T:</th>
<td></td>
</tr>
<tr>
<th align='right'>Prob > T:</th>
<td><td>
</tr>
</table>

  通过 Web 浏览器运行该脚本,产生以下输出:

Equation: Exhaustion = -29.50 (8.87 * Concentration)
T: 6.03
Prob > T: 0.000005

  这张表的最后一行指出获取这样大 T值的 随机概率非常低。可以得出这样的结论:与仅仅使用消耗值的均值相比,简单线性模型的预测能力更好。

  知道了某个人的工作场所联系的集中度,就可以用来预测他们可能正在消耗的燃耗程度。这个方程告诉我们:集中度值每增加 1 个单位,社会服务领域中一个人的消耗值就会增加 8 个单位。这进一步证明了:要减少潜在的燃耗,社会服务领域中的个人应当考虑在其工作场所之外结交朋友。

  这只是粗略地描述了这些结果可能表示的含义。为全面研究这个数据集的含义,您可能想更详细地研究这个数据以确信这是正确的解释。在下一篇文章中我将讨论应当执行其它哪些分析。

  您学到了什么?

  其一,要开发意义重大的基于 PHP 的数学包,您不必是一名火箭科学家。坚持标准的面向对象技术,以及明确地采用逆向链接问题解决方法,就可以相对方便地使用 PHP 实现某些较为基本的统计过程。

  从教学的观点出发,我认为:如果只是因为要求您在较高和较低的抽象层次思考统计测试或例程,那么这个练习是非常有用的。换句话说,补充您的统计测试或过程学习的一个好办法就是将这个过程作为算法实现。

  要实现统计测试通常需要超出所给定的信息范围并创造性地解决和发现问题。对于发现对某个学科认识的不足而言,它也是一个好办法。

  不利的一面,您发现 PHP 对于取样分布缺乏内在手段,而这是实现大多数统计测试所必需的。您需要交给 R 来处理以获取这些值,但是我担心您会没时间或没兴趣安装 R。某些常见概率函数的本机 PHP 实现可以解决这个问题。

  另一个问题是:该类生成许多中间值和汇总值,但是汇总输出实际上没有利用这一点。我提供了一些难处理的输出,但是这既不够充分也没进行很好的组织,以致您无法充分地解释分析结果。实际上,我完全不知道如何可以将输出方法集成到该类中。这需要得到解决。

  最后,要弄明白数据,不仅仅是察看汇总值就可以了。您还需要明白各个数据点是如何分布的。最好的办法之一是将您的数据绘制成图表。再次声明,我对这方面不太了解,但是如果要用这个类来分析实际数据的话就需要解决这个问题。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!