R'deki uzamsal verilerin kümelenmesi? [kapalı]


34

Enlem ve boylamla ilgili veri noktalarım var. Uzaklıklarına göre kümelemek için R'yi kullanmak istiyorum.

Bu sayfaya zaten baktım ve clustTool paketini denedim . Fakat clustTool'daki clust fonksiyonunun veri noktalarını (lat, lon) uzamsal veri olarak kabul ettiğinden ve aralarındaki mesafeyi hesaplamak için uygun formülü kullandığından emin değilim.

Yani, uzamsal veriler ile sıralı veriler arasında nasıl bir fark olduğunu göremiyorum. Haritadaki iki nokta (uzamsal) ile iki normal sayı arasındaki mesafe hesaplamasının farklı olduğuna inanıyorum. (Değil mi?)

Ayrıca kümelemede üçüncü bir parametre düşünmek istersem ne olur?

Mesela (lat, lon) ve başka bir parametrem varsa söyleyin.

Mesafe nasıl hesaplanır?

ClustTool ile ilgili diğer sorun akılda bir GUI ile tasarlanmış olmasıdır. Kütüphanede GUI ek yükünü nasıl atlayabileceğimi bilmiyorum çünkü buna ihtiyacım yok.

Mekansal verilerin küme analizi için R'de hangi seçeneklere sahibim?



Tnx Whuber. Bir sorum var. R'de uzamsal kümelenme için özel bir paket var mı? Yani, anladığım kadarıyla mekansal veriler için mesafenin farklı şekilde hesaplanması gerekiyor. Bu doğru mu?
kaptan

R'ler de dahil olmak üzere karşılaştığım hemen hemen her genel amaçlı kümeleme paketi Cluster, farklılık veya uzaklık matrislerini girdi olarak kabul edecektir . Bu, mesafeleri kendiniz hesaplayabilmeniz koşuluyla, basit bir şekilde kürede kümelemeye tamamen genel ve uygulanabilir kılar.
whuber

Uzun zamandır çok benzer bir sorunla karşı karşıyayım ancak güzel bir çözüm bulamıyorum, borsamdaki döviz bürosuna bir göz atabilirsiniz . Aylık deniz yüzey sıcaklığı verileri (lon, lat, sst) var. Bu kadar uzamsal veriler için kümeleri bulmanın yolunu buldunuz mu? Uygun R paketini / işlevini bulamıyorum. Şimdiden teşekkürler Paco
pacomet

SatScan kullanmayı düşündünüz mü?

Yanıtlar:


13

İşte dayalı bir çözümdür puan tabanlı uzaktan kuralının Bul kümeleri , ancak kullanarak distmgelen işlevi geospherepaketinin:

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)

Gibi bir şey almalısınız:

        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

Bu sonraki adımlar sadece görselleştirme içindir:

library(dismo)
library(rgeos)

# expand the extent of plotting frame
xy@bbox[] <- 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(ci@polygons, axes=T)
plot(xy, col=rainbow(4)[factor(xy$clust)], add=T)

arsa


Bu gibi sorunlar yaşayan: Ben mesafe matrisi var ve her öğe için büyük mesafe bulmak: for (i in 1:186) { print(paste(i,min(distance[i,c(1:(i-1),(i+1):187)]))) } O alır 4ama uyguladığınızda x <- cutree(hc, h=5)o 187. Mantıken dışına bana 101 kümeleri verir 1. nesi var olmalıdır?
Peter.k

Merhaba, size nasıl yardımcı olacağımı bilmiyorum. Ben küçük bir örnek yapılmış, ve iyi çalışıyor: x = as.dist(matrix(runif(100), ncol=10)); hc = hclust(x, method="complete"); cutree(hc, h=max(x)). Bu, beklediğiniz gibi, size tek bir küme verir. Kümeleme modelinizi şununla çizmeyi deneyin:, plot(hc)ve en yüksek değerin ne olduğunu görün.
ssanch

11

R'deki küresel dünya üzerinde gerçek mesafeleri hesaplamak için işlevler vardır, bu yüzden belki bunları kullanabilir ve kümeleme işlevlerini koordinatlar yerine bir mesafe matrisiyle çağırabilirsiniz. Yine de isimleri veya ilgili paketleri asla hatırlayamıyorum. İpuçları için R-mekansal Görev Görünümü'ne bakın.

Diğer seçenek mesafeleri böylece bir referans sistemine puanlarınızı dönüştürmektir olan Öklit. İngiltere'de OSGrid referans sistemini kullanabilirim:

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

'rgdal' paketinden spTransform kullanmak (veya belki maptools). Verileriniz için bir ızgara sistemi bulun (ilgili UTM bölgesi muhtemelen yapacak) ve metre cinsinden mesafeleri hesaplamanız sorun değil.

Bu, yalnızca verileriniz küçük bir alan ise iyidir - genel verileriniz varsa, o zaman küresel mesafeyi hesaplamanız gerekir ve bu, R Spatial Task View'de açıklanan paketlerin birinde (veya daha fazlasında) bir yerdedir:

http://cran.r-project.org/web/views/Spatial.html

"Geosphere" paketini istiyormuş gibi görünüyorsun, ama mekansal görev görünümünü oku!


7

Spatstat paketine bir göz atardım . Tüm paket mekansal nokta kalıplarını (sic) analiz etmeye adamıştır. CSIRO'da Prof. Adrian Baddeley tarafından yazılmış , paketin tamamı için ayrıntılı belgeler, nasıl yapılır ve örnekler içeren mükemmel bir e-kitap var. "Nokta desenleri için mesafe yöntemleri" için 19. bölüme bakın.

