我使用命令“ 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)


那么输出将只有一个图(第二个将覆盖第一个)。我想将这两个图彼此相邻。

最佳答案

由于某些原因,类npregression对象的plot方法必须覆盖您的par设置。最终它调用了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")

09-28 03:50