Created
March 16, 2022 21:54
-
-
Save JLBaroja/fa2fc31a8af7d3f91d912a0da1508736 to your computer and use it in GitHub Desktop.
Cool traceplot to explore JAGS chains
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
new_traceplot <- function(bys,node_name){ | |
# Grafica cada cadena del nodo 'node_name' dentro del | |
# objeto 'bys' que contiene el resultado de JAGS. | |
# El nombre del nodo 'node_name' permite indexación, | |
# es decir que permite graficar una sola posición de nodos | |
# multidimensionales. | |
# Las cadenas (y sus dimensiones) están en la partición | |
# 'bys$BUGSoutput$sims.array', | |
# en donde 'bys' es la lista en R que guarda el resultado | |
# que genera la función 'jags()'. | |
n_iter <- dim(bys$BUGSoutput$sims.array)[1] # Primera dimensión *siempre* tiene iteraciones | |
n_chains <- dim(bys$BUGSoutput$sims.array)[2] # Segunda *siempre* tiene número de cadenas | |
iterations <- bys$BUGSoutput$sims.array[,,node_name] # 'node_name' es una cadena que incluye índice | |
# e.g., 'node_name' puede ser 'theta_post[2]', 'a_post[9]', o 'k_prior[45,12,1]' si dicho nodo tuviera | |
# tres dimensiones... | |
# Extrayendo información adicional (p.s., ¡todo está en algún lado de 'bys'!): | |
r_hat <- round(bys$BUGSoutput$summary[node_name,'Rhat'],3) # Rhat | |
n_eff <- bys$BUGSoutput$summary[node_name,'n.eff'] # n.eff | |
model_file <- bys$model.file # Nombre del archivo de texto que contiene el modelo | |
n_burnin <- bys$BUGSoutput$n.burnin | |
n_thin <- bys$BUGSoutput$n.thin | |
n_iter_tot <- bys$BUGSoutput$n.iter | |
paleta <- c('#fd2c3b','#6314af','#fe8f06','#88dc40','#21f0b6','#2379cc','#e1d936') | |
cols <- sample(x = paleta,size = n_chains) # Colores aleatorios cada que corre la función | |
ylims <- c(min(iterations),max(iterations)) | |
par(bg='#000000',fg='#aaaaaa',col.axis='#aaaaaa',oma=c(1,1,1,1)) | |
plot(NULL,xlim=c(1,n_iter),ylim=ylims,axes=F,ann=F) | |
for(cc in 1:n_chains){ | |
lines(1:n_iter,iterations[,cc],lwd=2, | |
col=cols[cc]) | |
} | |
axis(1) | |
mtext('iteraciones',1,line=2,cex=1.5) | |
axis(2,cex.axis=1.5) | |
mtext('nodo',2,line=2.5,cex=1.5) | |
# 'paste()' permite crear una sola cadena de caracteres pegando varias cadenas | |
# definidas en objetos diferentes: | |
mtext(paste(model_file,', ', | |
node_name, | |
', R.hat=',r_hat, | |
', n.eff=',n_eff, | |
'\nn_cadenas=',n_chains, | |
', iteraciones por cadena=',n_iter_tot, | |
', iteraciones "quemadas"=',n_burnin, | |
', n_thin=',n_thin, | |
sep=''),cex=2) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment