6  Modelación Multinivel con R y JAGS

Este capítulo introduce el ajuste de modelos multinivel en JAGS ejecutados desde R.

6.1 Por qué aprender JAGS

La función lmer() en R permite ajustar modelos multinivel lineales y generalizados con rapidez. Sin embargo, cuando el número de grupos es pequeño o el modelo es complejo, puede haber poca información para estimar con precisión los parámetros de varianza. En esos casos, la inferencia bayesiana mediante JAGS ofrece estimaciones más razonables al promediar sobre la incertidumbre de todos los parámetros.

6.1.1 Estrategia recomendada

  1. Comenzar con regresiones clásicas usando lm() y glm().
  2. Ajustar modelos multinivel con interceptos y pendientes variables mediante lmer().
  3. Ajustar modelos bayesianos completos usando JAGS, obteniendo simulaciones que reflejan la incertidumbre inferencial.
  4. Para modelos grandes o complejos, realizar programación adicional en R.

La rapidez de lmer() facilita la exploración de diferentes especificaciones, mientras que la flexibilidad de JAGS permite comprender los modelos más profundamente. Además, JAGS ofrece un formato abierto que permite expandir los modelos de forma más general.

6.2 Inferencia bayesiana y distribuciones previas

En un modelo multinivel, la dificultad principal radica en estimar simultáneamente el modelo de nivel de datos y el modelo de nivel de grupo. La inferencia bayesiana aborda esto considerando el modelo de nivel de grupo como información previa sobre los parámetros individuales.

6.2.1 Tipos de distribuciones previas

En este contexto, los parámetros suelen tener dos tipos de distribuciones previas:

  • Modelos de nivel de grupo (típicamente normales o regresiones lineales).
  • Distribuciones uniformes no informativas.

Estas últimas sirven como punto de partida o referencia en ausencia de información adicional.

6.2.2 Regresión clásica

La regresión clásica y los modelos lineales generalizados son casos particulares de los modelos multinivel, en los que no hay modelo de nivel de grupo. En términos bayesianos, esto equivale a usar distribuciones uniformes no informativas:

\[ y_i = X_i \beta + \epsilon_i, \quad \epsilon_i \sim N(0, \sigma_y^2), \]

donde las distribuciones previas son uniformes para los componentes de \(\beta\) y para \(\sigma_y\) en el intervalo \((0, \infty)\). Para regresión logística:

\[ \Pr(y_i = 1) = \operatorname{logit}^{-1}(X_i \beta), \]

también se emplean distribuciones previas uniformes sobre los coeficientes de \(\beta\).

6.2.3 Modelo con intercepto variable

El modelo más simple con efectos aleatorios es:

\[ y_i \sim N(\alpha_{j[i]} + \beta x_i, \sigma_y^2), \quad \alpha_j \sim N(\mu_\alpha, \sigma_\alpha^2). \]

Aquí, los interceptos de grupo \(\alpha_j\) tienen una distribución normal con media \(\mu_\alpha\) y desviación estándar \(\sigma_\alpha\), denominadas hiperparámetros, que también se estiman a partir de los datos. La distribución previa completa es:

\[ p(\alpha, \beta, \mu_\alpha, \sigma_y, \sigma_\alpha) \propto \prod_{j=1}^{J} N(\alpha_j \mid \mu_\alpha, \sigma_\alpha^2). \]

6.2.4 Modelo con intercepto y pendiente variables

Un modelo más general permite que tanto interceptos como pendientes varíen entre grupos:

\[ y_i = \alpha_{j[i]} + \beta_{j[i]} x_i + \epsilon_i, \quad (\alpha_j, \beta_j) \sim \text{Normal}_2(\mu, \Sigma). \]

Este modelo emplea una distribución normal bivariante para los parámetros de grupo, con distribuciones previas uniformes independientes sobre los hiperparámetros.

6.2.5 Modelo multinivel con predictores de nivel de grupo

Considere un modelo con un predictor a nivel individual (\(x_i\)) y otro a nivel de grupo (\(u_j\)):

\[ \begin{aligned} y_i &= \alpha_{j[i]} + \beta x_i + \epsilon_i, \quad \epsilon_i \sim N(0, \sigma_y^2), \\ \alpha_j &= \gamma_0 + \gamma_1 u_j + \eta_j, \quad \eta_j \sim N(0, \sigma_\alpha^2). \end{aligned} \]

La primera ecuación es el modelo de datos (verosimilitud), y la segunda es el modelo de grupo (prior). Los parámetros \(\alpha_j\) tienen medias esperadas \(\hat{\alpha}_j = \gamma_0 + \gamma_1 u_j\) y desviación estándar \(\sigma_\alpha\), lo que implica que no son intercambiables, pues sus distribuciones previas dependen de \(u_j\).

Alternativamente, puede interpretarse como un modelo con errores de grupo \(\eta_j\) con distribución común \(N(0, \sigma_\alpha^2)\), que representa la variación entre grupos.

6.2.6 Distribuciones previas no informativas

Las distribuciones previas no informativas permiten realizar inferencia bayesiana cuando se dispone de poca información externa. Se consideran modelos de referencia o punto de partida para comparaciones. Sin embargo, si el posterior resultante no tiene sentido o contradice conocimientos previos, el modelo debe modificarse para incluir esa información adicional.

6.3 Ajuste y comprensión de un modelo multinivel de intercepto variable usando R y JAGS

Introducimos JAGS recorriendo el modelo de intercepto variable para niveles logarítmicos de radón. Primero se ajustan modelos clásicos con \(\operatorname{lm}()\), después un ajuste rápido multinivel con \(\operatorname{lmer}()\), y finalmente el modelo multinivel en JAGS llamado desde R.

6.3.1 Preparación de los datos en R

Se cargan mediciones de radón y el piso de medición para 919 viviendas de 85 condados de Minnesota. Por conveniencia, se trabaja con \(\log(\text{radón})\) y se corrige el valor 0.0 a 0.1 antes de aplicar logaritmo.

Indicadores de condado. Se crean índices de condado del 1 al 85.

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.2
✔ ggplot2   4.0.0     ✔ tibble    3.3.0
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.1.0     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tibble)

# Versión tidyverse que respeta la lógica original
srrs2 <- read.table("../ARM_Data/radon/srrs2.dat", header = TRUE, sep = ",")
mn <- srrs2$state == "MN"
radon <- srrs2$activity[mn]
y <- log(ifelse(radon == 0, 0.1, radon))
n <- length(radon)
x <- srrs2$floor[mn]  # 0: sótano, 1: primer piso

srrs2_fips <- srrs2$stfips * 1000 + srrs2$cntyfips
county_name <- as.vector(srrs2$county[mn])
uniq_name <- unique(county_name)
J <- length(uniq_name)
county <- rep(NA_integer_, length(county_name))
for (i in seq_len(J)) {
  county[county_name == uniq_name[i]] <- i
}

6.3.2 Regresión clásica con pooling completo en R

Se ajusta una regresión simple ignorando indicadores de condado (pooling completo):

lm.pooled <- lm(y ~ x)
summary(lm.pooled)

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.6293 -0.5383  0.0342  0.5603  2.5486 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.32674    0.02972  44.640   <2e-16 ***
x           -0.61339    0.07284  -8.421   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.8226 on 917 degrees of freedom
Multiple R-squared:  0.07178,   Adjusted R-squared:  0.07077 
F-statistic: 70.91 on 1 and 917 DF,  p-value: < 2.2e-16

6.3.3 Regresión clásica sin pooling en R

Se incluyen un término constante y 84 indicadores de condado (referencia: condado 1):

lm.unpooled.0 <- lm(y ~ x + factor(county))
summary(lm.unpooled.0)

Call:
lm(formula = y ~ x + factor(county))

Residuals:
     Min       1Q   Median       3Q      Max 
-3.14595 -0.45405  0.00065  0.45376  2.65987 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)       0.84054    0.37866   2.220  0.02670 *  
x                -0.72054    0.07352  -9.800  < 2e-16 ***
factor(county)2   0.03428    0.39274   0.087  0.93047    
factor(county)3   0.68816    0.57854   1.189  0.23459    
factor(county)4   0.71218    0.47470   1.500  0.13392    
factor(county)5   0.59203    0.53487   1.107  0.26867    
factor(county)6   0.67247    0.57802   1.163  0.24500    
factor(county)7   1.17162    0.42892   2.732  0.00644 ** 
factor(county)8   1.14904    0.53519   2.147  0.03208 *  
factor(county)9   0.16250    0.44764   0.363  0.71669    
factor(county)10  0.72336    0.48861   1.480  0.13913    
factor(county)11  0.56059    0.50775   1.104  0.26988    
factor(county)12  0.88971    0.53519   1.662  0.09680 .  
factor(county)13  0.19818    0.48861   0.406  0.68514    
factor(county)14  1.14784    0.42886   2.677  0.00759 ** 
factor(county)15  0.49743    0.53519   0.929  0.35292    
factor(county)16 -0.17568    0.65534  -0.268  0.78871    
factor(county)17  0.43426    0.53613   0.810  0.41818    
factor(county)18  0.28101    0.43672   0.643  0.52011    
factor(county)19  0.49777    0.39027   1.275  0.20251    
factor(county)20  0.95977    0.57802   1.660  0.09720 .  
factor(county)21  0.89345    0.45467   1.965  0.04974 *  
factor(county)22 -0.20375    0.48831  -0.417  0.67660    
factor(county)23  0.55945    0.65534   0.854  0.39353    
factor(county)24  1.26108    0.45456   2.774  0.00566 ** 
factor(county)25  1.11018    0.42892   2.588  0.00981 ** 
factor(county)26  0.52004    0.38549   1.349  0.17770    
factor(county)27  0.93282    0.48831   1.910  0.05644 .  
factor(county)28  0.40105    0.50807   0.789  0.43013    
factor(county)29  0.21546    0.57802   0.373  0.70942    
factor(county)30  0.08522    0.44204   0.193  0.84718    
factor(county)31  1.18003    0.50775   2.324  0.02036 *  
factor(county)32  0.39575    0.53519   0.739  0.45983    
factor(county)33  1.22133    0.53519   2.282  0.02274 *  
factor(county)34  0.74990    0.57854   1.296  0.19527    
factor(county)35 -0.02134    0.47470  -0.045  0.96415    
factor(county)36  2.11842    0.65534   3.233  0.00128 ** 
factor(county)37 -0.43845    0.45467  -0.964  0.33516    
factor(county)38  1.02717    0.53519   1.919  0.05529 .  
factor(county)39  0.90752    0.50743   1.788  0.07407 .  
factor(county)40  1.47526    0.53487   2.758  0.00594 ** 
factor(county)41  1.12661    0.46330   2.432  0.01524 *  
factor(county)42  0.52044    0.84590   0.615  0.53856    
factor(county)43  0.76170    0.45511   1.674  0.09457 .  
factor(county)44  0.20045    0.47418   0.423  0.67261    
factor(county)45  0.45487    0.43252   1.052  0.29325    
factor(county)46  0.37407    0.50775   0.737  0.46150    
factor(county)47  0.04339    0.65534   0.066  0.94723    
factor(county)48  0.30758    0.45467   0.676  0.49892    
factor(county)49  0.86157    0.43256   1.992  0.04672 *  
factor(county)50  1.65266    0.84590   1.954  0.05107 .  
factor(county)51  1.32450    0.53519   2.475  0.01353 *  
factor(county)52  1.08715    0.57802   1.881  0.06034 .  
factor(county)53  0.41026    0.57776   0.710  0.47784    
factor(county)54  0.46621    0.40987   1.137  0.25567    
factor(county)55  0.77745    0.46330   1.678  0.09371 .  
factor(county)56  0.26056    0.57854   0.450  0.65256    
factor(county)57 -0.07836    0.48831  -0.160  0.87255    
factor(county)58  1.02038    0.53487   1.908  0.05677 .  
factor(county)59  0.88124    0.53519   1.647  0.10002    
factor(county)60  0.43885    0.65534   0.670  0.50327    
factor(county)61  0.31819    0.40132   0.793  0.42809    
factor(county)62  1.14247    0.50743   2.251  0.02462 *  
factor(county)63  0.83016    0.57776   1.437  0.15113    
factor(county)64  1.00729    0.44181   2.280  0.02286 *  
factor(county)65  0.45858    0.65534   0.700  0.48427    
factor(county)66  0.82520    0.42950   1.921  0.05503 .  
factor(county)67  0.96258    0.43252   2.226  0.02631 *  
factor(county)68  0.24948    0.46357   0.538  0.59060    
factor(county)69  0.40191    0.53519   0.751  0.45288    
factor(county)70  0.02709    0.38476   0.070  0.94388    
factor(county)71  0.65130    0.40740   1.599  0.11027    
factor(county)72  0.73936    0.44788   1.651  0.09916 .  
factor(county)73  0.95122    0.65534   1.451  0.14702    
factor(county)74  0.14650    0.53519   0.274  0.78436    
factor(county)75  0.88318    0.57776   1.529  0.12674    
factor(county)76  1.16790    0.53487   2.184  0.02928 *  
factor(county)77  0.98114    0.47418   2.069  0.03884 *  
factor(county)78  0.44515    0.50754   0.877  0.38070    
factor(county)79 -0.22566    0.53487  -0.422  0.67321    
factor(county)80  0.48898    0.39445   1.240  0.21545    
factor(county)81  1.86899    0.57854   3.231  0.00128 ** 
factor(county)82  1.38947    0.84590   1.643  0.10084    
factor(county)83  0.78238    0.43250   1.809  0.07082 .  
factor(county)84  0.80481    0.43269   1.860  0.06323 .  
factor(county)85  0.34598    0.65534   0.528  0.59768    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.7564 on 833 degrees of freedom
Multiple R-squared:  0.287, Adjusted R-squared:  0.2142 
F-statistic: 3.945 on 85 and 833 DF,  p-value: < 2.2e-16

