¿Agrupar datos espaciales en R? [cerrado]

32

Tengo un montón de puntos de datos con latitud y longitud. Quiero usar R para agruparlos en función de su distancia.

Ya he echado un vistazo a esta página y probé clustTool package. Pero no estoy seguro de si la función clust en clustTool considera los puntos de datos (lat, lon) como datos espaciales y utiliza la fórmula adecuada para calcular la distancia entre ellos.

Quiero decir que no puedo ver cómo se diferencian entre datos espaciales y datos ordinales. Creo que el cálculo de la distancia entre dos puntos en el mapa (espacial) y dos números normales es diferente. (¿No es así?)

También, ¿qué sucede si quiero considerar un tercer parámetro en mi agrupación?

Como decir si tengo (lat, lon) y otro parámetro.

¿Cómo se calcula la distancia?

El otro problema que tengo con clustTool es que está diseñado con una GUI en mente. No sé cómo puedo omitir la sobrecarga de GUI en la biblioteca porque no la necesito.

¿Qué opciones tengo en R para el análisis de clústeres de datos espaciales?

    
pregunta kaptan 06.12.2011 - 23:26

7 respuestas

11

Hay funciones para calcular distancias reales en una tierra esférica en R, por lo que quizás puedas usarlas y llamar a las funciones de agrupamiento con una matriz de distancia en lugar de coordenadas. Sin embargo, nunca puedo recordar los nombres o paquetes relevantes. Consulte la Vista de tareas de R-spatial para obtener pistas.

La otra opción es transformar tus puntos en un sistema de referencia para que las distancias sean euclidianas. En el Reino Unido puedo usar el sistema de referencia OSGrid:

 data = spTransform(data,CRS("+epsg:27700"))

usando spTransform del paquete 'rgdal' (o quizás maptools). Encuentre un sistema de cuadrícula para sus datos (probablemente lo hará la zona UTM relevante) y estará calculando las distancias en metros sin problemas.

Esto solo es bueno si sus datos son un área pequeña - si tiene datos globales, entonces realmente necesita calcular la distancia esférica, y eso está en algún lugar en uno (o más) de los paquetes discutidos en la R Spatial Vista de tareas:

enlace

Parece que quieres el paquete "geosphere", ¡pero lee la vista de tareas espaciales!

    
respondido por el Spacedman 07.12.2011 - 09:23
11

Aquí hay una solución basada en Encuentra grupos de reglas de distancia basada en puntos , pero usando la función distm de paquete geosphere :

library(sp)
library(rgdal)
library(geosphere)

# example data from the thread
x <- c(-1.482156, -1.482318, -1.482129, -1.482880, -1.485735, -1.485770, -1.485913, -1.484275, -1.485866)
y <- c(54.90083, 54.90078, 54.90077, 54.90011, 54.89936, 54.89935, 54.89935, 54.89879, 54.89902)

