如何使ggeffects调用实际offset值而非均值(glmmTMB场景)
ggeffects处理Offset的问题及解决方案
问题背景
- 关于ggeffects包处理offset的资料极少,仅找到一篇对比R与Stata各包处理offset的文章
- 复现示例后发现,
ggpredict()虽基于predict()而非emmeans(),但估计因子变量时仍采用offset的均值 - 核心需求:实现
ggpredict()调用实际offset值,或找到针对glmmTMB对象的替代计算方式(因offset均值与实际值结果差异极大,且存在随机效应与多变量,无法手动计算边际效应)
现有ggpredict输出结果
ggpredict(nb_glm_offset) $age # Predicted counts of claims age | Predicted | 95% CI ---------------------------------- <25 | 27.44 | [22.97, 32.78] 25-29 | 24.17 | [20.88, 27.97] 30-35 | 21.30 | [18.51, 24.50] >35 | 18.04 | [16.21, 20.07] Adjusted for: * ln_holders = 4.90 $ln_holders # Predicted counts of claims ln_holders | Predicted | 95% CI ------------------------------------------- 1 | 0.55 | [ 0.46, 0.66] 2 | 1.50 | [ 1.26, 1.80] 3 | 4.09 | [ 3.42, 4.88] 4 | 11.11 | [ 9.30, 13.27] 5 | 30.19 | [ 25.28, 36.07] 6 | 82.08 | [ 68.71, 98.05] 7 | 223.11 | [ 186.77, 266.52] 9 | 1648.59 | [1380.06, 1969.36] Adjusted for: * age = <25 attr(,"class") [1] "ggalleffects" "list" attr(,"model.name") [1] "nb_glm_offset"
可行解决方法
方法1:让ggpredict调用实际offset值
利用ggpredict()的full.data参数基于原始数据集的所有观测值计算预测值,或通过condition参数手动指定offset的实际取值:
# 基于原始全量数据计算预测值 ggpredict(nb_glm_offset, full.data = TRUE) # 手动指定offset的实际值(示例中ln_holders为offset变量) ggpredict(nb_glm_offset, condition = c("age", "ln_holders" = unique(your_data$ln_holders)))
方法2:直接使用glmmTMB的predict函数
绕过ggeffects,直接调用glmmTMB的predict()函数结合原始数据计算,再按需分组统计:
# 加载dplyr用于分组统计 library(dplyr) # 提取原始数据集 new_data <- your_original_data # 计算响应尺度的预测值(自动纳入原始offset) new_data$predicted <- predict(nb_glm_offset, newdata = new_data, type = "response") # 按age分组计算平均预测值及置信区间 new_data %>% group_by(age) %>% summarise( Predicted = mean(predicted), `95% CI lower` = quantile(predicted, 0.025), `95% CI upper` = quantile(predicted, 0.975) )
方法3:使用emmeans包处理
将offset作为协变量纳入emmeans分析,再转换到响应尺度:
library(emmeans) # 针对age变量计算边际均值,保留offset协变量 emm_obj <- emmeans(nb_glm_offset, ~ age, cov.keep = "ln_holders") # 转换到响应尺度并输出结果 emm_response <- regrid(emm_obj, transform = "response") summary(emm_response)
内容的提问来源于stack exchange,提问作者ClaireR
相关产品推荐
相关产品推荐

