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