回归诊断

回归诊断


1.样本是否符合正态分布假设?

2.是否存在离群值导致模型发生较大误差?

3.线性模型是否合理?

4.误差是否满足独立性、等方差、正态分布等假设条件?

5.是否存在多重共线性


正态分布检验:函数shapiro.test()

P>0.05,正态分布

例题1

Anscomber数据

数据 1-3 1 2 3 4 4
号 X Y Y Y X Y
1 10.0 8.04 9.14 7.46 8.0 6.58
2 8.0 6.95 8.14 6.77 8.0 5.76
3 13.0 7.58 8.74 12.74 8.0 7.71
4 9.0 8.81 8.77 7.11 8.0 7.04
5 11.0 8.33 9.26 7.81 8.0 8.47
6 14.0 9.96 8.10 8.84 8.0 7.04
7 6.0 7.24 6.13 6.08 8.0 5.25
8 4.0 4.26 3.10 5.39 19.0 12.50
9 12.0 10.84 9.13 8.15 8.0 5.56
10 7.0 4.82 7.26 6.44 8.0 7.91
11 5.0 5.68 4.74 5.73 8.0 6.89

表给出的四组人造数据,每组数据集由11对点(xi,yi)组成,拟合于简单线性模型



试分析四组数据是否通过回归方程的检验,并用图形分析每组数据的基本情况。

解:输入数据,作回归分析(程序名:exam0611.R)

> Anscombe<-data.frame(
+ X=c(10.0, 8.0, 13.0, 9.0, 11.0, 14.0, 6.0, 4.0, 12.0, 7.0, 5.0),
+ Y1=c(8.04,6.95, 7.58,8.81,8.33,9.96,7.24,4.26,10.84,4.82,5.68),
+ Y2=c(9.14,8.14, 8.74,8.77,9.26,8.10,6.13,3.10, 9.13,7.26,4.74),
+ Y3=c(7.46,6.77,12.74,7.11,7.81,8.84,6.08,5.39, 8.15,6.44,5.73),
+ X4=c(rep(8,7), 19, rep(8,3)),
+ Y4=c(6.58,5.76,7.71,8.84,8.47,7.04,5.25,12.50, 5.56,7.91,6.89)
+ )
> summary(lm(Y1~X, data=Anscombe))

Call:
lm(formula = Y1 ~ X, data = Anscombe)

Residuals:
Min 1Q Median 3Q Max
-1.92127 -0.45577 -0.04136 0.70941 1.83882

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.0001 1.1247 2.667 0.02573 *
X 0.5001 0.1179 4.241 0.00217 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.237 on 9 degrees of freedom
Multiple R-squared: 0.6665, Adjusted R-squared: 0.6295
F-statistic: 17.99 on 1 and 9 DF, p-value: 0.00217

> summary(lm(Y2~X, data=Anscombe))

Call:
lm(formula = Y2 ~ X, data = Anscombe)

Residuals:
Min 1Q Median 3Q Max
-1.9009 -0.7609 0.1291 0.9491 1.2691

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.001 1.125 2.667 0.02576 *
X 0.500 0.118 4.239 0.00218 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.237 on 9 degrees of freedom
Multiple R-squared: 0.6662, Adjusted R-squared: 0.6292
F-statistic: 17.97 on 1 and 9 DF, p-value: 0.002179

> summary(lm(Y3~X, data=Anscombe))

Call:
lm(formula = Y3 ~ X, data = Anscombe)

Residuals:
Min 1Q Median 3Q Max
-1.1586 -0.6159 -0.2325 0.1510 3.2407

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.0075 1.1244 2.675 0.02542 *
X 0.4994 0.1179 4.237 0.00218 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.236 on 9 degrees of freedom
Multiple R-squared: 0.666, Adjusted R-squared: 0.6289
F-statistic: 17.95 on 1 and 9 DF, p-value: 0.002185

> summary(lm(Y4~X4, data=Anscombe))

Call:
lm(formula = Y4 ~ X4, data = Anscombe)

Residuals:
Min 1Q Median 3Q Max
-1.751 -0.831 0.000 0.809 1.839

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.0017 1.1239 2.671 0.02559 *
X4 0.4999 0.1178 4.243 0.00216 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.236 on 9 degrees of freedom
Multiple R-squared: 0.6667, Adjusted R-squared: 0.6297
F-statistic: 18 on 1 and 9 DF, p-value: 0.002165
系数 估计值 标准差 t-值 P-值
3.0 1.125 2.67 0.026
0.5 0.118 4.24 0.0022
方程 =1.24 =0.667 F=17.99 P=0.002

这四组数据的计算结果由上表所示(最多有0.01的误差)。从表所列结果,说明这四组数据全部能通过模型检验和方程的系数检验。由于每个数据集得到的各种统计量的值是相同的,因此,可能会认为每个数据集合对于线性模型会同等的适用,但事实并非如此。

