You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

glmmTMB设置re.form=NA预测时报找不到animal_ID对象错误

glmmTMB设置re.form=NA预测时提示找不到随机效应变量的解决方法

问题复现

操作场景为基于已拟合的glmmTMB二项混合效应模型,结合RasterStack生成空间预测栅格。由于predict.glmmTMB要求输入数据为数据框格式,提前将待预测的RasterStack转换为数据框作为预测输入。

  1. 模型拟合代码:
model6 <- glmmTMB(Used~scale(Road_density)+scale(nonforprop)+scale(devprop)+
                  scale(forprop)+scale(nonfordist_cap3000)+scale(fordist_cap3000)+
                  scale(agridist_cap3000)+scale(devdist_cap3000)+(1|animal_ID),
            data=rasterpoints3,na.action=na.omit,family=binomial(link="logit"))
  1. 待预测数据框生成代码:
predstack <- as.data.frame(stack2)
  1. 预测执行代码:
glmmTMB:::predict.glmmTMB(model6,predstack,re.form=NA)

运行后返回报错:

Error in eval(predvars, data, env) : object 'animal_ID' not found

报错原因

re.form=NA参数的作用是预测阶段不计算随机效应的贡献、仅输出固定效应的预测结果,但该参数不会跳过模型公式的初始变量存在性校验——只要原始模型公式里出现过的变量(哪怕是被设置为不参与预测的随机效应分组变量),predict函数都会先检查输入数据里是否存在对应列,不会因为不使用随机效应就忽略该变量的存在检查。

解决方案

直接给预测用的predstack数据框添加一列名为animal_ID的占位列即可。由于设置了re.form=NA,该列的取值不会参与任何预测计算,填充任意值都不会影响最终固定效应的预测结果,示例代码如下:

# 添加占位列,取训练集中任意一个animal_ID值填充即可
predstack$animal_ID <- rasterpoints3$animal_ID[1]
# 重新执行预测,如需输出0-1范围的概率结果可加上type="response"参数
pred_val <- predict(model6, predstack, re.form=NA, type="response")

额外注意事项

不建议直接在模型公式内嵌套scale()函数做变量标准化:这种写法下,模型不会存储训练集变量的均值、标准差,预测阶段会用预测集自身的均值和标准差对变量做标准化,会导致预测结果出现系统性偏差。正确做法是提前基于训练集计算各变量的均值、标准差,手动对训练集和预测集的对应变量做标准化后,再代入模型拟合和预测流程。

内容的提问来源于stack exchange,提问作者Beardedant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:03:33