lm的默认诊断图的可能扩展(在R中和一般而言)?


11

我开始深入研究plot.lm函数,该函数给出了lm的六个图,它们是:

  1. 残差与拟合值的关系图
  2. sqrt(|残差|)对拟合值的比例位置图
  3. 普通QQ图,库克距离与行标签的图
  4. 残差与杠杆的关系图
  5. 库克距离与杠杆/(1-杠杆)的关系图

我想知道线性图还存在电流图的其他常见/有用扩展,以及它们如何在R中完成?(也欢迎链接到包装的文章)

因此,boxcox函数(来自{MASS})是另一个有用的诊断图的示例(这样的答案会很好),但是,我对R中lm的现有默认诊断图的变化/扩展感到好奇(尽管一般始终欢迎您对此主题发表其他评论)。

这是我的意思的一些简单示例:

#Some example code for all of us to refer to
set.seed(2542)
x1 <- rnorm(100)
x2 <- runif(100, -2,2)
eps <- rnorm(100,0,2)
y <- 1 + 2*x1 + 3*x2 + eps
y[1:4] <- 14 # adding some contaminated points
fit <- lm(y~x1+x2)

#plot(y~x1+x2)
#summary(fit)

绘制残差与每个潜在x的关系

plot(resid(fit)~x1); abline (h = 0)
plot(resid(fit)~x2); abline (h = 0)
# plot(resid(fit)~x1+x2) # you can also use this, but then you wouldn't be able to use the abline on any plot but the last one

向qpplot中添加0-1行(英语中怎么称呼这行?!),以便查看qqline偏离了多少

plot(fit, which = 2); abline(0,1, col = "green")

使用外部学生化残差绘制qq图

# plot(fit, which = 2); abline(0,1, col = "green") # The next command is just like this one
qqnorm(rstandard(fit), ylim = c(-2.2,4.2)); qqline(rstudent(fit), lty = 2) ;abline(0,1, col = "green")
qqnorm(rstudent(fit), ylim = c(-2.2,4.2)); qqline(rstudent(fit), lty = 2) ;abline(0,1, col = "green")
# We can note how the "bad" points are more extreme when using the rstudent

我本质上问了有关lmer对象的问题:stats.stackexchange.com/questions/17785/…,我希望还会有其他答案。
Michael Bishop

Answers:


17

软件包car具有很多有用的函数,用于线性和广义线性模型的诊断图。与普通R图相比,通常会使用其他信息进行增强。我建议您尝试example("<function>")以下功能以查看曲线图。Fox&Weisberg的第6章中详细介绍了所有情节。2011年。《应用回归的R伴侣》。第二版。

  • residualPlots() 绘制针对每个预测变量的皮尔逊残差(包括Lowess拟合的数值变量的散点图,因子的箱形图)
  • marginalModelPlots() 显示每个数字预测变量的响应变量散点图,包括Lowess拟合
  • avPlots() 显示偏回归图:对于每个预测变量,这是一个散点图,其中a)所有其他预测变量上的响应变量回归的残差相对b)预测变量相对于所有其他预测变量的回归残差
  • qqPlot() 包含置信度包络的分位数图
  • influenceIndexPlot() 在尖峰图中针对观察指数显示库克距离,帽子值,离群值测试的p值和学生化残差的每个值
  • influencePlot()为阻止帽子值学生化残差的气泡图,对应于Cook距离泡沫的大小,还看到dfbetaPlots()leveragePlots()
  • boxCox()在Box-Cox幂变换中显示变换参数的对数似然的配置文件λ
  • crPlots() 用于分量+残差图,其中的一个变体是CERES图(结合条件期望值和残差值),由 ceresPlots()
  • spreadLevelPlot() 用于评估非恒定误差方差,并针对拟合值显示绝对的学生残差
  • scatterplot() 提供了增强的散点图,包括沿轴的盒线图,用于双变量分布的置信椭圆和带有置信带的预测线
  • scatter3d()基于程序包rgl并显示交互式3D散点图,包括网状置信度椭球和预测平面,请确保运行example("scatter3d")

此外,bplot()从软件包中rms查看另一种方法来说明三个变量的共同分布。


1
(+1)这是一个非常好的概述,对我们所有人都非常有用!
chl

卡拉卡尔-这是一个不错的清单,谢谢!如果您觉得还好,我可能最终会在我的博客上重新发布(在更多人可能会添加他们的评论之后)
Tal Galili

@TalGalili当然,我很好。
caracal

4
您可以在此处查看其中一些示例:statmethods.net/stats/rdiagnostics.html
Michael Bishop

Caracal-再次感谢:) Michael-那是一个很好的链接。如果您想将其添加为答案(也许可以复制并粘贴一些未显示在ac骨答案上的相关地块)-我会很乐意投票……
Tal Galili

7

尽管我同意Fox的软件包值得采用,但该答案侧重于基本R中可用的内容,而不是外部软件包。

该函数influence()(或其包装器influence.measures())返回模型诊断所需的大部分信息,包括封顶的统计信息。正如钱伯斯(Chambers)和哈斯提(Hastie)的统计模型(Wadsworth&Brooks,1992)所述,它可以与结合使用summary.lm()。所谓的“白皮书”(第130-131页)中提供的示例之一允许计算标准化(DF的残差)和学生化(对SE的估计不同的残差)DFBETAS(残差的变化)。由SE缩放的系数(用于回归系数),DFFIT(当删除观察值时拟合值的变化)和DFFITS(相同,但存在单位差异)的度量没有太大困难。

根据您的示例,并定义以下对象:

lms <- summary(fit)
lmi <- influence(fit)
e <- residuals(fit)
s <- lms$sigma
xxi <- diag(lms$cov.unscaled)
si <- lmi$sigma
h <- lmi$hat
bi <- coef(fit) - coef(lmi)

我们可以如下计算上述数量:

std. residuals    e / (s * (1-h)^.5
stud. residuals   e / (si * (1-h)^.5
dfbetas           bi / (si %o% xxi^.5 
dffit             h * e / (1-h)
dffits            h^.5 * e / (si * (1-h))

(这是表4.1,第131页。)

Chambers和Hastie给出以下用于计算DFBETAS的S / R代码:

dfbetas <- function(fit, lms = summary(fit), lmi = lm.influence(fit)) {
  xxi <- diag(lms$cov.unscaled)
  si <- lmi$sigma
  bi <- coef(fit) - coef(lmi)
  bi / (si %o% xxi^0.5)
}

我为什么要提到这种方法?因为,首先,我发现从教学法的角度来看这很有趣(这是我在教学入门统计学课程时所使用的),因为它可以说明可以从R中拟合的拟合线性模型的输出中计算出什么(但是相同的与其他统计软件包一起使用)。其次,由于上述数量将以R中的简单向量或矩阵形式返回,这也意味着我们可以选择所需的图形设备-格子或ggplot-显示这些统计信息,或使用它们来增强现有的绘制(例如,通过改变点大小来突出显示散点图中的DFFITS值cex)。


非常有用的信息。自从您记录了统计逻辑以来,对R的关注并没有真正减损其价值,
DWin 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.