如何解决为什么tab_modelsjPlot用rstanarm模型重新运行MCMC?
我正在使用tab_model
(https://cran.r-project.org/web/packages/sjPlot/vignettes/tab_model_estimates.html)包中的sjplot
创建一个表。
但是,当我使用负二项式rstanarm
模型对象时,tab_model
重新运行MCMC链。
我的实际模型要花很多时间才能运行,因此对于tab_model
而言,这样做并不理想,但是对于其他模型(例如{{1中的glmer
}}。
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
它开始重新运行MCMC。是这种正常行为吗?如果是这样,是否有人熟悉一种关闭此行为的方法,只使用已经创建的模型对象,而不是重新运行模型?
解决方法
tl; dr 我认为,除非同时破解insight
软件包和这个软件包,或者要求软件包维护者进行修改,否则除非您愿意,否则很难避免这种情况。放弃打印ICC,R ^ 2,和随机效应方差。 Here,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 var),但这将需要一些技巧/维护者的参与。
进入(通过使用debug(rstan::sampling)
停止在Stan采样函数内部,然后使用where
来查看调用堆栈...
-
tab_model()
呼叫insight::get_variance()
here -
insight::get_variance.stanreg()
方法调用insight:::.compute_variances()
- ...呼叫
insight:::.compute_variance_distribution()
- ...(对于日志链接计数分配)调用
insight:::.variance_distributional()
- ...呼叫
null_model
- ...呼叫
.null_model_mixed()
- ...呼叫
stats::update()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。