ESTADÍSTICA ESPACIAL EN EPIDEMIOLOGÍA Y MEDIO AMBIENTE Práctica 2b: KRIGING BAYESIANO CON WINBUGS La implementación del kriging desde una perspectiva Bayesiana requiere de métodos MCMC cuando se incorpora el rango o la pepita del variograma. Una alternativa al uso del paquete geoR es la realización del análisis Bayesiano con el programa de simulación WinBUGS. En las siguientes secciones se explica como realizar dicho análisis en el WinBUGS, construyendo el equivalente al documento kriging.odc. 1. Formulación como modelo jerárquico Utilizaremos una formulación jerárquica del modelo escribiendo como primer nivel la distribución condicional de la respuesta Z dados los parámetros θ y un vector de efectos espaciales W: Z | θ, W ∼ N (µ + W, τ 2 I) donde µ = Xβ recoge la variabilidad a gran escala. En el segundo nivel, la especificación de W es la de una distribución normal multivariante con matriz de covarianzas expresada como función paramétrica de la distancia entre pares de puntos W | σ 2 , φ ∼ N (0, σ 2 H(φ)) donde H es una matriz de correlaciones indexada por el parámetro φ. El modelo es equivalente al comentado en teorı́a, pero ofrece ventajas computacionales al realizar la simulación. 2. Construcción del modelo en el WinBUGS El modelo de kriging especificado de forma jerárquica se puede escribir en el WinBUGS como aparece en el Cuadro 1. En el puede verse: la distribución condicional de Z, como normales independientes con precisión error.prec inversa a la pepita. la estructura de las medias con la variabilidad a gran escala y los efectos espaciales W . la distribución de los efectos espaciales como normal multivariante con matriz de covarianzas exponencial, mediante la función spatial.exp(). las distribuciones previas para todos los parámetros. la predicción en los puntos loci reconstruyendo la estructura a partir de las predicciones del proceso W . ESTADÍSTICA ESPACIAL EN EPIDEMIOLOGÍA Y MEDIO AMBIENTE Cuadro 1: Modelo de Kriging Universal model { for (i in 1:N) { Z[i] ∼ dnorm(mu[i], error.prec) mu[i] <- inprod(X[i,],beta[]) + W[i] muW[i] <- 0 } error.prec ∼ dgamma(0.1,0.1) for (i in 1:p) beta[i] ∼ dnorm(0.0, 0.0001) tausq <- 1/error.prec W[1:N] ∼ spatial.exp(muW[], obsx[], obsy[], spat.prec, phi, 1) phi ∼ dgamma(0.1,0.1) spat.prec ∼ dgamma(0.1, 0.1) sigmasq <- 1/spat.prec # Predicción for(j in 1:M) { W0[j] ∼ spatial.unipred(muW0[j], locix[j], lociy[j], W[]) muW0[j] <- 0 Zloci[j] <- inprod(X0[j,], beta[]) + W0[j] } } 3. Especificación de los datos Los datos del acuı́fero se copian desde el R y se escriben en forma de lista, tal y como se ve en el Cuadro 3. 4. Valores iniciales de arranque Para iniciar la simulación con el programa WinBUGS será necesario proporcionar valores iniciales para todas las variables de las que no hay datos y que no pueden calcularse a partir de otras. Una posibilidad es la del Cuadro 2. 5. Ejercicio: Altitud del terreno Adaptad el modelo y demás elementos para realizar el análisis de los datos de la elevación del terreno mediante el WinBUGS. Realizad una predicción de la altitud del terreno en el punto de coordenadas (3,3) y comparad los resultados con los de las prácticas anteriores. 2 Práctica 2b ESTADÍSTICA ESPACIAL EN EPIDEMIOLOGÍA Y MEDIO AMBIENTE Cuadro 2: Valores iniciales para el Kriging Universal list(beta=c(0),phi=1.0,spat.prec=1.0,error.prec=1.0,W=c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), W0=c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) 6. Procedimiento con menus del WinBUGS Comprobar sintaxis del modelo (Model>Specification>Check Model) Incorporar los datos (Load data) Escribir el número de series a simular (si es > 1) Compilar el modelo (Compile) Incorporar valores de arranque (Load inits) Escribir las variables a conservar (Inference>Sample) Iniciar las simulaciones (Model>Update) Verificar convergencia (history, etc.) Recoger más valores simulados si se juzga conveniente (Update) Describir los resultados (summary, etc) 3 Práctica 2b ESTADÍSTICA ESPACIAL EN EPIDEMIOLOGÍA Y MEDIO AMBIENTE Cuadro 3: Datos del acuı́fero para el WinBUGS list(N=85,p=1,M=100,X = structure(.Data=c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), .Dim = c(85, 1)), X0 = structure(.Data=c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), .Dim = c(100, 1)), easting = c(42.783, -27.397, -1.163, -18.618, 96.465, 108.562, 88.364, 90.042, 93.173, 97.611, 90.629, 92.553, 99.49, -24.067, -26.063, 56.278, 73.039, 80.267, 80.23, 68.838, 76.399, 64.461, 43.397, 39.078, 112.804, 54.259, 6.132, -3.805, -2.231, -2.362, -2.189, 63.224, -10.779, -18.989, -38.579, 83.145, -21.802, -23.565, -20.113, -16.627, 29.907, 100.916, 101.295, 103.266, -14.311, -18.134, -18.122, -9.888, -12.163, 11.658, 61.691, 69.579, 66.722, -36.654, -19.551, -21.298, -22.362, 21.147, 7.685, -8.332, 56.707, 59.001, 68.969, 70.902, 73.002, 59.662, 61.872, 63.708, 5.627, 18.247, 85.688, 105.076, -101.643, -145.237, -73.993, -94.482, -88.85, -120.259, -86.025, -72.791, -100.174, -78.835, -83.691, -95.617, -87.555), northing = c(127.623, 90.787, 84.896, 76.452, 64.581, 82.923, 56.453, 39.258, 33.059, 56.279, 35.082, 41.752, 59.158, 184.766, 114.075, 26.848, 18.881, 12.616, 14.618, 107.774, 95.994, 110.396, 53.615, 61.998, 45.548, 147.82, 48.328, 40.404, 29.911, 33.82, 33.682, 79.499, 175.113, 171.917, 158.527, 159.116, 15.026, 9.414, 22.093, 17.256, 175.129, 22.978, 22.964, 20.342, 31.265, 30.181, 29.532, 38.145, 39.111, 18.733, 32.949, 33.808, 33.933, 150.915, 137.784, 131.825, 137.137, 139.262, 126.838, 107.777, 171.264, 164.549, 177.248, 161.381, 162.99, 170.105, 174.302, 173.915, 79.087, 77.392, 139.817, 132.032, 10.651, 28.023, 87.973, 86.626, 76.71, 80.765, 54.363, 43.092, 42.899, 40.821, 46.505, 35.822, 29.393), head = c(1464, 2553, 2158, 2455, 1756, 1702, 1805, 1797, 1714, 1466, 1729, 1638, 1736, 1476, 2200, 1999, 1680, 1806, 1682, 1306, 1722, 1437, 1828, 2118, 1725, 1606, 2648, 2560, 2544, 2386, 2400, 1757, 1402, 1364, 1735, 1376, 2729, 2766, 2736, 2432, 1024, 1611, 1548, 1591, 2540, 2352, 2528, 2575, 2468, 2646, 1739, 1674, 1868, 1865, 1777, 1579, 1771, 1408, 1527, 2003, 1386, 1089, 1384, 1030, 1092, 1161, 1415, 1231, 2300, 2238, 1038, 1332, 3510, 3490, 2594, 2650, 2533, 3571, 2811, 2728, 3136, 2553, 2798, 2691, 2946), locix=c(-150, -120, -90, -60, -30, 0, 30, 60, 90, 120, -150, -120, -90, -60, -30, 0, 30, 60, 90, 120, -150, -120, -90, -60, -30, 0, 30, 60, 90, 120, -150, -120, -90, -60, -30, 0, 30, 60, 90, 120, -150, -120, -90, -60, -30, 0, 30, 60, 90, 120, -150, -120, -90, -60, -30, 0, 30, 60, 90, 120, -150, -120, -90, -60, -30, 0, 30, 60, 90, 120, -150, -120, -90, -60, -30, 0, 30, 60, 90, 120, -150, -120, -90, -60, -30, 0, 30, 60, 90, 120, -150, -120, -90, -60, -30, 0, 30, 60, 90, 120), lociy=c(5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 85, 85, 85, 85, 85, 85, 4 85, 85, 85, 85, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185)) Práctica 2b