我正在努力学习STAN。我知道STAN中的矢量化循环(如在R中)提高了效率。但我还没弄清楚如何正确地做到这一点。下面的STAN模型来自Sorenson等人。
data {
int<lower=1> N; //number of data points
real rt[N]; //reading time
real<lower=-1,upper=1> so[N]; //predictor
}
parameters {
vector[2] beta; //intercept and slope
real<lower=0> sigma_e; //error sd
}
model {
real mu;
for (i in 1:N){ // likelihood
mu = beta[1] + beta[2]*so[i];
rt[i] ~ lognormal(mu,sigma_e);
}
}
我尝试了以下对模型块的编辑:
model {
vector[N] mu;
mu = beta[1] + beta[2]*so;
rt ~ lognormal(mu,sigma_e);
}
但我被告知这个块格式错误,第3行的“so”后面有错误。我认为这条线在R中有用,但显然不在STAN中。我究竟做错了什么?在此先感谢您的帮助。
我似乎已经弄明白了。我不得不编辑数据块以输入“so”作为向量而不是简单地作为真实[N]。 “real [N]”和“vector [N]”之间有什么区别?
data {
int<lower=1> N; //number of data points
real rt[N]; //reading time
vector<lower=-1,upper=1>[N] so; //predictor
}