Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- variable alpha is not defined in model or data set.
- is.not <- apply( CH, 1, function(x) {
- # si de 1:11 el num de NAs es cero, pon 11
- ifelse( length((1:11)[is.na(x)]) == 0,
- 11,
- # si hay NAs, numeralos de 1:11 menos 1
- as.numeric((1:11)[is.na(x)])[1] - 1
- )
- } )
- is.not <- as.integer(is.not)
- model{
- #### Verosimilitud
- for (i in 1:nind){
- ### Definimos el valor de la variable latente en la primera recaptura
- z[i, 1] <- 1 # en el momento de anillamiento sabemos que esta vivo con probabilidad 1
- for (t in 2: is.not[i]){ # t vuelve a ser indicador de posicion, desde despues del anill hasta el total de columns
- ###### State process
- z[i,t] ~ dbern (mu1[i,t]) # esto realmente es Z[i,t+1]|Z[i,t] ~ ber(psi[i,t] * z[i,t])
- mu1[i,t] <- psi[i,t-1] * z[i,t-1] # t-1 corresponde al valor en la columna anterior para psi. Respecto a z, pone t-1 porque es la manera de expresar la condicionada
- ###### Observation process
- y[i,t] ~ dbern (mu2[i,t]) # esto equivaldria a Y[i,t]|Z[i,t]~ber(z[i,t]p[i,t])
- mu2[i,t] <- eta[i,t-1] * z[i,t] # La matriz de z esta en el mismo orden que la CH, pero la de p, esta atrasada, ademas de ser de 10 columnas (y no 11), por eso es t-1
- }
- }
- #### Previas y limitaciones
- for(i in 1:nind){
- for (t in 1:(is.not[i]-1)) { # t es indicador de posicion, desde la columna 1 hasta maximo de 11-1
- psi[i,t] <- alpha[t] # efectos fijos con respecto al tpo en el estudio
- eta[i,t] <- beta[t] # efectos fijos con respecto al tpo en el estudio
- }
- }
- for (t in 1:(n.occasions-1)){ # vuelve a ser indicador de posicion
- beta[t] ~ dunif(0,1) # le damos una previa poco informativa alpha[t] ~ dunif(0,1) # le damos una previa poco informativa
- }
- }
- known.state.cjs <- function(ch){
- state <- ch
- for (i in 1:dim(ch)[1]){
- n1 <- min(which(ch[i,]==1)) # el primer 1
- n2 <- max(which(ch[i,]==1)) # el ultimo 1
- state[i, n1:n2] <- 1 # sabemos que esta vivo en el tiempo de en medio
- state[i, n1] <- NA # en el primer uno ponemos NA xq las variables latentes están en escala de 2 a 10
- }
- state[state==0] <- NA # si esta muerto tb pongo un NA, es decir, la matriz sera de 1's y NA's
- return(state)
- }
- #### Datos
- bugs.data <- list(y=CH, is.not=is.not, nind=dim(CH)[1], n.occasions=dim(CH)[2], z=known.state.cjs(CH)) # todos los datos
- ##### Funcion para crear valores iniciales para la variable latente z (aqui z es una matriz de ceros, relativos a los ceros reales, y NAs, relativos a los NA reales y a los 1s)
- cjs.init.z <- function(ch, is.not){
- for(i in 1: dim(ch)[1]){ # para todo el numero de filas
- if(sum(ch[i,], na.rm=TRUE)==1) next # si solo hay un 1 (solo se ve en el anillamto) pasa al siguiente paso, le pongo na.rm=true xq tengo NA's y si no no corre
- n2 <- max(which(ch[i,]==1)) # el ultimo 1
- ch[i, 1:n2] <- NA # donde hay 1's, es decir, sabemos q esta vivo, damos valor inicial de NA
- }
- for (i in 1: dim(ch)[1]){ # tengo que darle unas iniciales a los NAs si no peta
- #if(any(is.na(ch[i,]))==TRUE) { lo quito xq en el calendario esto no lo indica
- ch[i, is.not[i]: n.occasions] <- NA # le doy NAs a cuando no esta el individ en el estudio
- #}
- }
- return(ch)
- }
- #### Valores iniciales
- inits <- function(){list(z=cjs.init.z(CH, is.not), alpha=runif(10,0,1), beta=runif(10,0,1))}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement