2

我将不胜感激在下面指定我的 brms 模型以便能够将多列权重传递给模型,stan code如下所示。

我需要在 brms 或 stanarm 中执行此操作,而不是直接在 stan 中执行此操作,因为我想使用stanfit 对象当前不支持的https://github.com/mjskay/tidybayes的功能。

#样本数据:

dt = read.table(header = TRUE, text = "
n r r/n group treat c2 c1 weights
62 3 0.048387097 1 0 0.1438 1.941115288 1.941115288
96 1 0.010416667 1 0 0.237 1.186583128 1.186583128
17 0 0 0 0 0.2774 1.159882668 3.159882668
41 2 0.048780488 1 0 0.2774 1.159882668 3.159882668
212 170 0.801886792 0 0 0.2093 1.133397521 1.133397521
143 21 0.146853147 1 1 0.1206 1.128993008 1.128993008
143 0 0 1 1 0.1707 1.128993008 2.128993008
143 33 0.230769231 0 1 0.0699 1.128993008 1.128993008
73 62 1.260273973 0 1 0.1351 1.121927228 1.121927228
73 17 0.232876712 0 1 0.1206 1.121927228 1.121927228")

N <- nrow(dt)
n <- dt$n
r <- dt$r
p <- dt$r/n
group <- dt$group
treat <- dt$treat
c1 <- dt$c1
c2 <- dt$c2
w_1 <- dt$weights
w_2 <- dt$weights - 0.01
w_3 <- dt$weights + 0.01/2
w_4 <- dt$weights - 0.01/3
w_5 <- dt$weights + 0.01/4
w_6 <- dt$weights - 0.01/5
w_7 <- dt$weights + 0.01/6
w_8 <- dt$weights + 0.01/7
w_9 <- dt$weights + 0.01/8
w_10 <- dt$weights + 0.01/9

list_bind <- list (N = N, 
          n = n, r = r, p = p, group = group, treat = treat, c1 = c1, c2 = c2,
          weights = cbind(w_1, w_2, w_3, w_4, w_5, w_6, w_7, w_8, w_9, w_10)
          )

dt_bind <- as.data.frame(list_bind)

#我的尝试:

m <-brm(r | trials(n) + weights(weights.w_1:weights.w_10) ~ treat*c2+(1|group), 
              data=dt_bind, family=binomial(link=logit))

#斯坦代码:

//this is what I want the brms model specification to be able to do

data { 
...
real<lower=0> weights[N, 10];  // data block of model weights 
} 

model { 
...
// likelihood 
for (n in 1:N) 
for (w in 1:10) {
target += weights[n, w] * binomial_logit_lpmf(Y[n] | trials[n], mu[n]);
}
} 

提前感谢您的帮助。

4

0 回答 0