Estadística Espacio Temporal

Aplicaciones de geoestadística




logo

Maestría en Estadística Aplicada

Roberto Trespalacios

Temas

  • Semivariogramas.
  • Covariograma y correlograma.
  • Estacionalidad fuerte y débil.
  • Isotropía y anisotropía.

Semivariograma

El semivariograma (\( \frac{1}{2}variograma \)) entre dos variables aleatorias \( Z(\boldsymbol{s}) \) y \( Z(\boldsymbol{s}+\boldsymbol{h}) \), se define por:

\[ \gamma(\boldsymbol{h})=\frac{1}{2}E[(Z(\boldsymbol{s}),Z(\boldsymbol{s}+\boldsymbol{h}))^2] \]

  • Semilla(nugget): la altura del salto del semivariograma en la discontinuidad en el origen.
  • Meseta(sill): Límite del variograma que tiende a infinitas distancias de retardo.
  • Rango(rango): la distancia en la que la diferencia del variograma desde el umbral se vuelve insignificante.

Propiedades

  • cero en el origen \( \gamma(0)=0 \)
  • valores positivos \( \gamma(\boldsymbol{h}) \geqslant 0 \)
  • función par \( \gamma(\boldsymbol{h})=\gamma(-\boldsymbol{h}) \)

Estimación semivariograma

La existencia de la covarianza implica que la varianza existe, es finita y no depende de \( h \), es decir \( Var(Z(s_i)) =C(0)=\sigma^2 \) . Así mismo la estacionariedad de segundo orden implica la siguiente relación entre la función de semivarianza y la de autocovarianza:

\[ \begin{align*} \gamma(Z(s),Z(s+h))&=\frac{1}{2}E[Z(\boldsymbol{s}+\boldsymbol{h})-m+ Z(\boldsymbol{s})+m )]^2\\ &=\frac{1}{2} [E[Z(\boldsymbol{s}+\boldsymbol{h})+m]^2 + E[Z(\boldsymbol{s})-m]^2-2E[Z(\boldsymbol{s}+\boldsymbol{h})-m][Z(\boldsymbol{s})-m]]\\ &= \frac{1}{2} \sigma^2 +\frac{1}{2} \sigma^2-E[(Z(\boldsymbol{s}+h)-m)(Z(\boldsymbol{s})-m)]\\ &=\sigma^2-C(h) \end{align*} \]

Realación entre varianza y semivariograma

  • Cuando se definió la estacionariedad débil en el capítulo anterior se mencionó que se asumía que la varianza de los incrementos de la variable regionalizada era finita. A esta función denotada por \( 2\gamma(h) \) se le denomina variograma.
  • Utilizando la definición teórica de la varianza en términos del valor esperado de una variable aleatoria, tenemos:

\[ \begin{align*} 2\gamma(h)=&Var[Z(\boldsymbol{s}+h]-Z(\boldsymbol{s})]\\ =&E[(Z(\boldsymbol{s}+h)-Z(\boldsymbol{s}))^2]-(E[Z(\boldsymbol{s}+h)-Z(\boldsymbol{s})])^2\\ =&E[(Z(\boldsymbol{s}+h)-Z(\boldsymbol{s}))^2] \end{align*} \]

  • La mitad del variograma \( \gamma(h) \), se conoce como la función de semivarianza y caracteriza las propiedades de dependencia espacial del proceso.
  • Dada una realización del fenómeno, la función de semivarianza es estimada, por el método de momentos, a través del semivariograma experimental. Esta, la definos como \( \hat{\gamma}(h) \)

\[ \hat{\gamma}(h)=\frac{\sum(Z(s+h)-Z(s))^2}{2n} \]

Semivariograma empírico

Definimos el semivariograma empírico \( \hat{\gamma}(h_k) \) como: promedio de incrementos al cuadrado para una clase \( h_k \),

\[ \hat{\gamma}(h_k)=\frac{1}{2N(h_k)}\sum_{(s_i,s_j)\in N(h_K)}[Z(s_i)-Z(s_j)]^2 \]

