使用ggpredict()处理gamm对象,重启R会话后遇类型转换错误求解决
解决mgcv::gamm()模型保存重启后ggpredict()报错的问题
问题背景
使用mgcv::gamm()训练的广义相加混合模型(GAMM),在模型创建的原会话中调用ggeffects::ggpredict()生成边际均值预测并绘图完全正常,但保存工作区、重启R后,再次执行ggeffects::ggpredict(model)会触发错误:
Error in is.constant(y) : 'list' object cannot be coerced to type 'double'
由于模型基于大型数据集,包含平滑项与随机效应,重新训练需耗时数小时,无法每次绘图都重复训练。
解决方法
mgcv::gamm()返回的是包含$gam和$lme的列表对象(类为"gamm" "list"),会话重启后的反序列化过程导致ggpredict()对整个gamm对象解析异常,直接传入模型的$gam部分即可绕过该问题:
ggeffects::ggpredict(model$gam)
注意事项
- 不要传入
model$lme,ggpredict()无法处理该部分的随机效应定义,会触发Error in eval(x$call$random) : object 'rand' not found错误。 - 若需保留随机效应对预测结果的影响,可后续单独处理随机效应部分的预测结果并与
$gam部分的预测结合,但当前方法已能满足避免重训模型、正常生成预测的核心需求。
内容的提问来源于stack exchange,提问作者PhelsumaFL
相关产品推荐
相关产品推荐

