R - 使用npreg()绘制非参数回归的结果忽略par(mfrow = c(1,2))

时间:2011-08-12 18:28:23

标签: r graph regression

我使用命令“npreg”运行了20个非参数回归并保存了结果。现在,我想绘制(使用样式带和方法渐近)这些结果为1个多图,例如每行3个图(3个输出)。 我尝试过使用par(mfrow = c(,))或split.screen(),但它似乎不适合这些类型的图形,因为它总是覆盖上一个图形。

换句话说,如果我跑:

w1 <- lm(w ~ p1)
par(mfrow = c(2, 2))
plot(w1)

然后我将在一个图形设备中获得4个图形。但如果我跑

w1 <- npreg(w ~ p1)
w2 <- npreg(w ~ p2)
par(mfrow = c(1, 2))` 
plot(w1)
plot(w2)

然后输出将只有一个图形(第二个覆盖第一个图形)。我希望这两个图表彼此相邻。

1 个答案:

答案 0 :(得分:2)

由于某种原因,类npregression对象的绘图方法必须覆盖您的标准设置。最终它会调用npplot(),但是我无法遵循一系列中间步骤。

但是,一般情况下,我不认为您希望绘图函数在没有明显原因(或不一致)的情况下任意覆盖像mfrow之类的简单命令,所以这对我来说似乎有些错误。

我建议通过电子邮件发送软件包维护者并询问为什么以下代码不会产生相同的输出。你会期望在一台设备上有4个地块。

以下是包中的两个示例(第一个略微修改过的),演示了两种不同的行为:

4个单独的地块

data(Italy)
bw <- npregbw(formula=gdp~ordered(year), data = Italy)
model <- npreg(bws = bw, gradients = TRUE)
par(mfrow = c(2, 2))
plot(model)
points(ordered(Italy$year), Italy$gdp, cex=.2, col="red")
plot(1:10)
plot(1:5)
plot(1)

一个设备中的4个绘图

data(cps71)
model.par <- lm(logwage ~ age + I(age^2), data = cps71)
model.np <- npreg(logwage ~ age,
                  regtype = "ll",
                  bwmethod = "cv.aic",
                  gradients = TRUE,
                  data = cps71)
par(mfrow=c(2,2))

plot(cps71$age,cps71$logwage,xlab="age",ylab="log(wage)",cex=.1)
lines(cps71$age,fitted(model.np),lty=1,col="blue")
lines(cps71$age,fitted(model.par),lty=2,col="red")

plot(cps71$age,gradients(model.np),xlab="age",ylab="gradient",type="l",lty=1,col="blue")
lines(cps71$age,coef(model.par)[2]+2*cps71$age*coef(model.par)[3],lty=2,col="red")

plot(cps71$age,fitted(model.np),xlab="age",ylab="log(wage)",ylim=c(min(fitted(model.np)-2*model.np$merr),max(fitted(model.np)+2*model.np$merr)),type="l")
lines(cps71$age,fitted(model.np)+2*model.np$merr,lty=2,col="red")
lines(cps71$age,fitted(model.np)-2*model.np$merr,lty=2,col="red")

plot(cps71$age,gradients(model.np),xlab="age",ylab="gradient",ylim=c(min(gradients(model.np)-2*model.np$gerr),max(gradients(model.np)+2*model.np$gerr)),type="l",lty=1,col="blue")
lines(cps71$age,gradients(model.np)+2*model.np$gerr,lty=2,col="red")
lines(cps71$age,gradients(model.np)-2*model.np$gerr,lty=2,col="red")