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é el paquete clustTool . 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 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 lo es?)
Además, ¿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 agrupamiento de datos espaciales?
Cluster
, aceptarán matrices de disparidad o distancia como entrada. Esto los hace perfectamente generales y aplicables a la agrupación en la esfera, siempre que pueda calcular las distancias usted mismo, lo cual es sencillo.Respuestas:
Aquí hay una solución basada en la regla de distancia basada en Buscar clústeres de puntos , pero usando la
distm
función delgeosphere
paquete:Deberías obtener algo como:
Los siguientes pasos son solo para visualización:
fuente
for (i in 1:186) { print(paste(i,min(distance[i,c(1:(i-1),(i+1):187)]))) }
toma4
pero cuando lo aplicox <- cutree(hc, h=5)
me da 101 grupos de 187. Lógicamente, debería ser 1. ¿Qué pasa?x = as.dist(matrix(runif(100), ncol=10)); hc = hclust(x, method="complete"); cutree(hc, h=max(x))
. Esto le da un solo clúster, como era de esperar. Intente trazar su modelo de agrupación con:plot(hc)
y vea cuál es el valor más alto.Hay funciones para calcular distancias reales en una tierra esférica en R, por lo que quizás pueda usarlas y llamar a las funciones de agrupación con una matriz de distancia en lugar de coordenadas. Sin embargo, nunca puedo recordar los nombres o paquetes relevantes. Vea la Vista de tareas R-espacial para obtener pistas.
La otra opción es transformar sus puntos en un sistema de referencia para que las distancias sean euclidianas. En el Reino Unido puedo usar el sistema de referencia OSGrid:
usando spTransform del paquete 'rgdal' (o quizás maptools). Encuentre un sistema de cuadrícula para sus datos (la zona UTM relevante probablemente servirá) y calculará distancias en metros sin problema.
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 Vista de tareas espaciales de R:
http://cran.r-project.org/web/views/Spatial.html
Parece que quiere el paquete "geosfera", ¡pero lea la vista de tareas espaciales!
fuente
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 el statstat diferencie entre datos espaciales y ordinales, por lo que es posible que desee volver a proyectar sus puntos en algo con valores consistentes x e y, posiblemente intente usar rgdal (una biblioteca R para GDAL y OGR).
fuente
Tal vez esta respuesta llegue 2 años demasiado tarde, pero de todos modos.
Que yo sepa, la agrupación espacial requiere una vecindad definida a la que se restringe la agrupación, al menos al principio. La función kulldorf en el paquete SpatialEpi permite la agrupación espacial basada en vecindades agregadas.
Además, la estadística DBSCAN disponible en el paquete fpc podría ser útil.
ver también aquí para una discusión similar: https://stats.stackexchange.com/questions/9739/clustering-spatial-data-in-r
y aquí para un artículo interesante sobre algoritmos de clúster recientes, como CHAMAELEON: http://www.cs.uiuc.edu/homes/hanj/pdf/gkdbk01.pdf
fuente
Si bien no es un
R
paquete, Geoda podría ser un programa interesante para examinar, ya que está escrito por Luc Anselin, quien ha contribuido a la teoría de la agrupación espacial, y creo que permite cierta agrupación (aunque ha pasado algún tiempo desde que lo exploré).spdep es un gran
R
paquete. Incluye laskater
función para el análisis espacial 'K'luster by Tree Edge Removal . También trae otras funciones para el análisis espacial, incluida la autocorrelación espacial y la detección de clúster local utilizando Local Moran y otras estadísticas espaciales. Se describe de la siguiente manera:Al menos puede probar si sus puntos están distribuidos aleatoriamente espacialmente (presumiblemente una prueba previa de agrupamiento útil al considerar distancias espaciales), pero también puede generar otras medidas útiles que podría ingresar a su algoritmo de agrupamiento. Finalmente, tal vez pueda encontrar preguntas útiles en https://stats.stackexchange.com/ que tratan con problemas de agrupamiento espacial (aunque, más desde una perspectiva teórica).
fuente
Pruebe el paquete leaderCluster en R. A diferencia de muchos otros algoritmos de agrupación, 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.
fuente
Verifique la función de distancia del paquete de geosfera o la función de disociación fósil. Tiene datos en grados y necesita traducirlos a metros o pies antes de agrupar.
fuente