我正在尝试在 Stan 中实现一个超级简单的多级模型,它只估计按星期几分层的数据的分布参数。没有相关的超参数,只是简单的、完全汇集的分层。
data {
int<lower=0> N; // number of data points
int<lower=0> D; // number of days in a week
int<lower=0> day[N]; // day of the week for each data point
real<lower=0> x[N]; // data points
}
parameters {
vector[D] a;
vector[D] b;
}
transformed parameters {
vector[N] a_day;
vector[N] b_day;
for (i in 1:N) {
a_day[i] = a[day[i]];
b_day[i] = b[day[i]];
}
}
model {
a ~ normal(1,10);
b ~ uniform(0.001,100);
x ~ normal(a_day,b_day);
}
我正在使用 pystan 运行模型。使用以下命令可以很好地编译模型:
sm = pystan.StanModel(file='model.stan')
但是当我试图适应它时
fit = sm.sampling(
data = {
'x': data,
'day': day, # numbers 1...7, same size as data
'N': len(data),
'ndays': 7
},
iter = 1000,
chains = 4
)
我收到一堆错误,如下所示:
Rejecting initial value:
Error evaluating the log probability at the initial value.
Exception: normal_lpdf: Scale parameter[15] is -0.635374, but must be > 0! (in 'model.stan' at line 27)
Initialization between (-2, 2) failed after 100 attempts.
Try specifying initial values, reducing ranges of constrained values, or reparameterizing the model.
我不确定出了什么问题。先验不应该b ~ uniform(0.001,100)
将标准偏差参数限制b
为正值吗?任何实际值都应该适用于平均参数a
。
我pystan 2.19.1.1-2
从 Arch Linux 上的 AURpython 3.9.7-2
和gcc 11.1.0-1
.