Para predicciones por condado, es conveniente quitar la constante y dar a cada condado su propio intercepto:

lm.unpooled <- lm(y ~ x + factor(county) - 1)
summary(lm.unpooled)

Call:
lm(formula = y ~ x + factor(county) - 1)

Residuals:
     Min       1Q   Median       3Q      Max 
-3.14595 -0.45405  0.00065  0.45376  2.65987 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
x                -0.72054    0.07352  -9.800  < 2e-16 ***
factor(county)1   0.84054    0.37866   2.220 0.026701 *  
factor(county)2   0.87482    0.10498   8.333 3.23e-16 ***
factor(county)3   1.52870    0.43946   3.479 0.000530 ***
factor(county)4   1.55272    0.28897   5.373 1.00e-07 ***
factor(county)5   1.43257    0.37866   3.783 0.000166 ***
factor(county)6   1.51301    0.43672   3.464 0.000558 ***
factor(county)7   2.01216    0.20243   9.940  < 2e-16 ***
factor(county)8   1.98958    0.37999   5.236 2.08e-07 ***
factor(county)9   1.00304    0.23931   4.191 3.07e-05 ***
factor(county)10  1.56391    0.31099   5.029 6.04e-07 ***
factor(county)11  1.40113    0.33828   4.142 3.80e-05 ***
factor(county)12  1.73025    0.37821   4.575 5.49e-06 ***
factor(county)13  1.03872    0.30881   3.364 0.000804 ***
factor(county)14  1.98838    0.20325   9.783  < 2e-16 ***
factor(county)15  1.33797    0.37999   3.521 0.000453 ***
factor(county)16  0.66486    0.53487   1.243 0.214204    
factor(county)17  1.27480    0.38221   3.335 0.000890 ***
factor(county)18  1.12155    0.21913   5.118 3.83e-07 ***
factor(county)19  1.33831    0.09541  14.026  < 2e-16 ***
factor(county)20  1.80032    0.43672   4.122 4.13e-05 ***
factor(county)21  1.73399    0.25227   6.873 1.23e-11 ***
factor(county)22  0.63679    0.30905   2.060 0.039663 *  
factor(county)23  1.39999    0.53613   2.611 0.009183 ** 
factor(county)24  2.10162    0.25267   8.318 3.64e-16 ***
factor(county)25  1.95072    0.20243   9.636  < 2e-16 ***
factor(county)26  1.36058    0.07422  18.332  < 2e-16 ***
factor(county)27  1.77336    0.30978   5.725 1.45e-08 ***
factor(county)28  1.24159    0.34115   3.639 0.000290 ***
factor(county)29  1.05600    0.43672   2.418 0.015818 *  
factor(county)30  0.92576    0.22807   4.059 5.39e-05 ***
factor(county)31  2.02057    0.33828   5.973 3.45e-09 ***
factor(county)32  1.23629    0.37821   3.269 0.001124 ** 
factor(county)33  2.06187    0.37821   5.452 6.58e-08 ***
factor(county)34  1.59044    0.43946   3.619 0.000314 ***
factor(county)35  0.81920    0.28897   2.835 0.004695 ** 
factor(county)36  2.95897    0.53613   5.519 4.55e-08 ***
factor(county)37  0.40209    0.25227   1.594 0.111345    
factor(county)38  1.86772    0.37999   4.915 1.07e-06 ***
factor(county)39  1.74807    0.33860   5.163 3.05e-07 ***
factor(county)40  2.31580    0.37866   6.116 1.48e-09 ***
factor(county)41  1.96715    0.26759   7.351 4.69e-13 ***
factor(county)42  1.36098    0.75642   1.799 0.072343 .  
factor(county)43  1.60224    0.25543   6.273 5.69e-10 ***
factor(county)44  1.04099    0.28609   3.639 0.000291 ***
factor(county)45  1.29541    0.21101   6.139 1.28e-09 ***
factor(county)46  1.21461    0.33828   3.591 0.000349 ***
factor(county)47  0.88393    0.53613   1.649 0.099583 .  
factor(county)48  1.14812    0.25227   4.551 6.13e-06 ***
factor(county)49  1.70211    0.21010   8.102 1.93e-15 ***
factor(county)50  2.49321    0.75642   3.296 0.001022 ** 
factor(county)51  2.16504    0.37821   5.724 1.45e-08 ***
factor(county)52  1.92769    0.43672   4.414 1.15e-05 ***
factor(county)53  1.25080    0.43741   2.860 0.004348 ** 
factor(county)54  1.30676    0.15802   8.270 5.28e-16 ***
factor(county)55  1.61799    0.26885   6.018 2.64e-09 ***
factor(county)56  1.10110    0.43946   2.506 0.012415 *  
factor(county)57  0.76218    0.30905   2.466 0.013855 *  
factor(county)58  1.86092    0.37866   4.915 1.07e-06 ***
factor(county)59  1.72178    0.37999   4.531 6.73e-06 ***
factor(county)60  1.27939    0.53487   2.392 0.016979 *  
factor(county)61  1.15873    0.13389   8.654  < 2e-16 ***
factor(county)62  1.98301    0.33860   5.856 6.80e-09 ***
factor(county)63  1.67070    0.43741   3.820 0.000144 ***
factor(county)64  1.84784    0.22817   8.099 1.97e-15 ***
factor(county)65  1.29912    0.53487   2.429 0.015357 *  
factor(county)66  1.66574    0.20648   8.067 2.50e-15 ***
factor(county)67  1.80312    0.21101   8.545  < 2e-16 ***
factor(county)68  1.09002    0.26743   4.076 5.02e-05 ***
factor(county)69  1.24245    0.37821   3.285 0.001062 ** 
factor(county)70  0.86763    0.07096  12.227  < 2e-16 ***
factor(county)71  1.49184    0.15174   9.832  < 2e-16 ***
factor(county)72  1.57990    0.23920   6.605 7.08e-11 ***
factor(county)73  1.79176    0.53487   3.350 0.000845 ***
factor(county)74  0.98704    0.37821   2.610 0.009223 ** 
factor(county)75  1.72372    0.43741   3.941 8.80e-05 ***
factor(county)76  2.00844    0.37866   5.304 1.45e-07 ***
factor(county)77  1.82168    0.28609   6.367 3.17e-10 ***
factor(county)78  1.28569    0.33956   3.786 0.000164 ***
factor(county)79  0.61488    0.37866   1.624 0.104785    
factor(county)80  1.32952    0.11181  11.890  < 2e-16 ***
factor(county)81  2.70953    0.43946   6.166 1.09e-09 ***
factor(county)82  2.23001    0.75642   2.948 0.003286 ** 
factor(county)83  1.62292    0.21048   7.711 3.57e-14 ***
factor(county)84  1.64535    0.20987   7.840 1.38e-14 ***
factor(county)85  1.18652    0.53487   2.218 0.026801 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.7564 on 833 degrees of freedom
Multiple R-squared:  0.7671,    Adjusted R-squared:  0.7431 
F-statistic: 31.91 on 86 and 833 DF,  p-value: < 2.2e-16

Nota: El \(R^2\) cambia al remover la constante debido a la definición de varianza explicada en lm() para modelos sin intercepto.

6.3.4 Configuración de un modelo multinivel en JAGS

Se reemplaza el código JAGS para el problema del radón, con interceptos por condado y pendiente común:

library(rjags)
Loading required package: coda
Linked to JAGS 4.3.0
Loaded modules: basemod,bugs
library(coda)

modelo_jags <- "
model {
  for (i in 1:n) {
    y[i] ~ dnorm(y_hat[i], tau_y)
    y_hat[i] <- a[county[i]] + b * x[i]
  }
  # Efectos de condado
  for (j in 1:J) {
    a[j] ~ dnorm(mu_a, tau_a)
  }
  # Priors (no informativos)
  b ~ dnorm(0, 1.0E-4)
  mu_a ~ dnorm(0, 1.0E-4)
  sigma_y ~ dunif(0, 100)
  sigma_a ~ dunif(0, 100)
  tau_y <- pow(sigma_y, -2)
  tau_a <- pow(sigma_a, -2)
}
"

6.3.5 Llamado a JAGS desde R

Se preparan datos, valores iniciales y parámetros a monitorear, y se ejecuta JAGS:

radon_data <- list(
  n = n,
  J = J,
  y = as.numeric(y),
  x = as.numeric(x),
  county = as.integer(county)
)

inits_fun <- function() {
  list(
    a = rnorm(J, 0, 1),
    b = rnorm(1, 0, 1),
    mu_a = rnorm(1, 0, 1),
    sigma_y = runif(1, 0.1, 2),
    sigma_a = runif(1, 0.1, 2)
  )
}

params <- c("a", "b", "mu_a", "sigma_y", "sigma_a")

set.seed(123)
mod <- jags.model(textConnection(modelo_jags), data = radon_data, inits = inits_fun, n.chains = 3, quiet = TRUE)
update(mod, 1000, progress.bar = "none")  # burn-in corto
mcmc_sims <- coda.samples(model = mod, variable.names = params, n.iter = 2000, progress.bar = "none")

summary(mcmc_sims)

Iterations = 2001:4000
Thinning interval = 1 
Number of chains = 3 
Sample size per chain = 2000 

1. Empirical mean and standard deviation for each variable,
   plus standard error of the mean:

           Mean      SD  Naive SE Time-series SE
