33 votos

¿Cómo puedo realizar un análisis de componentes principales ponderado geográficamente utilizando ArcGIS, Python y SPSS/R?

Busco una descripción/metodología para realizar un estudio de ponderación geográfica Análisis de componentes principales (GWPCA). Estoy feliz de usar Python para cualquier parte de esto y me imagino que SPSS o R se utiliza para ejecutar el PCA en las variables ponderadas geográficamente.

Mi conjunto de datos se compone de aproximadamente 30 variables independientes que se miden a lo largo de ~550 secciones censales (geometría vectorial).

Sé que es una pregunta cargada. Pero, mientras busco y busco, no parece haber ninguna solución por ahí. Lo que he encontrado son ecuaciones matemáticas que explican la composición fundamental de GWPCA (y GWR). Lo que busco es más aplicado en un sentido, que estoy buscando qué pasos principales necesito lograr para llegar de los datos crudos a los resultados de GWPCA.


Me gustaría ampliar la primera parte con esta edición debido a los comentarios recibidos a continuación.

Para dirigirse a Paul...

Mi interés por el GWPCA se basa en el siguiente documento:

Lloyd, C. D., (2010). Análisis de las características de la población mediante el análisis de componentes principales ponderados geográficamente: Un estudio de caso de Irlanda del Norte en 2001. Computers, Environment and Urban Systems, 34(5), p.389-399.

Para aquellos que no tengan acceso a la literatura, he adjuntado capturas de pantalla de las secciones particulares que explican las matemáticas a continuación:

Article

Y para dirigirse a whuber...

Sin entrar en detalles (confidencialidad), intentamos reducir las 30 variables, que creemos que son todas muy buenos indicadores (aunque de forma global), al conjunto de componentes con valores propios superiores a 1. Al calcular los componentes ponderados geográficamente, intentamos comprender las varianzas locales explicadas por estos componentes.

Creo que nuestro principal objetivo será probar el concepto de GWPCA, es decir, mostrar la naturaleza espacialmente explícita de nuestros datos y que no podemos considerar que todas las variables independientes sean explicativas a escala global. Más bien, la escala local (barrios) que identificará cada componente nos ayudará a comprender la naturaleza multidimensional de nuestros datos (cómo las variables pueden combinarse entre sí para explicar un determinado barrio de nuestra zona de estudio).

Esperamos mapear el porcentaje de la varianza explicada por cada componente (por separado), para entender la extensión de la vecindad explicada por el componente en cuestión (nos ayuda a entender la espacialidad local de nuestros componentes). Quizá haya otros ejemplos de mapeo, pero no se me ocurre ninguno en este momento.

Además:

Las matemáticas que hay detrás de la GWPCA están más allá de lo que yo entiendo dada mi formación en análisis geográfico y estadística social. La aplicación de las matemáticas es lo más importante, es decir, qué introduzco en estas variables/fórmulas.

30voto

cjstehno Puntos 131

"PCA ponderado geográficamente" es muy descriptivo: en R El programa se escribe prácticamente solo. (Necesita más líneas de comentario que líneas de código reales).

Empecemos por las ponderaciones, porque es aquí donde el PCA ponderado geográficamente se separa del propio PCA. El término "geográfico" significa que las ponderaciones dependen de las distancias entre un punto base y las ubicaciones de los datos. La ponderación estándar, pero no la única, es una función gaussiana, es decir, un decaimiento exponencial con la distancia al cuadrado. El usuario tiene que especificar la tasa de decaimiento o -más intuitivamente- una distancia característica sobre la que se produce una cantidad fija de decaimiento.

distance.weight <- function(x, xy, tau) {
  # x is a vector location
  # xy is an array of locations, one per row
  # tau is the bandwidth
  # Returns a vector of weights
  apply(xy, 1, function(z) exp(-(z-x) %*% (z-x) / (2 * tau^2)))
}

El ACP se aplica a una matriz de covarianza o de correlación (que se deriva de una covarianza). He aquí, pues, una función para calcular covarianzas ponderadas de forma numéricamente estable.

covariance <- function(y, weights) {
  # y is an m by n matrix
  # weights is length m
  # Returns the weighted covariance matrix of y (by columns).
  if (missing(weights)) return (cov(y))
  w <- zapsmall(weights / sum(weights)) # Standardize the weights
  y.bar <- apply(y * w, 2, sum)         # Compute column means
  z <- t(y) - y.bar                     # Remove the means
  z %*% (w * t(z))  
}

