2015-04-05 3 views
1

Я пытаюсь использовать Rstan в качестве примера модели из Кристенсена, Джонсона, Бранскума и байесовских идей и анализа данных Хансона: введение для ученых и статистиков. Авторы используют 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 

(я думаю) Я понимаю, что анализатор говорит мне, что я пытаюсь передать несоответствующие типы данных в многозначная функция в блоке модели, но я не могу понять, откуда это происходит. Я подозреваю, что я делаю что-то неправильно в определении ковариационной матрицы, но это, кажется, что более чем один аргумент имеет неправильный тип данных ...

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 
} 

ответ

2

ошибка происходит от

mu ~ multi_normal(0,100); 

как вы передаете вектор мю, целое число 0, и целое число 100. Я полагаю, вы хотите

mu ~ normal(0,100); 

, который обрабатывает элементы mu как независимые и одинаково нормально распределенные со средним 0 и стандартным отклонением 100.

+0

D'oh! Благодаря! Я знал, что это было так просто, что я просто смотрел прямо мимо него ... – psychometriko