donde \( N(h_k) \) es el número de rezagos \( h = s_i-s_j \) dentro de la distancia (y el ángulo) en la clase \( h_k \).

Los valores de los variogramas generalmente solo se presentan para las distancias hasta el diámetro de los datos: no mostramos los valores del variograma para las diferencias de los pares más largos.

Variograma (traslación rotación)

Los variogramas se calculan para diferentes distancia(incrementos), y generalmente para diferentes direcciones, de modo que podamos verificar un componente de longitud y de dirección.

Modelos teoricos de variogramas

  • Exponencial
  • Gaussiano

  • Potencia
  • Esférico

Donde

  • \( c_0 = c_n + \sigma^2_0 = sill \)
  • \( c_n = nugget \)
  • \( \sigma^2_0 = \text{ sill parcial} \)
  • \( a_0 = rango \)

Gráficos de diferentes modelos de variogramas

  • La función de semivarianza se calcula para varias distancia \( h \).
  • En la práctica, debido a irregularidad en el muestreo y por ende en las distancias entre los sitios, se toman intervalos de distancia \( \{[0,h], (h,2h],\dots,(2h,3h], \dots \} \)

Relaciones entre los segundo momentos espaciales

  • La primera etapa en el desarrollo de un análisis geoestadístico es la determinación de la dependencia espacial entre los datos medidos de una variable.
  • Esta fase es también conocida como análisis estructural. Para llevarla a cabo, con base en la información muestral, se usan tres funciones:
    • El semivariograma, el covariograma y el correlograma.
  • A continuación se hace una revisión de los conceptos asociados a cada una de ellas y se describen sus bondades y limitaciones.

Covariograma y correlograma Espacial

La función de covarianza muestral o el Covariograma entre parejas de observaciones que se encuentran a una distancia \( h \) se calcula, empleando la formula clásica de la covarianza muestral, por:

\[ \begin{align*} C(h)=&Cov[Z(\boldsymbol{s}+h]-Z(\boldsymbol{s})]\\ =&\frac{\sum_{i=1}^n(Z(\boldsymbol{s}+h)-m)(Z(\boldsymbol{s})-m)}{n}\\ =&\frac{\sum_{i=1}^n(Z(\boldsymbol{s}+h)Z(s))}{n} -m^2=C(h) \end{align*} \]

donde \( m \) representa el valor promedio en todo punto de la región de estudio y \( n \) es el número de parejas de puntos que se encuentran a una distancia \( h \).

Correlograma

El correlograma (coeficiente de correlación lineal) entre dos variables aleatorias espaciales \( Z(\boldsymbol{s}) \) y \( Z(\boldsymbol{s}+h) \)

\[ \begin{align*} \rho(\boldsymbol{h})=&Cor[Z(\boldsymbol{s}+h),Z(\boldsymbol{s})]\\ =&\frac{Cov[Z(\boldsymbol{s}+h),Z(\boldsymbol{s})]}{\sqrt{Var[Z(\boldsymbol{s}+h)]Var[Z(\boldsymbol{s})]}}\\ =&\frac{C(h)}{C(0)}\\ \end{align*} \]

Bajo el supuesto de estacionariedad cualquiera de las tres funciones de dependencia espacial mencionadas, es decir semivariograma, covariograma o correlograma, puede ser usada en la determinación de la relación espacial entre los datos.

Gráfico de campo aleatorio anisotrópico

Observación

Cuando existe superposición de los variogramas direccionales: el variograma es isotrópico; de lo contrario, diremos que el campo es anisotrópico.

El variograma exhibe una anisotropía más compleja: diferentes formas según la dirección.

Ejercicios

Ejercicios

  • Análisis de isotropía espacial (en R): Usar el raster del taller 1, para hacer un análisis isotrópico espacial, de la variable temperatura (\( Z(s) \)) en cada punto del mapa. Gráfique para cada una de las diferentes posibilidades de desplazamiento del rango de ángulo \( [0, \pi] \), con incrementos de \( \pi/4 \).

  • Cálculo de semivariograma-variograma(manual): Dado los 5 puntos de la variable lluvia, sobre \( D \subset \mathbb{R}^2 \), estime el variograma direccional este-oeste usar una tolerancia de 0 grados.

