【发布时间】:2020-07-27 06:52:43
【问题描述】:
我在 R 中有一个数据框列表。列表中的每个元素都是具有相同协变量的数据框。但是,每个数据帧的协变量值都不同,因为我为每个数据帧应用了具有不同组合的平滑算法。
然后我为每个数据框安装了一个游戏。我现在想做的是为每个协变量绘制一个图,并为每个数据帧绘制平滑线
更新
只是为了分享一些代码并使其更清晰: 现在我想做一些像平面图这样的事情。其中每个图都包含不同游戏的协变量(x1 和 x2)的平滑。我希望这是有道理的......
library(mgcv)
# make list of dataframes for storing data
data = vector("list", length = 3)
# fill the list
for(i in seq_along(data)){
data[[i]] = gamSim(n = 200, dist = "normal", scale = 2)
}
# fit the gams
gam_models = vector("list", length(data))
for(i in seq_along(data)){
res = gam(y ~ s(x0) + s(x1) + s(x2), data = data[[i]])
gam_models[[i]] = res
par(mfrow = c(1,2))
plot(res, all.terms=TRUE, main="Name of Covariate")
}
【问题讨论】:
-
您能分享可重现的代码和数据吗?我不完全清楚你想要做什么。
geom_smooth允许您使用method = "gam"显示基于 GAM 的拟合。这取决于美学,即如果您有colour或group美学geom_smooth将为每个子集绘制平滑曲线。 -
当然可以!抱歉,我会稍微更新一下这个令人困惑的问题......
-
如果您提供一些数据/代码,生成与您正在使用的模型类似的列表,您将获得更高的答案。
-
嗨@Lenn,感谢您的更新,这好多了。看到您的代码示例,我现在想知道到底是什么问题。您已经在为每个模型的每个协变量绘制平滑曲线(包括 CI)。
-
@Lenn 好的,我现在明白了。恐怕您要问的是自己从
gamfit 对象中提取平滑数据。您可以查看plot.gam的源代码,了解mgcv是如何完成的。mgcViz中的例程做类似的事情。我没有时间研究这个,但这应该是相当简单的。基本上,我会定义一个函数get_smooth_data(fit, covariate),它基于fit为covariate返回平滑效果的data.frame;然后,我将为每个模型对这些data.frames 进行行绑定,然后您就可以进行绘图了。