Mam kilka punktów danych o szerokości i długości geograficznej. Chcę użyć R do grupowania ich na podstawie odległości.
Przejrzałem już tę stronę i wypróbowałem pakiet clustTool . Ale nie jestem pewien, czy funkcja klastrowania w clustTool uważa punkty danych (lat, lon) za dane przestrzenne i używa odpowiedniej formuły do obliczenia odległości między nimi.
Mam na myśli, że nie widzę, jak odróżniają dane przestrzenne od danych porządkowych. Uważam, że obliczenia odległości między dwoma punktami na mapie (przestrzennymi) a dwiema liczbami normalnymi są różne. (Czy to nie jest?)
Co się też stanie, jeśli chcę rozważyć trzeci parametr w mojej klastrowaniu?
Powiedzmy, że mam (lat, lon) i jeszcze jeden parametr.
Jak obliczana jest odległość?
Innym problemem, jaki mam z clustTool, jest to, że jest on zaprojektowany z myślą o GUI. Nie wiem, jak mogę pominąć narzut GUI w bibliotece, ponieważ go nie potrzebuję.
Jakie mam opcje w R do analizy skupień danych przestrzennych?
Cluster
, zaakceptuje jako dane wejściowe odmienność lub macierze odległości . Dzięki temu są one całkowicie ogólne i mają zastosowanie do grupowania na kuli, pod warunkiem, że możesz samodzielnie obliczyć odległości, co jest proste.Odpowiedzi:
Oto rozwiązanie oparte na Znajdź regułę odległości opartą na punktach , ale używając
distm
funkcji zgeosphere
pakietu:Powinieneś dostać coś takiego:
Kolejne kroki dotyczą tylko wizualizacji:
źródło
for (i in 1:186) { print(paste(i,min(distance[i,c(1:(i-1),(i+1):187)]))) }
zajmuje,4
ale po zastosowaniux <- cutree(hc, h=5)
daje mi 101 klastrów z 187. Logicznie powinno być 1. Co jest nie tak?x = as.dist(matrix(runif(100), ncol=10)); hc = hclust(x, method="complete"); cutree(hc, h=max(x))
. Daje to jeden klaster, zgodnie z oczekiwaniami. Spróbuj wykreślić swój model klastrowania za pomocą:plot(hc)
i zobacz, jaka jest najwyższa wartość.Istnieją funkcje do obliczania rzeczywistych odległości na kulistej ziemi w R, więc może możesz ich użyć i wywołać funkcje grupowania za pomocą macierzy odległości zamiast współrzędnych. Jednak nigdy nie pamiętam nazw ani odpowiednich pakietów. Wskazówki znajdują się w widoku zadań R-przestrzennym.
Inną opcją jest przekształcenie punktów w układ odniesienia, aby odległości były euklidesowe. W Wielkiej Brytanii mogę korzystać z systemu referencyjnego OSGrid:
używając spTransform z pakietu 'rgdal' (lub może maptools). Znajdź system siatki dla swoich danych (prawdopodobnie zrobi to odpowiednia strefa UTM), a będziesz obliczać odległości w metrach bez problemu.
Jest to dobre tylko wtedy, gdy twoje dane są małym obszarem - jeśli masz dane globalne, naprawdę musisz obliczyć odległość sferyczną, a to gdzieś w jednym (lub więcej) pakietach omawianych w widoku zadań przestrzennych R:
http://cran.r-project.org/web/views/Spatial.html
Wygląda na to, że chcesz mieć pakiet „geosfery”, ale czytaj przestrzenny widok zadań!
źródło
Rzuciłbym okiem na pakiet Spatstat . Cały pakiet przeznaczony jest do analizy wzorów punktów przestrzennych (sic). W CSIRO jest doskonały ebook napisany przez prof. Adriana Baddeleya, który zawiera szczegółową dokumentację, instrukcje i przykłady dotyczące całego pakietu. Spójrz na rozdział 19 dla „Metody odległości dla wzorów punktowych”.
To powiedziawszy, nie jestem pewien, czy nawet spatstat rozróżnia dane przestrzenne i porządkowe, więc możesz chcieć ponownie skierować swoje punkty na coś ze spójnymi wartościami x i y - prawdopodobnie spróbuj użyć rgdal (biblioteka R dla GDAL i OGR).
źródło
Może ta odpowiedź przychodzi o 2 lata za późno, ale i tak.
Według mojej wiedzy, klastrowanie przestrzenne wymaga określonego sąsiedztwa, do którego klaster jest ograniczony, przynajmniej na początku. Funkcja kulldorf w pakiecie SpatialEpi pozwala na grupowanie przestrzenne w oparciu o zagregowane sąsiedztwa.
ponadto przydatna może być statystyka DBSCAN dostępna z pakietu fpc .
zobacz także tutaj podobną dyskusję: https://stats.stackexchange.com/questions/9739/clustering-spatial-data-in-r
i tutaj na interesujący artykuł na temat najnowszych algorytmów klastrowych, takich jak CHAMAELEON: http://www.cs.uiuc.edu/homes/hanj/pdf/gkdbk01.pdf
źródło
Geoda
R
, choć nie jest pakietem, może być ciekawym programem do zbadania, ponieważ została napisana przez Luca Anselina, który przyczynił się do teorii klastrowania przestrzennego, i uważam, że umożliwia ona tworzenie klastrów (choć minęło trochę czasu, odkąd ją zbadałem).spdep to świetny
R
pakiet. Zawieraskater
funkcję przestrzennej analizy „K'luster przez usuwanie krawędzi drzewa . Zapewnia także inne funkcje analizy przestrzennej, w tym autokorelację przestrzenną i wykrywanie klastra lokalnego za pomocą lokalnego Morana i innych statystyk przestrzennych. Jest to opisane następująco:Możesz przynajmniej przetestować, czy punkty są losowo rozmieszczone przestrzennie (przypuszczalnie przydatny test pre-klastrowania przy rozważaniu odległości przestrzennych), ale może również wygenerować inne przydatne miary, które możesz wprowadzić do algorytmu grupowania. Wreszcie, być może możesz znaleźć przydatne pytania na https://stats.stackexchange.com/ dotyczące zagadnień klastrowania przestrzennego (jednak więcej z teoretycznego punktu widzenia).
źródło
Wypróbuj pakiet liderCluster w R. W przeciwieństwie do wielu innych algorytmów klastrowania, nie wymaga od użytkownika określania liczby klastrów, ale zamiast tego wymaga przybliżonego promienia klastra jako podstawowego parametru strojenia.
źródło
Sprawdź funkcję odległości pakietu geosfery lub funkcję dystansu kopalnego deg. Masz dane w stopniach i musisz przełożyć je na metry lub stopy, zanim zaczniesz grupować.
źródło