使用`par()`生成回归对角线图时,`abline`不会添加行

时间:2016-11-27 15:46:01

标签: r plot regression linear-regression

我正在使用par()函数绘制一个多面板图,我想在第二个图中添加一行......

par(mfrow = c(2, 2))
hist(model$residuals) # model is some predefined lm object
plot((model$residuals + model$fitted.values) ~ model$fitted.values)
# Now I want to add a line (or points or curve) to only above plot like
abline(model$coef) # but this doesn't work
qqnorm(model$residuals) # some more plots, doesn't matter which

有任何帮助吗?我不打算使用ggplot()并希望保持简单。

2 个答案:

答案 0 :(得分:3)

问题不在于您对par的看法;这仅仅是因为您向abline提供了不适当的值。您多次更改了您的问题,表明您不知道应该为不同的几个图添加哪一行。我现在将澄清这一点,假设mod是您的拟合模型。

残差vs装配

with(mod, plot(fitted.values, residuals))
abline(h = 0)  ## residuals are centred, so we want a horizontal line

符合vs.响应

with(mod, plot(fitted.values + residuals, fitted.values))
abline(0, 1)  ## perfect fit has `fitted = response`, so we want line `y = x`

带回归线的散点图

v <- attr(mod$terms, "term.labels")  ## independent variable name
with(mod, plot(model[[v]], fitted.values + residuals))  ## scatter plot
abline(mod$coef)  ## or simply `abline(mod)`, for add regression curve

可重现的示例

set.seed(0)
xx <- rnorm(100)
yy <- 1.3 * xx - 0.2 + rnorm(100, sd = 0.5)
mod <- lm(yy ~ xx)
rm(xx, yy)

par(mfrow = c(2,2))

with(mod, plot(fitted.values, residuals))
abline(h = 0)

with(mod, plot(fitted.values + residuals, fitted.values))
abline(0, 1)

v <- attr(mod$terms, "term.labels")  ## independent variable name
with(mod, plot(model[[v]], fitted.values + residuals))  ## scatter plot
abline(mod$coef)  ## or simply `abline(mod)`

enter image description here

答案 1 :(得分:0)

正如@ZheyuanLi所说,很难确切地看到你想要的东西。您的一些问题似乎来自添加与现有情节限制不重叠的行。

model <- lm(Illiteracy~Income,data.frame(state.x77))
par(mfrow = c(2, 2))
hist(model$residuals)
plot(model$residuals ~ model$fitted.values)
plot((model$residuals+model$fitted.values) ~ model$fitted.values)

在绘图工作正常后立即添加元素:

abline(a=0,b=1)

如果您想返回并向前一帧添加元素,该怎么办?这有点困难。将绘图重置为第1行第2列:这样做将我们放在上一个绘图的绘图框内,它只是让我们准备好在这个子帧中绘制。

par(mfg=c(1,2))

我们想再次设置相同的情节框架:我们通过再次绘制相同的东西来作弊(确保相同的轴限制等等),但关闭图的所有方面({{ 1}}意味着我们不会删除之前的情节):

new=FALSE

enter image description here

基本图形实际上并非设计用于修改现有图形;如果你想做很多事情,你应该调查plot(model$residuals ~ model$fitted.values, type="n",new=FALSE,axes=FALSE,ann=FALSE) abline(h=0,col=2) 图形系统(构建gridlattice图形)。