2016-12-11 11 views
0

Я пытаюсь запустить его код модели с откосами:R - JAGS - Runtime Error

model{ 
    ## priors 
    b0 ~ dnorm(0, 5) 
    b1 ~ dnorm(0, 5) 
    b2 ~ dnorm(0, 5) 
    b3 ~ dnorm(0, 5) 
    b4 ~ dnorm(0, 5) 
    b5 ~ dnorm(0, 5) 
    b6 ~ dnorm(0, 5) 
    sigmayear ~ dt(0, 1, 2) I(0,) 
    ## likelihood 
    for(i in 1:nind){ 
    for(t in 2:last[i]){ 
     y[i,t] ~ dbern(prop[i, t - 1]) 
     prop[i, t - 1] <- y[i, t - 1] * (1 - d[i, t - 1]) 
     logit(d[i, t - 1]) <- 
     b0 + b1 * temp[i, t] + b2 * sex[i] + b3 * day[t] + 
     b4 * strat[i] + b5 * temp[i, t] * sex[i] + 
     b6 * temp[i, t] * strat[i] + sigmayear * ryear[years[i]] 
    } # close t 
    } # close i 
    for(k in 1:nyears){ 
    ryear[k] ~ dnorm(0, 1) 
    } #close k 
} 

Данные матрицы я создал должно быть прекрасно:

> str(bugs.data) 
List of 9 
$ y  : num [1:124, 1:203] 1 1 1 1 1 1 1 1 1 1 ... 
$ nind : int 124 
$ last : num [1:124] 98 98 78 91 78 98 87 88 98 111 ... 
$ temp : num [1:124, 1:203] 1.33 1.33 1.33 1.33 1.33 ... 
$ sex : num [1:124] 1 0 1 1 1 0 0 0 0 1 ... 
$ day : num [1:203] -1.72 -1.7 -1.69 -1.67 -1.65 ... 
$ strat : num [1:124] 0 0 0 0 0 0 0 0 0 0 ... 
$ years : num [1:124] 7 7 7 7 7 7 7 7 7 1 ... 
$ nyears: int 8 

Фактический вызов с ними параметры работает прежде ...

ni <- 5000 #number of sims 
nt <- 1 #get rid of 
nb <- 2000 #warm in 
nc <- 3 # number of chains 

Но по какой-то причине, когда я хочу назвать это происходит:

> ms <- jags(bugs.data, inits, parameters, "knownfateSurvivalfat.txt", n.chains = nc, n.thin = nt, n.iter = ni, n.burnin = nb, working.directory = getwd()) 
Compiling model graph 
    Resolving undeclared variables 
Deleting model 

Fehler in jags.model(model.file, data = data, inits = init.values, n.chains = n.chains, : 
    RUNTIME ERROR: 
Compilation error on line 14. 
Index out of range taking subset of y 

У кого-нибудь есть идеи, почему «у» должно быть вне пределов досягаемости?

«я» всегда должен идти от 1 до 124, которая соответствует матрице (bugs.data) и «т» идет от 2 до 203, который также отлично ....

+1

Прежде, чем идти в траву на этом, вы можете подтвердить, что 'макс (последний)' является 203 или меньше? –

ответ

0

Убедитесь в ваших данных список, он выглядит как list("y"=y,...), а не list(y="y"...).

Просто догадка.

Matt