【数据分析 R语言实战】学习笔记 第九章(上)一元线性回归分析

2019-04-10 15:59:39 浏览数 (1)

9.1一元线性回归

9.1.1模型理论

最小二乘估计

9.1.2显著性检验

回归分析的主要目的是根据估计的模型用自变量来估计或预测因变量取值,但我们建立的回归方程是否真实地反映了变量之间的相关关系,还需要进一步进行显著性检验。对于一元线性回归模型而言,回归方程的显著性检验有三种等价的方法,分别为t检验、F检验和相关系数检验。在R中给出的方法是F检验,原假设为:两个变量之间的线性关系不显著,即

H0:β1=0

当给定显著性水平为α时,如果检验结果的p值小于α,则拒绝原假设,说明模型反映的线性关系显著;反之不拒绝原假设。

9.1.3R语言实现

在R语言中,使用lm函数可以非常容易地求出回归方程,用它来拟合线性模型,可以进行回归、方差分析和协方差分析。

lm(formula, data, subset, weights, na.action,method= "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE,singular.ok =TRUE, contrasts = NULL, offset, ...)

例:

某村庄161名儿童年龄与身高数据

代码语言:javascript复制
> age=18:29
> height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)
> plot(age,height)

从图中可以观察到,年龄与身高基本在一条直线附近,可以认为两者具有线性关系

代码语言:javascript复制
> lm.reg=lm(height~age)
> summary(lm.reg)
Call:
lm(formula = height ~ age)
Residuals:
     Min       1Q   Median       3Q      Max 
-0.27238 -0.24248 -0.02762  0.16014  0.47238 
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
            
(Intercept)  64.9283     0.5084  127.71  < 2e-16 ***
age           0.6350     0.0214   29.66 4.43e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.256 on 10 degrees of freedom
Multiple R-squared:  0.9888,      Adjusted R-squared:  0.9876 
F-statistic:   880 on 1 and 10 DF,  p-value: 4.428e-11

指令summary提供了很多有用的模型结果,包括残差(Residuals )、回归系数(Coefficients ) ,拟合优度R2以及F统计量和p值。回归系数中Intercept表示截距β0=64.9283, age对应的估计值为自变量前的回归系数β1=0.6350,因此由输出的结果可以得到回归方程y = 64.9283 0.635x

代码语言:javascript复制
> abline(lm.reg)

对残差进行分析:

方法一:

代码语言:javascript复制
> lm.res=residuals(lm.reg)
> plot(lm.res)

如果残差图中点比较均匀地分布在y=0两侧,则说明残差不包含趋势,只体现随机影响。

方法二:

第二种方法是在回归模型的结果上使用plot命令,进行误差的诊断检验

代码语言:javascript复制
> par(mfrow=c(2,2))
> plot(lm.reg)

残差图( Residuals vs Fitted ):横坐标为拟合值Y,纵坐标为残差。从散点图中可以看出,数据点基本均匀地分布在横轴y=0两侧时,第3个点残差很大。

正态分位图(Normal Q-Q ):Q-Q图中点的分布集中在y=x这条直线上时,说明残差是服从正态分布的。

位置-尺度图(Scale-Location):纵坐标为标准化残差的平方根,残差越大,点的位置越高。

曲式距离图(或称为残差杠杆图,Residuals vs Leverage ):图中的曲式距离( Cook's distanceplot)表示每一个数据点对回归线的影响力,第3个点的值较大,表示当删除该数据点时,回归系数会有实质上改变,为异常值点。

根据残差分析的结果,我们将第3个点从原始数据中剔除,重新拟合回归方程:

代码语言:javascript复制
> age=age[-3];height=height[-3]
> lm.reg2=lm(formula=height~age)
> summary(lm.reg2)
Call:
代码语言:javascript复制
lm(formula = height ~ age)
代码语言:javascript复制
Residuals:
代码语言:javascript复制
     Min       1Q   Median       3Q      Max 
代码语言:javascript复制
-0.27370 -0.17931  0.01957  0.12293  0.32405 
代码语言:javascript复制
Coefficients:
代码语言:javascript复制
            Estimate Std. Error t value Pr(>|t|)    
代码语言:javascript复制
(Intercept)  64.5540     0.4381  147.36  < 2e-16 ***
代码语言:javascript复制
age           0.6489     0.0182   35.64 5.33e-11 ***
代码语言:javascript复制
---
代码语言:javascript复制
Signif. codes:  
代码语言:javascript复制
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’  
代码语言:javascript复制
Residual standard error: 0.2073 on 9 degrees of freedom
代码语言:javascript复制
Multiple R-squared:  0.993, Adjusted R-squared:  0.9922 
代码语言:javascript复制
F-statistic:  1270 on 1 and 9 DF,  p-value: 5.327e-11

剔除异常值点后的回归方程,无论回归系数检验还是F检验都更加显著(p值变小了),说明第3个样本可以去掉,最终得到的回归方程是y = 64.554 0.6489x

根据估计方程,给定年龄,预测对应的身高估计值及其取值区间

代码语言:javascript复制
> age.pre<-data.frame(age=30)
> h.pre<-predict(lm.reg2,age.pre,interval='prediction',level=0.95)
> h.pre
代码语言:javascript复制
       fit      lwr      upr
代码语言:javascript复制
1 84.02034 83.46839 84.57228

在置信水平0.95(即默认值)下,当年龄为30时,身高的预测值为84.02034,预测区间为

[83.46839,84.57228]

0 人点赞