【问题标题】:Stan error casting parameter to intStan错误将参数转换为int
【发布时间】:2016-03-10 22:01:24
【问题描述】:

我正在尝试使用 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 rstan


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 在边缘化潜在离散参数的章节中只有一个离散变化点模型。
      猜你喜欢
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多