1

我正在尝试使用 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 似乎不支持随机整数变量,只有连续变量。

4

2 回答 2

4

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

于 2016-03-11T17:57:32.910 回答
0

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

然而,修复语法问题并不能修复统计模型。我相信手册中有一个连续变化点模型可以满足您的要求,因此请检查那里的解决方案。

于 2016-03-10T22:21:30.030 回答