第一次使用斯坦。 我从 Coursera 课程中找到的一个示例开始,他们正在使用我试图在 Stan 中重新实现的 JAGS。课程免费旁听,我已链接相关讲座。
模型背景:
(我不知道如何使用 LaTeX,所以我会尽可能地对其进行格式化):
该模型是一个混合模型,其中输入是具有潜在类n
的实数向量。2
他们假设这些类是Z_1 ~ N(mu_1, stdev)
and Z_2 ~ N(mu_2, stdev)
(它是 2 个 Normals 的混合,具有不同mu
的 's 但相同stdev
)。他们假设一个统一的 Dirichlect 先验与 alpha=1
在每个类别中的概率。
每个数据点都是从基于概率向量的分类分布中提取的,它们使用相应的正态似然增加似然性。
我的代码
model_code_coursera = """
data {
int<lower=1> N; //Num Samples
int<lower=1> K; //Num classes
real y[N]; //Input which we are trying to assign to each class
} parameters {
simplex[K] probs; //Prob of being in each class
vector[K] mu; //Center of each class
real<lower=0> prec;
vector<lower=0, upper=K>[N] z; //Array of classes ****(option 1)****
int<lower=0, upper=K>[N] z; // Array of classes ****(option 2)****
} model {
probs ~ dirichlet(rep_vector(1,K));
prec ~ gamma(1/2, 2/2);
for (k in 1:K)
mu[k] ~ normal(-1+2*(k-1), 1/100);
for (n in 1:N) {
z[n] ~ categorical(probs);
y[n] ~ normal(mu[z[n]], prec);
}
}
"""
当我使用选项 1 时出现错误,
No matches for:
real ~ categorical(vector)
Available argument signatures for categorical:
int ~ categorical(vector)
这是有道理的,因为分类的输出是一个 int。
但是,当我做有意义的事情并将 z 定义为整数向量时,正如我在 Stan 备忘单中看到的那样,我得到了一个不同的错误(选项 2)
10: int<lower=0, upper=K>[N] z; // Array of classes
^
11: } model {
-------------------------------------------------
PARSER EXPECTED: <identifier>