a[1]     1.1921 0.25447 0.0032852      0.0033822
a[2]     0.9300 0.10112 0.0013055      0.0013673
a[3]     1.4777 0.26458 0.0034158      0.0036088
a[4]     1.5023 0.21549 0.0027820      0.0028767
a[5]     1.4412 0.25404 0.0032796      0.0033168
a[6]     1.4748 0.26705 0.0034475      0.0034478
a[7]     1.8571 0.17307 0.0022343      0.0026400
a[8]     1.6884 0.25689 0.0033164      0.0035639
a[9]     1.1621 0.19798 0.0025559      0.0026414
a[10]    1.5090 0.23177 0.0029922      0.0030949
a[11]    1.4291 0.23778 0.0030697      0.0031063
a[12]    1.5763 0.25161 0.0032483      0.0032483
a[13]    1.2356 0.22527 0.0029082      0.0029902
a[14]    1.8369 0.17556 0.0022664      0.0024770
a[15]    1.4033 0.25044 0.0032332      0.0033767
a[16]    1.2324 0.28544 0.0036850      0.0039452
a[17]    1.3661 0.25255 0.0032604      0.0034058
a[18]    1.2167 0.18382 0.0023731      0.0023990
a[19]    1.3468 0.09129 0.0011785      0.0011785
a[20]    1.5868 0.26489 0.0034197      0.0034544
a[21]    1.6268 0.20077 0.0025919      0.0025922
a[22]    1.0188 0.23572 0.0030431      0.0037795
a[23]    1.4420 0.29074 0.0037535      0.0038580
a[24]    1.8622 0.20624 0.0026625      0.0031429
a[25]    1.8118 0.17453 0.0022532      0.0026018
a[26]    1.3643 0.07076 0.0009135      0.0008797
a[27]    1.6173 0.22850 0.0029499      0.0031419
a[28]    1.3473 0.23649 0.0030531      0.0031303
a[29]    1.3107 0.26779 0.0034571      0.0034892
a[30]    1.1005 0.19362 0.0024996      0.0026608
a[31]    1.7351 0.24324 0.0031402      0.0035418
a[32]    1.3612 0.25009 0.0032286      0.0032660
a[33]    1.7247 0.25736 0.0033225      0.0037616
a[34]    1.5011 0.27008 0.0034867      0.0037010
a[35]    1.0844 0.22261 0.0028739      0.0030665
a[36]    1.8743 0.29715 0.0038361      0.0051015
a[37]    0.7945 0.21095 0.0027233      0.0033333
a[38]    1.6302 0.25882 0.0033413      0.0036269
a[39]    1.6066 0.24046 0.0031043      0.0032503
a[40]    1.8301 0.25354 0.0032732      0.0040007
a[41]    1.7649 0.21351 0.0027565      0.0029840
a[42]    1.4478 0.31229 0.0040316      0.0043345
a[43]    1.5438 0.20372 0.0026300      0.0029482
a[44]    1.2153 0.21756 0.0028086      0.0030945
a[45]    1.3402 0.17847 0.0023041      0.0023888
a[46]    1.3405 0.24132 0.0031154      0.0031712
a[47]    1.2915 0.28692 0.0037041      0.0038225
a[48]    1.2664 0.20624 0.0026625      0.0026626
a[49]    1.6285 0.18029 0.0023275      0.0023277
a[50]    1.6270 0.31025 0.0040054      0.0041119
a[51]    1.7643 0.25883 0.0033415      0.0037856
a[52]    1.6299 0.26754 0.0034539      0.0034954
a[53]    1.3817 0.26349 0.0034017      0.0031849
a[54]    1.3318 0.14446 0.0018649      0.0018396
a[55]    1.5470 0.21391 0.0027616      0.0028436
a[56]    1.3197 0.26573 0.0034305      0.0036188
a[57]    1.0906 0.23311 0.0030094      0.0033415
a[58]    1.6329 0.25498 0.0032918      0.0035562
a[59]    1.5644 0.24718 0.0031910      0.0032996
a[60]    1.4123 0.28632 0.0036964      0.0037202
a[61]    1.2016 0.12612 0.0016281      0.0016889
a[62]    1.7109 0.24540 0.0031682      0.0033028
a[63]    1.5301 0.26746 0.0034529      0.0034533
a[64]    1.7201 0.18953 0.0024468      0.0024471
a[65]    1.4185 0.28774 0.0037147      0.0040901
a[66]    1.5981 0.17707 0.0022859      0.0024332
a[67]    1.6972 0.17970 0.0023200      0.0025225
a[68]    1.2324 0.20810 0.0026866      0.0029268
a[69]    1.3651 0.25084 0.0032383      0.0032768
a[70]    0.8915 0.06988 0.0009022      0.0009872
a[71]    1.4836 0.13824 0.0017847      0.0019678
a[72]    1.5429 0.19252 0.0024854      0.0024848
a[73]    1.5476 0.28638 0.0036972      0.0038017
a[74]    1.2542 0.25042 0.0032329      0.0033283
a[75]    1.5590 0.27110 0.0034999      0.0037665
a[76]    1.6940 0.25101 0.0032405      0.0034855
a[77]    1.6631 0.22049 0.0028465      0.0030446
a[78]    1.3744 0.24050 0.0031049      0.0032775
a[79]    1.0978 0.25653 0.0033117      0.0036770
a[80]    1.3402 0.10726 0.0013847      0.0013849
a[81]    1.9112 0.28083 0.0036255      0.0043644
a[82]    1.5905 0.31325 0.0040441      0.0042404
a[83]    1.5721 0.18007 0.0023247      0.0025470
a[84]    1.5901 0.17860 0.0023057      0.0026933
a[85]    1.3769 0.28119 0.0036301      0.0037310
b       -0.6936 0.07098 0.0009163      0.0013132
mu_a     1.4613 0.05399 0.0006970      0.0013861
sigma_a  0.3333 0.04493 0.0005800      0.0014929
sigma_y  0.7569 0.01863 0.0002405      0.0003345

2. Quantiles for each variable:

           2.5%     25%     50%     75%   97.5%
a[1]     0.6895  1.0207  1.1932  1.3655  1.6861
a[2]     0.7323  0.8616  0.9296  0.9971  1.1277
a[3]     0.9553  1.2981  1.4753  1.6546  1.9965
a[4]     1.0877  1.3582  1.5023  1.6475  1.9254
a[5]     0.9417  1.2715  1.4429  1.6117  1.9379
a[6]     0.9470  1.2934  1.4756  1.6495  2.0044
a[7]     1.5253  1.7390  1.8556  1.9716  2.2052
a[8]     1.1896  1.5185  1.6824  1.8577  2.1984
a[9]     0.7693  1.0290  1.1647  1.3008  1.5405
a[10]    1.0542  1.3551  1.5085  1.6623  1.9580
a[11]    0.9662  1.2678  1.4255  1.5875  1.9051
a[12]    1.0849  1.4056  1.5730  1.7388  2.0869
a[13]    0.7988  1.0816  1.2366  1.3909  1.6729
a[14]    1.4961  1.7190  1.8367  1.9540  2.1817
a[15]    0.9084  1.2385  1.4020  1.5669  1.9034
a[16]    0.6645  1.0475  1.2352  1.4174  1.7907
a[17]    0.8770  1.1931  1.3614  1.5366  1.8668
a[18]    0.8565  1.0910  1.2186  1.3435  1.5753
a[19]    1.1643  1.2857  1.3471  1.4089  1.5248
a[20]    1.0648  1.4084  1.5843  1.7634  2.1080
a[21]    1.2324  1.4898  1.6287  1.7598  2.0204
a[22]    0.5438  0.8578  1.0248  1.1787  1.4683
a[23]    0.8710  1.2449  1.4437  1.6345  2.0050
a[24]    1.4588  1.7240  1.8580  1.9998  2.2652
a[25]    1.4792  1.6899  1.8115  1.9300  2.1584
a[26]    1.2221  1.3168  1.3649  1.4122  1.5020
a[27]    1.1768  1.4656  1.6168  1.7728  2.0590
a[28]    0.8743  1.1938  1.3494  1.5084  1.8030
a[29]    0.7679  1.1351  1.3136  1.4925  1.8264
a[30]    0.7177  0.9722  1.1006  1.2318  1.4817
a[31]    1.2567  1.5730  1.7309  1.9008  2.2134
a[32]    0.8573  1.1940  1.3630  1.5266  1.8573
a[33]    1.2368  1.5517  1.7179  1.8901  2.2426
a[34]    0.9647  1.3172  1.4981  1.6765  2.0438
a[35]    0.6328  0.9393  1.0912  1.2366  1.5146
a[36]    1.3139  1.6709  1.8682  2.0703  2.4611
a[37]    0.3750  0.6549  0.7967  0.9398  1.1972
a[38]    1.1235  1.4587  1.6244  1.8008  2.1514
a[39]    1.1323  1.4498  1.6046  1.7661  2.0746
a[40]    1.3373  1.6548  1.8278  2.0042  2.3355
a[41]    1.3429  1.6225  1.7660  1.9058  2.1964
a[42]    0.8289  1.2424  1.4481  1.6561  2.0564
a[43]    1.1481  1.4074  1.5451  1.6794  1.9463
a[44]    0.7847  1.0690  1.2205  1.3632  1.6293
a[45]    0.9926  1.2194  1.3376  1.4618  1.6915
a[46]    0.8679  1.1772  1.3392  1.5003  1.8184
a[47]    0.7129  1.1013  1.2984  1.4858  1.8380
a[48]    0.8648  1.1282  1.2678  1.4060  1.6724
a[49]    1.2760  1.5083  1.6287  1.7474  1.9815
a[50]    1.0253  1.4186  1.6249  1.8267  2.2493
a[51]    1.2611  1.5889  1.7645  1.9351  2.2674
a[52]    1.1257  1.4473  1.6244  1.8085  2.1740
a[53]    0.8633  1.2045  1.3837  1.5543  1.9043
a[54]    1.0453  1.2347  1.3330  1.4295  1.6161
a[55]    1.1385  1.3981  1.5442  1.6908  1.9712
a[56]    0.8069  1.1394  1.3195  1.4945  1.8450
a[57]    0.6197  0.9387  1.0963  1.2469  1.5381
a[58]    1.1322  1.4619  1.6335  1.8007  2.1393
a[59]    1.0853  1.4002  1.5657  1.7249  2.0565
a[60]    0.8494  1.2201  1.4112  1.6058  1.9677
a[61]    0.9479  1.1158  1.2013  1.2891  1.4454
a[62]    1.2379  1.5470  1.7086  1.8707  2.1922
a[63]    1.0014  1.3486  1.5290  1.7044  2.0672
a[64]    1.3588  1.5905  1.7175  1.8487  2.0998
a[65]    0.8463  1.2292  1.4232  1.6078  1.9745
a[66]    1.2509  1.4795  1.5956  1.7125  1.9490
a[67]    1.3491  1.5729  1.6960  1.8181  2.0480
a[68]    0.8327  1.0902  1.2329  1.3735  1.6403
a[69]    0.8693  1.2004  1.3665  1.5313  1.8418
a[70]    0.7509  0.8450  0.8911  0.9392  1.0282
a[71]    1.2191  1.3895  1.4824  1.5782  1.7567
a[72]    1.1620  1.4182  1.5452  1.6685  1.9195
a[73]    0.9857  1.3566  1.5465  1.7364  2.1137
a[74]    0.7692  1.0887  1.2522  1.4244  1.7501
a[75]    1.0300  1.3769  1.5564  1.7383  2.0916
a[76]    1.2001  1.5292  1.6913  1.8576  2.2004
a[77]    1.2213  1.5148  1.6603  1.8150  2.0920
a[78]    0.8983  1.2131  1.3778  1.5374  1.8415
a[79]    0.5909  0.9261  1.1000  1.2715  1.5923
a[80]    1.1338  1.2681  1.3421  1.4132  1.5478
a[81]    1.3734  1.7201  1.9059  2.0959  2.4694
a[82]    0.9612  1.3824  1.5919  1.8007  2.1982
a[83]    1.2215  1.4516  1.5704  1.6907  1.9260
a[84]    1.2448  1.4679  1.5891  1.7138  1.9315
a[85]    0.8242  1.1863  1.3810  1.5644  1.9251
b       -0.8338 -0.7406 -0.6939 -0.6462 -0.5536
mu_a     1.3575  1.4245  1.4602  1.4966  1.5701
sigma_a  0.2491  0.3018  0.3312  0.3632  0.4255
sigma_y  0.7216  0.7440  0.7567  0.7693  0.7939

6.4 Resumen gráfico de inferencias clásicas y multinivel

Para mostrar las rectas ajustadas por condado y comparar pooling completo, sin pooling y multinivel (medianas posteriores):

# Preparar objetos del ajuste clásico
a_pooled <- coef(lm.pooled)[1]
b_pooled <- coef(lm.pooled)[2]
a_nopooled <- coef(lm.unpooled)[grep("^factor\\(county\\)", names(coef(lm.unpooled)))]
b_nopooled <- coef(lm.unpooled)[["x"]]

# Extraer medianas posteriores de JAGS para a[1:J] y b
post_mat <- as.matrix(mcmc_sims)
a_cols <- grep("^a\\[", colnames(post_mat))
a_multilevel <- apply(post_mat[, a_cols, drop = FALSE], 2, median)
b_multilevel <- median(post_mat[, "b"])

# Elegir 8 condados y graficar
set.seed(42)
display8 <- sort(sample(seq_len(J), 8))
x_jitter <- x + runif(length(x), -0.05, 0.05)

