Estoy trabajando en un modelo bayesiano no muy elegante en R y JAGS. El objetivo es aislar los errores del codificador en una tarea de análisis de contenido. El código y la salida se dan a continuación.
La cuestión más importante es cómo depurar JAGS. (Asumo que el mismo consejo sería válido para BUGS también.) ¿Qué se supone que debo hacer con un error como "Valores iniciales inválidos" cuando hay casi una docena de valores iniciales diferentes?
Aquí está mi código R:
library(rjags)
library(R2jags)
#Load the data
toy_data <- read.csv("toy_data.csv")
#Rescale data
rescaled_data <- toy_data[,c(3:(2+K))]
for( k in c(1:K) ){
col <- rescaled_data[,c(k)]
rescaled_data[,c(k)] <- (col-min(col))/(max(col)-min(col))
}
codes <- as.matrix(rescaled_data)
doc_ids <- toy_data$docid
coder_ids <- toy_data$coderid
N <- nrow( toy_data ) #Number of document codings
D <- max(toy_data$docid) #Number of documents
I <- max(toy_data$coderid) #Number of coders
K <- dim(toy_data)[2]-2 #Number of attributes
#Package info for jags
jags.data <- list( "doc_ids", "coder_ids", "codes", "N", "D", "I", "K" )
jags.params <- c("z","mu","sigma","sigma_i","sigma_k","mu_dk","alpha_k","beta_k","alpha_i","beta_i")
jags.inits <- list(
"z" <- matrix(rnorm(N*K),nrow=N,ncol=K),
"mu" <- runif(1)*10,
"sigma" <- rgamma(1,10),
"sigma_i" <- rgamma(I,10),
"sigma_k" <- rgamma(K,10),
"mu_dk" <- as.matrix(rnorm(D*K),nrow=D,ncol=K),
"alpha_k" <- rgamma(1,10),
"alpha_i" <- rgamma(1,10),
"alpha_i" <- rgamma(1,10),
"beta_i" <- rgamma(1,10)
)
#Fit the model
jagsfit <- jags(
model.file="coder_model.txt",
data=jags.data,
inits=jags.inits,
jags.params,
n.iter=5000,
)
Este es el modelo JAGS:
model {
for( n in 1:N ){ #Loop over codings
for( k in 1:K ){ #Loop over attributes
#d <- doc_ids[n] #Get document index
#i <- coder_ids[n] #Get code index
codes[n,k] ~ dbern(p[n,k])
logit(p[n,k]) <- z[n,k]
z[n,k] ~ dnorm( mu_dk[doc_ids[n],k], sigma_k[k]*(1+sigma_i[coder_ids[n]]) )
}
}
for( d in 1:D ){
for( k in 1:K ){
mu_dk[d,k] ~ dnorm( mu, sigma )
}
}
for( k in 1:K ){ #Loop over attributes
sigma_k[k] ~ dgamma( alpha_k, beta_k )
}
for( i in 1:I ){ #Loop over coders
sigma_i[i] ~ dgamma( alpha_i, beta_i )
}
#Noninformative priors over alphas and betas
mu ~ dnorm( 0, 10 )
sigma ~ dgamma(10,8)
alpha_k ~ dgamma(10,8)
beta_k ~ dgamma(10,8)
alpha_i ~ dgamma(10,8)
beta_i ~ dgamma(10,8)
}
Estos son los datos:
"docid","coderid","Answer.1","Answer.2"
1,1,3,3
1,2,4,1
1,3,7,2
2,1,3,3
2,2,4,4
2,4,3,1
3,1,3,3
3,2,4,3
3,3,3,4
4,4,5,1
4,5,6,2
4,2,4,3
5,2,5,4
5,3,3,1
5,4,7,2
6,1,3,3
6,5,4,1
6,2,5,2
Y aquí está la salida de R:
Compiling model graph
Resolving undeclared variables
Allocating nodes
Graph Size: 352
Error in jags.model(model.file, data = data, inits = inits, n.chains = n.chains, :
Invalid initial values