La correlación se obtiene de la forma habitual, utilizando las desviaciones estándar de las unidades de medida de cada variable:

correlation <- function(y, weights) {
  z <- covariance(y, weights)
  sigma <- sqrt(diag(z))       # Standard deviations
  z / (sigma %o% sigma)
}

Ahora podemos hacer el PCA:

gw.pca <- function(x, xy, y, tau) {
  # x is a vector denoting a location
  # xy is a set of locations as row vectors
  # y is an array of attributes, also as rows
  # tau is a bandwidth
  # Returns a `princomp` object for the geographically weighted PCA
  # ..of y relative to the point x.
  w <- distance.weight(x, xy, tau)
  princomp(covmat=correlation(y, w))
}

(Eso es un neto de 10 líneas de código ejecutable hasta ahora. Sólo se necesitará una más, más adelante, después de describir una cuadrícula sobre la que realizar el análisis).


Ilustrémoslo con algunos datos de muestras aleatorias comparables a las descritas en la pregunta: 30 variables en 550 lugares.

set.seed(17)
n.data <- 550
n.vars <- 30
xy <- matrix(rnorm(n.data * 2), ncol=2)
y <- matrix(rnorm(n.data * n.vars), ncol=n.vars)

Los cálculos ponderados geográficamente suelen realizarse en un conjunto seleccionado de lugares, como a lo largo de un transecto o en puntos de una cuadrícula regular. Utilicemos una cuadrícula gruesa para tener una perspectiva de los resultados; más adelante -cuando estemos seguros de que todo funciona y obtenemos lo que queremos- podremos afinar la cuadrícula.

# Create a grid for the GWPCA, sweeping in rows
# from top to bottom.
xmin <- min(xy[,1]); xmax <- max(xy[,1]); n.cols <- 30
ymin <- min(xy[,2]); ymax <- max(xy[,2]); n.rows <- 20
dx <- seq(from=xmin, to=xmax, length.out=n.cols)
dy <- seq(from=ymin, to=ymax, length.out=n.rows)
points <- cbind(rep(dx, length(dy)),
                as.vector(sapply(rev(dy), function(u) rep(u, length(dx)))))

Se trata de saber qué información queremos conservar de cada PCA. Normalmente, una PCA para n devuelve una lista ordenada de n valores propios y -en varias formas- una lista correspondiente de n vectores, cada uno de ellos de longitud n . Son n*(n+1) números que hay que mapear. Tomando algunas pistas de la pregunta, vamos a mapear los valores propios. Estos se extraen de la salida de gw.pca a través de la $sdev que es la lista de valores propios por valor descendente.

# Illustrate GWPCA by obtaining all eigenvalues at each grid point.
system.time(z <- apply(points, 1, function(x) gw.pca(x, xy, y, 1)$sdev))

Esto se completa en menos de 5 segundos en esta máquina. Observe que se ha utilizado una distancia característica (o "ancho de banda") de 1 en la llamada a gw.pca .


El resto es una cuestión de limpieza. Vamos a mapear los resultados utilizando el raster biblioteca. (En su lugar, se podrían escribir los resultados en un formato de cuadrícula para su postprocesamiento con un SIG).

library("raster")
to.raster <- function(u) raster(matrix(u, nrow=n.cols), 
                                xmn=xmin, xmx=xmax, ymn=ymin, ymx=ymax)
maps <- apply(z, 1, to.raster)
par(mfrow=c(2,2))
tmp <- lapply(maps, function(m) {plot(m); points(xy, pch=19)})

Maps

Estos son los primeros cuatro de los 30 mapas, que muestran los cuatro mayores valores propios. (No te emociones demasiado por sus tamaños, que superan el 1 en cada lugar. Recordemos que estos datos fueron generados totalmente al azar y, por tanto, si tienen alguna estructura de correlación -lo que parecen indicar los grandes valores propios de estos mapas- se debe únicamente al azar y no refleja nada "real" que explique el proceso de generación de datos).

