Stan错误将参数转换为int

时间:2016-03-10 22:01:25

标签: stan rstan

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

Stan计划目前没有化合物声明和定义(截至v2.9.0)。

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