R与数据分析旧笔记(⑦)回归诊断
回归诊断
回归诊断
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 | |
| 方程 | 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与数据分析旧笔记(⑦)回归诊断的更多相关文章
- R与数据分析旧笔记(五)数学分析基本
		
R语言的各种分布函数 rnorm(n,mean=0,sd=1)#高斯(正态) rexp(n,rate=1)#指数 rgamma(n,shape,scale=1)#γ分布 rpois(n,lambda) ...
 - R与数据分析旧笔记(三)不知道取什么题目
		
连线图 > a=c(2,3,4,5,6) > b=c(4,7,8,9,12) > plot(a,b,type="l") 多条曲线效果 plot(rain$Toky ...
 - R与数据分析旧笔记(一)基本数学函数的使用
		
创建向量矩阵 > x1=c(2,3,6,8) > x2=c(1,2,3,4) > a1=(1:100) > length(a1) [1] 100 > length(x1) ...
 - R与数据分析旧笔记(十八完结) 因子分析
		
因子分析 因子分析 降维的一种方法,是主成分分析的推广和发展 是用于分析隐藏在表面现象背后的因子作用的统计模型.试图用最少的个数的不可测的公共因子的线性函数与特殊因子之和来描述原来观测的每一分量 因子 ...
 - R与数据分析旧笔记(十七) 主成分分析
		
主成分分析 主成分分析 Pearson于1901年提出的,再由Hotelling(1933)加以发展的一种多变量统计方法 通过析取主成分显出最大的个别差异,也用来削减回归分析和聚类分析中变量的数目 可 ...
 - R与数据分析旧笔记(十六) 基于密度的方法:DBSCAN
		
基于密度的方法:DBSCAN 基于密度的方法:DBSCAN DBSCAN=Density-Based Spatial Clustering of Applications with Noise 本算法 ...
 - R与数据分析旧笔记(十五) 基于有代表性的点的技术:K中心聚类法
		
基于有代表性的点的技术:K中心聚类法 基于有代表性的点的技术:K中心聚类法 算法步骤 随机选择k个点作为"中心点" 计算剩余的点到这个k中心点的距离,每个点被分配到最近的中心点组成 ...
 - R与数据分析旧笔记(十三) 聚类初步
		
聚类 聚类 关键度量指标:距离 常用距离 绝对值距离 绝对值距离也称为"棋盘距离"或"城市街区距离". 欧氏(Euclide)距离 闵可夫斯基(Minkowsk ...
 - R与数据分析旧笔记(十一)数据挖掘初步
		
PART 1 PART 1 传统回归模型的困难 1.为什么一定是线性的?或某种非线性模型? 2.过分依赖于分析者的经验 3.对于非连续的离散数据难以处理 网格方法 <Science>上的文 ...
 
随机推荐
- Java复习第一天---Javascript的基本知识点
			
1.HelloWord: 2.基础语法: 3.嵌入HTML 借助window.onload事件在整个窗体载入完毕之后运行程序代码 4.事件驱动: 5.DOM操作 5.1 查找元素节点 5.1.1 依据 ...
 - JQuery一句话实现全选/反选
			
$("#checkAll").click(function () { if (this.checked) { $("input[name='checkbox']& ...
 - 基于php常用正则表达整理(下)
			
61 \n 匹配一个换行符.等价于 \x0a 和 \cJ.62 \r 匹配一个回车符.等价于 \x0d 和 \cM.63 \s 匹配任何空白字符,包括空格.制 ...
 - C++学习笔录1
			
1.在实际开发中,引用类型变量值用于函数的参数中.它不会另外开辟空间(提高了程序效率),他相当于变量的别名,代表的就是当前这个变量的地址空间.(引用的底层用的是指针.因此从底层的角度讲,其实它的效率是 ...
 - QF——iOS中数据持久化的几种方式
			
数据持久化的几种方式: 一.属性列表文件: .plist文件是种XML文件.数组,字典都可以和它互相转换.数组和字典可以写入本地变成plist文件.也可以读取本地plist文件,生成数组或字典. 读取 ...
 - [整理]DLL延时加载 && 设置进程私有环境变量
			
DLL延时加载鉴于静态和动态加载之间,即无需在代码中显示加载但它内队依然是动态加载的方式只是系统帮处理了.这样做好处是: 1. 可以加快启动时间(因为它是动态加载在需要的时间加载), 2. 减小编写L ...
 - 菜鸟学java开篇
			
从事it工作已有接近两年的时间了, 一直从事的是php的工作, 一直都想学java ,原因就不多说了, 毕竟优秀的php程序员,都会是一个其他方面的高手, 例如java ,并不是说java有多好,ph ...
 - 纯css3实现tab选项卡
			
<!doctype html> <html> <head> <title>Welcome</title> <meta http-equ ...
 - hdu 5726 GCD  倍增+ 二分
			
题目链接 给n个数, 定义一个运算f[l,r] = gcd(al, al+1,....ar). 然后给你m个询问, 每次询问给出l, r. 求出f[l, r]的值以及有多少对l', r' 使得f[l, ...
 - codeforces 652D . Nested Segments  线段树
			
题目链接 我们将线段按照右端点从小到大排序, 如果相同, 那么按照左端点从大到小排序. 然后对每一个l, 查询之前有多少个l比他大, 答案就是多少.因为之前的r都是比自己的r小的, 如果l还比自己大的 ...