glmmTMB是否会返回glmmADMB等随机效果变化组件的标准误差?

时间:2017-12-18 16:28:42

标签: r

注意:以下分析仅适用于可重现的对象 - 并不是作为分析bacteria的{​​{1}}数据的合法方式提出的。

MASS

据我了解,

  • library(glmmADMB) library(glmmTMB) data(bacteria,package="MASS") bacteria$present <- as.numeric(bacteria$y)-1 bacteria$early <- factor(as.numeric(bacteria$week > 3) + 1) bfit2 <- glmmadmb(present ~ trt , random = ~ (1 | ID) + (1 | early), family = "binomial", data = bacteria) bfit2$S bfit2$sd_S bfit3 <- glmmTMB(present ~ trt + (1 | ID) + (1 | early), family = "binomial", data = bacteria) summary(bfit3)$varcor confint(bfit3) 包含对bfit2$S
  • 随机效果的差异的估算值
  • glmmADMB包含bfit3$varcor随机效应的标准偏差的估算值(即{{1}的元素的glmmTMB }})

  • sqrt()包含bfit2$S bfit2$sd_S中估算值的标准错误(如此SO post所述)

bfit2$S对象中存储的glmmADMB标准错误在哪里? 更新bfit3$varcor是针对glmmTMB对象实现的,因此如果计算95%CI是最终目标,那么可用(Thanks kaskr)。

glmmTMB

我们可以看到,confint> bfit2$S $ID (Intercept) (Intercept) 1.4047 $early (Intercept) (Intercept) 0.51465 > bfit2$sd_S $ID (Intercept) (Intercept) 0.94743 $early (Intercept) (Intercept) 0.61533 > summary(bfit3)$varcor Conditional model: Groups Name Std.Dev. ID (Intercept) 1.18513 early (Intercept) 0.71733 > confint(bfit3) 2.5 % 97.5 % Estimate cond.(Intercept) 1.1934429 4.1351114 2.6642771 cond.trtdrug -2.6375284 -0.0503639 -1.3439462 cond.trtdrug+ -2.0819454 0.5325683 -0.7746885 cond.Std.Dev.ID.(Intercept) 0.6118984 2.2953603 1.1851276 cond.Std.Dev.early.(Intercept) 0.2222685 2.3150437 0.7173293 因此表示sqrt(1.4047) = 1.18513给出了方差的估计值,sqrt(0.51465) = 0.71733给出了标准差的估计值。

第二次更新

经过一番挖掘后,我意识到bfit2$S会返回log-sd-scale上的方差分量以及标准错误。因此,一种想法是避免summary(bfit3)$varcor并通过在log-sd-scale上计算95%CI然后转换为所需的比例然后将CI的宽度除以2 * 1.96来计算SE。

bfit3$sdr

运行它:

confint

上面的最后两行非常匹配confint(bfit3)输出的最后两行。现在我想我只是想知道为什么glmmADMB的SE分别为0.94743和0.61533,而glmmTMB的后验分别为1.24857和1.354657 ......(?)

2 个答案:

答案 0 :(得分:1)

不是100%肯定您的分析,但这是我要检查的内容(包括挖掘glmmADMB的内容并使用glmmTMB稍微模糊的方面):

  • 运行glmmADMB,并深入了解ADMB .std输出文件以检查结果:
  

n par估计sd
  4 tmpL 1.6985e-01 3.3727e-01
  5 tmpL -3.2901e-01 5.9780e-01
  ......   62 S 1.4045 9.474e-01
  63 S 5.178e-01 6.191e-01

这些行分别是内部参数(tmpL:对数标准差)和变换后的参数(差异)。

重新进行转换并检查:

tmpL <-    c(0.16985,-0.32901)
cbind(admb.raw=exp(2*tmpL),
      admb=unlist(bfit2$S),
      tmb =unlist(VarCorr(bfit3)))
##        admb.raw    admb       tmb
## ID    1.4045262 1.40450 1.4045274
## early 0.5178757 0.51788 0.5145613

我们从随机效应的log-std dev的标准偏差乘以变换的导数得到方差的标准差(V = exp(2 * logd),所以dV / d(记录) )= 2 * exp(2 * logsd))

## sd of log-sd from glmmTMB
tmb_sd <- sqrt(diag(vcov(bfit3,full=TRUE)))[4:5]
tmb_logsd <- bfit3$sdr$par.fixed[4:5]
tmpL_sd <- c(0.33727,0.5978)
cbind(admb.raw=tmpL_sd*2*exp(2*tmpL),
      admb=unlist(bfit2$sd_S),
      tmb=tmb_sd*2*exp(2*tmb_logsd))
##        admb.raw    admb       tmb
## ID    0.9474091 0.94741 0.9474132
## early 0.6191722 0.61918 0.6152003

所以这些似乎都匹配好了。

答案 1 :(得分:0)

$varcor对象是一个列表。标准偏差存储为属性:

str( summary(bfit3)$varcor )
List of 2
 $ cond:List of 2
  ..$ ID   : num [1, 1] 1.4
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr "(Intercept)"
  .. .. ..$ : chr "(Intercept)"
  .. ..- attr(*, "stddev")= Named num 1.19
  .. .. ..- attr(*, "names")= chr "(Intercept)"
  .. ..- attr(*, "correlation")= num [1, 1] 1
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ : chr "(Intercept)"
  .. .. .. ..$ : chr "(Intercept)"
  .. ..- attr(*, "blockCode")= Named num 1
  .. .. ..- attr(*, "names")= chr "us"
  ..$ early: num [1, 1] 0.515
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr "(Intercept)"
  .. .. ..$ : chr "(Intercept)"
  .. ..- attr(*, "stddev")= Named num 0.717
  .. .. ..- attr(*, "names")= chr "(Intercept)"
  .. ..- attr(*, "correlation")= num [1, 1] 1
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ : chr "(Intercept)"
  .. .. .. ..$ : chr "(Intercept)"
  .. ..- attr(*, "blockCode")= Named num 1
  .. .. ..- attr(*, "names")= chr "us"
  ..- attr(*, "sc")= num 1
  ..- attr(*, "useSc")= logi FALSE
 $ zi  : NULL
 - attr(*, "sc")= logi FALSE
 - attr(*, "class")= chr "VarCorr.glmmTMB"

这将遍历该对象的.$cond个元素:

sapply( summary(bfit3)$varcor$cond, function(x) attr( x, "stddev") )
   ID.(Intercept) early.(Intercept) 
        1.1851276         0.7173293