par(mfrow = c(2, 4))
for (j in display8) {
  idx <- which(county == j)
  plot(x_jitter[idx], y[idx],
       xlim = c(-.05, 1.05), ylim = range(y, na.rm = TRUE),
       xlab = "piso (0=sótano, 1=primer piso)", ylab = "log(radón)",
       main = paste0("Condado ", j), pch = 20, col = "gray40")
  curve(a_pooled + b_pooled * x, add = TRUE, lwd = .7, lty = 2, col = "gray50")
  curve(a_nopooled[j] + b_nopooled * x, add = TRUE, lwd = .7, col = "gray30")
  curve(a_multilevel[j] + b_multilevel * x, add = TRUE, lwd = 1.2, col = "black")
}

Para visualizar estimaciones e incertidumbre versus tamaño muestral por condado:

sample_size <- as.vector(table(county))
sample_size_j <- sample_size * exp(runif(J, -0.1, 0.1))

# Desviación posterior de a[j] por condado
a_sd <- apply(post_mat[, a_cols, drop = FALSE], 2, sd)

plot(sample_size_j, a_multilevel,
     xlab = "tamaño de muestra en el condado j", ylab = expression(alpha[j]~"(mediana posterior)"),
     pch = 20, log = "x")
segments(x0 = sample_size_j, y0 = a_multilevel - a_sd,
         x1 = sample_size_j, y1 = a_multilevel + a_sd, col = "gray50")
abline(h = a_pooled, lwd = .7, lty = 2)

6.5 Paso a paso por un modelo JAGS llamado desde \(R\)

6.5.1 El modelo a nivel individual

El modelo con intercepto variable parte de una distribución probabilística por observación, iterando de \(i=1\) a \(n\):

