我正在尝试使用 Stan 和 R 来拟合一个模型,该模型对观察到的实现 y_i = 16、9、10、13、19、20、18、17、35、55 进行建模,这些实现来自二项式分布随机变量,比如 Y_i,带有参数 m_i(试验次数)和 p_i(每次试验的成功概率)。
yi = c(16, 9, 10, 13, 19, 20, 18, 17, 35, 55)
出于本实验的目的,我将假设所有 m_i 都是固定的,并且由 m_i = 74、99、58、70、122、77、104、129、308、119 给出。
mi = c(74, 99, 58, 70, 122, 77, 104, 129, 308, 119)
我将使用 Jeffrey 的先验:\alpha=0.5 和 \beta=0.5。
alpha = 0.5, beta = 0.5
我试着
我在 2. 的尝试是这段代码:
real k;
real mx = 0;
real mn = 0;
if (p > mx)
mx = p;
if (mn > p) {
mn = p;
}
k = mx - mn;
我的斯坦代码如下:
```{stan output.var="BinModBeta"}
data {
int <lower = 1> mi[10];
int <lower = 0> yi[10];
real <lower = 0> alpha;
real <lower = 0> beta;
}
parameters {
real <lower = 0, upper = 1> p[10];
}
transformed parameters {
real k;
real mx = 0;
real mn = 0;
if (p > mx)
mx = p;
if (mn > p) {
mn = p;
}
k = mx - mn;
}
model {
yi ~ binomial(mi, p);
p ~ beta(alpha, beta);
}
```
我的R代码如下:
```{r}
library(rstan)
```
```{r}
data.in <- list(mi = c(74, 99, 58, 70, 122, 77, 104, 129, 308, 119), yi = c(16, 9, 10, 13, 19, 20, 18, 17, 35, 55), alpha = 0.5, beta = 0.5)
model.fit1 <- sampling(BinModBeta, data=data.in)
```
```{r}
print(model.fit1, pars = c("p"), probs=c(0.1,0.5,0.9), digits = 5)
```
现在,我刚开始学习 Stan,所以我真的不确定这是否正确。但是,这段代码似乎适用于我的第一个目标(至少,我编写的任何代码似乎都有效......)。但是当我尝试编写我的第二个目标时,我的麻烦就开始了。
当我尝试编译上面的 Stan 代码时,我收到以下错误:
现在,根据这个错误消息,我的问题似乎是因为 p 是 10 个实数值的向量,而不是一个实数值。但是,由于我对 Stan 缺乏经验,我不确定如何解决这个问题。