如何从glmmTMB的VarCorr结果中提取Std.Dev.用于emmeans偏差校正
问题描述
用glmmTMB构建负二项模型后,想结合emmeans对反变换后的边际均值做偏差校正,校正需要用到随机效应的标准差。虽然VarCorr(nbinom_mod)能显示这个标准差数值,但试了多种方法都没法正确提取,导致没法传给emmeans的sigma参数。
解决方案
1. 正确提取随机效应标准差
VarCorr()返回的对象里,每个随机效应组的方差-协方差矩阵带有stddev属性,用attr()就能直接提取:
# 提取herd组随机效应的标准差 rand_std_dev <- attr(VarCorr(nbinom_mod)$cond$herd, "stddev")
执行后rand_std_dev会得到你需要的9.048036e-05,也就是输出里的Std.Dev.值。
2. 传入emmeans完成偏差校正
把提取到的标准差数值传给emmeans()的sigma参数就行:
nbinom_em <- emmeans(nbinom_mod, ~ period, bias.adjust = TRUE, sigma = rand_std_dev, type = "response")
补充说明
- 之前用
unlist(VarCorr(nbinom_mod))或者直接取矩阵元素,得到的是随机效应的方差(8.186695e-09),不是标准差。标准差是方差的平方根,也可以用sqrt(8.186695e-09)计算,但直接提取属性更准确省事。 - 如果模型有多个随机效应组,把
$cond$herd改成目标组的名字,就能提取对应组的标准差。
内容的提问来源于stack exchange,提问作者myfatson
相关产品推荐
相关产品推荐

