在R中从多图输出中获取单个图形

6

我正在尝试从多个图表输出中获取一个图表。例如:

library(mboost); 
mod=gamboost(Ozone~.,data=airquality[complete.cases(airquality),]); 
plot(mod)

以上内容为每个变量的“偏效应”创建了一个图。同样,当绘制线性模型(lm)时,创建残差图时也可以这么说。我试图将输出保存在类似于ggplot的列表中,并花费几个小时搜索如何提取一个图,但失败了。有什么建议吗?
至于问题的背景,我正在尝试将这些图放入闪亮的应用程序中,并且有不同数量的图像显示为输出。
会话信息如下: R版本2.15.2(2012-10-26) 平台:i386-redhat-linux-gnu(32位)

谢谢您,gung。非常抱歉。我经常访问这两个网站,所以当我进行故障排除时,它们在我的脑海中是相同的。 - JeP
3个回答

6
许多生成多个图的函数也有一个参数来选择其中一部分图。在plot.lm中,这个参数是which。因此,使用plot(fit, which=1)只会生成一个图。
您可以查看mboost文档,看看是否有类似的绘图函数参数。

3
基本上,@greg-snow提供了一个正确的解决方案。我稍微详细说明一下。
在中,您可以使用
plot(mod, which = "Day")

仅绘制Day效应的图表。由于我们使用正则表达式,您甚至可以使用参数which做更多的事情。在一个具有线性和平滑效应的模型中,例如您可以提取所有平滑效应以进行绘图:

airquality$Month <- as.factor(airquality$Month)
mod <- mod <- gamboost(Ozone ~ bbs(Solar.R) + bbs(Wind) + bbs(Temp) + bols(Month) + bbs(Day), data=airquality[complete.cases(airquality),])

## now plot bbs effects, i.e., smooth effects:
par(mfrow = c(2,2))
plot(mod, which = "bbs")

## or the linear effect only
par(mfrow = c(1,1))
plot(mod, which = "bols")

您可以使用名称的任何部分(例如,请参见names(coef(mod)))来定义要绘制的效果。 您还可以使用整数值来定义要绘制的which效果:

plot(mod, which = 1:2)

请注意,这也可以用于提取特定系数。例如:
coef(mod, which = 1)
coef(mod, which = "Solar")
coef(mod, which = "bbs(Solar.R)") 

所有内容都是相同的,关于如何在 coefplot 中指定 which,请参阅我们的教程论文(Hofner等人,2014年,基于模型的 Boosting 在 R 中 - 使用 R 包 mboost 的 Hands-on 教程。计算统计学,29:3-35. DOI 10.1007/s00180-012-0382-5)。

我们承认目前这在 mboost 中尚未记录,但它已经在我们的待办事项列表中(请参见github issue 14)。


1

(我不熟悉GAMboost。)

查看?plot.GAMBoost的文档,我发现有一个叫做select的参数。我猜想您会将此参数设置为您感兴趣的变量,然后您将获得所需的单个图。这类似于@GregSnow指出的plot.lm中的which参数。


嗨Greg和gung - 感谢回复。我感觉自己像个白痴 - 我知道"which"参数,但在将其用作向量时,它没有点击,直到我从别人那里读到它。我将执行以下操作:'plot(mod,which=names(dataSet)[i])'其中'i'可以更改。话虽如此,你们中的一个能解释一下为什么单独完成绘图与全部一起完成绘图时绘图不同吗?使用上面的示例:'par(mfrow=c(2,3)); plot(mod); plot(mod,which="Day")' Day似乎有两个不同的图... - JeP
我不知道它们为什么不同,@JeP,我对GAMBoost并不是很熟悉。关于您在评论中提供的解决方案,请注意plot将根据对象mod的类调用不同的方法。也就是说,如果您的mod是lm,则会调用plot.lm,但如果是gamboost,则会调用plot.GAMBoost。后者使用select参数而不是which - gung - Reinstate Monica
@JeP:如果单独绘制或一起绘制,则图形不同的问题应该得到解决。如果同时绘制多个效果,则以前我们通常会有一个共同的y轴刻度。现在,每个图形都会获得自己的y轴比例尺。要为所有图形使用相同的y轴,请现在需要指定“ylim = ...”。 - Benjamin Hofner
1
请注意,GAMBoost是完全不同的程序包,而不是mboost - Benjamin Hofner

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