为什么tab_模型(sjPlot)使用rstanarm模型重新运行MCMC?
我正在使用包为什么tab_模型(sjPlot)使用rstanarm模型重新运行MCMC?,r,lme4,mixed-models,sjplot,rstanarm,R,Lme4,Mixed Models,Sjplot,Rstanarm,我正在使用包sjPlot()中的tab\u model创建一个表 但是,当我使用负二项rstanarmmodel对象时,tab\u model会重新运行MCMC链。 我的实际模型需要很多小时才能运行,因此这对于tab_model来说并不理想,但对于其他模型(例如lme4中的glmer)来说似乎并不理想 输出速度很快,正如预期的那样(尽管原始模型也运行得很快,因此有可能tab_model也在这里重新运行模型) 现在当我尝试 tab_model(mod2) 它开始重新运行MCMC。这是正常行为吗
sjPlot
()中的tab\u model
创建一个表
但是,当我使用负二项rstanarm
model对象时,tab\u model
会重新运行MCMC链。
我的实际模型需要很多小时才能运行,因此这对于tab_model
来说并不理想,但对于其他模型(例如lme4
中的glmer
)来说似乎并不理想
输出速度很快,正如预期的那样(尽管原始模型也运行得很快,因此有可能tab_model
也在这里重新运行模型)
现在当我尝试
tab_model(mod2)
它开始重新运行MCMC。这是正常行为吗?如果是,是否有人熟悉关闭此功能的方法,只使用已创建的模型对象,而不是重新运行模型?tl;dr我认为如果不对
insight
包和这个包进行黑客攻击,或者要求包维护人员进行编辑,这将很难避免,除非您想放弃打印ICC、R^2和随机效应方差tab_model()
调用insight::get_variance()
,它尝试计算空模型的方差,以便计算ICC和R^2。计算这些差异需要重新运行模型。(当它为glmer.nb
执行此操作时,它会通过lme4::update.merMod()
执行,并且速度足够快,您不会注意到计算时间。)
所以
不会重新计算任何内容。理论上,我认为只要show.r2=FALSE,show.icc=FALSE
(也就是说,不需要获取RE var),就可以跳过重采样/重新计算步骤,但这需要维护人员进行一些黑客攻击/参与
深入(使用
debug(rstan::sampling)
在Stan采样函数内停止,然后where
查看调用堆栈
调用tab\u model()
insight::get\u variance()
方法调用insight::get_variance.stanreg()
insight::.compute_variances()
- …它调用
insight::.compute\u variance\u distribution()
- …它(对于日志链接计数分布)调用
insight::.variance\u distributional()
- …调用
null\u model
- …它调用
.null\u model\u mixed()
- …它调用
stats::update()
library(sjPlot)
tab_model(mod1)
tab_model(mod2)
tab_model(mod2,show.r2=FALSE,show.icc=FALSE,show.re.var=FALSE)