将参数转换为 int 的 Stan 错误

Stan error casting parameter to int

我正在尝试使用 STAN 进行切换点分析。我有一个数据向量 y,它有两个不同的高斯随机变量序列。目标是找到可能发生偏移的后验分布。我正在使用 RStan 到 运行 它,但错误在于 STAN。

这是STAN代码;

data {
  int N;
  vector[N] y;
}
parameters {
  real mu1;
  real sigma1;
  real mu2;
  real sigma2;
  real<lower=0, upper=N> shift;
}
model {
  int i_shift <- round(shift);
  for(n1 in 1:i_shift)
    y[n1] ~ normal(mu1, sigma1);
  for(n2 in i_shift:N)
    y[n2] ~ normal(mu2, sigma2);
}

解析器(Rstudio自带)报如下错误;

SYNTAX ERROR, MESSAGE(S) FROM PARSER:


ERROR at line 13

 11:    }
 12:    model {
 13:      int i_shift <- round(shift);
                      ^
 14:      for(n1 in 1:i_shift)

PARSER EXPECTED: ";"
Error in stanc(model_code = paste(program, collapse = "\n"), model_name = model_cppname,  : 
  failed to parse Stan model due to the above error.

为什么它不能处理执行转换的变量赋值? STAN 是否需要不同的模式来进行这种分析。我试图在 parameters 中创建一个整数变量,但 STAN 似乎不支持随机整数变量,仅支持连续变量。

Stan 程序(从 v2.9.0 开始)目前没有复合声明和定义。

但是,修复语法问题不会修复统计模型。我相信手册中有一个连续变化点模型可以完成您正在尝试的操作,因此请查看那里的解决方案。

根本原因是 Stan 不允许将实数值赋给整数。回想起来,我们可能根本不会包含 round(),因为它引入了不连续性,从而破坏了可微性,而可微性是我们的 HMC 以及优化和近似推理算法的基础。