1
我正在嘗試使用Rstan來擬合來自Christensen,Johnson,Branscum和Hanson的貝葉斯理念和數據分析的示例模型:科學家和統計人員的介紹。作者使用WinBUGS,所以一些適應是必要的。數據是here和WinBUGS代碼複製在這篇文章的底部。這是一個非常簡單的模型,但我是一個完整的初學者,我無法弄清楚如何解決我得到的錯誤。我斯坦代碼如下:簡單多元線性模型的Rstan代碼
data {
int N_subjects;
int N_items;
matrix[N_subjects,N_items] y;
}
parameters {
vector[N_items] mu;
real<lower=0> sigma;
real<lower=-1,upper=1> rho;
}
transformed parameters {
cov_matrix[N_items] Sigma;
for (j in 1:N_items)
for (k in 1:N_items)
Sigma[j,k] <- pow(sigma,2)*pow(rho,step(abs(j-k)-0.5));
}
model {
sigma ~ uniform(0,100);
rho ~ uniform(0,1);
mu ~ multi_normal(0,100);
for (i in 1:N_subjects)
y[i] ~ multi_normal(mu,Sigma);
}
分析器引發以下錯誤:
Error in stanc(file = file, model_code = model_code, model_name = model_name, :
failed to parse Stan model 'model' with error message:
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
no matches for function name="multi_normal_log"
arg 0 type=vector
arg 1 type=int
arg 2 type=int
available function signatures for multi_normal_log:
0. multi_normal_log(vector, vector, matrix) : real
1. multi_normal_log(vector, row vector, matrix) : real
2. multi_normal_log(row vector, vector, matrix) : real
3. multi_normal_log(row vector, row vector, matrix) : real
4. multi_normal_log(vector, vector[1], matrix) : real
5. multi_normal_log(vector, row vector[1], matrix) : real
6. multi_normal_log(row vector, vector[1], matrix) : real
7. multi_normal_log(row vector, row vector[1], matrix) : real
8. multi_normal_log(vector[1], vector, matrix) : real
9. multi_normal_log(vector[1], row vector, matrix) : real
10. multi_normal_log(row vector[1], vector, matrix) : real
11. multi_normal_log(row vector[1], row vector, matrix) : real
12. multi_normal_log(vector[1], vector
(我認爲)我明白,解析器告訴我,我試圖通過不恰當的數據類型模型塊中的multi_normal函數,但我無法弄清楚它是從哪裏來的。我懷疑我做錯了在定義協方差矩陣,但現在看來,不止一個參數有一個不正確的數據類型...
WinBUGS軟件代碼,我在我的造型斯坦代碼:
model{
for(i in 1:30){
for(j in 1:6){
logy[i,j] <- log(y[i,j])
}
}
for(i in 1:30){logy[i,1:6]~dmnorm(m[1:6],precision[1:6,1:6])}
for(j in 1:6){
for(k in 1:6){
covariance[j,k] <- sigma2*pow(rho, step(abs(j-k)-0.5))
}
}
for(i in 1:6){ m[i] <- mu }
precision[1:6,1:6] <- inverse(covariance[1:6,1:6])
sigma ~ dunif(0,100)
mu ~ dnorm(0,0.001)
L <- -1/(6-1)
rho ~ dunif(L,1)
sigma2 <- sigma*sigma
tau <- 1/sigma2
}
作爲要傳遞一個矢量畝,整數0和整數100。我想
D'oh!謝謝!我知道這件事很簡單,我只是看着它過去... – psychometriko 2015-04-06 12:34:33