回归诊断的改进方法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

  • car中的函数

相比于R基础提供的评价模型拟合情况,car包中提供了大量函数,大大增强了拟合和评价回归模型的能力

函数     目的
qqplot()     分位数比较图
durbinWatsonTest() 对误差自相关性做Durbin-Watson检验
crPlots()     成分与残差图    
ncvTest()     对非恒定的误差方差做得分检验
spreadLevelPlot()         分散水平检验
outlierTest()         Bonferroni离群点检验
avPlots()     添加的变量图形
inluencePlot()     回归影响图
scatterplot()     增强的散点图    
scatterplotMatrix()     增强的散点图矩阵
vif()     方差膨胀因子

 

  • 正态性 qqPlot()

与基础包中的plot()函数相比,qqPlot()函数提供了更为精确的正态假设检验方法,它画出了在n-p-1个自由度的 t 分布下的 学生化残差(studentized residual,也称学生化删除残差或折叠化残差)图形。其中 n  是样本大小,p 是回归参数的数目(包括截距项)

> library(car)
> states <- as.data.frame(state.x77[,c("Murder", "Population",
+                                      "Illiteracy", "Income", "Frost")])
> fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)
> qqPlot(fit, labels=row.names(states), id.method="identify",
+        simulate=TRUE, main="Q-Q Plot")

id.method = "identify"选项能够交互式绘图--待图形绘制后,用鼠标单击图形内的点,将会标注函数中labels选项的设定值,敲击 Esc键,从那个图形下拉菜单中选择Stop,或者在图形上右击,都将关门闭这种交互模式。

simulate = TRUE 时,95%的置信区间将会用参数自助法

回归诊断的改进方法_第1张图片

 

  •  residplot()

residplot()函数生成学生化残差柱状图(即直方图),并添加 正态曲线、核密度曲线和轴须图

通过这种方法来实现可视化,观察残差的正态性

residplot <- function(fit, nbreaks=10) {
  z <- rstudent(fit)
  hist(z, breaks=nbreaks, freq=FALSE,
       xlab="Studentized Residual",
       main="Distribution of Errors")
  rug(jitter(z), col="brown")
  curve(dnorm(x, mean=mean(z), sd=sd(z)),
        add=TRUE, col="blue", lwd=2)
  lines(density(z)$x, density(z)$y,
        col="red", lwd=2, lty=2)
  legend("topright",
         legend = c( "Normal Curve", "Kernel Density Curve"),
         lty=1:2, col=c("blue","red"), cex=.7)
}

residplot(fit)

回归诊断的改进方法_第2张图片

 

  • 线性

通过 成分残差图(compoet plus residual plot),也称 偏残差图(partial residual plot),查看出自变量与因变量之间是否呈非线性关系,也可以看看是否有不同于已设定线性模型的系统偏差,图形可以用car包中crplot()函数绘制

回归诊断的改进方法_第3张图片

#如下图
library(car)
crPlots(fit)

若图形存在非线性,则说明对预测变量的函数形式建模不够充分,那么就需要添加一些曲线成分,比如多项式、或对一个或多个变量进行变换(如log(x)代替 x),或用其他回归变体形式而是不线性回归

回归诊断的改进方法_第4张图片

  • 同方差性ncvtest()

car包提供了两个有用的函数,可以判断误差方差是否恒定。 ncvtest()函数生成一个计分检验,零假设(原假设)误差方差不变,备择假设为误差方差随着拟合值水平的变化而变化,若检验显著,则说明存在异方差性(误差方差不恒定)

  spreadLevelPlot()函数创建一个添加了最佳拟合曲线的散点图,展示标准化残差绝对值与拟合值的关系,代码如下

#检验同方差性
#如下图
#H0为方差恒定  不显著
> library(car)
> ncvTest(fit)
Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 1.746514    Df = 1     p = 0.1863156   #显著水平为 α = 0.05,p > 0.05表示 α错误(H0)为真,但是我们却拒绝了)发生的概率大于5%,所以接受H0,计分检验不显著 
> spreadLevelPlot(fit)

Suggested power transformation:  1.209626 

可以得到计分检验不显著(p = 0.19),说明满足方差不变假设。

也可以可以通过分布水平图看到这一点,其中点在水平的最佳拟合曲线周围呈水平随机分布。若违反了该假设,你将会看到一个非水平曲线

代码结果建议幂次变换(suggested power transformation)的含义是,经过 07075522_i4LU.png 次幂( 07075522_p6SY.png)变换,非恒定的误差方差将会平稳。例如,若图形显示了非水平趋势,建议幂次转换为0.5,在回归等式中用  07075522_TjDq.png 代替 Y,可能会使模型那个满足同方差性,若建议幂次为0,则使用对数变换,对于当前例子,异方差习惯很不明显,因此建议幂次接近1(不需要进行变换)

回归诊断的改进方法_第5张图片

转载于:https://my.oschina.net/u/1785519/blog/1563516

你可能感兴趣的:(回归诊断的改进方法)