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]