Mostrar correlación espacial y temporal en mapas

16

Tengo datos para una red de estaciones meteorológicas en los Estados Unidos. Esto me da un marco de datos que contiene fecha, latitud, longitud y algunos valores medidos. Suponga que los datos se recopilan una vez al día y son impulsados ​​por el clima a escala regional (no, no vamos a entrar en esa discusión).

Me gustaría mostrar gráficamente cómo los valores medidos simultáneamente se correlacionan en el tiempo y el espacio. Mi objetivo es mostrar la homogeneidad regional (o la falta de ella) del valor que se está investigando.

Conjunto de datos

Para empezar, tomé un grupo de estaciones en la región de Massachusetts y Maine. Seleccioné sitios por latitud y longitud de un archivo de índice que está disponible en el sitio FTP de NOAA.

ingrese la descripción de la imagen aquí

Inmediatamente ves un problema: hay muchos sitios que tienen identificadores similares o están muy cerca. FWIW, los identifico usando los códigos USAF y WBAN. Al profundizar en los metadatos, vi que tienen diferentes coordenadas y elevaciones, y los datos se detienen en un sitio y luego comienzan en otro. Entonces, como no sé nada mejor, tengo que tratarlos como estaciones separadas. Esto significa que los datos contienen pares de estaciones muy cercanas entre sí.

Analisis preliminar

Intenté agrupar los datos por mes calendario y luego calcular la regresión de mínimos cuadrados ordinarios entre diferentes pares de datos. Luego trazo la correlación entre todos los pares como una línea que conecta las estaciones (a continuación). El color de la línea muestra el valor de R2 del ajuste OLS. La figura luego muestra cómo los más de 30 puntos de datos de enero, febrero, etc. están correlacionados entre diferentes estaciones en el área de interés.

correlación entre datos diarios durante cada mes calendario

He escrito los códigos subyacentes para que la media diaria solo se calcule si hay puntos de datos cada período de 6 horas, por lo que los datos deben ser comparables en todos los sitios.

Problemas

Desafortunadamente, simplemente hay demasiados datos para tener sentido en una parcela. Eso no se puede solucionar reduciendo el tamaño de las líneas.

Intenté trazar las correlaciones entre los vecinos más cercanos de la región, pero eso se convierte en un desastre muy rápidamente. Las siguientes facetas muestran la red sin valores de correlación, utilizandokingrese la descripción de la imagen aquí

La red parece ser demasiado compleja, por lo que creo que necesito encontrar una manera de reducir la complejidad o aplicar algún tipo de núcleo espacial.

Tampoco estoy seguro de cuál es la métrica más adecuada para mostrar la correlación, pero para la audiencia prevista (no técnica), el coeficiente de correlación de OLS podría ser el más simple de explicar. Es posible que necesite presentar alguna otra información como el gradiente o el error estándar también.

Preguntas

Estoy aprendiendo mi camino en este campo y R al mismo tiempo, y agradecería sugerencias sobre:

  1. ¿Cuál es el nombre más formal para lo que estoy tratando de hacer? ¿Hay algunos términos útiles que me permitan encontrar más literatura? Mis búsquedas están dibujando espacios en blanco para lo que debe ser una aplicación común.
  2. ¿Existen métodos más apropiados para mostrar la correlación entre múltiples conjuntos de datos separados en el espacio?
  3. ... en particular, ¿métodos fáciles de mostrar visualmente?
  4. ¿Alguno de estos está implementado en R?
  5. ¿Alguno de estos enfoques se presta a la automatización?
