J'ai un tas de points de données avec la latitude et la longitude. Je veux utiliser R pour les regrouper en fonction de leur distance.
J'ai déjà regardé cette page et essayé le paquet clustTool . Mais je ne suis pas sûr que la fonction clust dans clustTool considère les points de données (lat, lon) comme des données spatiales et utilise la formule appropriée pour calculer la distance qui les sépare.
Je veux dire que je ne vois pas comment ils différencient les données spatiales des données ordinales. Je crois que le calcul de la distance entre deux points de la carte (spatiale) et deux nombres normaux est différent. (N'est-ce pas?)
De plus, que se passe-t-il si je souhaite prendre en compte un troisième paramètre dans ma classification?
Comme par exemple si j'ai (lat, lon) et un autre paramètre.
Comment est calculée la distance?
L'autre problème que j'ai avec clustTool est qu'il est conçu avec une interface graphique à l'esprit. Je ne sais pas comment je peux ignorer la surcharge de l'interface graphique dans la bibliothèque car je n'en ai pas besoin.
Quelles sont les options disponibles dans R pour l'analyse par cluster des données spatiales?
Cluster
, acceptent les matrices de dissimilarité ou de distance comme entrée. Cela les rend parfaitement généraux et applicables au regroupement sur la sphère, à condition que vous puissiez calculer vous-même les distances, ce qui est simple.Réponses:
Voici une solution basée sur la règle de distance basée sur la recherche de groupes de points , mais utilisant la
distm
fonction dugeosphere
package:Vous devriez obtenir quelque chose comme:
Ces prochaines étapes ne concernent que la visualisation:
la source
for (i in 1:186) { print(paste(i,min(distance[i,c(1:(i-1),(i+1):187)]))) }
cela prend,4
mais lorsque je postule,x <- cutree(hc, h=5)
cela me donne 101 grappes sur 187. Logiquement, cela devrait être 1. Qu'est-ce qui ne va pas?x = as.dist(matrix(runif(100), ncol=10)); hc = hclust(x, method="complete"); cutree(hc, h=max(x))
. Cela vous donne un seul cluster, comme vous le souhaitiez. Essayez de tracer votre modèle de classification avec:,plot(hc)
et voyez quelle est la valeur la plus élevée.Il existe des fonctions pour calculer les distances réelles sur une terre sphérique dans R; vous pouvez donc les utiliser et appeler les fonctions de regroupement avec une matrice de distance au lieu de coordonnées. Je ne me souviens jamais des noms ni des forfaits pertinents. Voir la vue des tâches R-spatiales pour des indices.
L'autre option consiste à transformer vos points en un système de référence afin que les distances soient euclidiennes. Au Royaume-Uni, je peux utiliser le système de référence OSGrid:
en utilisant spTransform du paquet 'rgdal' (ou peut-être maptools). Trouvez un système de grille pour vos données (la zone UTM appropriée le fera probablement) et vous calculerez les distances en mètres sans problème.
Cela n’est utile que si vos données sont une zone restreinte. Si vous disposez de données globales, vous devez réellement calculer la distance sphérique. C’est quelque part dans un (ou plusieurs) des packages abordés dans la vue Tâches spatiales R:
http://cran.r-project.org/web/views/Spatial.html
On dirait que vous voulez le paquet "geosphere", mais lisez bien la vue spatiale des tâches!
la source
Je jetterais un coup d'œil au paquet Spatstat . L'ensemble du package est dédié à l'analyse de modèles de points spatiaux (sic). Le professeur Adrian Baddeley, du CSIRO, a rédigé un excellent ebook contenant une documentation détaillée, des procédures et des exemples pour l'ensemble du package. Consultez le chapitre 19 pour "Méthodes de distance pour les modèles de points".
Cela dit, je ne suis pas sûr que même spatstat différencie les données spatiales des données ordinales. Vous voudrez peut-être donc reprojeter vos points en quelque chose avec des valeurs x et y cohérentes - essayez éventuellement d'utiliser rgdal (une bibliothèque R pour GDAL et OGR).
la source
Peut-être que cette réponse arrive 2 ans trop tard, mais quand même.
À ma connaissance, le regroupement spatial nécessite un voisinage défini auquel le regroupement est contraint, du moins au début. La kulldorf fonction dans le SpatialEpi paquet permet de regroupement spatial en fonction des quartiers agrégés.
De plus, les statistiques DBSCAN disponibles dans le paquetage fpc pourraient être utiles.
Voir aussi ici pour une discussion similaire: https://stats.stackexchange.com/questions/9739/clustering-spatial-data-in-r
et ici pour un article intéressant sur les algorithmes de cluster récents, tels que CHAMAELEON: http://www.cs.uiuc.edu/homes/hanj/pdf/gkdbk01.pdf
la source
Bien que ce ne soit pas un
R
paquet, geoda pourrait être un programme intéressant à examiner car il est écrit par Luc Anselin qui a contribué à la théorie du clustering spatial, et je pense que cela permet un certain clustering (bien que cela fait longtemps que je ne l’ai pas exploré).spdep est un excellent
R
package. Il inclut laskater
fonction d' analyse spatiale 'K'luster par enlèvement d'arête . Il apporte également d'autres fonctions pour l'analyse spatiale, notamment l'auto-corrélation spatiale et la détection d'un cluster local à l'aide de Local Moran et d'autres statistiques spatiales. Il est décrit comme suit:Vous pouvez au moins tester si vos points sont distribués spatialement de manière aléatoire (sans doute un test de pré-clustering utile lors de la prise en compte de distances spatiales), mais cela peut également générer d'autres mesures utiles que vous pourriez entrer dans votre algorithme de clustering. Enfin, vous trouverez peut-être des questions utiles sur https://stats.stackexchange.com/ traitant des problèmes de clustering spatial (mais plutôt d'un point de vue théorique).
la source
Essayez leader pack cluster dans R. Contrairement à la plupart des autres algorithmes de clustering, il n’est pas nécessaire de spécifier le nombre de clusters mais plutôt le rayon approximatif d’un cluster comme paramètre principal de réglage.
la source
Vérifiez la fonction de distance du paquet géosphère ou la fonction deg.dist fossile. Vous avez des données en degrés et vous devez les traduire en mètres ou en pieds avant de procéder à la mise en cluster.
la source