目录
多重线性回归
多重线性回归模型(Multiple Linear Regression Model)即描述因变量Y如何随多个自变量X的改变而改变。假定对n例观察对象逐一测定了因变量Y与m个自变量X1、X2、…、Xm的数值,多重线性回归模型的一般形式为:
式中β0为常数项,又称截距。β1、β2,…,βm称为偏回归系数(partial regression coefficient)或简称回归系数。
e则是去除m个自变量对Y的影响后的随机误差(即残差)。
一、多重线性回归的条件:
- 线性
- 独立
- 正态
- 等方差
二、多重线性回归分析一般可分为两个步骤:
1. 拟合多重线性回归方程
使用lm(因变量~自变量1+自变量2+自变量3...+自变量n,data=mydata)的形成拟合线性回归方程。
2. 模型检验及评价
复相关系数
R=:称为复相关系数(multiple correlation coefficient),可用来度量因变量Y与多个自变量间的线性相关程度,亦即观察值Y与估计值之间的相关程度
如果只有一个自变量时,,r是简单相关系数。
案例:ISwR包中自带数据集cystfibr是25例囊性纤维化患者的基本信息和肺功能信息。其中包含的变量有性别、年龄、身高、体重,BMI,用力呼气量(fev1),残气量(rv),功能性残气量(frc),最大肺活量(tlc),最大呼气压力(pemax)。
library(ISwR)
data(cystfibr)
str(cystfibr)#查看数据结构类型
#分类变量因子化
cystfibr$sex <- factor(cystfibr$sex,labels = c("male","female"))
因为结局指标肺功能的参数较多,现选择其中fev1作为结局的分析指标。
cor(cystfibr[,6:10])
可以发现肺功能指标之间存在较高的相关性,因此选择其中一个作为分析。
fit1 <- lm(fev1 ~ age + sex + height + weight + bmp, data = cystfibr)
#线性拟合
summary(fit1)
多重线性的分析结果可以F统计量=3.992,p=0.012<0.05,说明回归方程的假设是有统计学差异的。在回归系数的假设检验中,只有性别的回归系数有统计学差异。female表示女性与男性相比,fev1低10.04。
自变量的筛选和最优模型:
一、自变量筛选的统计学标准:
1.残差平方和()缩小或决定系数增大 若某一自变量被引入模型后使残差平方和缩小很多或决定系数增大很多,说明该变量对Y的作用很大,可以被引入;反之,说明其中对y的作用很小,不被引入。
2. 残差的均方(MS残差)缩小或校正决定系数增大 。虽然自变量的增加可使分子位置的残差平方和减小,但同时分母位置上的自由度(n-p-1)也将减小,如果增加的自变量无统计学意义,分子中残差平方和的减少不多,而分母中自由度却减小很多,从而残差的均方并不减少。要使残差的均方缩小,必须是引入模型中的自变量对y的影响较大,使得残差平方和减少很多。
3. 统计量缩小
表示p个自变量做回归时的残差平方和,表示用全部自变量作回归时的残差均方。标准:选择较小,并且的值接近未知参数个数的模型作为较优模型。使统计量较小的标准符合了统计建模的原则:一方面入选的自变量不能太多,以使方程易于理解和解释,并且降低工作量及研究经费;另一方面自变量不能太少,以保证一定的估计和预测精度。
4. 赤池信息量准则AIC
AIC越小,说明模型用较少的参数获得了足够的拟合优度。
二、多重共线性
多重共线性是指:自变量之间由于存在相关性,而使得模型估计失真或难以估计准确。
方差膨胀因子(VIF):表征自变量之间的共线性程度。
容忍度:是方差膨胀因子的倒数,如果容忍度小于0.25,则可能存在共线性问题;如果容忍度小于0.10,则提示共线性问题严重。
案例中的height(身高)、体重和BMI之间是相关的。查看相关系数
cor(cystfibr[,3:5])
变量age对应的方差膨胀因子VIF
#比如age对应的VIF
lm.age <- summary(lm(age~sex+height+weight+bmp,data=cystfibr))
#计算VIF
VIF.age <- 1/(1-lm.age$r.squared);VIF.age
当VIF>5时,此时>80%时可以认为存在多重共线性,此时用最小二乘法计算的回归系数是不准确的。
car包中的vif()函数可以快速计算所有变量对应的VIF值
library(car)
vif(fit1)
解决多重共线性问题的方法:
(1)剔除造成共线性的自变量,重新建立模型;
(2)采取主成分分析法,将一组具有共线性的自变量合并成少数不相关的变量;
(3)采用逐步回归法,限制有较强相关性的自变量同时进入方程
自变量筛选常用的算法:
- 前进法:自变量由少到多,一个一个引入方程。将部分回归平方和最大且能使F检验拒绝H0者入选为第一个自变量;规定一个界值,接着将余下的变量中部分回归平方和最大,并使F检验拒绝H0者入选为第二个自变量,如此不断引入新的自变量,直到不能拒绝H0为止。
- 后退法:自变量由多到少,一个一个从方程中剔除。首先对全部候选变量进行总的回归,每次剔除一个部分回归平方和最小,而使F检验不能拒绝H0者,直到不能再剔除时为止。
- 逐步法:将上述两种法结合起来,在向前引入的每一步之后,都要考虑从已引入方程的变量中剔除相形见绌者。事先规定两个界值和(>),当方程外侯选变量中部分回归平方和最大者F值大于等于时,引入相应的变量;当方程内变量中部分回归平方和最小者F值小于等于时,剔除相应的变量。如此引入和剔除交替进行,直到方程外无可引入的变量,而方程也无可剔除的变量时为止。
- 最优子集回归法:对于p个自变量的线性回归问题,所有可能的自变量子集作回归方程,共有()个。根据某种变量的选择准则,通过比较各子集符合准则的程度,从中选择出一个或几个最优的回归子集。仅适合于自变量个数不多的情况。
函数drop1( )可以从包含所有自变量的模型中手动一次剔除一个变量以进行逐步回归。。依据AIC准则,在较少的参数情况下实现足够的拟合度
drop1(fit1)
结果说明:在不踢除的任何自变量,模型AIC值为113.81,剔除age自变量,模型AIC为111.83,以此类推。比较所有的AIC值可知,需要剔除变量age。
另外可以通过设置drop1函数中参数test得到似然比检验或F检验的结果,
drop1(fit1,test = "F")
根据结果可以看到提出sex后,p有统计学差异,其余变量剔除没有统计学差异,age对应的p值最大,所以可以考虑先剔除age,再次使用drop1()判断哪一个变量需要从模型中剔除
函数step()可以根据AIC值进行逐步回归自动选择最优模型,其中参数direction可以设置为默认的both(逐步法)、forward(向前法)、backward(向后法)
fit2 <- step(fit1)
最后生成只包含sex和bmp的指标时模型AIC最小。
summary(fit2)
没有剔除之前的决定系数为0.5123,只保留sex和bmp的决定系数为0.507,总体的决定系数相差不大,但调整后的决定系数明显提高,回归系数的检验p都具有统计学差异。
函数confint()计算回归系数的置信区间:
confint(fit2)
回归模型的假设检验:
上述的t检验只表明回归系数与0的差异有无统计学意义,要想检验变量对于模型有无统计学意义,需要进行F检验的结论,这在自变量是多个水平的分类变量时尤为必要。
anova(fit2)
三、哑变量设置
多重线性回归分析中的自变量可以是连续型的变量,也可以是二分类变量,但不能把无序多分类变量直接纳入模型。必须先将无序多分类变量变换成为多个二分类变量之后,才能将她们引入回归模型。若某个无序多分类变量有k各可能的类别,则可用(k-1)个二分类变量而取而代之,这个过程称为“哑元化”,得到的(k-1)个二分类变量称为“哑变量”。
四、交互效应
具体判断有无交互效应可以参考简单线性回归中的分层线性回归。
五、回归诊断
使用gvlma包中的gvlma( )函数对模型进行综合检测
#install.packages("gvlma")
library(gvlma)
gvlma(fit2)
global stat及其他检验都大于0.05,说明满足回归条件。如果有p>0.05,则用简单线性回归中提到的残差分析几种方式来判断哪些假设没有被满足。
第二种方法:残差图
res <- fit2$residuals
hist(res)#样本量较小难以评价
qqnorm(res)#QQ图
qqline(res)
shapiro.test(res)#正态性检验
plot(fitted(fit2),res,xlab = "Fitted values",pch=15,col="blue") #绘制残差图
abline(h=0,col="red")
最终的模型可以用epiDisplay包中的regress.display()汇总输出
regress.display(fit2)
write.csv(regress.display(fit2)$table,file = "线性回归练习模型输出版.csv")