在对“gam”对象使用ggpredict()时,无法将“list”对象强制为类型“double”错误

suzh9iv8  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(53)

我已经使用mcgv::gamm()生成了一个广义可加性混合模型(GAMM),并且使用ggeffects::ggpredict()对该模型进行估计的边际均值预测,然后使用ggplot2()绘制这些预测没有问题。但是,当我保存工作空间、关闭它、然后重新打开它。当我这样做并尝试用ggeffects::ggpredict()绘制同一模型时,我收到错误消息:
Error in is.constant(y) : 'list' object cannot be coerced to type 'double'
这肯定是个小故障,因为在我退出会话之前,绘图工作都很正常。我不想每次绘图时都重新运行我的模型,因为它们是使用大型数据集、平滑函数和随机效应构建的,运行起来非常耗时(很多小时)。有人知道变通办法吗?
非常感谢

编辑:2023年12月5日(回应Miff和Gavin Simpson的评论)

谢谢你们的回答。
两个包-即ggeffectsmgcv-都被加载了。正如Gavin所指出的,由mgcv::gamm()生成的对象提供了两个选项:$lme$gamclass(model)给出的类为"gamm" "list"。由于某些原因,在创建gamm对象的会话期间运行ggeffects::ggpredict(model)可以正常工作,但是如果您保存、退出并重新启动R,则会给出错误消息。但是,指定ggeffects::ggpredict(model$gam)似乎可以解决这个问题(注意,ggeffects::ggpredict(model$lme)给出错误消息Error in eval(x$call$random) : object 'rand' not found,可能是因为在我的模型中存在它无法处理的随机效应)。
如果有其他问题,我会进一步更新。

ghhaqwfi

ghhaqwfi1#

gamm()返回的模型包含一个列表,其中包含一个$lme组件和一个$gam组件,每个组件代表模型的两个视图。

ggpredict(my_model$gam)

字符串

ggpredict(my_model$lme)


这取决于您希望如何进行预测以及如何处理具有随机效应的预测。

yacmzcpb

yacmzcpb2#

通常,当调用ggpredict()时,会自动选择正确的插槽($gam):

# for gamm/gamm4 objects, we have a list with two items, mer and gam
  # extract just the gam-part then
  if (is.gamm(model) || is.gamm4(model)) {
    model <- model$gam
  }

字符串
(https://github.com/strengejacke/ggeffects/blob/master/R/ggpredict.R#L638C1-L643C1)
你能在这两种情况下发布你的sessionInfo()吗(它在哪里工作,当你得到一个错误)?

相关问题