Es instructivo cambiar el ancho de banda. Si es demasiado pequeño, el software se quejará de las singularidades. (No he incorporado ninguna comprobación de errores en esta implementación básica.) Pero reducirlo de 1 a 1/4 (y utilizar los mismos datos que antes) da resultados interesantes:

Maps 2

Obsérvese la tendencia de los puntos alrededor de la frontera a dar valores propios principales inusualmente grandes (mostrados en las ubicaciones verdes del mapa superior izquierdo), mientras que todos los demás valores propios se reducen para compensar (mostrados por el rosa claro en los otros tres mapas). Este fenómeno, así como muchas otras sutilezas del ACP y de la ponderación geográfica, deberán comprenderse antes de poder esperar interpretar de forma fiable la versión del ACP ponderada geográficamente. Además, hay que tener en cuenta los otros 30*30 = 900 vectores propios (o "cargas")...

14voto

Justin Walgran Puntos 552

Actualización:

Ahora hay un paquete R especializado disponible en CRAN - GWmodel que incluye el ACP ponderado geográficamente, entre otras herramientas. Del autor sitio web :

Nuestro nuevo paquete R para la modelización ponderada geográficamente, GWmodel, fue recientemente en CRAN. GWmodel ofrece una serie de enfoques de análisis de datos de datos ponderados geográficamente en un solo paquete, que incluye incluyen estadísticas descriptivas, correlación, regresión, modelos modelos lineales generales y análisis de componentes principales. Los modelos de regresión incluyen varios modelos para datos con estructuras gaussianas, logísticas y de Poisson de Poisson, así como la regresión de cresta para tratar con predictores correlacionados. correlacionados. Una nueva característica de este paquete es la provisión de versiones robustas de cada técnica. de cada técnica, que son resistentes a los efectos de los de los valores atípicos.

Las ubicaciones para la modelización pueden estar en una coordenada proyectada proyectadas, o especificadas mediante coordenadas geográficas. Las métricas de distancia incluyen la euclidiana, la taxonómica (Manhattan) y la de Minkowski, así como la de Great para ubicaciones especificadas por coordenadas de latitud/longitud. coordenadas. También se ofrecen varios métodos de calibración automática, y hay algunas herramientas útiles de construcción de modelos disponibles para ayudar a para ayudar a seleccionar los predictores alternativos.

También se proporcionan conjuntos de datos de ejemplo, que se utilizan en el documentación adjunta para ilustrar el uso de las distintas técnicas.

Más detalles en un avance de un próximo documento .


Dudo que exista una solución "lista para usar, conecte sus datos". Pero espero que se demuestre lo contrario, ya que me gustaría probar este método con algunos de mis datos.

Algunas opciones a tener en cuenta:


Marí-Dell'Olmo y sus colegas utilizó el análisis factorial bayesiano para calcular el índice de privación en zonas pequeñas de España:

Análisis factorial bayesiano para calcular un índice de privación y su incertidumbre. Marí-Dell'Olmo M, Martínez-Beneito MA, Borrell C, Zurriaga O, Nolasco A, Domínguez-Berjón MF. Epidemiología . 2011 Mayo;22(3):356-64.

En el artículo proporcionan la especificación del modelo WinBUGS ejecutado desde R que podría servirte para empezar.


adegenet El paquete R implementa spca función. Aunque se centra en los datos genéticos, podría ser lo más parecido a una solución para su problema. Ya sea utilizando este paquete/función directamente, o modificando su código. Hay un viñeta sobre el problema que debería ponerte en marcha.


Los investigadores de Grupo de Investigación Estratégica parece estar trabajando activamente en el tema. Especialmente Paul Harris y Chris Brunsdon (aquí presentación con la que me tropecé). Paul y Urska's publicación reciente ( texto completo ) también puede ser un recurso útil:

Demšar U, Harris P, Brunsdon C, Fotheringham AS, McLoone S (2012) Análisis de componentes principales en datos espaciales: una visión general. Anales de la Asociación de Geógrafos Americanos

¿Por qué no intentas ponerte en contacto con ellos y preguntarles qué soluciones utilizan exactamente? Puede que estén dispuestos a compartir su trabajo o a indicarle una buena dirección.


Cheng, Q. (2006) Componente principal espacial y ponderado espacialmente Analysis for Images Processing. IGARSS 2006: 972-975

menciona el uso de GeoDAS GIS sistema. Podría ser otra pista.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X