R语言——回归分析4

参考资料:R试验设计与数据分析——基于R语言应用

回归诊断

        对于多个自变量与一个因变量的多元线性回归分析,可以利用逐步回归分析的方法来选择进入回归模型对因变量有显著影响的自变量。但是,这只是从选择自变量的角度来研究问题,没有对模型的其他特性做进一步的分析,也没有对数据本身是否存在异常进行分析。

        实际上,使用回归分析,需要数据满足若干基本条件:

①数据误差要满足正态分布;

②数据的误差之间应相互独立:关于独立性的假设,往往需要从数据的获得过程进行验证;

③方差齐性,要求数据误差项有同方差的特征;

④自变量之间是否存在高度相关,即是否有多重共线性问题。

        除了这些假设的前提条件,还需要考虑以下几个问题:

①所选择的模型是否合适?

②数据中是否存在异常样本?

③回归模型是否对某些数据过度依赖?对模型造成过度依赖的数据往往是离群点、高杠杆点和强影响点。

1、正态分析

        我们可以通过绘制残差图来分析数据正态性。R语言的car扩展包中的qqPlot()函数体提供了绘制残差分布的Q-Q图方法。


x1<-c(5.68,3.79,6.02,4.85,4.60,6.05,4.90,7.08,3.85,4.65,
      4.59,4.29,7.97,5.84,6.19,6.13,5.71,6.40,6.06,5.09,
      6.13,5.78,5.43,6.50,7.98,11.54,5.84)
x2<-c(1.90,1.64,3.56,1.07,2.32,0.64,8.50,3.00,2.11,0.63,
      1.97,1.97,1.93,0.92,1.18,2.06,1.78,2.40,3.67,1.03,
      1.71,3.36,1.13,6.21,7.92,10.89,0.92)
x3<-c(4.53,7.32,6.95,5.88,4.05,1.42,12.60,6.75,16.28,6.59,
      3.61,6.61,7.57,8.61,1.42,10.35,8.53,4.53,12.79,2.53,
      5.28,2.96,4.31,3.47,3.37,1.20,8.61)
x4<-c(8.20,6.90,10.80,8.30,7.50,13.60,8.50,11.50,7.90,7.10,
      8.70,7.80,9.90,6.40,6.90,10.50,8.00,10.30,7.10,8.90,
      9.90,8.00,11.30,12.30,9.80,10.50,6.40)
y<-c(11.2,8.8,12.3,11.6,13.4,18.3,11.1,12.1,9.6,8.4,
     9.3,10.6,8.4,13.3,9.6,10.9,10.1,14.8,9.1,10.8,
     10.2,13.6,14.9,16.0,13.2,20.0,13.3)
exam.data<-data.frame(x1,x2,x3,x4,y)
head(exam.data)
# 多元线性回归拟合
lm.model<-lm(y~.,data=exam.data)
# 加载car包
library(car)
# 绘制学生化残差Q-Q图
qqPlot(lm.model,labels=FALSE,simulate=TRUE,main="Q-Q Plot")

        上图绘制了在n-p-1个自由度的t分布下的血生化残差图形。在图形中,所有的点都应在离直线很近,并且都落在置信区间内,才表明正态性假设条件得以满足。在本例中,有少量数据点分布在置信区间外,表明数据的正态性条件可能没有满足。

2、误差的独立性分析

        因变量值是否相互独立,可以从收集数据的过程加以判断。R的car包中的durbinWatsonTest()函数可以进行Durbin-Watson检验,能够检验误差之间的相关性。

# 加载car包
library(car)
# 误差独立性分析
durbinWatsonTest(lm.model)

        结果显示,p>0.05,没有自相关性,说明误差想之间是独立的。

3、方差齐性分析

        R的car包中有两个函数,可以判断误差的方差是否具有齐性。

ncvTest()函数提供了一个计分检验,该检验若显著,说明方差齐性不满足,即误差的方差不恒定。

spreadLevelPlot()函数绘制标准化残差绝对值与拟合值的散点图,同时田间一条最佳拟合曲线,如果满足方差齐性的假设拟合曲线为水平曲线,同时点在拟合曲线周围呈水平随机分布

# 方差齐性分析
ncvTest(lm.model)
spreadLevelPlot(lm.model)

        计分检验的p值为0.94,说明满足方差齐性的假设条件。 

        spreadLevelPlot()函数的运行结果还会给出幂次转换的建议,若建议幂次为0,则使用对数转换。

4、线性分析

        通过绘制成分残差图,观察因变量与自变量之间是否呈非线性关系,也可判断是否存在不同于线性模型假设的系统偏差。成分残差图可以通过car包中的crPlots()函数来绘制。

# 加载car包
library(car)
# 绘制成分残差图
crPlots(lm.model)

        如果图形存在非线性,通过线性回归分析所构建的模型可能不会充分体现数据之间的关系,有必要在模型中添加一些曲线成分,比如多项式,或对一个或多个变量进行适当变换,在进行线性回归分析,也可以通过其他回归建模的方式,而不是线性回归模型。

        上图显示,因变量与自变量之间看起来比较符合线性假设,线性模型的形式应该是符合的。

5、共线性问题分析

        若某个偏回归系数的t检验通不过,可能是该系数相对应的自变量对因变量的影响不显著的原因,那么,可以将该自变量从回归模型中删除,在重新建立回归模型,或更换自变量。也可能是自变量之间有共线性,此时应设法降低共线性的影响。共线性是指在拟合多元线性回归模型时,自变量之间存在线性关系或近似线性关系。自变量之间的共线性或隐藏变量的显著性,增加参数估计的误差,同时获得的模型稳定性下降。因此,应该对自变量共线性问题进行判断。

        共线性问题可以用方差膨胀因子进行检测。方差膨胀因子(VIF)的平方根表示变量回归参数的置信区间能膨胀为与模型无关的预测变量的程度。一般情况下,VIF>4,就表明存在共线性问题。R的car包中vif()函数可以计算方差膨胀因子。

# 加载car包
library(car)
# 计算方差膨胀因子
vif(lm.model)

        本例显示,自变量之间不存在共线性问题。

6、线性回归模型的综合评估

        R的gvlma包中的gvlma()函数可以对线性回归模型进行综合评估,同时还提供峰度、偏度和方差齐性的评价。

install.packages("gvlma")
# 加载gvlma包
library(gvlma)
fit<-gvlma(lm.model)
summary(fit)

        对线性回归模型的综合评估结果(Global Stat)可看出,数据满足最小二乘法回归MX哦i给你所有的统计假设条件(p>0.05)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值