扼要回忆:概念
复杂线性回归建模面前的根基方针是从成对的 X 值和 Y 值(即 X 和 Y 丈量值)构成的二维立体中找到最吻合的直线。一旦用最小方差法找到这条直线,就能够履行各类统计测试,以肯定这条直线与不雅测到的 Y 值的偏离量吻合水平。
线性方程(y = mx + b)有两个参数必需依据所供应的 X 和 Y 数据预算出来,它们是斜率(m)和 y 轴截距(b)。一旦预算出这两个参数,就能够将不雅测值输出线性方程,并察看方程所生成的 Y 展望值。
要利用最小方差法预算出 m 和 b 参数,就要找到 m 和 b 的估量值,使它们关于一切的 X 值失掉的 Y 值的不雅测值和展望值最小。不雅测值和展望值之差称为误差(yi - (mxi + b)),而且,假如对每一个误差值都求平方,然后求这些残差的和,其了局是一个被称为展望平方差的数。利用最小方差法来肯定最吻合的直线触及寻觅使展望方差最小的 m 和 b 的估量值。
可以用两种根基办法来找到知足最小方差法的估量值 m 和 b。第一种办法,可使用数值搜刮进程设定分歧的 m 和 b 值并对它们求值,终究决意发生最小方差的估量值。第二种办法是利用微积分找到用于预算 m 和 b 的方程。我不盘算深切会商推导出这些方程所触及的微积分,但我的确在 SimpleLinearRegression 类中利用了这些剖析方程,以找到 m 和 b 的最小平方估量值(请参阅 SimpleLinearRegression 类中的 getSlope() 和 getYIntercept 办法)。
即便具有了可以用来找到 m 和 b 的最小平方估量值的方程,也其实不意味着只需将这些参数代入线性方程,其了局就是一条与数据优秀吻合的直线。这个复杂线性回归过程当中的下一步是肯定其他的展望方差是不是可以承受。
可使用统计决议计划进程来否决“直线与数据吻合”这个备择假定。这个进程基于对 T 统计值的盘算,利用几率函数求得随机大的不雅测值的几率。正如第 1 局部所提到的,SimpleLinearRegression 类生成了为数浩瀚的汇总值,个中一个主要的汇总值是 T 统计值,它可以用来权衡线性方程与数据的吻合水平。假如吻合优秀,则 T 统计值常常是一个较大的值;假如 T 值很小,就应当用一个缺省模子取代您的线性方程,该模子假定 Y 值的均匀值是最好展望值(由于一组值的均匀值凡是可所以下一个不雅测值的有效的展望值)。
要测试 T 统计值是不是大到可以不必 Y 值的均匀值作为最好展望值,需求盘算随机取得 T 统计值的几率。假如几率很低,那就能够不采取均匀值是最好展望值这一有效假定,而且响应地可以确信复杂线性模子是与数据优秀吻合的。(有关盘算 T 统计值几率的更多信息,请参阅第 1 局部。)
在前一篇文章中,我经由过程交由 R 来求得几率值,从而避开了用 PHP 完成几率函数的成绩。我对这个处理计划并不是完整写意,因而我入手下手研讨这个成绩:开辟基于 PHP 的几率函数需求些甚么。
我入手下手上彀查找信息和代码。一个二者兼有的来历是书本 [url=http://www.library.cornell.edu/nr/bookcpdf.html]Numerical Recipes in C [/url] 中的几率函数。我用 PHP 从头完成了一些几率函数代码(gammln.c 和 betai.c 函数),但我对了局仍是不写意。与其它一些完成比拟,其代码仿佛多了些。另外,我还需求反几率函数。
侥幸的是,我偶尔发明了 John Pezzullo 的 Interactive Statistical Calculation。John 关于几率散布函数的网站上有我需求的一切函数,为便于进修,这些函数已用 JavaScript 完成。
我将 Student T 和 Fisher F 函数移植到了 PHP。我对 API 作了一点修改,以便合适 Java 定名作风,并将一切函数嵌入到名为 Distribution 的类中。该完成的一个很棒的功效是 doCommonMath 办法,这个库中的一切函数都重用了它。我没有消费力量去完成的其它测试(正态测试和卡方测试)也都利用 doCommonMath 办法。
复杂的处理计划是依据需求将一切实例变量的值都显示到屏幕上。在第一篇文章中,当显示燃耗研讨(Burnout Study)的线性方程、T 值和 T 几率时,我就是这么做的。能依据特定目标而会见特定值是很有匡助的,SimpleLinearRegression 撑持此类用法。
但是,另外一种用于输入了局的办法是将输入的各局部体系化地停止分组。假如研讨用于回归剖析的次要统计软件包的输入,就会发明它们常常是用一样的体例对输入停止分组的。它们常常有摘要表(Summary Table)、偏离值剖析(Analysis Of Variance)表、参数估量值(Parameter Estimate)表和 R 值(R Value)。相似地,我创立了一些输入办法,称号以下:
清单 3 中的剧本是从样本数据研讨东西(explore.php)中抽取的,它演示了若何挪用该库和若何未来自于 SimpleLinearRegression 剖析的数据填入 Line 和 Scatter 类。这段代码中的正文是 Johan Persson 编写的(JPGraph 代码库的文档化任务做得很好)。
清单 3. 来自于样本数据研讨东西 explore.php 的函数的具体内容<?php
// 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);
Table Summary 以表格模式显示了输出数据和其它列,这些列指出了对应于不雅测值 X 的展望值 Y、Y 值的展望值和不雅测值之间的差和展望 Y 值相信区间的上限和下限。
图 3 显示了 Table Summary 以后的三个初级别数据汇总表。
图 3. 显示了 Table Summary 以后的三个初级别数据汇总表
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 值标明吻合优秀。
本系列研讨了复杂线性回归剖析的两个使用。在本文中,我研讨了“到消防站的间隔”和“火警丧失”之间的强线性关系。在第一篇文章中,我研讨了“社会合中度”和称为“损耗指数”的丈量值之间的线性关系,虽然这类关系绝对弱一些,但依然非常分明。(作为实习,用本文中会商的数据研讨东西从头研讨第一个研讨案例中较为混乱的数据能够会很风趣。您能够会注重到 y 轴截距是正数的情形,这意味着“社会合中度”为 0,展望损耗指数为 -29.50。这成心义吗?在对一种景象建模时,您应当问问本人:方程是不是应当包括可选的 y 轴截距,假如可以,那末该 y 轴截距在线性方程中会起甚么感化。)
参考材料
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。