Punto Coordenadas Lluvia
1 (2,4) 33
2 (-3,0) 55
3 (1,1) 41
4 (3,-2) 36
5 (-1,2) 35

Ejemplo de aplicación de semi-variograma(omnidireccional)

# Leamos los datos de meuse
library(raster)
filename <- system.file("external/test.grd", package="raster")
# Creamos el raster
r <- raster(filename)
# grafica
plot(r)
library(gstat)
library(geoR)
# el raster lo convertimos a dataframe espacial
point_data <- as(r, 'SpatialPointsDataFrame')
# convertimos a clase geodata
geo.df <- as.geodata(point_data)
# creamos el variograma
geor_variogram <- variog(geo.df)

# grafica de los puntos estimados por el variograma
plot(geor_variogram,col=1)
# función teorica del variograma (exp, sph, power,)
lines.variomodel(cov.model="exp", cov.pars=c(32000,1000), nug=10000, max.dist=max(geor_variogram$u), col=2)
lines.variomodel(cov.model="sph", cov.pars=c(32000,1000), nug=10000, max.dist=max(geor_variogram$u), col=3)
legend("bottomright",legend=c('Observado','Exponencial','Esferico'),lty=c(NA,1,1),pch=c(1,NA,NA),
       col=1:3,lwd=c(2,2,2),bty="n",cex=.4)

Ejemplo de aplicación de semi-variograma(direccional)

library(gstat)
library(geoR)
# el raster lo convertimos a dataframe espacial
point_data <- as(r, 'SpatialPointsDataFrame')
# convertimos a clase geodata
geo.df <- as.geodata(point_data)
# creamos el variograma
geor_variogram <- variog(geo.df, dir=pi/2, tol=0)

# grafica de los puntos estimados por el variograma
plot(geor_variogram,col=1)
# función teorica del variograma (exp, sph, power,)
lines.variomodel(cov.model="exp", cov.pars=c(38000,1000), nug=10000, max.dist=max(geor_variogram$u), col=2)
lines.variomodel(cov.model="sph", cov.pars=c(38000,1000), nug=10000, max.dist=max(geor_variogram$u), col=3)
legend("topleft",legend=c('Observado','Exponencial','Esferico'),lty=c(NA,1,1),pch=c(1,NA,NA),
       col=1:3,lwd=c(2,2,2),bty="n")

Ejemplo de correlación temporal

A continuación, veremos un ejemplo de autocorrelación temporal, que nos auyuda a entender la autocorrelación espacial.

set.seed(0)
d <- sample(100, 10)

Cálculo de la auto-correlación

a <- d[-length(d)]
b <- d[-1]
plot(a, b, xlab='t', ylab='t-1')

La corrrelación es

cor(a, b)

La autocorrelación calculada arriba es muy pequeña. Aunque esta es una muestra aleatoria, usted (casi) nunca obtiene un valor de cero. Calculamos la autocorrelación de “un retraso”, que es, comparamos cada valor con su vecino inmediato, y no con otros valores cercanos.

Después de los números en la autocorrelación se vuelve muy fuerte (como era de esperar).

Otro ejemplo de auto-correlación

d <- sort(d)
a <- d[-length(d)]
b <- d[-1]
plot(a, b, xlab='t', ylab='t-1')

La correlación es

cor(a, b)

La función acf muestra la autocorrelación calculada de una manera diferente (es 1 para cada punto en sí mismo, cuando se compara con el vecino más cercano, y luego se reduce gradualmente).

acf(d)

