如何制作R在使用plot(lmmodel)时产生的Residuals vs leverage图?

时间:2017-09-19 08:32:22

标签: r ggplot2 linear-regression

我想重现你输入时R所做的第四个情节:

plot(lm(mpg ~ wt, mtcars))

我发现这个图对检查有影响力的数据点很有用,但更多我只是想知道如何用ggplot来做。我做的是这个:

  • 制作具有高影响力的数据点的子集。
  • 为这些点添加额外的geom。
  • 为超过3SD的残差添加虚线水平线+用于大于2 *平均杠杆的虚线vils(两者都不在我尝试重现的情节中,我可能稍后再拿出它)。

与R的情节相比,我想念的是:

  • 如何绘制Cook的距离截止线(如R线所示)?
  • 如何绘制rownumber(这里是carnames)?

我的代码如下:

mtcars$cooks.distance <- cooks.distance(lm(mpg ~ wt, mtcars))
mtcars$leverage <- hatvalues(lm(mpg ~ wt, mtcars))
mtcars$residuals.standard <- rstandard(lm(mpg ~ wt, mtcars))

influence <- mtcars[(mtcars$cooks.distance>0.05 & mtcars$leverage > 2*mean(mtcars$leverage)),]
ggplot(mtcars, aes(x = leverage, y = residuals.standard)) +
  geom_hline(yintercept = 3, linetype = 'dotted') +
  geom_vline(xintercept = 2* mean(mtcars$leverage), linetype = 'dotted') +
  geom_point(alpha = 0.2) +
  geom_point(data = influence, aes(x = leverage, y = residuals.standard), color = 'orange')

1 个答案:

答案 0 :(得分:1)

好吧,我无法回答你的所有问题,但我会尝试。

1)对于行号,您必须在数据集中创建一个单独的变量,其中包含每个数据点的标签。在这种情况下,mtcars$model <- rownames(mtcars)。然后使用geom_text(见下文)。

2)对于表示拟合的平滑线,请使用geom_smooth

ggplot(mtcars, aes(x = leverage, y = residuals.standard)) +
  geom_hline(yintercept = 3, linetype = 'dotted') +
  geom_vline(xintercept = 2* mean(mtcars$leverage), linetype = 'dotted') +
  geom_point(alpha = 0.2) +
  geom_point(data = influence, aes(x = leverage, y = residuals.standard), color = 'orange') +
  geom_smooth(se=F, span=0.6) +
  geom_text(aes(label=ifelse(residuals.standard > 2, model, "")), cex=3, hjust=1.1)

3)库克的距离截止线 - 我不知道这条线的含义。如果您想绘制其他数据,可以提供第二个数据框(让我们说cook_dxy)作为data参数。相应的几何。你已经在geom_point中做了类似的事情。这看起来像这样:

ggplot(mtcars) + ... + ... + 
  geom_line(aes(x=x, y=y), col="red", lty="dashed", data=cook_d)