r - 如何在brms中按组指定具有不同形状的weibull多级回归?
问题描述
我试图从 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) - 1 * gamma_lccdf(0 | 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, b)", class = "Intercept") +
set_prior("gamma(c, d)", class = "shape", group = 'gen' ) +
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) - 1 * gamma_lccdf(0 | 1, 1) ",
check = FALSE)
但后来我得到的错误是:
错误:以下先验不对应任何模型参数:shape_gen ~ gamma(c, d)
两者都做也会导致我出错。我想象模型规范和我缺少的先前规范之间存在一些相互作用!
有人可以帮助我吗?
解决方案
推荐阅读
- node.js - nestjs、GRPC 服务器和微服务架构
- javascript - 为什么需要在对象中的函数中的 if 语句内部而不是外部?JavaScript
- scala - Scala - 使用泛型类型参数的内部类型定义无法编译
- python - 如何在 barh 图中显示标签?
- julia - Julia 中的 VIF 计算
- asp.net-mvc - ASP.NET Core,定义为 OpenId SignedOutCallbackPath 时不会触发路由
- java - Java - 比较可能包含数字的字符串,而不会干扰数字的数量
- sql-server - ASP.NET Core 中 Kendo 和 SQL Server 之间的连接
- android - 相机传感器启动设置在哪里?
- python - Django easy_pdf 删除边距