我们画出四组数据的散点图和相应的回归直线。

> attach(Anscombe)
> par(mfrow=c(2,2))
> plot(Y1~X);abline(lm(Y1~X))
> plot(Y2~X);abline(lm(Y2~X))
> plot(Y3~X);abline(lm(Y3~X))
> plot(Y4~X4);abline(lm(Y4~X4))

第一个数据集合,如果简单线性回归模型合适的话,这就是我们所期望看到的数据集合。第二个数据集合,它给出一个不同的结论,即基于简单线性回归分析是不正确的,而一条光滑曲线,可能是二次多项式,可以以较小的剩余变异拟合数据。

> lm2.sol<-lm(Y2~X+I(X^2));summary(lm2.sol)

Call:
lm(formula = Y2 ~ X + I(X^2))

Residuals:
Min 1Q Median 3Q Max
-0.0013287 -0.0011888 -0.0006294 0.0008741 0.0023776

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -5.9957343 0.0043299 -1385 <2e-16 ***
X 2.7808392 0.0010401 2674 <2e-16 ***
I(X^2) -0.1267133 0.0000571 -2219 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.001672 on 8 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 7.378e+06 on 2 and 8 DF, p-value: < 2.2e-16

因此,回归方程为



更合理(见下图)

> x<-seq(min(X),max(X),len=200)
> y<-predict(lm2.sol,data.frame(X=x))
> plot(Y2~X);lines(x,y)

第三个数据集合表示,简单回归的描述对于大部分数据是正确的,但一个样本距离拟合回归直线太远,这称为异常值问题。很可能需要从数据集合中删除那个与其他数据不匹配的数据样本,回归需要根据剩下的10个样本重新拟合。

> i<-1:11;Y31<-Y3[i!=3];X3<-X[i!=3]
> lm3.sol<-lm(Y31~X3);summary(lm3.sol)

Call:
lm(formula = Y31 ~ X3)

Residuals:
Min 1Q Median 3Q Max
-0.0060173 -0.0012121 -0.0010173 -0.0008225 0.0140693

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.0106277 0.0057115 702.2 <2e-16 ***
X3 0.3450433 0.0006262 551.0 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.006019 on 8 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 3.036e+05 on 1 and 8 DF, p-value: < 2.2e-16

得到的线性回归方程为



下图绘出修正后的直线方程

> plot(Y3~X);abline(lm3.sol)

最后一个数据集合与上述三个不同,没有足够的信息来对拟合模型作出判断。斜率参数的估计值很大程度上由的值来决定。如果第8号样本被删除,则不能估计。因此,我们无法相信这个一个综合分析,它对单个样本如此依赖。

例题2

Forbes数据

在十九世纪四、五十年代,苏格兰物理学家James D.Forbes,试图通过水的沸点来估计海拔高度。他知道通过气压计测得的大气压可用于得到海拔高度,高度越高,气压越低。在这里讨论的实验中,他研究了气压和沸点之间的关系,由于在当时,运输精密的气压计相当困难,这引起了他研究此问题的兴趣,测量沸点将给旅行者提供一个快速估计高度的方法。

Forbes在阿尔卑斯山及苏格兰收集数据,选定地点后,他装起仪器,测量气压及沸点,气压单位采用水银柱高度,并根据测量时周围气温与标准气温之间的差异校准气压,沸点用华氏温度来表示。我们从他1857年的论文中选取了个地方的数据,见下表。

在阿尔卑斯山及苏格兰的17个地方沸点(℉)及大气压(英寸汞柱)的Forbes数据

案例号 沸点(℉) 气压(英寸汞柱) log(气压) 100×log(气压)
1 194.5 20.79 1.3179 131.79
2 194.3 20.79 1.379 131.79
3 197.9 22.40 1.3502 135.02
4 198.4 22.67 1.3555 135.55
5 199.4 23.15 1.3646 136.46
6 199.9 23.35 1.3683 136.83
7 200.9 23.89 1.3782 137.82
8 201.1 23.00 1.3800 138.00
9 201.4 24.02 1.3806 138.06
10 201.3 24.01 1.3805 138.05
11 203.6 25.14 1.4004 140.04
12 204.6 26.57 1.4244 142.44
13 209.5 28.49 1.4547 145.47
14 208.6 27.76 1.4434 144.34
15 210.7 29.04 1.4630 146.30
16 211.9 29.88 1.4754 147.54
17 212.2 30.06 1.4780 147.80

分析过程:

Forbes的理论认为,在观测值范围内,沸点和气压值的对数成一直线。由此,取10作为对数的底数。事实上,统计分析与对数的底是没有关系的。由于气压对数据值变化不大,最小值为1.318,而最大的为1.478,因此将所有气压的对数值乘以100,如表中第5列。这将不改变分析的主要性质的同时,避免研究非常小的数字。

