如何在brms中按组指定具有不同形状的威布尔多级回归?

问题描述

我正在尝试从 Liu & Abeyratne 的“贝叶斯可靠性的实际应用”中复制示例 8.2。原始示例(与分层模型相关)是在 JAGS 中完成的,我想在 BRMS 上重现它。

我能够创建并运行一个模型,其中 Weibull 形状对所有组都是通用的(在示例中,它是九代产品)。

现在我想制作一个模型,我也可以模拟“平均”形状和每个组的效果,就像拦截一样

这是有效的模型,其中的形状对所有组都是通用的:

priors <-
        set_prior("gamma(a,b)",class = "Intercept") + 
        set_prior("gamma(c,d)",class = "shape") + 
        set_prior("target += gamma_lpdf(a | 6,0.4) - 1 * gamma_lccdf(0 | 6,0.4) + 
                  gamma_lpdf(b | 2,0.2) - 1 * gamma_lccdf(0 |2,0.2) ",check = FALSE) + 
        set_prior("target += gamma_lpdf(c | 1,1) - 1 * gamma_lccdf(0 | 1,1) + 
                  gamma_lpdf(d | 1,1) ",check = FALSE)

stanvars <- stanvar(scode = "real<lower=0> a; 
                             real<lower=0> b; 
                             real<lower=0> c; 
                             real<lower=0> d;",block = "parameters")
        
brmsHyperModel <- brm(ttf | cens(censor) ~ 1 + (1 | gen),family = weibull,data = brmsData,prior = priors,stanvars = stanvars,iter = 41000,warmup = 4000,chains = 4,cores = 4,seed = 4,control = list(adapt_delta = .99))

我想运行这样的东西:

brmsForm <- bf(ttf | cens(censor) ~ 1 + (1 | gen),shape ~ 1 + (1 | gen))

如果我只是添加第二个等式,则会出现以下错误

错误:以下先验不对应任何模型参数:shape ~ gamma(c,d)

我试着改变“先验”,而不是添加第二个方程,添加一个组变量来塑造,就像这样:

priors <-
        set_prior("gamma(a,class = "shape",group = 'gen' ) + 
        set_prior("target += gamma_lpdf(a | 6,check = FALSE)

但后来我得到的错误是:

错误:以下先验不对应任何模型参数:shape_gen ~ gamma(c,d)

两者都做也会导致我出错。我想象模型规范和我缺少的先前规范之间存在某种相互作用!

有人可以帮我吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)