我想重现你输入时R所做的第四个情节:
plot(lm(mpg ~ wt, mtcars))
我发现这个图对检查有影响力的数据点很有用,但更多我只是想知道如何用ggplot来做。我做的是这个:
与R的情节相比,我想念的是:
我的代码如下:
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')
答案 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_d
有x
和y
)作为data
参数。相应的几何。你已经在geom_point
中做了类似的事情。这看起来像这样:
ggplot(mtcars) + ... + ... +
geom_line(aes(x=x, y=y), col="red", lty="dashed", data=cook_d)