求解过程:

输入数据,画出散点图(程序名:exam0804.R)

> X <- matrix(c(
+ 194.5, 20.79, 1.3179, 131.79,
+ 194.3, 20.79, 1.3179, 131.79,
+ 197.9, 22.40, 1.3502, 135.02,
+ 198.4, 22.67, 1.3555, 135.55,
+ 199.4, 23.15, 1.3646, 136.46,
+ 199.9, 23.35, 1.3683, 136.83,
+ 200.9, 23.89, 1.3782, 137.82,
+ 201.1, 23.99, 1.3800, 138.00,
+ 201.4, 24.02, 1.3806, 138.06,
+ 201.3, 24.01, 1.3805, 138.05,
+ 203.6, 25.14, 1.4004, 140.04,
+ 204.6, 26.57, 1.4244, 142.44,
+ 209.5, 28.49, 1.4547, 145.47,
+ 208.6, 27.76, 1.4434, 144.34,
+ 210.7, 29.04, 1.4630, 146.30,
+ 211.9, 29.88, 1.4754, 147.54,
+ 212.2, 30.06, 1.4780, 147.80),
+ ncol=4, byrow=T,
+ dimnames = list(1:17, c("F", "h", "log", "log100")))
> forbes<-as.data.frame(X)
> plot(forbes$F,forbes$log100)

Forbes数据的散点图的总的印象是,这些点基本上,但并不精确地,落在一条直线上,作回归分析

> lm.sol<-lm(log100~F,data=forbes)
> summary(lm.sol)

Call:
lm(formula = log100 ~ F, data = forbes)

Residuals:
Min 1Q Median 3Q Max
-0.32261 -0.14530 -0.06750 0.02111 1.35924

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -42.13087 3.33895 -12.62 2.17e-09 ***
F 0.89546 0.01645 54.45 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3789 on 15 degrees of freedom
Multiple R-squared: 0.995, Adjusted R-squared: 0.9946
F-statistic: 2965 on 1 and 15 DF, p-value: < 2.2e-16

由计算结果得到:



对应于两个系数的P-值均,是非常显著的。

关于方程的检验,残差标准差,。相关系数的平方,,关于F-分布的P-值,也是非常显著的。

该模型能过t检验和F检验,因此,回归方程为



我们将得到的直线方程画在散点图上

> abline(lm.sol)



得到散点图和相应的回归直线,如图所示

下面分析残差,称



为回归方程的残差

在R中,函数residuals()计算回归方程残差。计算残差,并画出关于残差的散点图

> y.res<-residuals(lm.sol);plot(y.res)
> text(12,y.res[12],labels=12,adj=1.2)



其中text(12,y.res[12],labels=12,adj=1.2)是将第12号残差点标出。

从图中可以看到,第12个样本点可能会有问题,它比其他的样本点的残差大得多,因为其他点的残差的绝对值都小于0.35,而此点残差的绝对值均为1.3,因此,这个点可能不正确,或者模型的差假设不正确,或者是不是常数,等等。总之,需要对这个问题进行分析。

这里作简单处理,在,数据汇总,去掉第12号样本点

> i<-1:17;forbes12<-as.data.frame(X[i!=12,])
> lm12<-lm(log100~F, data=forbes12)
> summary(lm12)

Call:
lm(formula = log100 ~ F, data = forbes12)

Residuals:
Min 1Q Median 3Q Max
-0.21175 -0.06194 0.01590 0.09077 0.13042

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -41.30180 1.00038 -41.29 5.01e-16 ***
F 0.89096 0.00493 180.73 < 2e-16 ***

在去掉第12号样本点后,回归方程的系数没有太大变化,但系数标准差和残差的标准差有很大的变化,减少了约3倍左右,相关系数也有提高。

在计算完回归模型后,计算其残差,并用shapiro.test()函数作残差的正态性检验

> y.res<-residuals(lm.sol)
> shapiro.test(y.res)

Shapiro-Wilk normality test

data: y.res
W = 0.54654, p-value = 3.302e-06

因此,残差不满足正态性假设。

在去掉第12号样本之后,再对所得到的回归模型的残差进行正态性检验

> y12.res<-residuals(lm12)
> shapiro.test(y12.res)

Shapiro-Wilk normality test

data: y12.res
W = 0.92215, p-value = 0.1827

能通过正态性检验,因此,去掉12号样本点是合理的。