Andy Clifton
fuente
[Describiendo la correlación temporal espacialmente en un entorno de análisis visual ", Abish Malik et al.] [1] [1]: google.com/…
pat
2
yWy
¿Qué sucede si intenta aumentar el umbral de trazado (0.5) y usar más de 4 pasos de color? O usar líneas más delgadas y gruesas en lugar de colores.
nadya
norteorden((norte2)/ /2)
1
De esto me di cuenta de que tengo mucho trabajo por hacer para preprocesar los datos antes de comenzar el análisis que describí aquí. Al leer la respuesta de @nadya, creo que está claro que necesito mirar algún tipo de agregación espacial, pero eso será un desafío ya que es incorrecto agregar datos de tierra y océano. Entonces necesito mirar estrategias para llenar huecos. Entonces (y solo entonces) puedo comenzar a mirar el trabajo de mapeo / visualización.
Andy Clifton

Respuestas:

10

Creo que hay algunas opciones para mostrar este tipo de datos:

La primera opción sería realizar un "Análisis empírico de funciones ortogonales" (EOF) (también denominado "Análisis de componentes principales" (PCA) en círculos no climáticos). Para su caso, esto debe realizarse en una matriz de correlación de sus ubicaciones de datos. Por ejemplo, su matriz de datos datsería sus ubicaciones espaciales en la dimensión de la columna y el parámetro medido en las filas; Por lo tanto, su matriz de datos consistirá en series de tiempo para cada ubicación. La prcomp()función le permitirá obtener los componentes principales, o modos dominantes de correlación, relacionados con este campo:

res <- prcomp(dat, retx = TRUE, center = TRUE, scale = TRUE) # center and scale should be "TRUE" for an analysis of dominant correlation modes)
#res$x and res$rotation will contain the PC modes in the temporal and spatial dimension, respectively.

La segunda opción sería crear mapas que muestren correlación en relación con una ubicación individual de interés:

C <- cor(dat)
#C[,n] would be the correlation values between the nth location (e.g. dat[,n]) and all other locations. 

EDITAR: ejemplo adicional

Si bien el siguiente ejemplo no utiliza datos breves, puede aplicar el mismo análisis a un campo de datos después de la interpolación con DINEOF ( http://menugget.blogspot.de/2012/10/dineof-data-interpolating-empirical.html ) . El siguiente ejemplo utiliza un subconjunto de datos mensuales de presión del nivel del mar sobre anomalías del siguiente conjunto de datos ( http://www.esrl.noaa.gov/psd/gcos_wgsp/Gridded/data.hadslp2.html ):

library(sinkr) # https://github.com/marchtaylor/sinkr

# load data
data(slp)

grd <- slp$grid
time <- slp$date
field <- slp$field

# make anomaly dataset
slp.anom <- fieldAnomaly(field, time)

# EOF/PCA of SLP anom
P <- prcomp(slp.anom, center = TRUE, scale. = TRUE)

expl.var <- P$sdev^2 / sum(P$sdev^2) # explained variance
cum.expl.var <- cumsum(expl.var) # cumulative explained variance
plot(cum.expl.var)

Mapa del modo EOF líder

# make interpolation
require(akima)
require(maps)

eof.num <- 1
F1 <- interp(x=grd$lon, y=grd$lat, z=P$rotation[,eof.num]) # interpolated spatial EOF mode


png(paste0("EOF_mode", eof.num, ".png"), width=7, height=6, units="in", res=400)
op <- par(ps=10) #settings before layout
layout(matrix(c(1,2), nrow=2, ncol=1, byrow=TRUE), heights=c(4,2), widths=7)
#layout.show(2) # run to see layout; comment out to prevent plotting during .pdf
par(cex=1) # layout has the tendency change par()$cex, so this step is important for control

par(mar=c(4,4,1,1)) # I usually set my margins before each plot
pal <- jetPal
image(F1, col=pal(100))
map("world", add=TRUE, lwd=2)
contour(F1, add=TRUE, col="white")
box()

par(mar=c(4,4,1,1)) # I usually set my margins before each plot
plot(time, P$x[,eof.num], t="l", lwd=1, ylab="", xlab="")
plotRegionCol()
abline(h=0, lwd=2, col=8)
abline(h=seq(par()$yaxp[1], par()$yaxp[2], len=par()$yaxp[3]+1), col="white", lty=3)
abline(v=seq.Date(as.Date("1800-01-01"), as.Date("2100-01-01"), by="10 years"), col="white", lty=3)
box()
lines(time, P$x[,eof.num])
mtext(paste0("EOF ", eof.num, " [expl.var = ", round(expl.var[eof.num]*100), "%]"), side=3, line=1) 

par(op)
dev.off() # closes device

ingrese la descripción de la imagen aquí

Crear mapa de correlación

loc <- c(-90, 0)
target <- which(grd$lon==loc[1] & grd$lat==loc[2])
COR <- cor(slp.anom)
F1 <- interp(x=grd$lon, y=grd$lat, z=COR[,target]) # interpolated spatial EOF mode


png(paste0("Correlation_map", "_lon", loc[1], "_lat", loc[2], ".png"), width=7, height=5, units="in", res=400)

op <- par(ps=10) #settings before layout
layout(matrix(c(1,2), nrow=2, ncol=1, byrow=TRUE), heights=c(4,1), widths=7)
#layout.show(2) # run to see layout; comment out to prevent plotting during .pdf
par(cex=1) # layout has the tendency change par()$cex, so this step is important for control

par(mar=c(4,4,1,1)) # I usually set my margins before each plot
pal <- colorRampPalette(c("blue", "cyan", "yellow", "red", "yellow", "cyan", "blue"))
ncolors <- 100
breaks <- seq(-1,1,,ncolors+1)
image(F1, col=pal(ncolors), breaks=breaks)
map("world", add=TRUE, lwd=2)
contour(F1, add=TRUE, col="white")
box()

par(mar=c(4,4,0,1)) # I usually set my margins before each plot
imageScale(F1, col=pal(ncolors), breaks=breaks, axis.pos = 1)
mtext("Correlation [R]", side=1, line=2.5)
box()

par(op)

dev.off() # closes device

ingrese la descripción de la imagen aquí

Marc en la caja
fuente
¿Qué tan bien tratan estas funciones con los datos faltantes? A menudo tengo lagunas en las series de tiempo.
Andy Clifton el
2
Existen métodos EOF que están diseñados para el caso especial de "datos breves" que usted describe. Aquí hay un enlace a un documento que revisa estos métodos: dx.doi.org/10.6084/m9.figshare.732650 . Verá que los métodos RSEOF y DINEOF son los más precisos para derivar EOF de conjuntos de datos breves. El algoritmo de interpolación DINEOF se puede encontrar aquí: menugget.blogspot.de/2012/10/…
Marc en el cuadro
1
Creo que esta es la mejor respuesta para una pregunta terrible (en retrospectiva).
Andy Clifton el
3

No veo claramente detrás de las líneas, pero me parece que hay demasiados puntos de datos.

Como desea mostrar la homogeneidad regional y no exactamente las estaciones, le sugiero que primero las agrupe espacialmente. Por ejemplo, superposición por una "red" y calcular el valor promedio medido en cada celda (en cada momento). Si coloca estos valores promedio en los centros de celdas de esta manera, rasteriza los datos (o puede calcular también la latitud y longitud medias en cada celda si no desea superponer líneas). O para promediar dentro de las unidades administrativas, lo que sea. Luego, para estas nuevas "estaciones" promediadas, puede calcular correlaciones y trazar un mapa con un menor número de líneas.

ingrese la descripción de la imagen aquí

Esto también puede eliminar esas líneas aleatorias únicas de alta correlación que atraviesan toda el área.

nadya
fuente
X×XX
Sí, proyectar las coordenadas es una buena idea. ¡Buena suerte!
nadya