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

固定随机效应标准差时glmmTMB模型预测栅格异常问题求助

解决glmmTMB固定随机效应标准差后预测栅格全为0的问题

问题原因

通过doFit=FALSE手动固定随机效应标准差(theta参数)后,fitTMB返回的模型对象缺少glmmTMB直接拟合模型的关键元数据,导致predict.terra调用predict.glmmTMB时错误处理了边际预测逻辑,最终输出全0结果。

解决方案

以下两种方法均可解决该问题:

方法1:手动计算边际预测值

若目标是边际预测(不纳入随机效应),可直接提取固定效应参数,结合栅格数据计算预测值:

library(terra)
library(glmmTMB)

# 数据准备
logo <- rast(system.file("ex/logo.tif", package="terra"))   
names(logo) <- c("red", "green", "blue")
logo$blue <- as.factor(logo$blue) 

# 固定theta的模型拟合
m2 <- glmmTMB(red ~ green + (1|blue),
             family=poisson, data = as.data.frame(logo), doFit=FALSE)
m2$parameters$theta[1] <- log(1e3)
m2$mapArg <- list(theta=factor(NA))
m2.f <- glmmTMB:::fitTMB(m2)

# 提取固定效应系数并计算预测值
fixef_coef <- fixef(m2.f)$cond
lin_pred <- logo$green * fixef_coef["green"] + fixef_coef["(Intercept)"]
r2 <- exp(lin_pred) # 泊松模型的逆链接函数
plot(r2)

方法2:补全模型对象的元数据

手动拟合的模型缺少glmmTMB原生模型的元数据,可从正常拟合的模型中复制相关属性:

library(terra)
library(glmmTMB)

# 数据准备
logo <- rast(system.file("ex/logo.tif", package="terra"))   
names(logo) <- c("red", "green", "blue")
logo$blue <- as.factor(logo$blue) 
logo.df <- as.data.frame(logo)

# 先拟合正常模型获取元数据
m1 <- glmmTMB(red ~ green + (1|blue),
        family=poisson, data = logo.df)

# 固定theta的模型拟合
m2 <- glmmTMB(red ~ green + (1|blue),
             family=poisson, data = logo.df, doFit=FALSE)
m2$parameters$theta[1] <- log(1e3)
m2$mapArg <- list(theta=factor(NA))
m2.f <- glmmTMB:::fitTMB(m2)

# 复制关键元数据到固定参数后的模型
m2.f$modelInfo <- m1$modelInfo
m2.f$call <- m1$call

# 正常生成预测栅格
r2 <- predict(logo, m2.f, const=data.frame(blue=NA))
plot(r2)

说明

两种方法均能得到符合预期的预测结果——由于边际预测不考虑随机效应,最终预测值仅由固定效应(green变量的系数和截距)决定,与随机效应标准差的固定值无关。


内容的提问来源于stack exchange,提问作者Marie Auger-Methe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:30:33