R与数据分析旧笔记(⑦)回归诊断的更多相关文章

  1. R与数据分析旧笔记(五)数学分析基本

    R语言的各种分布函数 rnorm(n,mean=0,sd=1)#高斯(正态) rexp(n,rate=1)#指数 rgamma(n,shape,scale=1)#γ分布 rpois(n,lambda) ...

  2. R与数据分析旧笔记(三)不知道取什么题目

    连线图 > a=c(2,3,4,5,6) > b=c(4,7,8,9,12) > plot(a,b,type="l") 多条曲线效果 plot(rain$Toky ...

  3. R与数据分析旧笔记(一)基本数学函数的使用

    创建向量矩阵 > x1=c(2,3,6,8) > x2=c(1,2,3,4) > a1=(1:100) > length(a1) [1] 100 > length(x1) ...

  4. R与数据分析旧笔记(十八完结) 因子分析

    因子分析 因子分析 降维的一种方法,是主成分分析的推广和发展 是用于分析隐藏在表面现象背后的因子作用的统计模型.试图用最少的个数的不可测的公共因子的线性函数与特殊因子之和来描述原来观测的每一分量 因子 ...

  5. R与数据分析旧笔记(十七) 主成分分析

    主成分分析 主成分分析 Pearson于1901年提出的,再由Hotelling(1933)加以发展的一种多变量统计方法 通过析取主成分显出最大的个别差异,也用来削减回归分析和聚类分析中变量的数目 可 ...

  6. R与数据分析旧笔记(十六) 基于密度的方法:DBSCAN

    基于密度的方法:DBSCAN 基于密度的方法:DBSCAN DBSCAN=Density-Based Spatial Clustering of Applications with Noise 本算法 ...

  7. R与数据分析旧笔记(十五) 基于有代表性的点的技术:K中心聚类法

    基于有代表性的点的技术:K中心聚类法 基于有代表性的点的技术:K中心聚类法 算法步骤 随机选择k个点作为"中心点" 计算剩余的点到这个k中心点的距离,每个点被分配到最近的中心点组成 ...

  8. R与数据分析旧笔记(十三) 聚类初步

    聚类 聚类 关键度量指标:距离 常用距离 绝对值距离 绝对值距离也称为"棋盘距离"或"城市街区距离". 欧氏(Euclide)距离 闵可夫斯基(Minkowsk ...

  9. R与数据分析旧笔记(十一)数据挖掘初步

    PART 1 PART 1 传统回归模型的困难 1.为什么一定是线性的?或某种非线性模型? 2.过分依赖于分析者的经验 3.对于非连续的离散数据难以处理 网格方法 <Science>上的文 ...

随机推荐

  1. SQL常用函数

    SQL中常用的函数有类型转换函数.字符串函数和日期使用函数.更多具体的函数用法参见DBMS中的帮助文档. 类型转换函数 cast(值 as 类型) update 表名 set 列1=列1+cast(列 ...

  2. 对浏览器css兼容性的学习理解及问题解决汇总

    一.从浏览器内核的角度 来看,浏览器兼容性问题可分为以下三类: 1. 渲染相关:和样式相关的问题,即体现在布局效果上的问题. 2. 脚本相关:和脚本相关的问题,包括JavaScript和DOM.BOM ...

  3. MySQL-python 1.2.3 for Windows and Python 2.7, 32bit and 64bit versions -(亲测可用)

    MySQL-python 1.2.3 for Windows and Python 2.7, 32bit and 64bit versions - See more at: http://www.co ...

  4. iOS计算文本高度

    NSDictionary *attribute = @{NSFontAttributeName: UIFont(14)}; CGRect labelRect = [string boundingRec ...

  5. java代码如何快速添加作者描述的注释最好能有详细的图解

    MyEclipse 中自动插入作者.注释日期等de快捷键方法依次打开然后找到 Window -->Preferences->Java->Editor->Templates,在这 ...

  6. jQuery和DOM对象之间的转换

    jquery选择器得到的jquery对象和标准的 javascript中的document.getElementById()取得的dom对象是两种不同的对象类型,一般情况下,如S(’#id’)得到的是 ...

  7. Html5离线应用程序

    最近,整理了一下关于 H5离线应用缓存的知识,今天在家休息,和大家分享一下,希望对大的学习和工作,能有所帮助. HTML5的离线web应用允许我们在脱机时与网站进行交互.这在提高网站的访问速度和制作一 ...

  8. Doctype 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

    Doctype:(Document Type)文档类型,它位于文档中最前面的位置,处于标签之前.如果你想制作符合标准的页面,一个必不可少的关键组成部分就是DOCTYPE的声明.确定了正确的Doctyp ...

  9. Siverlight+WCF+Nhibernate 开发之旅(一)

    最近正在开发sl程序,考虑了很久,参考了一些框架,令人头疼的数据访问层最终选择wcf+nhibernate,至于为什么选择wcf和nh,个人参考了其他的框架感觉这两者结合从开发效率和便捷性方面比其他的 ...

  10. rsyslog ~ 波浪号

    <pre name="code" class="html">Using negation can be useful if you would li ...