【问题标题】:R - plotting results of nonparametric regression with npreg() ignores par(mfrow = c(1, 2))R - 使用 npreg() 绘制非参数回归的结果忽略 par(mfrow = c(1, 2))
【发布时间】:2011-10-26 01:23:09
【问题描述】:

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

那么输出将只有一个图(第二个覆盖第一个)。我想把这两张图放在一起。

【问题讨论】:

  • 这正是 par(mfrow) 的用途......但我可能不明白你想要实现什么以及为什么 mfrow 不适合你。
  • 很抱歉,如果我不够清楚,我已在原始问题中添加了 R 代码,该代码可能会显示我在绘制输出时所犯的错误。

标签: r graph regression


【解决方案1】:

由于某种原因,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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2011-11-24
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多