Eu tenho muitos pontos de dados com latitude e longitude. Eu quero usar R para agrupá-los com base na distância.
Eu já dei uma olhada nesta página e tentei o pacote clustTool . Mas não tenho certeza se a função clust no clustTool considera os pontos de dados (lat, lon) como dados espaciais e usa a fórmula apropriada para calcular a distância entre eles.
Quero dizer, não consigo ver como eles diferenciam entre dados espaciais e dados ordinais. Acredito que o cálculo da distância entre dois pontos no mapa (espacial) e dois números normais seja diferente. (Não é?)
O que acontece também se eu quiser considerar um terceiro parâmetro no meu cluster?
Como dizer se eu tenho (lat, lon) e um outro parâmetro.
Como é calculada a distância?
O outro problema que tenho com o clustTool é que ele foi projetado com uma GUI em mente. Não sei como posso ignorar a sobrecarga da GUI na biblioteca porque não preciso dela.
Quais opções eu tenho no R para análise de cluster de dados espaciais?
Cluster
, aceitarão matrizes de diferenças ou distância como entrada. Isso os torna perfeitamente gerais e aplicáveis ao agrupamento na esfera, desde que você mesmo possa calcular as distâncias, o que é direto.Respostas:
Aqui está uma solução baseada na regra Encontrar distância de clusters de pontos , mas usando a
distm
função dogeosphere
pacote:Você deve obter algo como:
Os próximos passos são apenas para visualização:
fonte
for (i in 1:186) { print(paste(i,min(distance[i,c(1:(i-1),(i+1):187)]))) }
é preciso,4
mas quando aplicox <- cutree(hc, h=5)
, gera 101 clusters em 187. Logicamente, deveria ser 1. O que há de errado?x = as.dist(matrix(runif(100), ncol=10)); hc = hclust(x, method="complete"); cutree(hc, h=max(x))
. Isso fornece um único cluster, como seria de esperar. Tente plotar seu modelo de clustering com:plot(hc)
e veja qual é o valor mais alto.Existem funções para calcular distâncias verdadeiras em uma terra esférica em R, então talvez você possa usá-las e chamar as funções de agrupamento com uma matriz de distância em vez de coordenadas. Eu nunca consigo lembrar os nomes ou pacotes relevantes. Consulte a Visualização de tarefas R-espacial para obter dicas.
A outra opção é transformar seus pontos em um sistema de referência para que as distâncias sejam euclidianas. No Reino Unido, posso usar o sistema de referência OSGrid:
usando spTransform do pacote 'rgdal' (ou talvez maptools). Encontre um sistema de grade para seus dados (a zona UTM relevante provavelmente funcionará) e você calculará distâncias em metros sem problemas.
Isso só é bom se seus dados forem uma área pequena - se você tiver dados globais, precisará realmente calcular a distância esférica, e isso está em algum lugar de um (ou mais) dos pacotes discutidos na R Spatial Task View:
http://cran.r-project.org/web/views/Spatial.html
Parece que você deseja "geosfera" do pacote, mas leia a exibição da tarefa espacial!
fonte
Eu daria uma olhada no pacote Spatstat . Todo o pacote é dedicado à análise de padrões de pontos espaciais (sic). Há um excelente ebook escrito pelo Prof. Adrian Baddeley no CSIRO, que contém documentação detalhada, instruções e exemplos para todo o pacote. Dê uma olhada no capítulo 19 para "Métodos de distância para padrões de pontos".
Dito isso, não tenho certeza de que mesmo o spatstat diferencie entre dados espaciais e ordinais, portanto, você pode reprojetar seus pontos em algo com valores consistentes x e y - possivelmente tente usar rgdal (uma biblioteca R para GDAL e OGR).
fonte
Talvez essa resposta chegue 2 anos tarde demais, mas de qualquer maneira.
Que eu saiba, clustering espacial requer uma vizinhança definida à qual o clustering é restrito, pelo menos no começo. A função kulldorf no pacote SpatialEpi permite clustering espacial com base em vizinhanças agregadas.
além disso, a estatística DBSCAN disponível no pacote fpc pode ser útil.
consulte também aqui para uma discussão semelhante: https://stats.stackexchange.com/questions/9739/clustering-spatial-data-in-r
e aqui para um artigo interessante sobre algoritmos recentes de cluster, como CHAMAELEON: http://www.cs.uiuc.edu/homes/hanj/pdf/gkdbk01.pdf
fonte
Embora não seja um
R
pacote, o geoda pode ser um programa interessante para examinar, como está escrito por Luc Anselin, que contribuiu para a teoria de agrupamentos espaciais, e acredito que permite alguns agrupamentos (embora já tenha passado algum tempo desde que eu a explorei).O spdep é um ótimo
R
pacote. Ele inclui askater
função de Análise espacial 'K'luster por Remoção de Borda da Árvore . Ele também traz outras funções para análise espacial, incluindo autocorrelação espacial e detecção de cluster local usando Moran Local e outras estatísticas espaciais. É descrito da seguinte maneira:Você pode pelo menos testar se seus pontos são distribuídos aleatoriamente espacialmente (presumivelmente um teste útil de pré-agrupamento ao considerar distâncias espaciais), mas também pode gerar outras medidas úteis que você pode inserir no seu algoritmo de agrupamento. Por fim, talvez você possa encontrar perguntas úteis em https://stats.stackexchange.com/ que tratam de problemas de agrupamento espacial (embora, mais do ponto de vista teórico).
fonte
Tente o pacote leaderCluster em R. Ao contrário de muitos outros algoritmos de armazenamento em cluster, ele não requer que o usuário especifique o número de clusters, mas requer o raio aproximado de um cluster como seu parâmetro de ajuste principal.
fonte
Verifique a função de distância do pacote da geosfera ou a função deg.dist fóssil. Você tem dados em graus e precisa convertê-los em metros ou pés antes de fazer o cluster.
fonte