回归诊断的改进方法

  • car中的函数

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

函数     目的
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,或者在图形上右击,都将关门闭这种交互模式。spa

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

 

  •  residplot()

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

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

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)

 

  • 线性

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

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

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

  • 同方差性ncvtest()

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

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

#检验同方差性
#以下图
#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)的含义是,通过  次幂( )变换,非恒定的偏差方差将会平稳。例如,若图形显示了非水平趋势,建议幂次转换为0.5,在回归等式中用   代替 Y,可能会使模型那个知足同方差性,若建议幂次为0,则使用对数变换,对于当前例子,异方差习惯很不明显,所以建议幂次接近1(不须要进行变换)

相关文章
相关标签/搜索