저는 Rstan을 사용하여 Christensen, Johnson, Branscum 및 Hanson의 베이지안 아이디어 및 데이터 분석 : 과학자 및 통계학자를위한 소개의 예제 모델을 맞추려고합니다. 저자는 WinBUGS를 사용하므로 약간의 조정이 필요합니다. 데이터는 여기에 있으며 WinBUGS 코드는이 게시물의 맨 아래에 복사됩니다. 이것은 매우 간단한 모델이지만 완전한 초보자이며 오류를 해결하는 방법을 알 수 없습니다. 내 Stan 코드는 다음과 같습니다.
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 코드 Stan 코드를 모델링하고 있습니다.
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
}
오류는
mu ~ multi_normal(0,100);
벡터 mu, 정수 0, 정수 100을 전달합니다.
mu ~ normal(0,100);
mu의 요소를 독립적이고 평균 0과 표준 편차 100으로 동일하게 정규 분포 된 것으로 취급합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다