Otras medidas de autocorrelación espacial

  • El concepto de autocorrelación espacial es una extensión de la autocorrelación temporal.
  • Aunque es un poco más complicado; ya que el tiempo es unidimensional, y solo va en una dirección, siempre adelante.
  • Los objetos espaciales tienen (al menos) dos dimensiones y formas complejas, y puede no ser obvio cómo determinar qué está “cerca”.

  • Las ecuaciones espaciales de autocorrelación espacial describen el grado en que son puntos, áreas o celdas de trama, son similares entre sí. Entonces necesitamos dos cosas: observaciones y ubicaciones.

  • La autocorrelación espacial en una variable puede ser:

    • exógena (es causada por otra variable espacialmente autocorrelacionada, por ejemplo, lluvia)
    • endógena (es causada por el proceso en juego, por ejemplo, la diseminación de una enfermedad)
  • Una estadística comúnmente utilizada que describe la autocorrelación espacial es el estadístico de Moran

  • Otros índices incluyen C de Geary y, para datos binarios, el índice de recuento de uniones.

  • El semi-variograma(del que hablamos anteriormente) también expresa la cantidad de autocorrelación espacial en un conjunto de datos.

Ejemplo

El siguiente ejemplo se basa en un problema de autocorrelación de regiones.

Digamos que estamos interesados en la autocorrelación espacial en la variable “área”. Si hubiera autocorrelación espacial, las regiones de un tamaño similar estarían agrupadas espacialmente.

Aquí hay un diagrama de los polígonos. Utilizo las coordenadas para obtener los centroides de los polígonos para colocar las etiquetas.

library(raster)
p <- shapefile(system.file("external/lux.shp", package="raster"))
p <- p[p$NAME_1=="Diekirch", ]
p$value <- c(10, 6, 4, 11, 6)
data.frame(p)

Veamos la gráfica

par(mai=c(0,0,0,0))

xy <- coordinates(p)
plot(p, col=2:7)
points(xy, cex=6, pch=20, col='white')
text(p, 'ID_2', cex=1.5)

Polígonos adyacentes

Ahora necesitamos determinar qué polígonos están “cerca” y cómo cuantificar eso. Aquí usaremos la adyacencia como criterio. Para encontrar polígonos adyacentes, podemos usar la librería spdep.

library(spdep)
w <- poly2nb(p, row.names=p$Id)
class(w)
summary(w)
  • El summary(w) nos dice algo sobre el vecindario.
  • El número promedio de vecinos es 2.8, 3 polígonos tienen 2 vecinos y 1 tiene 4 vecinos (¿cuál es ese?).

Para más detalles, podemos ver la estructura de w.

str(w)

Pregunta de tarea: ¿Qué el significan las primeras 5 líneas devueltas por str(w)

Veamos los enlaces entre los polígonos para cada centro.

plot(p, col='gray', border='blue', lwd=2)
plot(w, xy, col='red', lwd=2, add=TRUE)

Podemos transformar w en una matriz de ponderaciones espaciales. Una matriz de ponderaciones espaciales refleja la intensidad de la relación geográfica entre las observaciones.

wm <- nb2mat(w, style='B') #W

Ley de Moran para el cálculo de autocorrelación espacial

Ahora veamos el índice de autocorrelación espacial de Moran.

  • El estadístico de Moran es una medida de la autocorrelación espacial desarrollada por Patrick Moran.
  • La autocorrelación espacial se caracteriza por una correlación en una señal de ubicaciones cercanas en el espacio.
  • Recoredemos, que la autocorrelación espacial es más compleja que la autocorrelación unidimensional porque la correlación espacial es multidimensional (es decir, espacio de 2 o 3 dimensiones) y multidireccional.

\[ I = \frac{n}{\sum_{i=1}^n (y_i - \bar{y})^2} \frac{\sum_{i=1}^n \sum_{j=1}^n w_{ij}(y_i - \bar{y})(y_j - \bar{y})}{\sum_{i=1}^n \sum_{j=1}^n w_{ij}} \]

donde \( n \) es el número de unidades espaciales indexados por \( i \) y \( j \); \( y \) es la variable de interés; \( \bar{y} \) es la media de \( y \); y \( w_{ij} \) es un elemento de una matriz de pesos espaciales.

El valor esperado del estadístico de Moran bajo la hipótesis nula de no autocorrelación espacial es

\[ E(I)=\frac{-1}{n-1} \]

Ejemplo estadístico de Moran

Usemos los datos del shapefile p, que utilizamos antes.

Primero tomemos la longitud de p

n <- length(p)

Ahora \( y \) y su media \( \bar{y} \)

