Saya memiliki banyak titik data dengan garis lintang dan bujur. Saya ingin menggunakan R untuk mengelompokkan mereka berdasarkan jarak mereka.
Saya sudah melihat halaman ini dan mencoba paket clustTool . Tapi saya tidak yakin apakah fungsi clust di clustTool menganggap titik data (lat, lon) sebagai data spasial dan menggunakan rumus yang sesuai untuk menghitung jarak di antara mereka.
Maksudku, aku tidak bisa melihat bagaimana mereka membedakan antara data spasial dan data ordinal. Saya percaya perhitungan jarak antara dua titik di peta (spasial) dan dua angka normal berbeda. (Bukan?)
Apa yang terjadi jika saya ingin mempertimbangkan parameter ketiga dalam pengelompokan saya?
Seperti katakan jika saya punya (lat, lon) dan satu parameter lainnya.
Bagaimana jarak dihitung?
Masalah lain yang saya miliki dengan clustTool adalah bahwa ia dirancang dengan GUI. Saya tidak tahu bagaimana saya bisa melewatkan overhead GUI di perpustakaan karena saya tidak membutuhkannya.
Opsi apa yang saya miliki dalam R untuk analisis klaster data spasial?
Cluster
, akan menerima perbedaan atau matriks jarak sebagai input. Ini membuatnya sangat umum dan berlaku untuk pengelompokan pada bola, asalkan Anda dapat menghitung jarak sendiri, yang mudah.Jawaban:
Ini adalah solusi berdasarkan Find Cluster dari aturan jarak berbasis poin , tetapi menggunakan
distm
fungsi darigeosphere
paket:Anda harus mendapatkan sesuatu seperti:
Langkah-langkah selanjutnya hanya untuk visualisasi:
sumber
for (i in 1:186) { print(paste(i,min(distance[i,c(1:(i-1),(i+1):187)]))) }
Dibutuhkan4
tetapi ketika saya menerapkannyax <- cutree(hc, h=5)
memberi saya 101 cluster dari 187. Secara logis, harus 1. Apa yang salah?x = as.dist(matrix(runif(100), ncol=10)); hc = hclust(x, method="complete"); cutree(hc, h=max(x))
. Ini memberi Anda satu cluster, seperti yang Anda harapkan. Cobalah merencanakan model pengelompokan Anda dengan:,plot(hc)
dan lihat apa nilainya yang tertinggi.Ada beberapa fungsi untuk menghitung jarak sebenarnya pada bumi bulat di R, jadi mungkin Anda bisa menggunakannya dan memanggil fungsi pengelompokan dengan matriks jarak alih-alih koordinat. Saya tidak pernah bisa mengingat nama atau paket yang relevan. Lihat Tampilan Tugas R-spasial untuk petunjuk.
Pilihan lainnya adalah mengubah titik Anda menjadi sistem referensi sehingga jaraknya adalah Euclidean. Di Inggris saya dapat menggunakan sistem referensi OSGrid:
menggunakan spTransform dari paket 'rgdal' (atau mungkin maptools). Temukan sistem kisi untuk data Anda (zona UTM yang relevan mungkin akan melakukannya) dan Anda akan menghitung jarak dalam meter tanpa masalah.
Ini hanya baik jika data Anda adalah area kecil-ish - jika Anda memiliki data global maka Anda benar-benar perlu menghitung jarak bola, dan itu di suatu tempat dalam satu (atau lebih) dari paket yang dibahas dalam R Spatial Task View:
http://cran.r-project.org/web/views/Spatial.html
Sepertinya Anda ingin mengemas "geosphere", tetapi jangan membaca tampilan tugas spasial!
sumber
Saya akan melihat paket Spatstat . Seluruh paket didedikasikan untuk menganalisis pola titik spasial (sic). Ada ebook bagus yang ditulis oleh Prof. Adrian Baddeley di CSIRO yang berisi dokumentasi terperinci, cara-cara dan contoh-contoh untuk seluruh paket. Lihatlah bab 19 untuk "Metode jarak untuk pola titik".
Yang mengatakan, saya tidak yakin bahwa bahkan spatstat membedakan antara data spasial dan ordinal, jadi Anda mungkin ingin memproyeksikan ulang poin Anda menjadi sesuatu dengan nilai x dan y yang konsisten - mungkin coba gunakan rgdal (pustaka R untuk GDAL dan OGR).
sumber
Mungkin jawaban ini terlambat 2 tahun, tapi toh.
Sepengetahuan saya, pengelompokan spasial membutuhkan lingkungan yang ditentukan yang membatasi pengelompokan, setidaknya di awal. Fungsi kulldorf dalam paket SpatialEpi memungkinkan pengelompokan spasial berdasarkan pada lingkungan agregat.
selanjutnya statistik DBSCAN yang tersedia dari paket fpc dapat bermanfaat.
lihat juga di sini untuk diskusi serupa: https://stats.stackexchange.com/questions/9739/clustering-spatial-data-in-r
dan di sini untuk makalah yang menarik tentang algoritma klaster terbaru, seperti CHAMAELEON: http://www.cs.uiuc.edu/homes/hanj/pdf/gkdbk01.pdf
sumber
Meskipun bukan sebuah
R
paket, geoda mungkin merupakan program yang menarik untuk diteliti karena ditulis oleh Luc Anselin yang telah berkontribusi pada teori pengelompokan spasial, dan saya percaya ini memungkinkan beberapa pengelompokan (meskipun sudah beberapa waktu sejak saya menjelajahinya).spdep adalah
R
paket yang bagus . Ini termasukskater
fungsi untuk analisis spasial 'K'luster oleh Tree Edge Removal . Ini juga membawa fungsi-fungsi lain untuk analisis spasial, termasuk auto-korelasi spasial dan deteksi cluster lokal menggunakan Local Moran dan statistik spasial lainnya. Dijelaskan sebagai berikut:Anda setidaknya dapat menguji jika poin Anda didistribusikan secara acak secara spasial (mungkin merupakan tes pra-pengelompokan yang berguna saat mempertimbangkan jarak spasial), tetapi juga dapat menghasilkan langkah-langkah bermanfaat lainnya yang dapat Anda masukkan ke dalam algoritma pengelompokan Anda. Akhirnya, mungkin Anda mungkin menemukan pertanyaan yang berguna di https://stats.stackexchange.com/ berurusan dengan masalah pengelompokan spasial (meskipun, lebih dari perspektif teoritis).
sumber
Coba leaderCluster packacge di R. Tidak seperti banyak algoritma pengelompokan lainnya, ia tidak mengharuskan pengguna untuk menentukan jumlah cluster, tetapi sebaliknya memerlukan perkiraan radius sebuah cluster sebagai parameter tuning utamanya.
sumber
Periksa fungsi jarak paket geosfer atau fungsi deg.dist fosil. Anda memiliki data dalam derajat dan perlu menerjemahkannya menjadi meter atau kaki sebelum melakukan pengelompokan.
sumber