model {
    for (i in 1:n){
        y[i] ~ dnorm (y.hat[i], tau.y)
        y.hat[i] <- a[county[i]] + b*x[i]
    }

Este código abstrae el modelo

\[ y_{i} \sim \mathrm{N}\left(\alpha_{j[i]}+\beta x_{i}, \sigma_{y}^{2}\right) \]

que se separa en dos líneas por restricciones de sintaxis:

\[ \begin{aligned} y_{i} &\sim \mathrm{N}\left(\hat{y}_{i},\sigma_{y}^{2}\right)\\ \hat{y}_{i}&=\alpha_{j[i]}+\beta x_{i} \end{aligned} \]

En notación de R/JAGS:

\[ \hat{y}_{i}=\mathrm{a}_{\text{county}[i]}+\mathrm{b}\cdot \mathrm{x}_{i}. \]

JAGS usa precisión \(\tau=1/\sigma^{2}\).

6.5.2 El modelo a nivel de grupo

Los interceptos por condado tienen media común \(\mu_{\alpha}\) y desviación estándar \(\sigma_{\alpha}\):

\[ \alpha_{j} \sim \mathrm{N}\left(\mu_{\alpha},\sigma_{\alpha}^{2}\right). \]

En JAGS:

for (j in 1:J){
    a[j] ~ dnorm(mu.a, tau.a)
}

6.5.3 Distribuciones previas

Todo parámetro en JAGS debe tener asignación o distribución. Usamos previas no informativas:

b ~ dnorm(0, 1.0E-4)
mu.a ~ dnorm(0, 1.0E-4)
tau.y <- pow(sigma.y, -2)
sigma.y ~ dunif(0, 100)
tau.a <- pow(sigma.a, -2)
sigma.a ~ dunif(0, 100)

Las normales con media 0 y desviación 100 (precisión \(10^{-4}\)) dejan \(\mu_{\alpha}\) y \(\beta\) esencialmente sin información previa en escalas razonables. Las uniformes \((0,100)\) para desviaciones estándar se transforman a precisiones mediante \(\tau=\sigma^{-2}\).

6.5.4 Escala de las previas

Para que una previa sea no informativa, su rango debe exceder claramente el rango razonable de los parámetros. Transformar variables a escalas adecuadas (por ejemplo, logaritmos) ayuda a mantener coeficientes en órdenes de magnitud cercanos a 1 y evita problemas numéricos con previas excesivamente anchas.

6.5.5 Datos, valores iniciales y parámetros (llamada a JAGS con R2jags)

# Dependencias: R2jags (para correr JAGS) y coda (para diagnósticos básicos)
library(R2jags)

Attaching package: 'R2jags'
The following object is masked from 'package:coda':

    traceplot
library(coda)

radon_data <- list(
  n = n, J = J,
  y = as.numeric(y),
  x = as.numeric(x),
  county = as.integer(county)
)

inits_fun <- function() {
  list(
    a = rnorm(J, 0, 1),
    b = rnorm(1, 0, 1),
    mu_a = rnorm(1, 0, 1),
    sigma_y = runif(1, 0.1, 2),
    sigma_a = runif(1, 0.1, 2)
  )
}

params <- c("a", "b", "mu_a", "sigma_y", "sigma_a")

set.seed(123)
fit_jags <- jags(
  data = radon_data,
  inits = inits_fun,
  parameters.to.save = params,
  model.file = "codigoJAGS/radon_model.jags",
  n.chains = 3,
  n.iter = 3000,
  n.burnin = 1000,
  n.thin = 1
)
module glm loaded
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 919
   Unobserved stochastic nodes: 89
   Total graph size: 3002

Initializing model
fit_jags
Inference for Bugs model at "codigoJAGS/radon_model.jags", fit using jags,
 3 chains, each with 3000 iterations (first 1000 discarded)
 n.sims = 6000 iterations saved. Running time = 3.619 secs
          mu.vect sd.vect     2.5%      25%      50%      75%    97.5%  Rhat
a[1]        1.184   0.259    0.670    1.008    1.186    1.363    1.684 1.001
a[2]        0.928   0.099    0.741    0.861    0.927    0.995    1.125 1.001
a[3]        1.480   0.274    0.949    1.300    1.479    1.660    2.021 1.002
a[4]        1.510   0.218    1.082    1.365    1.509    1.662    1.928 1.001
a[5]        1.445   0.251    0.951    1.277    1.446    1.614    1.934 1.001
a[6]        1.481   0.266    0.960    1.307    1.478    1.659    2.008 1.001
a[7]        1.858   0.175    1.513    1.738    1.861    1.974    2.201 1.001
a[8]        1.686   0.259    1.198    1.506    1.685    1.864    2.198 1.002
a[9]        1.156   0.198    0.752    1.026    1.157    1.290    1.540 1.001
a[10]       1.509   0.229    1.047    1.357    1.507    1.661    1.958 1.001
a[11]       1.436   0.242    0.966    1.270    1.435    1.601    1.902 1.001
a[12]       1.574   0.253    1.077    1.404    1.577    1.739    2.073 1.001
a[13]       1.230   0.230    0.763    1.080    1.229    1.384    1.680 1.001
a[14]       1.836   0.179    1.491    1.716    1.834    1.956    2.197 1.001
a[15]       1.398   0.257    0.896    1.226    1.400    1.567    1.897 1.001
a[16]       1.233   0.292    0.636    1.043    1.241    1.431    1.781 1.001
a[17]       1.371   0.255    0.878    1.200    1.366    1.545    1.874 1.001
a[18]       1.218   0.183    0.851    1.097    1.220    1.343    1.573 1.001
a[19]       1.346   0.092    1.170    1.283    1.347    1.409    1.526 1.001
a[20]       1.589   0.266    1.079    1.410    1.590    1.762    2.120 1.001
a[21]       1.633   0.204    1.231    1.497    1.634    1.765    2.033 1.001
a[22]       1.011   0.238    0.529    0.853    1.018    1.178    1.457 1.001
a[23]       1.444   0.284    0.879    1.256    1.447    1.633    2.002 1.001
a[24]       1.863   0.208    1.469    1.718    1.859    2.004    2.281 1.001
a[25]       1.815   0.179    1.471    1.691    1.813    1.937    2.170 1.001
a[26]       1.364   0.073    1.226    1.315    1.364    1.413    1.508 1.001
a[27]       1.625   0.225    1.194    1.469    1.622    1.782    2.070 1.001
a[28]       1.348   0.235    0.888    1.189    1.349    1.504    1.801 1.001
a[29]       1.314   0.268    0.786    1.139    1.315    1.496    1.815 1.002
a[30]       1.101   0.190    0.726    0.972    1.101    1.231    1.463 1.001
a[31]       1.740   0.241    1.278    1.576    1.738    1.899    2.217 1.001
a[32]       1.362   0.253    0.867    1.193    1.360    1.533    1.853 1.001
a[33]       1.723   0.259    1.227    1.545    1.720    1.891    2.238 1.001
a[34]       1.499   0.270    0.971    1.316    1.495    1.683    2.027 1.001
a[35]       1.086   0.224    0.633    0.938    1.088    1.239    1.515 1.001
a[36]       1.881   0.306    1.312    1.677    1.869    2.079    2.508 1.001
a[37]       0.786   0.211    0.365    0.642    0.784    0.933    1.193 1.001
a[38]       1.630   0.254    1.150    1.453    1.628    1.800    2.141 1.001
a[39]       1.598   0.239    1.139    1.438    1.594    1.759    2.069 1.001
a[40]       1.833   0.266    1.325    1.651    1.826    2.007    2.369 1.001
a[41]       1.764   0.213    1.352    1.620    1.763    1.906    2.184 1.001
a[42]       1.446   0.310    0.826    1.247    1.446    1.651    2.061 1.001
a[43]       1.539   0.207    1.138    1.399    1.536    1.678    1.956 1.001
a[44]       1.216   0.221    0.769    1.071    1.219    1.364    1.639 1.001
a[45]       1.336   0.180    0.987    1.218    1.334    1.457    1.693 1.002
a[46]       1.338   0.237    0.867    1.181    1.339    1.492    1.800 1.001
a[47]       1.290   0.287    0.709    1.105    1.300    1.478    1.838 1.001
a[48]       1.266   0.206    0.865    1.129    1.265    1.405    1.669 1.001
a[49]       1.630   0.177    1.286    1.512    1.627    1.752    1.976 1.001
a[50]       1.635   0.315    1.027    1.427    1.630    1.837    2.278 1.001
a[51]       1.774   0.257    1.282    1.599    1.769    1.943    2.295 1.001
a[52]       1.635   0.266    1.122    1.453    1.634    1.812    2.163 1.002
a[53]       1.386   0.265    0.868    1.208    1.386    1.562    1.902 1.001
a[54]       1.330   0.141    1.054    1.233    1.333    1.425    1.606 1.001
a[55]       1.549   0.212    1.135    1.403    1.550    1.688    1.972 1.001
a[56]       1.318   0.273    0.768    1.133    1.321    1.501    1.839 1.001
a[57]       1.082   0.234    0.615    0.929    1.082    1.234    1.544 1.001
a[58]       1.629   0.256    1.133    1.458    1.628    1.801    2.130 1.001
a[59]       1.570   0.252    1.075    1.398    1.566    1.733    2.086 1.001
a[60]       1.414   0.287    0.829    1.224    1.415    1.609    1.974 1.001
a[61]       1.198   0.124    0.952    1.114    1.199    1.282    1.438 1.001
a[62]       1.720   0.243    1.258    1.559    1.714    1.879    2.215 1.001
a[63]       1.532   0.267    1.020    1.353    1.535    1.711    2.068 1.001
a[64]       1.726   0.190    1.362    1.597    1.725    1.856    2.100 1.001
a[65]       1.414   0.287    0.861    1.223    1.411    1.609    1.980 1.001
a[66]       1.602   0.178    1.254    1.478    1.600    1.726    1.945 1.001
a[67]       1.697   0.181    1.342    1.575    1.694    1.817    2.061 1.001
a[68]       1.238   0.215    0.805    1.089    1.245    1.380    1.653 1.001
a[69]       1.369   0.253    0.864    1.202    1.374    1.532    1.872 1.001
a[70]       0.891   0.071    0.754    0.842    0.891    0.939    1.029 1.002
a[71]       1.482   0.140    1.212    1.387    1.480    1.575    1.757 1.001
a[72]       1.537   0.194    1.159    1.405    1.536    1.664    1.920 1.001
a[73]       1.560   0.288    0.999    1.366    1.556    1.749    2.139 1.002
a[74]       1.253   0.254    0.752    1.085    1.255    1.423    1.747 1.002
a[75]       1.561   0.267    1.052    1.379    1.556    1.739    2.095 1.001
a[76]       1.698   0.257    1.198    1.529    1.694    1.871    2.199 1.001
a[77]       1.665   0.218    1.237    1.516    1.664    1.810    2.100 1.001
a[78]       1.371   0.241    0.904    1.205    1.374    1.535    1.843 1.001
a[79]       1.088   0.259    0.558    0.918    1.094    1.262    1.579 1.001
a[80]       1.338   0.106    1.134    1.266    1.338    1.408    1.547 1.001
a[81]       1.919   0.283    1.392    1.728    1.909    2.103    2.492 1.001
a[82]       1.587   0.312    0.983    1.375    1.579    1.792    2.223 1.001
a[83]       1.568   0.179    1.219    1.445    1.568    1.689    1.918 1.001
a[84]       1.591   0.177    1.247    1.473    1.590    1.711    1.940 1.001
a[85]       1.381   0.286    0.821    1.191    1.385    1.571    1.942 1.001
b          -0.692   0.071   -0.830   -0.738   -0.692   -0.644   -0.555 1.002
mu_a        1.462   0.053    1.360    1.427    1.461    1.496    1.569 1.002
sigma_a     0.336   0.047    0.252    0.303    0.334    0.367    0.437 1.002
sigma_y     0.757   0.018    0.722    0.744    0.757    0.768    0.792 1.001
deviance 2094.126  12.877 2070.331 2085.271 2093.524 2102.403 2121.212 1.001
         n.eff
a[1]      4900
a[2]      6000
a[3]      2400
a[4]      6000
a[5]      6000
a[6]      6000
a[7]      6000
a[8]      1600
a[9]      6000
a[10]     3000
a[11]     4100
a[12]     6000
a[13]     6000
a[14]     6000
a[15]     6000
a[16]     5100
a[17]     4100
a[18]     6000
a[19]     5100
a[20]     2900
a[21]     6000
a[22]     6000
a[23]     6000
a[24]     6000
a[25]     3600
a[26]     6000
a[27]     4000
a[28]     6000
a[29]     2500
a[30]     6000
a[31]     6000
a[32]     3200
a[33]     6000
a[34]     6000
a[35]     2800
a[36]     6000
a[37]     3900
a[38]     6000
a[39]     6000
a[40]     6000
a[41]     6000
a[42]     6000
a[43]     6000
a[44]     3300
a[45]     1800
a[46]     4600
a[47]     6000
a[48]     6000
a[49]     6000
a[50]     6000
a[51]     6000
a[52]     2200
a[53]     4600
a[54]     2800
a[55]     6000
a[56]     6000
a[57]     6000
a[58]     6000
a[59]     6000
a[60]     6000
a[61]     6000
a[62]     3000
a[63]     6000
a[64]     6000
a[65]     6000
a[66]     6000
a[67]     4200
a[68]     4100
a[69]     6000
a[70]     1800
a[71]     6000
a[72]     6000
a[73]     1800
a[74]     2500
a[75]     3200
a[76]     6000
a[77]     3500
a[78]     6000
a[79]     6000
a[80]     6000
a[81]     6000
a[82]     6000
a[83]     6000
a[84]     6000
a[85]     6000
b         1800
mu_a      2300
sigma_a   1200
sigma_y   3800
deviance  6000

For each parameter, n.eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor (at convergence, Rhat=1).

DIC info (using the rule: pV = var(deviance)/2)
pV = 82.9 and DIC = 2177.1
DIC is an estimate of expected predictive error (lower deviance is better).

6.5.6 Número de cadenas e iteraciones

Se corre JAGS con varias cadenas y se descarta la mitad inicial de cada una. Se recomienda comenzar con pocas iteraciones para verificar ejecución y luego aumentar hasta lograr \(\widehat{R}\le 1.1\) para todos los parámetros.

6.5.7 \(\widehat{R}\) y \(n_{\text{eff}}\)

Para cada parámetro, \(\widehat{R}\) aproxima la raíz cuadrada entre la varianza combinada de cadenas y la varianza promedio dentro de cadenas; valores significativamente mayores que 1 indican mezcla insuficiente. El tamaño efectivo \(n_{\text{eff}}\) refleja autocorrelación en las cadenas; valores \(\ge 100\) suelen ser deseables.

# Extraer simulaciones como mcmc.list desde el objeto R2jags
mcmc_sims <- as.mcmc(fit_jags)

# Diagnóstico con coda
gelman.diag(mcmc_sims, autoburnin = FALSE)
Potential scale reduction factors:

         Point est. Upper C.I.
a[1]              1       1.00
a[10]             1       1.00
a[11]             1       1.00
a[12]             1       1.00
a[13]             1       1.00
a[14]             1       1.00
a[15]             1       1.00
a[16]             1       1.00
a[17]             1       1.00
a[18]             1       1.00
a[19]             1       1.00
a[2]              1       1.00
a[20]             1       1.00
a[21]             1       1.00
a[22]             1       1.00
a[23]             1       1.00
a[24]             1       1.00
a[25]             1       1.00
a[26]             1       1.00
a[27]             1       1.00
a[28]             1       1.00
a[29]             1       1.00
a[3]              1       1.00
a[30]             1       1.00
a[31]             1       1.00
a[32]             1       1.00
a[33]             1       1.00
a[34]             1       1.00
a[35]             1       1.00
a[36]             1       1.00
a[37]             1       1.00
a[38]             1       1.00
a[39]             1       1.00
a[4]              1       1.00
a[40]             1       1.00
a[41]             1       1.00
a[42]             1       1.00
a[43]             1       1.00
a[44]             1       1.00
a[45]             1       1.00
a[46]             1       1.00
a[47]             1       1.00
a[48]             1       1.00
a[49]             1       1.00
a[5]              1       1.00
a[50]             1       1.00
a[51]             1       1.00
a[52]             1       1.00
a[53]             1       1.00
a[54]             1       1.00
a[55]             1       1.00
a[56]             1       1.00
a[57]             1       1.00
a[58]             1       1.00
a[59]             1       1.00
a[6]              1       1.00
a[60]             1       1.00
a[61]             1       1.00
a[62]             1       1.00
a[63]             1       1.00
a[64]             1       1.00
a[65]             1       1.00
a[66]             1       1.00
a[67]             1       1.00
a[68]             1       1.00
a[69]             1       1.00
a[7]              1       1.00
a[70]             1       1.00
a[71]             1       1.00
a[72]             1       1.00
a[73]             1       1.00
a[74]             1       1.00
a[75]             1       1.00
a[76]             1       1.00
a[77]             1       1.00
a[78]             1       1.00
a[79]             1       1.00
a[8]              1       1.00
a[80]             1       1.00
a[81]             1       1.00
a[82]             1       1.00
a[83]             1       1.00
a[84]             1       1.00
a[85]             1       1.00
a[9]              1       1.00
b                 1       1.00
deviance          1       1.00
mu_a              1       1.00
sigma_a           1       1.01
sigma_y           1       1.00

Multivariate psrf

1.01
effectiveSize(mcmc_sims)
     a[1]     a[10]     a[11]     a[12]     a[13]     a[14]     a[15]     a[16] 
5475.1781 5838.5194 5835.9974 5866.1615 5125.7865 4663.0602 6000.0000 5328.5257 
    a[17]     a[18]     a[19]      a[2]     a[20]     a[21]     a[22]     a[23] 
5617.4523 5474.7038 5820.0627 5507.3152 5272.2855 6000.0000 4319.3888 5586.6534 
    a[24]     a[25]     a[26]     a[27]     a[28]     a[29]      a[3]     a[30] 
4568.2551 5226.8514 5736.2023 5163.0864 5659.0392 5684.8738 6000.0000 5542.5559 
    a[31]     a[32]     a[33]     a[34]     a[35]     a[36]     a[37]     a[38] 
5201.4347 5760.8276 5447.4455 5565.8750 4941.2531 3389.5967 3847.3173 4828.7298 
    a[39]      a[4]     a[40]     a[41]     a[42]     a[43]     a[44]     a[45] 
5759.1464 4857.6729 3959.6218 4415.9343 6000.0000 5327.3626 5698.8236 6000.0000 
    a[46]     a[47]     a[48]     a[49]      a[5]     a[50]     a[51]     a[52] 
6000.0000 5395.4514 5802.1145 5207.0482 6000.0000 5603.2164 4714.2752 5542.0591 
    a[53]     a[54]     a[55]     a[56]     a[57]     a[58]     a[59]      a[6] 
5550.3161 5158.3819 5749.1376 6163.3361 4503.4329 5301.5626 5622.7436 6000.0000 
    a[60]     a[61]     a[62]     a[63]     a[64]     a[65]     a[66]     a[67] 
5996.8993 6000.0000 5612.5303 5703.2309 5381.2708 5688.7190 4694.3741 5244.7640 
    a[68]     a[69]      a[7]     a[70]     a[71]     a[72]     a[73]     a[74] 
6000.0000 6450.0147 5066.8172 6000.0000 5784.3567 5715.6909 5816.0995 5379.1203 
    a[75]     a[76]     a[77]     a[78]     a[79]      a[8]     a[80]     a[81] 
5460.9604 4929.3945 6000.0000 5658.9496 4174.9470 5342.6887 6000.0000 3443.6621 
    a[82]     a[83]     a[84]     a[85]      a[9]         b  deviance      mu_a 
5577.6726 5716.0442 6000.0000 6000.0000 5624.8045 2756.9723 2340.7310 1749.0187 
  sigma_a   sigma_y 
 813.7936 3272.3304 
# (Opcional) Si se dispone de CalvinBayes, mostrar diagnósticos con ese paquete
if (requireNamespace("CalvinBayes", quietly = TRUE)) {
  # Ejemplo de funciones hipotéticas de CalvinBayes:
  # CalvinBayes::rhat(mcmc_sims)
  # CalvinBayes::ess(mcmc_sims)
  "CalvinBayes disponible: utilice sus funciones de diagnóstico si lo desea."
} else {
  "CalvinBayes no encontrado; se muestran diagnósticos con 'coda'."
}
[1] "CalvinBayes disponible: utilice sus funciones de diagnóstico si lo desea."

6.5.8 Acceso y uso de simulaciones

Las simulaciones permiten calcular predicciones e intervalos de incertidumbre para funciones de los parámetros.

# Convertir a matriz posterior
post_mat <- as.matrix(mcmc_sims)

# Intervalo al 90% para b
quantile(post_mat[,"b"], probs = c(0.05, 0.95), na.rm = TRUE)
        5%        95% 
-0.8114550 -0.5755833 
# Probabilidad de que el radón promedio (controlando por piso)
# sea mayor en el condado 36 que en el 26:
a_cols <- grep("^a\\[", colnames(post_mat))
prob_36_gt_26 <- mean(post_mat[, paste0("a[", 36, "]")] > post_mat[, paste0("a[", 26, "]")])
prob_36_gt_26
[1] 0.9558333

6.5.9 Valores ajustados, residuales y otras cantidades

# Medianas posteriores para a[1:J] y b
a_med <- apply(post_mat[, a_cols, drop = FALSE], 2, median, na.rm = TRUE)
names(a_med) <- paste0("a[", seq_len(J), "]")
b_med <- median(post_mat[, "b"], na.rm = TRUE)

# Fitted y residuals (con medianas)
a_vec <- a_med[paste0("a[", county, "]")]
y_hat <- a_vec + b_med * x
y_resid <- y - y_hat

tibble(y_hat = y_hat, y_resid = y_resid) |> head()
# A tibble: 6 × 2
  y_hat y_resid
  <dbl>   <dbl>
1 0.495   0.294
2 1.19   -0.398
3 1.19   -0.122
4 1.19   -1.19 
5 1.51   -0.376
6 1.51   -0.591

6.5.10 Diferencia de niveles absolutos de radón entre dos condados

Se calcula la distribución de la diferencia en niveles absolutos (no log) entre una casa sin sótano en el condado 36 y una en el condado 26.

n_sims <- nrow(post_mat)
lqp_radon <- numeric(n_sims)
hennepin_radon <- numeric(n_sims)

for (s in seq_len(n_sims)) {
  a36 <- post_mat[s, paste0("a[", 36, "]")]
  a26 <- post_mat[s, paste0("a[", 26, "]")]
  b_s  <- post_mat[s, "b"]
  sigy <- post_mat[s, "sigma_y"]
  # piso = 0 (sin sótano) => x = 0
  lqp_radon[s] <- exp(rnorm(1, mean = a36 + b_s * 0, sd = sigy))
  hennepin_radon[s] <- exp(rnorm(1, mean = a26 + b_s * 0, sd = sigy))
}
radon_diff <- lqp_radon - hennepin_radon
tibble(media = mean(radon_diff), sd = sd(radon_diff))
# A tibble: 1 × 2
  media    sd
  <dbl> <dbl>
1  3.73  9.41

6.6 Regresiones clásicas con y sin agrupamiento

Los modelos clásicos y de regresión generalizada pueden ajustarse fácilmente en \(R\), aunque también pueden estimarse en JAGS, lo que resulta útil como paso previo a modelos más complejos.

6.6.1 Pooling completo

El modelo de pooling completo es una regresión lineal simple de \(\log(\text{radón})\) sobre el indicador de sótano:

model {
    for (i in 1:n){
        y[i] ~ dnorm(y_hat[i], tau_y)
        y_hat[i] <- a + b * x[i]
    }
    a ~ dnorm(0, 0.0001)
    b ~ dnorm(0, 0.0001)
    tau_y <- pow(sigma_y, -2)
    sigma_y ~ dunif(0, 100)
}

donde \(y_i = \log(\text{radón}_i)\) y \(x_i\) indica si la medición fue en sótano (\(x=0\)) o primer piso (\(x=1\)).

6.6.2 Sin agrupamiento (No pooling)

El modelo sin agrupamiento se puede ajustar de dos formas: (1) ejecutando regresiones separadas por condado, o (2) permitiendo interceptos \(\alpha_j\) independientes con previas no informativas.

model {
    for (i in 1:n){
        y[i] ~ dnorm(y_hat[i], tau_y)
        y_hat[i] <- a[county[i]] + b * x[i]
    }
    b ~ dnorm(0, 0.0001)
    tau_y <- pow(sigma_y, -2)
    sigma_y ~ dunif(0, 100)
    for (j in 1:J){
        a[j] ~ dnorm(0, 0.0001)
    }
}

6.6.3 Regresión clásica con múltiples predictores

El modelo puede ampliarse fácilmente agregando predictores adicionales, como una variable indicadora de invierno (winter).

Con predictor adicional

y_hat[i] <- a + b_x * x[i] + b_winter * winter[i]

Con interacción

y_hat[i] <- a + b_x * x[i] + b_winter * winter[i] +
            b_x_winter * x[i] * winter[i]

En cada caso, los coeficientes tienen previas no informativas:

\[ b_k \sim \mathrm{N}(0, 0.0001) \]

6.6.3.1 Notación vectorial

Puede definirse un vector de coeficientes \(\mathbf{b}\) y una matriz de predictores \(\mathbf{X}\):

y_hat[i] <- a + b[1]*x[i] + b[2]*winter[i] + b[3]*x[i]*winter[i]
for (k in 1:K){
    b[k] ~ dnorm(0, 0.0001)
}

Si se desea incluir el intercepto en el vector \(\mathbf{b}\), se añade una columna de unos a \(\mathbf{X}\):

ones <- rep(1, n)
X <- cbind(ones, x, winter, x*winter)
K <- ncol(X)

y en el modelo JAGS:

y_hat[i] <- inprod(b[], X[i, ])

donde los coeficientes corresponden a \(b[1], \ldots, b[4]\).

6.6.4 Modelo multinivel con un predictor a nivel de grupo

El siguiente modelo incluye un predictor a nivel de grupo \(u_j\) (por ejemplo, el nivel de uranio del condado):

model {
    for (i in 1:n){
        y[i] ~ dnorm(y_hat[i], tau_y)
        y_hat[i] <- a[county[i]] + b * x[i]
    }
    b ~ dnorm(0, 0.0001)
    tau_y <- pow(sigma_y, -2)
    sigma_y ~ dunif(0, 100)
    for (j in 1:J){
        a[j] ~ dnorm(a_hat[j], tau_a)
        a_hat[j] <- g_0 + g_1 * u[j]
    }
    g_0 ~ dnorm(0, 0.0001)
    g_1 ~ dnorm(0, 0.0001)
    tau_a <- pow(sigma_a, -2)
    sigma_a ~ dunif(0, 100)
}

donde:

  • \(a_j\) representa el intercepto del condado \(j\),
  • \(u_j\) es el predictor del nivel de uranio a nivel de grupo,
  • \(\sigma_a\) mide la variación entre condados.

6.6.5 Modelo multinivel con un predictor a nivel de grupo en JAGS (ajuste)

En este modelo multinivel, un predictor a nivel de grupo (por ejemplo, los niveles de uranio) influye en los interceptos específicos de cada condado.
A continuación se muestra el modelo equivalente en JAGS, junto con la preparación de los datos en R.

6.6.5.1 Preparación de los datos

srrs2.fips <- srrs2$stfips * 1000 + srrs2$cntyfips
cty <- read.table("../ARM_Data/radon/cty.dat", header = TRUE, sep = ",")
usa.fips <- 1000 * cty[,"stfips"] + cty[,"ctfips"]
usa.rows <- match(unique(srrs2.fips[mn]), usa.fips)
uranium <- cty[usa.rows, "Uppm"]
u <- log(uranium)

u.full <- u[county]

6.6.5.2 Ajuste del modelo en JAGS

radon_data$u <- u.full

jags_model2_u <-
  jags(
    model.file = "codigoJAGS/radon_model_u.jags",
    data = radon_data,
    parameters.to.save = c("a", "b", "sigma.y", "sigma.a", "g.0", "g.1"),
    n.iter = 3000, n.burnin = 1000, n.thin = 2
  )
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 919
   Unobserved stochastic nodes: 90
   Total graph size: 3936

Initializing model
jags_model2_u
Inference for Bugs model at "codigoJAGS/radon_model_u.jags", fit using jags,
 3 chains, each with 3000 iterations (first 1000 discarded), n.thin = 2
 n.sims = 3000 iterations saved. Running time = 2.773 secs
          mu.vect sd.vect     2.5%      25%      50%      75%    97.5%  Rhat
a[1]        1.183   0.256    0.655    1.015    1.188    1.358    1.671 1.005
a[2]        0.927   0.103    0.724    0.860    0.929    0.997    1.124 1.001
a[3]        1.482   0.272    0.963    1.302    1.475    1.663    2.023 1.004
a[4]        1.505   0.220    1.050    1.360    1.502    1.654    1.942 1.002
a[5]        1.439   0.254    0.946    1.268    1.442    1.611    1.934 1.003
a[6]        1.477   0.265    0.972    1.300    1.473    1.656    2.002 1.001
a[7]        1.852   0.178    1.505    1.730    1.851    1.970    2.199 1.001
a[8]        1.681   0.257    1.192    1.503    1.680    1.856    2.181 1.001
a[9]        1.156   0.197    0.762    1.027    1.155    1.290    1.546 1.002
a[10]       1.510   0.234    1.059    1.353    1.506    1.664    1.968 1.001
a[11]       1.424   0.246    0.917    1.260    1.426    1.587    1.904 1.001
a[12]       1.572   0.255    1.062    1.400    1.573    1.745    2.063 1.001
a[13]       1.226   0.224    0.781    1.072    1.228    1.378    1.650 1.002
a[14]       1.837   0.183    1.476    1.713    1.840    1.953    2.207 1.001
a[15]       1.391   0.257    0.884    1.220    1.385    1.567    1.890 1.001
a[16]       1.232   0.292    0.662    1.036    1.238    1.429    1.805 1.001
a[17]       1.367   0.251    0.886    1.198    1.365    1.539    1.867 1.002
a[18]       1.218   0.181    0.866    1.095    1.216    1.340    1.574 1.001
a[19]       1.347   0.092    1.163    1.286    1.346    1.408    1.528 1.001
a[20]       1.582   0.268    1.074    1.398    1.586    1.761    2.104 1.001
a[21]       1.624   0.204    1.230    1.487    1.622    1.764    2.021 1.001
a[22]       1.010   0.243    0.529    0.851    1.019    1.176    1.475 1.004
a[23]       1.434   0.288    0.879    1.245    1.434    1.621    1.998 1.002
a[24]       1.862   0.203    1.460    1.727    1.861    1.998    2.272 1.001
a[25]       1.808   0.179    1.452    1.691    1.807    1.927    2.184 1.002
a[26]       1.363   0.073    1.221    1.314    1.362    1.414    1.502 1.001
a[27]       1.630   0.227    1.197    1.475    1.626    1.780    2.087 1.001
a[28]       1.338   0.239    0.858    1.179    1.341    1.497    1.806 1.001
a[29]       1.312   0.271    0.765    1.135    1.311    1.490    1.832 1.001
a[30]       1.098   0.191    0.707    0.971    1.097    1.231    1.448 1.002
a[31]       1.735   0.251    1.244    1.561    1.735    1.902    2.244 1.001
a[32]       1.365   0.256    0.857    1.195    1.365    1.536    1.859 1.001
a[33]       1.717   0.260    1.212    1.540    1.710    1.888    2.231 1.001
a[34]       1.495   0.275    0.971    1.309    1.490    1.673    2.037 1.001
a[35]       1.084   0.222    0.623    0.944    1.085    1.234    1.508 1.001
a[36]       1.882   0.301    1.318    1.678    1.870    2.073    2.491 1.003
a[37]       0.782   0.212    0.362    0.638    0.787    0.926    1.191 1.003
a[38]       1.630   0.256    1.147    1.453    1.627    1.802    2.153 1.001
a[39]       1.595   0.240    1.120    1.433    1.590    1.755    2.068 1.001
a[40]       1.831   0.261    1.346    1.650    1.820    2.006    2.356 1.001
a[41]       1.755   0.211    1.340    1.614    1.757    1.896    2.169 1.001
a[42]       1.435   0.310    0.792    1.230    1.433    1.643    2.044 1.003
a[43]       1.537   0.202    1.127    1.403    1.538    1.671    1.927 1.001
a[44]       1.215   0.219    0.790    1.063    1.219    1.362    1.645 1.001
a[45]       1.336   0.182    0.984    1.215    1.333    1.460    1.693 1.002
a[46]       1.336   0.234    0.874    1.178    1.343    1.495    1.775 1.001
a[47]       1.291   0.293    0.728    1.097    1.286    1.485    1.895 1.001
a[48]       1.253   0.199    0.875    1.116    1.252    1.389    1.655 1.001
a[49]       1.622   0.177    1.281    1.503    1.614    1.743    1.964 1.001
a[50]       1.626   0.312    1.022    1.414    1.616    1.827    2.250 1.002
a[51]       1.771   0.256    1.276    1.593    1.769    1.946    2.294 1.001
a[52]       1.627   0.272    1.112    1.437    1.625    1.807    2.163 1.004
a[53]       1.375   0.272    0.840    1.188    1.376    1.561    1.900 1.003
a[54]       1.330   0.141    1.056    1.233    1.332    1.423    1.611 1.001
a[55]       1.549   0.215    1.126    1.398    1.552    1.695    1.964 1.005
a[56]       1.312   0.270    0.780    1.133    1.320    1.492    1.836 1.001
a[57]       1.089   0.231    0.630    0.939    1.089    1.247    1.537 1.001
a[58]       1.646   0.260    1.146    1.473    1.642    1.819    2.172 1.001
a[59]       1.573   0.250    1.075    1.404    1.577    1.737    2.058 1.001
a[60]       1.412   0.288    0.845    1.214    1.414    1.604    1.988 1.004
a[61]       1.202   0.125    0.956    1.115    1.199    1.289    1.447 1.003
a[62]       1.714   0.244    1.251    1.545    1.714    1.879    2.188 1.001
a[63]       1.529   0.272    0.992    1.348    1.529    1.718    2.069 1.002
a[64]       1.719   0.194    1.343    1.590    1.716    1.847    2.101 1.001
a[65]       1.412   0.292    0.840    1.220    1.414    1.599    1.992 1.001
a[66]       1.602   0.174    1.264    1.484    1.603    1.723    1.937 1.001
a[67]       1.699   0.180    1.351    1.573    1.701    1.823    2.052 1.002
a[68]       1.237   0.211    0.820    1.095    1.238    1.373    1.656 1.002
a[69]       1.373   0.253    0.879    1.204    1.374    1.544    1.881 1.004
a[70]       0.889   0.069    0.755    0.843    0.890    0.936    1.021 1.001
a[71]       1.485   0.140    1.211    1.388    1.485    1.579    1.767 1.002
a[72]       1.542   0.194    1.158    1.409    1.542    1.676    1.930 1.001
a[73]       1.565   0.293    0.998    1.372    1.565    1.756    2.142 1.001
a[74]       1.267   0.257    0.754    1.100    1.261    1.441    1.770 1.001
a[75]       1.577   0.281    1.029    1.395    1.578    1.762    2.137 1.001
a[76]       1.705   0.269    1.169    1.531    1.704    1.882    2.245 1.001
a[77]       1.684   0.229    1.257    1.525    1.681    1.825    2.144 1.001
a[78]       1.373   0.242    0.893    1.215    1.371    1.540    1.836 1.001
a[79]       1.105   0.263    0.585    0.927    1.107    1.287    1.587 1.001
a[80]       1.345   0.107    1.139    1.276    1.343    1.417    1.558 1.001
a[81]       1.935   0.287    1.390    1.736    1.929    2.128    2.501 1.001
a[82]       1.603   0.313    1.004    1.396    1.600    1.804    2.230 1.001
a[83]       1.579   0.179    1.237    1.460    1.574    1.701    1.936 1.001
a[84]       1.597   0.177    1.259    1.477    1.601    1.718    1.938 1.001
a[85]       1.392   0.289    0.817    1.189    1.394    1.584    1.969 1.003
b          -0.695   0.069   -0.830   -0.740   -0.695   -0.648   -0.558 1.001
g.0         1.474   0.083    1.315    1.418    1.475    1.529    1.634 1.001
g.1         0.024   0.114   -0.203   -0.053    0.025    0.100    0.244 1.001
sigma.a     0.337   0.048    0.249    0.305    0.335    0.367    0.434 1.005
sigma.y     0.757   0.018    0.722    0.744    0.756    0.769    0.794 1.001
deviance 2094.495  12.877 2070.425 2085.760 2094.169 2102.781 2121.078 1.001
         n.eff
a[1]       710
a[2]      2900
a[3]       610
a[4]      1100
a[5]       900
a[6]      3000
a[7]      2100
a[8]      3000
a[9]      1200
a[10]     3000
a[11]     3000
a[12]     3000
a[13]     3000
a[14]     3000
a[15]     3000
a[16]     3000
a[17]     1900
a[18]     3000
a[19]     3000
a[20]     3000
a[21]     3000
a[22]     1800
a[23]     1300
a[24]     2900
a[25]     1600
a[26]     3000
a[27]     3000
a[28]     3000
a[29]     3000
a[30]     1100
a[31]     3000
a[32]     3000
a[33]     3000
a[34]     3000
a[35]     3000
a[36]      770
a[37]      740
a[38]     3000
a[39]     3000
a[40]     3000
a[41]     3000
a[42]      940
a[43]     3000
a[44]     2000
a[45]     1400
a[46]     3000
a[47]     3000
a[48]     2100
a[49]     2400
a[50]     1900
a[51]     3000
a[52]      590
a[53]     3000
a[54]     3000
a[55]      470
a[56]     3000
a[57]     2300
a[58]     3000
a[59]     3000
a[60]     1100
a[61]     1000
a[62]     3000
a[63]     1700
a[64]     3000
a[65]     3000
a[66]     2800
a[67]     1800
a[68]     1200
a[69]      650
a[70]     2800
a[71]     1900
a[72]     3000
a[73]     3000
a[74]     2400
a[75]     3000
a[76]     3000
a[77]     3000
a[78]     3000
a[79]     2000
a[80]     3000
a[81]     2300
a[82]     3000
a[83]     3000
a[84]     3000
a[85]      890
b         3000
g.0       3000
g.1       3000
sigma.a    490
sigma.y   2300
deviance  2900

For each parameter, n.eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor (at convergence, Rhat=1).

DIC info (using the rule: pV = var(deviance)/2)
pV = 82.9 and DIC = 2177.4
DIC is an estimate of expected predictive error (lower deviance is better).

6.6.5.3 Explicación del modelo

  • u[j]: predictor a nivel de grupo (por ejemplo, nivel promedio de uranio en cada condado).
  • a[j]: intercepto específico del condado, influido por el predictor grupal.
  • g.0, g.1: coeficientes de regresión que describen la relación entre el predictor de grupo y los interceptos del nivel inferior.

Este modelo permite capturar la variación tanto individual como grupal, incorporando información contextual de los grupos (condados) en el análisis.

6.7 Predicción para nuevas observaciones y nuevos grupos

6.7.1 Conceptos Principales

En modelos jerárquicos bayesianos, la predicción puede realizarse de dos formas:

  1. Dentro de JAGS: agregando observaciones nuevas (con valores NA) directamente al modelo.
  2. Desde R: usando las simulaciones de los parámetros obtenidos para generar distribuciones predictivas.

La predicción en un grupo existente utiliza los efectos aleatorios estimados de dicho grupo, mientras que la predicción en un nuevo grupo requiere simular nuevos efectos aleatorios basados en la distribución de segundo nivel.

6.7.2 Predicción de una nueva unidad en un nuevo grupo

A continuación, se presenta la extensión del conjunto de datos para incluir una nueva vivienda en un condado ya existente (condado 26).

# Extender el conjunto de datos para una nueva observación en un grupo existente
n <- n + 1
y <- c(y, NA)
county <- c(county, 26)
x <- c(x, 1)

La predicción se realiza dentro del modelo JAGS agregando la línea:

# JAGS code
y.tilde <- y[n]

El modelo puede ejecutarse en R con R2jags y CalvinBayes como sigue:

data_jags_pred <- list(y = y, x = x, county = county, n = n, J = J)

jags_model3 <-
  jags(
    model.file = "codigoJAGS/radon_model_pred1.jags",
    data = data_jags_pred,
    parameters.to.save = c("a", "b", "mu.a", "sigma.y", "sigma.a", "y.tilde"),
    n.iter = 3000, n.burnin = 1000, n.thin = 2
  )
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 919
   Unobserved stochastic nodes: 90
   Total graph size: 3005

Initializing model

Posteriormente, se resumen las simulaciones obtenidas para la predicción:

library(CalvinBayes)
Loading required package: ggformula
Loading required package: scales

Attaching package: 'scales'
The following object is masked from 'package:purrr':

    discard
The following object is masked from 'package:readr':

    col_factor
Loading required package: ggiraph
Loading required package: ggridges

New to ggformula?  Try the tutorials: 
    learnr::run_tutorial("introduction", package = "ggformula")
    learnr::run_tutorial("refining", package = "ggformula")
Loading required package: bayesplot
This is bayesplot version 1.14.0
- Online documentation and vignettes at mc-stan.org/bayesplot
- bayesplot theme set to bayesplot::theme_default()
   * Does _not_ affect other ggplot2 plots
   * See ?bayesplot_theme_set for details on theme setting

Attaching package: 'CalvinBayes'
The following object is masked from 'package:bayesplot':

    rhat
The following object is masked from 'package:datasets':

    HairEyeColor
jags_model3_mcmc <- as.mcmc(jags_model3)

# Diagnóstico y resumen de la predicción
diag_mcmc(jags_model3_mcmc, parName = "y.tilde")

quantile(exp(jags_model3_mcmc[, "y.tilde"][[1]]), c(0.25, 0.75))
     25%      75% 
1.210616 3.306084 

6.7.3 Predicción de una nueva unidad en un nuevo grupo

Para un grupo sin datos previos (nuevo condado), se define un predictor grupal promedio y se amplía el conjunto de datos:

# Definir predictor a nivel de grupo para el nuevo condado
u.tilde <- mean(u)

# Extender el conjunto de datos para incluir un nuevo condado
n <- n + 1
y <- c(y, NA)
county <- c(county, J + 1)
x <- c(x, 1)
J <- J + 1
u <- c(u, u.tilde)

data_jags_pred2 <- list(y = y, x = x, county = county, n = n, J = J, u = u)

jags_model4 <-
  jags(
    model.file = "codigoJAGS/radon_model_pred2.jags",
    data = data_jags_pred2,
    parameters.to.save = c("a", "b", "mu.a", "sigma.y", "sigma.a", "y.tilde"),
    n.iter = 3000, n.burnin = 1000, n.thin = 2
  )
Compiling model graph
   Resolving undeclared variables
   Allocating nodes
Graph information:
   Observed stochastic nodes: 919
   Unobserved stochastic nodes: 94
   Total graph size: 3270

Initializing model
jags_model4
Inference for Bugs model at "codigoJAGS/radon_model_pred2.jags", fit using jags,
 3 chains, each with 3000 iterations (first 1000 discarded), n.thin = 2
 n.sims = 3000 iterations saved. Running time = 2.913 secs
          mu.vect sd.vect     2.5%      25%      50%      75%    97.5%  Rhat
a[1]        0.946   0.167    0.616    0.842    0.945    1.052    1.285 1.002
a[2]        0.863   0.092    0.689    0.800    0.860    0.925    1.043 1.003
a[3]        1.398   0.157    1.100    1.299    1.395    1.496    1.721 1.001
a[4]        1.151   0.159    0.861    1.042    1.147    1.254    1.482 1.001
a[5]        1.369   0.150    1.074    1.271    1.368    1.466    1.687 1.001
a[6]        1.718   0.160    1.394    1.617    1.719    1.824    2.030 1.001
a[7]        1.793   0.131    1.549    1.703    1.788    1.881    2.061 1.001
a[8]        1.714   0.156    1.425    1.611    1.708    1.812    2.045 1.003
a[9]        1.153   0.137    0.868    1.064    1.155    1.242    1.424 1.001
a[10]       1.538   0.146    1.246    1.448    1.537    1.633    1.823 1.001
a[11]       1.097   0.156    0.797    0.993    1.092    1.195    1.420 1.001
a[12]       1.678   0.157    1.369    1.575    1.677    1.779    1.996 1.001
a[13]       0.954   0.153    0.663    0.855    0.947    1.046    1.281 1.001
a[14]       1.817   0.135    1.568    1.726    1.811    1.903    2.096 1.001
a[15]       1.407   0.154    1.092    1.310    1.406    1.502    1.717 1.001
a[16]       1.060   0.160    0.729    0.963    1.061    1.169    1.362 1.002
a[17]       1.635   0.161    1.291    1.539    1.645    1.738    1.934 1.001
a[18]       1.045   0.138    0.782    0.957    1.036    1.133    1.330 1.001
a[19]       1.371   0.082    1.206    1.317    1.373    1.426    1.526 1.001
a[20]       1.673   0.159    1.361    1.572    1.672    1.774    1.997 1.001
a[21]       1.624   0.141    1.356    1.531    1.619    1.710    1.914 1.001
a[22]       1.455   0.171    1.074    1.349    1.470    1.578    1.751 1.001
a[23]       1.736   0.165    1.385    1.636    1.745    1.840    2.039 1.001
a[24]       1.758   0.149    1.482    1.654    1.752    1.850    2.070 1.001
a[25]       1.734   0.135    1.486    1.644    1.724    1.819    2.023 1.001
a[26]       1.365   0.068    1.233    1.318    1.364    1.410    1.501 1.001
a[27]       1.818   0.146    1.520    1.725    1.820    1.912    2.111 1.001
a[28]       1.180   0.149    0.890    1.083    1.177    1.273    1.491 1.002
a[29]       0.939   0.169    0.620    0.829    0.934    1.041    1.315 1.002
a[30]       0.965   0.138    0.686    0.872    0.964    1.057    1.233 1.001
a[31]       1.752   0.157    1.456    1.649    1.745    1.848    2.091 1.001
a[32]       1.400   0.154    1.078    1.306    1.405    1.502    1.688 1.002
a[33]       1.619   0.158    1.322    1.515    1.613    1.719    1.951 1.001
a[34]       1.472   0.157    1.179    1.372    1.471    1.566    1.803 1.001
a[35]       0.822   0.154    0.524    0.722    0.820    0.924    1.134 1.001
a[36]       1.793   0.174    1.473    1.675    1.777    1.898    2.167 1.002
a[37]       0.800   0.154    0.463    0.708    0.811    0.905    1.072 1.003
a[38]       1.107   0.176    0.789    0.985    1.093    1.215    1.482 1.002
a[39]       1.629   0.150    1.343    1.531    1.627    1.721    1.937 1.002
a[40]       1.868   0.166    1.552    1.760    1.859    1.974    2.214 1.001
a[41]       1.801   0.143    1.522    1.707    1.795    1.892    2.091 1.001
a[42]       1.560   0.168    1.217    1.457    1.561    1.663    1.891 1.001
a[43]       1.502   0.138    1.231    1.412    1.501    1.589    1.778 1.001
a[44]       1.455   0.152    1.133    1.356    1.468    1.558    1.722 1.001
a[45]       1.467   0.134    1.197    1.380    1.471    1.558    1.717 1.001
a[46]       1.432   0.148    1.126    1.338    1.437    1.526    1.724 1.004
a[47]       1.271   0.161    0.925    1.175    1.276    1.373    1.588 1.001
a[48]       1.324   0.139    1.036    1.237    1.330    1.414    1.586 1.001
a[49]       1.665   0.126    1.420    1.584    1.662    1.749    1.922 1.001
a[50]       1.781   0.168    1.451    1.675    1.777    1.887    2.120 1.001
a[51]       1.728   0.159    1.426    1.622    1.718    1.828    2.074 1.001
a[52]       1.778   0.163    1.455    1.674    1.777    1.879    2.105 1.001
a[53]       1.609   0.161    1.266    1.509    1.613    1.713    1.920 1.001
a[54]       1.475   0.122    1.222    1.394    1.479    1.560    1.702 1.002
a[55]       1.388   0.144    1.121    1.293    1.381    1.479    1.684 1.002
a[56]       1.366   0.156    1.034    1.271    1.371    1.465    1.661 1.003
a[57]       1.222   0.155    0.888    1.127    1.232    1.324    1.506 1.001
a[58]       1.817   0.159    1.492    1.717    1.817    1.918    2.129 1.002
a[59]       1.669   0.153    1.360    1.569    1.666    1.772    1.974 1.001
a[60]       1.639   0.162    1.318    1.537    1.641    1.739    1.961 1.001
a[61]       1.157   0.102    0.961    1.090    1.157    1.225    1.361 1.001
a[62]       1.773   0.150    1.481    1.677    1.767    1.867    2.072 1.001
a[63]       1.727   0.158    1.418    1.628    1.729    1.828    2.033 1.001
a[64]       1.682   0.135    1.429    1.593    1.678    1.764    1.957 1.001
a[65]       1.804   0.170    1.462    1.698    1.809    1.919    2.132 1.000
a[66]       1.435   0.138    1.177    1.341    1.429    1.525    1.723 1.001
a[67]       1.610   0.133    1.367    1.517    1.605    1.693    1.895 1.002
a[68]       1.002   0.147    0.717    0.905    0.997    1.094    1.301 1.002
a[69]       1.576   0.155    1.246    1.484    1.580    1.675    1.889 1.001
a[70]       0.909   0.068    0.775    0.864    0.909    0.953    1.046 1.001
a[71]       1.519   0.110    1.297    1.446    1.524    1.592    1.731 1.001
a[72]       1.638   0.138    1.371    1.549    1.637    1.723    1.914 1.001
a[73]       1.804   0.167    1.474    1.696    1.803    1.912    2.132 1.001
a[74]       1.587   0.162    1.231    1.492    1.600    1.697    1.882 1.001
a[75]       1.465   0.157    1.169    1.363    1.458    1.562    1.804 1.001
a[76]       1.854   0.160    1.542    1.747    1.854    1.958    2.164 1.001
a[77]       1.630   0.144    1.351    1.535    1.628    1.721    1.925 1.001
a[78]       1.036   0.158    0.740    0.929    1.030    1.134    1.369 1.001
a[79]       1.463   0.171    1.066    1.365    1.481    1.577    1.759 1.002
a[80]       1.336   0.089    1.154    1.276    1.338    1.396    1.506 1.001
a[81]       1.730   0.172    1.427    1.610    1.714    1.830    2.110 1.001
a[82]       1.661   0.169    1.325    1.555    1.654    1.765    2.009 1.001
a[83]       1.737   0.137    1.457    1.647    1.741    1.831    1.999 1.001
a[84]       1.487   0.134    1.243    1.397    1.479    1.570    1.767 1.001
a[85]       1.679   0.166    1.310    1.580    1.685    1.784    2.000 1.001
a[86]       1.481   0.166    1.147    1.378    1.481    1.581    1.827 1.002
b          -0.670   0.070   -0.808   -0.718   -0.669   -0.624   -0.532 1.001
mu.a       -3.342  99.441 -202.516  -69.094   -1.579   65.209  189.383 1.002
sigma.a     0.160   0.045    0.079    0.127    0.157    0.191    0.251 1.006
sigma.y     0.760   0.018    0.726    0.747    0.760    0.772    0.797 1.001
y.tilde     0.819   0.796   -0.729    0.253    0.845    1.361    2.364 1.002
deviance 2101.098  11.566 2078.396 2093.520 2101.348 2108.716 2124.142 1.002
         n.eff
a[1]      1800
a[2]       990
a[3]      3000
a[4]      3000
a[5]      2000
a[6]      3000
a[7]      3000
a[8]       710
a[9]      3000
a[10]     2500
a[11]     3000
a[12]     3000
a[13]     3000
a[14]     3000
a[15]     2100
a[16]     1700
a[17]     2100
a[18]     3000
a[19]     3000
a[20]     3000
a[21]     3000
a[22]     2800
a[23]     3000
a[24]     3000
a[25]     3000
a[26]     3000
a[27]     3000
a[28]     1500
a[29]     3000
a[30]     2800
a[31]     3000
a[32]     1400
a[33]     2300
a[34]     3000
a[35]     3000
a[36]     1400
a[37]     3000
a[38]     1500
a[39]     1800
a[40]     3000
a[41]     3000
a[42]     3000
a[43]     3000
a[44]     3000
a[45]     3000
a[46]      650
a[47]     3000
a[48]     3000
a[49]     2500
a[50]     3000
a[51]     3000
a[52]     3000
a[53]     3000
a[54]     1300
a[55]     1300
a[56]      740
a[57]     3000
a[58]     1100
a[59]     3000
a[60]     3000
a[61]     3000
a[62]     3000
a[63]     3000
a[64]     2100
a[65]     3000
a[66]     3000
a[67]     2200
a[68]     1200
a[69]     3000
a[70]     3000
a[71]     3000
a[72]     3000
a[73]     3000
a[74]     3000
a[75]     3000
a[76]     2500
a[77]     2300
a[78]     2600
a[79]     1300
a[80]     2700
a[81]     3000
a[82]     3000
a[83]     3000
a[84]     3000
a[85]     3000
a[86]     3000
b         2600
mu.a      1900
sigma.a   3000
sigma.y   2300
y.tilde   1300
deviance  1300

For each parameter, n.eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor (at convergence, Rhat=1).

DIC info (using the rule: pV = var(deviance)/2)
pV = 66.8 and DIC = 2167.9
DIC is an estimate of expected predictive error (lower deviance is better).

6.7.3.1 Advertencias y Notas Importantes

  • Datos faltantes: JAGS permite valores NA en variables modeladas, pero no en predictores o índices de agrupamiento.
  • Estructura jerárquica: los grupos nuevos requieren actualizar explícitamente las variables J y los vectores de predictores.
  • Predicciones en R: pueden realizarse sin volver a ejecutar JAGS, usando las simulaciones ya generadas de los parámetros.
  • Convergencia: si el modelo no converge, aumente n.iter o reduzca la complejidad del modelo (por ejemplo, eliminar interacciones innecesarias).

6.7.4 Predicción utilizando R

Además de JAGS, es posible realizar predicciones directamente en R usando los parámetros simulados:

attach.jags(jags_model2_u)
y.tilde <- rnorm(n.sims, a[,26] + b * 1, sigma.y)
quantile(exp(y.tilde), c(0.25, 0.75))
     25%      75% 
1.170794 3.234210 

Y para un nuevo condado con nivel de uranio \(\tilde{u}\):

a.tilde <- rnorm(n.sims, g.0 + g.1 * u.tilde, sigma.a)
y.tilde <- rnorm(n.sims, a.tilde + b * 1, sigma.y)
quantile(exp(y.tilde), c(0.25, 0.75))
     25%      75% 
1.239024 3.853145 

6.8 Algunas ideas prácticas de implementación

6.8.1 Estrategia de implementación

En casi cualquier aplicación, es recomendable comenzar con modelos simples en R (por ejemplo, regresiones con pooling completo o sin pooling), y luego replicarlos en JAGS. El propósito de este paso inicial es verificar que los estimadores y errores estándar sean similares entre ambos enfoques.

Posteriormente, se debe aumentar gradualmente la complejidad del modelo, incorporando estructuras multinivel, predictores a nivel de grupo, pendientes variables o estructuras no anidadas. Esto no solo favorece la interpretación estadística, sino que también facilita la depuración de errores computacionales.

Generalmente, intentar programar un modelo demasiado complejo desde el inicio conduce a fallas en la ejecución. En tales casos, es mejor volver a versiones más simples hasta lograr una ejecución estable.

Si un modelo no se ejecuta correctamente, puede utilizarse la opción debug = TRUE en la llamada a JAGS, lo que mantiene abierta la ventana de JAGS para inspeccionar los errores.

6.8.2 Número de cadenas y longitud de las simulaciones

Normalmente se ejecutan tres cadenas (n.chains = 3). La decisión sobre cuántas iteraciones correr depende del equilibrio entre velocidad y convergencia.

Un flujo de trabajo típico es:

  1. Ejecutar el modelo con pocas iteraciones en modo depuración (debug = TRUE) para garantizar que el script funcione.

  2. Realizar una corrida corta, por ejemplo, con n.iter = 100 o n.iter = 500.

  3. Evaluar el criterio de convergencia de Gelman-Rubin (\(\widehat{R}\)):

    • Si \(\widehat{R} < 1.1\) para todos los parámetros, se puede detener la simulación.

    • Si \(\widehat{R} < 1.5\), se recomienda continuar con un número mayor de iteraciones (por ejemplo, 1000 o 2000).

    • Si las cadenas no convergen tras varios minutos, se deben considerar alternativas como:

      • Simplificar el modelo,
      • Ajustar el modelo con una muestra reducida de los datos,
      • Mejorar la eficiencia del código JAGS.

En modelos muy complejos, puede ser necesario ejecutar decenas de miles de iteraciones. Sin embargo, esta estrategia de “fuerza bruta” no es recomendable durante la etapa de construcción del modelo, ya que ralentiza la experimentación y el refinamiento.

6.8.3 Valores iniciales (Initial values)

La función jags() acepta el argumento inits, que define una función encargada de generar los valores iniciales para cada cadena MCMC.

Aunque no es crítico cuáles sean estos valores exactos, es importante que:

  • estén dispersos (cada cadena comience en una región diferente del espacio de parámetros), y
  • sean razonables, evitando valores extremos como \(10^{-4}\) o \(10^{6}\) que pueden hacer que el algoritmo diverja.

Es común definir los valores iniciales como funciones con números aleatorios, garantizando así diversidad entre cadenas. Generalmente se utilizan distribuciones normales estándar \(\mathcal{N}(0,1)\) para parámetros no restringidos y distribuciones uniformes \(\text{Uniform}(0,1)\) para parámetros que deben ser positivos.

6.8.4 Ejemplo de especificación básica de valores iniciales

inits <- function() {
  list(
    a = rnorm(1),
    b = rnorm(J),
    C = array(rnorm(J * K), c(J, K)),
    sigma = runif(1)
  )
}

En este ejemplo:

  • a es un escalar,
  • b es un vector de longitud J,
  • C es una matriz J × K,
  • sigma es un parámetro positivo.

6.8.5 Ejemplo con distribuciones personalizadas

Si se desea usar una distribución \(\mathcal{N}(0, 2^2)\) para los parámetros normales y una distribución \(\text{Uniform}(0.1, 10)\) para los parámetros positivos:

inits <- function() {
  list(
    a = rnorm(1, 0, 2),
    b = rnorm(J, 0, 2),
    C = array(rnorm(J * K, 0, 2), c(J, K)),
    sigma = runif(1, 0.1, 10)
  )
}

Este enfoque permite generar diferentes condiciones iniciales de forma automática al iniciar múltiples cadenas, promoviendo una exploración más completa del espacio de parámetros y ayudando a evaluar la convergencia de manera confiable.