UA MATH571A R语言回归分析实践 多元回归2 医疗费用的决定
这一讲展示一下一元回归中的模型诊断的手段怎么用在多元回归中,同时介绍一下多元回归做推断和预测的方法。
系数的推断与模型预测
先来看看系数的99%置信区间,显著(显著性水平1%)的系数的99%置信区间应该不会包含0:
> confint(mreg01.lm,level=0.99)
0.5 % 99.5 %
(Intercept) -16116.04048 -10391.0546
Age 226.77096 288.1101
Sex -988.77965 728.8666
BMI 259.16501 401.8577
Chil 121.91230 832.2460
Smoke 22758.69080 24884.2267
Region -99.23445 956.4028
用confint函数可以计算置信区间,第一个输入是模型对象,第二个输入是置信水平。可以发现性别和地区的99%置信水平是包含0的,这与上一讲发现这两个解释变量的系数在1%的显著性水平下不显著是一致的。需要注意的是这个置信区间是单个系数的置信区间,也就是说当我们关注Age的时候,是只考虑Age,没有考虑其他系数的。因此更合理的做法是计算这些系数的联合置信区间,可以采用Bonferroni调整或者WHS置信带方法。比如计算Bonferroni调整系数
> n <- 7 # intercept and 6 coefficients
> B <- qt(1-0.01/(2*n),mreg01.lm$df)
> B
[1] 3.195517
然后根据
计算系数
的Bonferroni调整的置信区间。或者计算WHS调整系数,
> W <- sqrt(n*qf(1-0.01,n,mreg01.lm$df))
> W
[1] 4.309184
然后根据
计算系数
的WHS调整的置信区间,实际应用的时候取
和
中的较小者。
接下来介绍一下多元线性回归中怎么应用predict函数。先讨论拟合的用法,以第一个样本为例:
predict(mreg01.lm,newdata = data.frame(Age = 19,
Sex = 0,
BMI = 27.9,
Chil = 0,
Smoke = 1,
Region = 1),
interval = "conf",level = 0.95)
## output
## fit lwr upr
## 1 25109.13 24004.59 26213.67
输入第一项是模型对象,这一点与一元回归相同,输入第二项是一个数据框,数据框要包含所有的解释变量,需要输入要拟合的样本每一个解释变量对应的值,然后data.frame会将其自动合成一个数据框。如果要拟合多个样本的值,以前三个样本为例,可以用c()将每个解释变量的值一起输入到数据框中
predict(mreg01.lm,newdata = data.frame(Age = c(19,18,28),
Sex = c(0,1,1),
BMI = c(27.9,33.77,33),
Chil = c(0,1,3),
Smoke = c(1,0,0),
Region = c(1,2,2)),
interval = "conf",level = 0.95)
## output
## fit lwr upr
## 1 25109.132 24004.594 26213.670
## 2 3746.041 3016.915 4475.167
## 3 7020.111 6241.170 7799.053
如果不想手动输入数字可以用之前定义好的变量:
predict(mreg01.lm,newdata = data.frame(Age = Age[1:3],
Sex = Sex[1:3],
BMI = BMI[1:3],
Chil = Chil[1:3],
Smoke = Smoke[1:3],
Region = Region[1:3]),
interval = "conf",level = 0.95)
它会得到和手动输入数字一样的结果,甚至我们还可以用读入的原始数据来构造数据框:
predict(mreg01.lm,newdata = data.frame(Age = Data[1:3,1],
Sex = Data[1:3,2],
BMI = Data[1:3,3],
Chil = Data[1:3,4],
Smoke = Data[1:3,5],
Region = Data[1:3,6]),
interval = "conf",level = 0.95)
做预测只需要把interval="conf"改成interval="pred"即可。
模型诊断
与一元的类似,只是要画的图有点多(对拟合值,每个解释变量),这里举三个例子:
plot(BMI,resid(mreg01.lm))
abline(h=0)
plot(fitted(mreg01.lm),resid(mreg01.lm))
abline(h=0)
qqnorm(resid(mreg01.lm))
从这三张图看得出来,多元线性回归显然并不是个好模型,残差呈现出来的模式是非常奇怪的,并且QQ图明显不是线性的。在做进一步的诊断前,下一篇博客讨论是不是每一个解释变量都要添加到模型中,以及是因为用一次还是二次的形式。