Bununla birlikte, spatstat'ın mekansal ve sıralı veriler arasında farklılık gösterdiğinden bile emin değilim, bu yüzden puanlarınızı tutarlı x ve y değerlerine sahip bir şeye dönüştürmek isteyebilirsiniz - muhtemelen rgdal (GDAL ve OGR için bir R kütüphanesi) kullanmayı deneyin .


tnx. Bu harika bir e-kitap. Ancak bu Spatstat kullanılarak kümelemenin nasıl yapılacağından emin değilim çünkü kümelenme için belirli bir işlev görmüyorum. Biraz açıklayabilir misin?
kaptan

2
Aslında, adil olmak gerekirse , tekrar baktıktan sonra DCluster paketine bakardım - Bivand tarafından hastalık kümelerini analiz eden bir paket. Ayrıca, cevapta beklediğim için özür dilerim!
om_henners

6

Belki bu cevap 2 yıl geç gelir, ama yine de.

Bildiğim kadarıyla, uzamsal kümeleme kümelenmenin kısıtlandığı en azından başlangıçta tanımlanmış bir mahalle gerektiriyor. Kulldorf işlevi SpatialEpi paketinde toplu mahallelerde dayalı mekansal kümelenme için izin verir.

ayrıca, fpc paketinde mevcut olan DBSCAN istatistiği faydalı olabilir.

benzer bir tartışma için buraya da bakınız: https://stats.stackexchange.com/questions/9739/clustering-spatial-data-in-r

ve burada, CHAMAELEON gibi en son küme algoritmaları hakkında ilginç bir makale için: http://www.cs.uiuc.edu/homes/hanj/pdf/gkdbk01.pdf


Han ve ark.nın "Veri Madenciliğinde Mekansal Kümeleme Yöntemleri: Bir anket" adlı makalesi
knb

5

Bir Rpaket olmasa da , geoda , mekansal kümelenme teorisine katkıda bulunan Luc Anselin tarafından yazıldığı gibi incelemek için ilginç bir program olabilir ve biraz kümelemeyi mümkün kıldığına inanıyorum (araştırmaya başladığımdan bu yana biraz zaman geçti).

spdep harika bir Rpakettir. Ağaç Kenarı Kaldırma ile uzaysal 'K'luster Analizi'skater işlevini içerir . Mekansal otomatik korelasyon ve Lokal Moran ve diğer mekansal istatistikler kullanılarak lokal küme tespiti dahil mekansal analiz için başka fonksiyonlar da getiriyor. Aşağıdaki şekilde tarif edilmiştir:

Uzamsal ağırlıklar matris nesnelerini oluşturmak için çokgen bitişiklerinden, nokta desenlerinden mesafelere ve kaplamalara göre matris nesnelerini oluşturmak, bu nesneleri özetlemek ve minimum yayılma ağacıyla bölgesel toplama dahil olmak üzere mekansal veri analizinde kullanılmalarına izin vermek için bir işlevler topluluğu; küresel I, APLE, Geary C, Hubert / Mantel genel çapraz ürün istatistiği, Ampirical Bayes tahminleri ve Assunção / Reis Endeksi, Getis / Ord G ve çok renkli birleştirme sayısı istatistikleri, yerel Moran's I ve Getis dahil olmak üzere mekansal otokorelasyon için bir test koleksiyonu / Ord G, saddlepoint yaklaşımları ve global ve yerel Moran'ın I için kesin testleri; ve uzamsal eşzamanlı otoregressif (SAR) gecikme ve hata modellerini tahmin etme işlevleri, gecikme modelleri için etki önlemleri,

En azından puanlarınızın uzamsal olarak rastgele dağıtılıp dağıtılmadığını test edebilirsiniz (muhtemelen uzaysal mesafeleri göz önünde bulundurarak yararlı bir test ön kümeleme), ancak kümeleme algoritmanıza girebileceğiniz diğer yararlı ölçümleri de üretebilir. Son olarak, belki de uzamsal kümelenme meseleleriyle ilgilenen https://stats.stackexchange.com/ adresinde faydalı sorular bulabilirsiniz (yine de teorik açıdan bakıldığında).


Bu cevap, spatstat kitaplığında mevcut olan, aynı işlevsellik tipini tanımlamakta, nokta deseninin uzamsal düzenini veya otokorelasyonunu analiz etmektedir. Bunun ilginç olduğu durumlarda kümelenme sorununa tamamen aykırı değil. Hepimiz hipotez testleri ve keşif analizleri için çalışıyorum, ancak biri doğrudan soruyu ele almalı. Spdep kullanarak kümeleme yöntemleri, en yakın komşu, acil durum veya mesafeleri kullanan k uzaysal ağırlık matrisine [Wij] dayanmaktadır.
Jeffrey Evans

2

R'de leaderCluster paketini deneyin. Diğer birçok kümeleme algoritmasının aksine, kullanıcının küme sayısını belirtmesini gerektirmez, bunun yerine kümenin yaklaşık yarıçapını birincil ayarlama parametresi olarak gerektirir.


-2

Geosphere paket mesafe fonksiyonunu veya fosil deg.dist fonksiyonunu kontrol edin. Dereceli olarak verileriniz var ve kümelemeyi gerçekleştirmeden önce onu metreye veya ayağa çevirmeniz gerekiyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.