- 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%的置信区间将会用参数自助法
- 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)
- 线性
通过 成分残差图(compoet plus residual plot),也称 偏残差图(partial residual plot),查看出自变量与因变量之间是否呈非线性关系,也可以看看是否有不同于已设定线性模型的系统偏差,图形可以用car包中crplot()函数绘制
#如下图
library(car)
crPlots(fit)
若图形存在非线性,则说明对预测变量的函数形式建模不够充分,那么就需要添加一些曲线成分,比如多项式、或对一个或多个变量进行变换(如log(x)代替 x),或用其他回归变体形式而是不线性回归
- 同方差性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)的含义是,经过 次幂(
)变换,非恒定的误差方差将会平稳。例如,若图形显示了非水平趋势,建议幂次转换为0.5,在回归等式中用
代替 Y,可能会使模型那个满足同方差性,若建议幂次为0,则使用对数变换,对于当前例子,异方差习惯很不明显,因此建议幂次接近1(不需要进行变换)