0

我正在尝试在 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-2gcc 11.1.0-1.

4

0 回答 0