参考资料:R语言实战【第2版】
如果在回归诊断中发现了问题,我们该如何做?有四种方法可以处理违背回归假设的问题:
①删除观测点;
②变量变换;
③添加或删除变量;
④使用其他回归方法。
1、删除观测点
删除离群点通常可以提高数据集对正态假设的拟合度,而强影响点会干扰结果,通常也会被删除。删除最大的离群点或强影响点后,模型需要重新你和。若离群点或强影响点仍然存在,重复以上过程知道获得比较满意的拟合。
对于删除观测点,我们们要慎之又慎。如果是因为数据记录错误,或是没有遵守规程,或是受试对象误解了指导说明,这种情况下可以判断为离群点,删除它们是十分合理的。
不过在其他情况下,所有收集数据中的异常点可能是最有趣的东西。发掘为何该观测点不同于其他店,有助于我们更深刻地理解研究组,或者发现其他我们可能没有想过的问题。
2、变量变换
当模型不符合正态性、线性或者同方差假设时,一个或多个变量的变换通常可以改善或调整模型效果。变换多用代替Y,λ的常见值和解释如下:
λ | -2 | -1 | -0.5 | 0 | 0.5 | 1 | 2 |
变换 | 无 |
若Y是比例数据,通常使用logit变换:ln(Y/(1-Y))
当模型违反正态假设时,通常可以对响应变量尝试某种变换。car包中的powerTransform()函数通过λ的最大似然估计来正态化变量。如下:
# 加载car包
library(car)
# 获取数据
states<-as.data.frame(state.x77[,c("Murder","Population",
"Illiteracy","Income","Frost")])
# 拟合多元线性模型
fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
# 查看正态变换建议
summary(powerTransform(states$Murder))
我们可以用murder^0.6来正态化变量murder。由于0.6很接近0.5,我们可以尝试用平方根变换来提高模型正态性的符合程度。但本例中,λ=1的假设是无法拒绝的(p=0.145),因此没有足够的证据表明本例需要进行变量变换。
当违反了线性假设时,对预测变量进行变换常常会比较有用。car包中的boxTidwell()函数通过获得预测变量幂数的最大似然估计来改善线性关系。如下:
# 加载car包
library(car)
boxTidwell(Murder~Population+Illiteracy,data=states)
结果显示,使用变换Population^0.87和Illiteracy^1.36能够大大改善线性关系。但是对于这个量变量的计分检验的统计结果均不显著Population( p=0.75)和Illiteracy( p=0.54),说明不需要进行变换。
3、增删变量
改变模型的变量会影响模型的拟合度。有时,添加一个重要变量可以解决我们许多问题,删除一个冗余变量也能达到同样的效果。
删除变量在处理多重共线性时是一种非常重要的方法。如果我们仅仅是做预测,那么多重共线性并不构成问题。但如果还要对每个预测变量进行解释,那么就必须解决这个问题。最常见的方法是删除某个存在多重共线性的变量。另外一个可用的方法是岭回归。
4、尝试其他方法
处理多重共线性的一种方法是拟合一种不同类型的模型(本例中是岭回归)。
如果存在离群点和/或强影响点,可以使用稳健回归模型替代OLS回归。
如果违背了正态性假设,可以使用非参数回归模型。
如果存在显著的非线性,能尝试非线性回归模型。
如果违背了误差独立性假设,还能用那些专门研究误差结构的模型,比如时间序列模型或者多层
次回归模型。
最后,我们还能转向广泛应用的广义线性模型,它能适用于许多OLS回归假设不成立的情况。