如果数据列表包含逻辑变量x
,即x=TRUE
或x=FALSE
。
那么如何在Stan文件中声明这样的变量?
例如,如果R对象x
是整数,则
data{
int <lower=0>x;
}
我想知道其逻辑版本。我猜
data{
bool x;
}
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
error in 'foo' at line 16, column 0
-------------------------------------------------
14:
15:
16: bool x;
^
17:
-------------------------------------------------
PARSER EXPECTED: <one of the following:
a variable declaration, beginning with type,
(int, real, vector, row_vector, matrix, unit_vector,
simplex, ordered, positive_ordered,
corr_matrix, cov_matrix,
cholesky_corr, cholesky_cov
or '}' to close variable declarations>
Error in stanc(filename, allow_undefined = TRUE) :
failed to parse Stan model 'foo' due to the above error.
答案 0 :(得分:2)
Stan没有正确的布尔类型。像C和C ++一样,我们使用整数值0表示false,使用值1表示true。要在Stan中实现布尔类型,请将其声明为下限为0(假)和上限为1(真)的整数。
int<lower = 0, upper = 1> c;
R可以将整数类型与逻辑类型区分开,但是可以进行很多转换。例如,如果我们将b
定义为将1与自身进行比较的结果,则其值为TRUE
并且其类型为逻辑(R中的logi
):
> b = (1 == 1)
> b
[1] TRUE
> str(b)
logi TRUE
因此,如果我编写的Stan程序在传递的布尔值上的行为不同,
data {
int<lower = 0, upper = 1> b;
}
parameters {
real y;
}
model {
if (b)
y ~ normal(0, 1);
else
y ~ normal(10, 10);
}
RStan很乐意强制使用布尔值,所以可以拥有
fit <- sampling(model, data = list(b = b))
其中值b
是R中的logi
类型。
答案 1 :(得分:1)
我相信逻辑对于FALSE解析为0L,对于TRUE解析为1L的整数值,因此使用int是合适的。