# convert data to a SpatialPointsDataFrame object
xy <- SpatialPointsDataFrame(
      matrix(c(x,y), ncol=2), data.frame(ID=seq(1:length(x))),
      proj4string=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84"))

# use the distm function to generate a geodesic distance matrix in meters
mdist <- distm(xy)

# cluster all points using a hierarchical clustering approach
hc <- hclust(as.dist(mdist), method="complete")

# define the distance threshold, in this case 40 m
d=40

# define clusters based on a tree "height" cutoff "d" and add them to the SpDataFrame
xy$clust <- cutree(hc, h=d)

Deberías obtener algo como:

        coordinates ID clust
1 (-1.482156, 54.90083)  1     1
2 (-1.482318, 54.90078)  2     1
3 (-1.482129, 54.90077)  3     1
4  (-1.48288, 54.90011)  4     2
5 (-1.485735, 54.89936)  5     3
6  (-1.48577, 54.89935)  6     3
7 (-1.485913, 54.89935)  7     3
8 (-1.484275, 54.89879)  8     4
9 (-1.485866, 54.89902)  9     3

Los siguientes pasos son solo para visualización:

library(dismo)
library(rgeos)

# expand the extent of plotting frame
[email protected][] <- as.matrix(extend(extent(xy),0.001))

# get the centroid coords for each cluster
cent <- matrix(ncol=2, nrow=max(xy$clust))
for (i in 1:max(xy$clust))
    # gCentroid from the rgeos package
    cent[i,] <- gCentroid(subset(xy, clust == i))@coords

# compute circles around the centroid coords using a 40m radius
# from the dismo package
ci <- circles(cent, d=d, lonlat=T)

# plot
plot([email protected], axes=T)
plot(xy, col=rainbow(4)[factor(xy$clust)], add=T)

    
respondido por el ssanch 19.01.2017 - 20:18
7

Le echaría un vistazo al paquete Spatstat . Todo el paquete está dedicado a analizar patrones de puntos espaciales (sic). Hay un excelente libro electrónico escrito por el Prof. Adrian Baddeley en el CSIRO que contiene documentación detallada, instrucciones y ejemplos para todo el paquete. Eche un vistazo al capítulo 19 para "Métodos de distancia para patrones de puntos".

Dicho esto, no estoy seguro de que incluso spatstat distinga entre datos espaciales y ordinales, por lo que es posible que desee reproyectar sus puntos en algo con valores de x e y consistentes; posiblemente intente usar rgdal (una biblioteca de R para GDAL y OGR).

    
respondido por el om_henners 07.12.2011 - 00:39
6

Tal vez esta respuesta llegue 2 años demasiado tarde, pero de todos modos.

Que yo sepa, el agrupamiento espacial requiere una vecindad definida a la cual el agrupamiento está restringido, al menos al principio. La función kulldorf en el paquete SpatialEpi permite el agrupamiento espacial basado en vecindarios agregados.

además, la estadística DBSCAN disponible en el paquete fpc podría ser útil.

vea también aquí para una discusión similar: enlace

y aquí para un interesante artículo sobre algoritmos de clúster recientes, como CHAMAELEON: enlace

    
respondido por el Jens 10.02.2014 - 15:36
5

Aunque no es un paquete R , geoda puede ser un programa interesante para examinar, ya que está escrito por Luc Anselin, que ha contribuido a la teoría del agrupamiento espacial, y creo que permite algunos agrupamientos (aunque ha pasado algún tiempo desde que lo exploré).

spdep es un excelente paquete R . Incluye la función skater para Análisis K'lustre espacial por eliminación del borde del árbol . También trae otras funciones para el análisis espacial, incluida la autocorrelación espacial y la detección del clúster local utilizando Local Moran y otras estadísticas espaciales. Se describe de la siguiente manera:

  

Una colección de funciones para crear objetos de matriz de ponderaciones espaciales   desde contigüidades poligonales, desde patrones de puntos por distancia y   tesselations, para resumir estos objetos, y para permitir su   uso en el análisis de datos espaciales, incluida la agregación regional por   árbol de expansión mínima; una colección de pruebas para espacial   autocorrelación, incluida la I de Moran global, APLE, C de Geary,   Estadística general de productos de Hubert / Mantel, Bayes empíricas   estimaciones e índice de Assunção / Reis, Getis / Ord G y combinación multicolor   estadísticas de conteo, local de Moran I y Getis / Ord G, saddlepoint   aproximaciones y pruebas exactas para el I de Moran global y local; y   Funciones para estimar el retraso autorregresivo espacial (SAR) espacial   y modelos de error, medidas de impacto para modelos de retraso, ponderados y   modelos de regresión espacial SAR y CAR no ponderados, semiparamétricos y   Filtrado espacial del vector propio del Moran, modelos de error de SAR de GM y   Modelos de mínimos cuadrados espaciales generalizados de dos etapas.

Al menos puede probar si sus puntos se distribuyen aleatoriamente espacialmente (presumiblemente una prueba de pre-agrupamiento al considerar distancias espaciales), pero también puede generar otras medidas útiles que podría ingresar a su algoritmo de agrupamiento. Finalmente, quizás pueda encontrar preguntas útiles sobre enlace que tratan los problemas de agrupamiento espacial (aunque, más desde una perspectiva teórica).

    
respondido por el djq 07.12.2011 - 15:11
2

Pruebe leaderCluster packacge en R. A diferencia de muchos otros algoritmos de agrupación en clústeres, no requiere que el usuario especifique el número de agrupaciones, sino que requiere el radio aproximado de una agrupación como su parámetro de ajuste principal.

    
respondido por el Sumit 16.03.2016 - 07:23
-2

Verifique la función de distancia del paquete de la geósfera o la función de descarga de grados fósiles. Tiene datos en grados y necesita traducirlos en metros o pies antes de hacer agrupaciones.

    
respondido por el mcm 30.03.2015 - 02:26

Lea otras preguntas en las etiquetas