R 在mgcViz图中组合多个簇的gam平滑

R 在mgcViz图中组合多个簇的gam平滑,r,ggplot2,cluster-analysis,mgcv,R,Ggplot2,Cluster Analysis,Mgcv,我有几个集群的gam平滑,这些集群来自一个基于模型的集群代码,它结合了不等长的时间序列,我想将它们与数据一起显示 mgcViz包为单个集群提供了出色的可视化效果,但我不知道如何组合它们。也许是因为它的目标是可视化几个效果,而不是几个集群。然而,它的性能非常接近我所需要的,因此这里有一个可复制的示例(改编自): 库(mgcViz) n=1e3 z=rnorm(n) dat=数据帧(x=代表(z,时间=2), y=rep(c(1,2),每个=n)+c(sin(z),0.5*z^2)+rnorm(2*

我有几个集群的gam平滑,这些集群来自一个基于模型的集群代码,它结合了不等长的时间序列,我想将它们与数据一起显示

mgcViz包为单个集群提供了出色的可视化效果,但我不知道如何组合它们。也许是因为它的目标是可视化几个效果,而不是几个集群。然而,它的性能非常接近我所需要的,因此这里有一个可复制的示例(改编自):

库(mgcViz)
n=1e3
z=rnorm(n)
dat=数据帧(x=代表(z,时间=2),
y=rep(c(1,2),每个=n)+c(sin(z),0.5*z^2)+rnorm(2*n)/4,
g=系数(代表(1:2,各=n)))

b不是
mgcViz
,但是您可以自己创建所需的输出并使用
ggplot2

库(mgcv)
图书馆(GG2)
theme_set(theme_bw())
n=1e3
z=rnorm(n)
dat=data.frame(
z=rep(z,乘以2),
y=rep(c(1,2),每个=n)+c(sin(z),0.5*z^2)+rnorm(2*n)/4,
g=系数(代表(1:2,各=n)))

b My
b
是每个聚类的独立
gam
结果列表(我更新了问题),因此我没有一个带有
g
的单一模型。我可以用
g
截取来重新调整模型,但我想知道这是否可以避免,因为涉及的数据量很大。它可以工作,如果需要从
b
开始,会有更多的数据争论,因为我的问题是
gam
的结果列表。具体来说,您的
predict
被替换为
do.call(c,lappy(b,predict,newdata=list(x=z),type=“response”)
。谢谢@乔乔夫:我已经根据请求对帖子进行了编辑。请注意,在单模型版本中,您还可以使用函数
mgcv::bam
代替
gam
,使用
method=“fREML”
discrete=TRUE
,以减少计算时间和内存需求。
library(mgcViz)
n = 1e3
z = rnorm(n)
dat = data.frame(x = rep(z, times = 2),
                 y = rep(c(1,2), each = n) + c(sin(z), 0.5*z^2) + rnorm(2*n)/4,
                 g = factor(rep(1:2, each = n)))

b <- lapply(1:2, function(i, dat) gam(y ~ s(x), data = dat[dat$g == i, ]),
            dat = dat)

plot(getViz(b[[1]])) + l_points() + l_fitLine() + l_ciLine()   # First
plot(getViz(b[[2]])) + l_points() + l_fitLine() + l_ciLine()   # Second
plot(getViz(b))   # Third
ggplot(dat, aes(x, y, color = g)) + geom_point(pch = ".") + theme_bw() # Fourth