用npreg()绘制非参数回归结果时忽略par(mfrow = c(1, 2))。

3
我用 "npreg" 命令运行了 20 个非参数回归并保存了结果。现在,我想将这些结果绘制到一个多图中(使用带有样式带和渐近方法),例如每行 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)

那么输出将只有一个图形(第二个将覆盖第一个)。我想让这两个图形并排显示。


这正是par(mfrow)的作用...但我可能不理解您试图实现什么以及为什么mfrow对您无效。 - Tomas
如果我表达不够清晰,我很抱歉。我已经在原问题中添加了R代码,这可能显示出我绘制输出时的错误。 - jiri jansa
1个回答

2

npreg对象的plot方法似乎会覆盖您的par设置,但我无法跟踪其之后的一长串中间步骤。最终它调用npplot(),但总的来说,我认为您不希望绘图函数无缘无故地覆盖像mfrow这样简单的命令(或者不一致),所以这似乎是一个错误。

建议您给该软件包的维护人员发送电子邮件,并询问为什么以下代码没有产生相同的输出。您期望在一个设备上看到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")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接