y <- p$value
ybar <- mean(y)

Ahora necesitamos \( (y_i−\bar{y})(y_j−\bar{y}) \)

Método 1:

dy <- y - ybar
g <- expand.grid(dy, dy)
yiyj <- g[,1]*g[,2]

Método 2:

yi <- rep(dy, each=n)
yj <- rep(dy)
yiyj <- yi * yj

Continuación de ejemplo estadístico de moran

Hacer una matriz de los pares multiplicados

pm <- matrix(yiyj, ncol=n)

Y multiplique esta matriz con los pesos para que sea igual al valor para los pares que no son adyacentes.

pmw <- pm * wm

Ahora sumamos los valores, para obtener la parte \( \sum_{i=1}^n \sum_{j=1}^n w_{ij}(y_i - \bar{y})(y_j - \bar{y}) \) del estadístico de Moran:

spmw <- sum(pmw)

El siguiente paso es dividir este valor por la suma de los pesos.

smw <- sum(wm)
sw <- spmw/smw

Y calcule la varianza inversa de \( y \)

vr <- n / sum(dy ^ 2)

El último paso para calcular el estadístico de Moran

MI <- vr * sw
  • Esta es una forma simple (pero cruda) de estimar el valor del I. de Moran, es decir, el valor que obtendría en ausencia de autocorrelación espacial (si los datos fueran espacialmente aleatorios).
  • Por supuesto que nunca esperas, pero así es como lo hacemos en estadística.
  • Tenga en cuenta que el valor esperado se aproxima a cero si \( n \) se vuelve grande, pero no es alejado de cero para valores pequeños de \( n \).
EI <- -1 / (n-1)

Estidístico de Moran (librería spdep)

  • Después de hacer esto “a mano”“, ahora usemos el paquete spdep para calcular Moran y hacer una prueba de significación.
  • Para hacer esto, necesitamos crear un objeto de pesos espaciales tipo 'listw' (en lugar de la matriz que utilizamos anteriormente).
  • Para obtener el mismo valor, usamos "style = 'B'” para usar pesos de distancia binarios (TRUE/FALSE).
ww <- nb2listw (w, style = 'B')
  • Ahora podemos usar la función moran.
  • La función se define como moran(y, ww, n, Szero(ww)).
moran(p$value, ww, n=length(ww$neighbours), S0=Szero(ww))

Ahora podemos probar la significancia. Primero analíticamente, usando lógica basada en regresión lineal y suposiciones.

moran.test(p$value, ww, randomisation=FALSE)

Estadístico de Moran (simulación de Monte Carlo)

  • En lugar del enfoque anterior, debe usar la simulación de Monte Carlo.
  • Ese es el método preferido (de hecho, el único método bueno).
  • La idea es que los valores se asignen aleatoriamente a los polígonos, y se calcula el estadístico de Moran.
  • Esto se repite varias veces para establecer una distribución de valores esperados.
  • El valor observado del estadístico de Moran se puede comparar con la distribución simulada.
#Cual es el numero maximo de simulaciones
moran.mc(p$value, ww, nsim=ns)

Gráfico de autocorrelación para el estadístico de Moran

Podemos hacer un “diagrama de dispersión de Moran” para visualizar la autocorrelación espacial. Primero obtenemos los valores vecinos para cada valor.

n <- length(p)
ms <- cbind(id=rep(1:n, each=n), y=rep(y, each=n), value=as.vector(wm * y))

Eliminar los ceros

ms <- ms[ms[,3] > 0, ]

Y calcule el valor promedio del vecino

ams <- aggregate(ms[,2:3], list(ms[,1]), FUN=mean)
ams <- ams[,-1]
colnames(ams) <- c('y', 'Retraso de las y')
head(ams)

Y graficamos

plot(ams)
reg <- lm(ams[,2] ~ ams[,1])
abline(reg, lwd=2)
abline(h=mean(ams[,2]), lt=2)
abline(v=ybar, lt=2)

Problema

Usar los datos del raster del mapa de Colombia para evaluar el estadístico de Moran (todo lo que se hizo en clase).(recuerde que debe excluir a San Andres y providencia)