我正在使用tab_model从包sjPlot (estimates.html)创建一个表。
然而,当我使用负二项式rstanarm模型对象时,tab_model重新运行MCMC链.我的实际模型需要很多小时才能运行,因此对于tab_model来说,这并不理想,但对于其他模型(比如glmer in lme4),它似乎不太理想。
library(rstanarm)
library(lme4)
dat.nb<-data.frame(x=rnorm(200),z=rep(c("A","B","C","D"),50),
y=rnbinom(200,size=1,prob = .5))
mod1<-glmer.nb(y~x+(1|z),data=dat.nb)
options(mc.cores = parallel::detectCores())
mod2<-stan_glmer.nb(y~x+(1|z),data=dat.nb)现在要创建模型表:
library(sjPlot)
tab_model(mod1)

输出是快速的,正如预期的那样(虽然原始模型也运行得很快,所以tab_model也有可能在这里重新运行模型)。
现在当我尝试
tab_model(mod2)它开始重新运行MCMC。这是正常的行为吗,如果是的话,是否有人熟悉关闭它的方法,只使用已经创建的模型对象,而不是重新运行模型?
发布于 2020-10-13 23:29:31
tl;博士--我认为,如果不对insight包和这个包进行黑客攻击,或者要求软件包维护人员进行编辑,这是很难避免的,除非您想要放弃打印ICC、R^2和随机效应方差。这里,tab_model()调用insight::get_variance(),它试图计算空模型的方差,以便计算ICC和R^2。计算这些变量需要重新运行模型。(当它用于glmer.nb时,它会通过lme4:::update.merMod()进行,并且速度足够快,以至于您没有注意到计算时间。)
所以
tab_model(mod2,show.r2=FALSE,show.icc=FALSE,show.re.var=FALSE)不会重新计算任何东西。理论上,我认为应该可以跳过仅使用show.r2=FALSE, show.icc=FALSE的重采样/恢复步骤(即不需要获得RE ),但这需要维护人员的一些黑客/参与。
深入研究(使用debug(rstan::sampling)在Stan抽样函数中停止,然后使用where查看调用堆栈.
tab_model()调用insight::get_variance() 这里insight::get_variance.stanreg()方法调用insight:::.compute_variances()insight:::.compute_variance_distribution()insight:::.variance_distributional()。null_model.null_model_mixed()stats::update()https://stackoverflow.com/questions/64344283
复制相似问题