我正在尝试使用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似乎不支持随机整数变量,只支持连续整数变量。
答案 0 :(得分:3)
根本原因是Stan不允许将实数赋值给整数。回想起来,我们可能根本不会包括round(),因为它会引入不连续性,从而失去可微性,这是我们HMC的基础和优化以及近似推理算法。
答案 1 :(得分:0)
Stan计划目前没有化合物声明和定义(截至v2.9.0)。
但是,修复语法问题不会修复统计模型。我相信手册中有一个连续的变化点模型可以完成您正在尝试的操作,所以请在那里查看解决方案。