mgcv包GAM多by平滑项模型的预测问题及方案咨询
问题解析与解决方案
为什么x2新水平预测出NA,而r不会?
s(t, by=x2)是分组平滑项,模型会为x2的每个现有水平单独拟合一条t的曲线,新水平没有对应的拟合参数,因此无法生成预测值,返回NA。s(r, bs="re")是随机效应项,mgcv对随机效应的新水平默认预测其效应为0(收缩到总体均值),所以不会出现NA。
分别拟合单个by平滑项的模型是否可行?
完全可行,且刚好匹配你的需求:
若想单独基于x1的分组平滑预测(忽略x2的影响),可以拟合不含x2相关项的模型:
fit_x1 <- gam(y ~ s(t, by=x1, k=4) + s(x1, bs="re") + s(r, bs="re"), data=dat, family="gaussian", method="REML")此时预测时,无论x2是原有水平还是新水平,都不会影响结果(模型未包含x2变量),直接指定x1的目标水平和t的取值即可得到稳定的预测值。
同理,若需要基于x2的分组平滑预测,再单独拟合对应模型即可。
原模型的补充说明
原模型同时包含x1和x2的分组平滑,意味着y的变异被同时分解为x1分组的时间趋势、x2分组的时间趋势,以及各自的随机效应。这种情况下,即使使用exclude参数排除x2相关项,模型仍会保留x2的结构依赖——因为by平滑项的参数和因子水平绑定,无法通过简单排除消除原有水平的影响。因此分开拟合单一分组的模型,是更直接满足你需求的方案。
内容的提问来源于stack exchange,提问作者N R
相关产品推荐
相关产品推荐

