glmmTMB调用predict()时如何仅保留Microchip随机效应排除olre
glmmTMB模型预测时排除指定随机效应的解决方法
报错原因说明
glmmTMB包的predict()方法的re.form参数设计和lme4包的glmer不同,目前不支持自定义传入部分随机效应公式,仅支持三个合法取值:
re.form = NULL(默认):纳入模型所有随机效应re.form = NA/re.form = ~0:完全排除所有随机效应,仅输出固定效应部分的预测值
你触发的报错就是因为传入了自定义的随机效应公式:
Error in predict.glmmTMB(SelMod2, type = "response", re.form = ~(1 | Microchip)) :
re.form must equal NULL, NA, or ~0
仅纳入Microchip随机效应、排除olre的实现方法
优先推荐手动计算的方案,逻辑清晰可控,不会修改原模型参数:
步骤1:提取固定效应线性预测值
# 提取固定效应系数 fixef_coef <- fixef(Mod)$cond # 提取当前数据的固定效应设计矩阵 X_mat <- model.matrix(Mod, data = mydata_select) # 计算固定效应部分的线性预测值 fixed_linpred <- as.vector(X_mat %*% fixef_coef)
步骤2:匹配Microchip对应的随机截距
# 提取所有Microchip对应的随机效应值 ranef_mc <- ranef(Mod)$cond$Microchip[,1] # 为每个观测匹配对应Microchip的随机效应 mydata_select$mc_eff <- ranef_mc[as.character(mydata_select$Microchip)]
步骤3:转换为响应尺度的预测值
# 调用模型对应分布的逆连接函数转换,适配所有连接函数场景 mydata_select$predictAll <- family(Mod)$linkinv(fixed_linpred + mydata_select$mc_eff)
如果你用的是nbinom1默认的对数连接,也可以直接写为:
mydata_select$predictAll <- exp(fixed_linpred + mydata_select$mc_eff)
内容的提问来源于stack exchange,提问作者Sofie Scheuer Didriksen Nagly
相关产品推荐
相关产品推荐

