《R语言实战》第二版碎碎念之二:回归与诊断

1、最小二乘(OLS)回归法。

数据满足统计假设:

正态性,对于固定的自变量值,因变量值成正太分布

独立性,Yi(因变量)之间相互独立

线性,因变量与自变量之间为线性相关

同方差性,因变量的方差不随自变量的水平不同而变化。也可称作不变方差。

做多元线性回归前,最好先用car包里的spm()函数查看一下变量的相关性。

library(car)

scatterplotMatrix(df,spread=FALSE,smoother.args=list(lty=2),main="Scatter Plot Matrix")

Smoother.args参数是添加平滑拟合曲线。

2、有交互项的多元线性回归

fit=lm(y~x1+x2+x3+x3:x4,data=df)

通过effects包中的effect()函数,用图形展示交互项的结果

plot(effect(term,mod,,xlevels),multiline=TRUE)

library(effects)

plot(effect("x3:x4",fit,,list(x4=c(2,4,6,7))),multiline=TRUE)

3、回归诊断

(1)confit(fit)可以初步看出模型的问题,通过plot(fit),检验正态性、独立性,线性和同方差性。

car包提供了大量的函数评价回归模型。

正态性:qqPlot()提供了更为精确的正太假设检验方法,画出在n-p-1个自由度的t分布下的学生化残差(studentized residual),n是样本大小,p是回归参数的数目(包括截距项)。

qqPlot(fit,labels=row.names(df),id.method="identify",simulate=TRUE,main="Q-Q Plot")

误差的独立性:durbinWatsonTest(fit),做Durbing-Watson检验,p大于0.05说明自相关性,误差项之间独立,滞后项(lag=1)表明数据集中每个数据都是与其后一个数据进行比较的。

线性:crPlots(),通过成分残差图(component plus residual plot)也称为偏残差图(partial residual plot)

同方差性:ncvTest(),零假设为误差方差不变。如:p=0.19,说明计分检验不显著,说明满足方差不变假设。

spreadLevelPlot(fit)

Suggested power transformation:1.2,代码结果建议幂次变换的含义是经过p次幂(Y的p次方)变换,非恒定的误差方差将会平稳。

多重共线性:vif()大于4一般表明存在多重共线性问题。

(2)异常观测值

离群点:正的残差说明模型低估了响应值,负的残差说明高估了响应值,粗糙的判断准则是标准化残差大于2或小于-2可能是离群点。car包中的outlierTest()函数可以检测离群点

高杠杆值点:通过帽子统计量(hat statistic)判断,对于给定的数据集,帽子均值为p/n,其中p是模型估计的参数数目(包括截距项),n是样本量。若观测点的帽子值大于帽子均值的2或3倍,可以认定为高杠杆值点。

Hat.plot<-function(fit){

p<-length(coefficients(fit))

n<-length(fitted(fit))

Plot(hatvalues(fit),main="Index Plot of Hat Values")

Abline(h=c(2,3)*p/n,col="red",lty=2)

Identify(1:n,hatvalues(fit),names(hatvalues(fit))

}

Hat.plot(fit)

高杠杆值点可能是强影响点,也可能不是,主要看他们是否是离群点。

强影响点:Cook距离或D统计量,D值大于4/(n-k-1),表明是强影响点,其中n为样本量大小,k是预测变量数目。作者认为以1为分割点,比4/(n-k-1)更具有一般性。

利用car包里的influencePlot()函数可以将离群点、杠杆值、强影响点信息整合到一幅图形中。纵坐标(studentized Residuals)超过+2或小于-2被认为是离群点,水平轴(hat values)超过0.2或0.3有高杠杆值,圆圈大小与影响成比例,圆圈很大的点可能是强影响点。

(3)如果发现违背回归假设的条件,如何处理

a、删除观测点:离群点和强影响点会干扰结果,可以删除,但需谨慎,异常点很有可能就是最有趣的东西。

b、变量变换:模型不符合正态性、线性或同方差性假设时,一个或多个变量的变换有可能改善或调整模型效果,变换多用Y的λ次方替代Y,λ可以是-2、-1、-0.5、0(log)、0.5、2等。当模型违反正态假设时,通常可以对响应变量尝试变换。car包中的powerTransform()函数通过λ的最大似然估计来正态化变量x的λ次方。Summary(powerTransform(df$data)),会给出Est.Power,这个数值就是推荐的x的λ次方中的λ。当违反了线性假设时,对预测变量进行变换常常会比较有用。car包中的boxTidwell()函数通过获得预测变量幂数的最大似然估计来改善线性关系。

c、添加或删除变量:删除存在多重共线性的变量(sqrt(vif)>2),或者采用岭回归——多元回归的变体,专门用来处理多重共线性问题。

d、使用其他的回归方法:存在离群点或强影响点,使用稳健回归模型替代OLS回归。违背正态性假设,使用非参数回归模型。存在显著的非线性,尝试非线性模型。

(4)选择最佳的回归模型:预测精度与简洁度的调和问题。

a、模型比较:用anova()函数比较两个嵌套模型的拟合优度。所谓的嵌套模型,即它的一些项完全包含在另一个模型中。

anova(fit2,fit1),如果检验不显著(p较大),说明不需要多的变量,可以选择变量更少的那个模型。AIC赤池信息准则也可以用来比较模型,它考虑了模型的统计拟合度以及用来拟合的参数数目。AIC值较小的模型要优先选择,它说明模型用较少的参数获得了足够的拟合度。注意,anova需要嵌套模型才能比较,AIC不需要嵌套模型。

b、变量选择:逐步回归法和全子集回归。这本书更推荐全子集回归,而那本著名的《An Introduction to Statistical Learning_with Applications in R》则推荐使用逐步回归法。

MASS包中的stepAIC()函数可以实现逐步回归模型(向前、向后、向前向后),依据的是精确AIC准则。这本书作者不推荐逐步回归法的主要理由是,虽然它可以找到一个好的模型,但是不能保证模型就是最佳模型,因为不是每一个可能的模型都被评价了。《An Introduction to Statistical Learning_with Applications in R》作者推荐逐步回归的理由是全子集回归太慢,如果变量很多,可能会难以忍受。

全子集回归可用leaps包中的regsubsets()函数实现,通过R平方、调整R平方、Mallows Cp统计量等准则来选择最佳模型。R平方的含义是预测变量解释响应变量的程度,调整R平方与之类似,但考虑了模型的参数数目。R平方总是会随着变量数目的增加而增加。当与样本量相比,预测变量数目很大时,容易导致过拟合。R平方很可能会丢失数据的偶然变异信息,而调整R平方则提供了更为真实的R平方估计。另外Mallows Cp统计量也可以作为逐步回归的判停规则。广泛研究表明,对于一个好的模型,他的Cp统计量非常接近于模型的参数数目(包括截距项)。

(5)交叉验证

通过交叉验证法,可以评价回归方程的泛化能力。在k重交叉验证中,样本被分为k个子样本,轮流将k-1个子样本组合作为训练集,另外1个子样本作为保留集,这样会获得k个预测方程,得到k个保留样本的预测表现结果,然后求其平均值(当n是观测总数目,且k为n时,该方法又称为刀切法,jackknifing)。bootstrap包中的crossval()函数可以实现k重交叉验证。

4、方差分析与功效分析

一直没搞懂,暂时跳过。。。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注