UA MATH571A R语言回归分析实践 多元回归2 医疗费用的决定

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

然后根据
[ β ^ i B s e ( β ^ i ) ,   β ^ i + B s e ( β ^ i ) ] [\hat{\beta}_i-Bse(\hat{\beta}_i),\ \hat{\beta}_i+Bse(\hat{\beta}_i)]
计算系数 β i \beta_i 的Bonferroni调整的置信区间。或者计算WHS调整系数,

> W <- sqrt(n*qf(1-0.01,n,mreg01.lm$df))
> W
[1] 4.309184

然后根据
[ β ^ i W s e ( β ^ i ) ,   β ^ i + W s e ( β ^ i ) ] [\hat{\beta}_i-Wse(\hat{\beta}_i),\ \hat{\beta}_i+Wse(\hat{\beta}_i)]
计算系数 β i \beta_i 的WHS调整的置信区间,实际应用的时候取 B B W W 中的较小者。

接下来介绍一下多元线性回归中怎么应用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图明显不是线性的。在做进一步的诊断前,下一篇博客讨论是不是每一个解释变量都要添加到模型中,以及是因为用一次还是二次的形式。

猜你喜欢

转载自blog.csdn.net/weixin_44207974/article/details/106271776