我正在 STAN(rstan 库)中拟合逻辑模型。我的响应变量没有任何缺失值,但是我的协变量“HB”之一是二进制的并且缺少条目。
因此,目标是在每次迭代时使用伯努利先验(参数为 0.5)来估算二进制向量中缺失的条目。
但是,我遇到了问题:
- 丢失的数据需要在参数或转换参数块中声明为实数或向量;
- 模型块中伯努利分布的实现需要是整数;
- 据我所知,STAN 中没有将实数或向量转换为整数的功能。
我使用了STAN 用户指南第 3.3 节中提供的指南。对于下面的模型,解析器在伯努利赋值行(模型块中的倒数第二行)给我一个错误,说它需要整数。注意:我还尝试在参数块中将 HB_miss 定义为实数并得到相同的错误。
m2 <- '
data {
int<lower=0> N; // total number of observations
int<lower=0,upper=1> y[N]; // setting the dependent variable y as binary
vector[N] X; // independent variable 1
int<lower=0> N_obs;
int<lower=0> N_miss;
int<lower=1, upper=N> ii_obs[N_obs];
int<lower=1, upper=N> ii_miss[N_miss];
vector[N_obs] HB_obs; // independent variable 2 (observed)
}
parameters {
real b_0; // intercept
real b_X; // beta 1,2, ...
real b_HB;
vector[N_miss] HB_miss;
}
transformed parameters {
vector[N] HB;
HB[ii_obs] = HB_obs;
HB[ii_miss] = HB_miss;
}
model {
b_0 ~ normal(0,100);
b_X ~ normal(0,100);
b_HB ~ normal(0,100);
HB_miss ~ bernoulli(0.5); // This is where the parser gives me an error
y ~ bernoulli_logit(b_0 + b_X * X + b_HB * HB); // model
}
有什么想法可以在STAN中有效地在HB_miss之前分配伯努利吗?