Bagaimana cara melakukan estimasi kerapatan kernel dengan penghalang / batas fisik di QGIS?

18

Adakah yang tahu tentang suatu program yang akan memungkinkan kernelling yang mempertimbangkan batas dalam perhitungannya daripada hanya menutupi area yang tidak mungkin?

Sejauh ini saya telah menemukan: GME menambahkan untuk Arc10 (Hawthorne Beyer) - Saya mendapatkan kesalahan setiap kali saya menentukan batas shapefile. Saya sudah mencoba banyak jenis shapefile yang berbeda dan kompleksitas batas dll. Ini berfungsi dengan baik ketika saya tidak menentukan batas.

Paket AdehabitatHR di R (Calange 2011) - ini berfungsi dengan baik tetapi batas yang Anda tentukan harus sangat sederhana - segmen 3x panjang bandwidth kernel, dan tidak terlalu berliku. Untuk data saya ini adalah penyederhanaan besar yang berlebihan.

Jadi saya bertanya-tanya apakah ada perangkat lunak lain yang bisa melakukannya, GRASS atau QGIS misalnya.

Terima kasih

Kim
sumber
3
Makalah baru-baru ini dengan kode R minat potensial, bias perbatasan dan kernel tertimbang . Semua kode hanyalah cara untuk menimbang pengamatan untuk mengoreksi bias perbatasan (jika Anda dapat mengetahui bobotnya, Anda dapat menggunakan program apa pun untuk memperkirakan kde selama akan kecuali bobotnya).
Andy W
1
Tepatnya bagaimana Anda ingin "memperhitungkan" batas? Ada banyak cara yang mungkin, mulai dari menutupi hingga memblokir penyebaran hingga mengoreksi efek batas.
whuber
1
Terima kasih @AndyW dan whuber atas balasannya. Saya ingin menjelaskan batasan dengan mencegah kernel menyebar di atasnya. Data adalah lokasi penyu, jadi saya tahu bahwa distribusi pemanfaatan tidak boleh menyebar ke daratan, tetapi banyak lokasi sangat dekat dengan pantai jadi saya tidak ingin bias terhadap lokasi-lokasi ini hanya dengan menutupi bagian-bagian kernel yang menyebar ke tanah. Terima kasih atas tautannya ke makalah - ini terlihat hebat saya akan mencoba menggunakan kode yang sama untuk data saya.
KimS

Jawaban:

2

Inti dari estimasi kepadatan kernel adalah gagasan tentang jarak. Solusi terbaik yang saya tahu adalah menggunakan metrik jarak yang lebih baik yang memperhitungkan batas-batas, dan berbagai biaya perjalanan. Yang terbaik adalah memilih metrik jarak yang sesuai dengan masalah yang Anda coba selesaikan. Gesekan medan darat sangat bagus untuk hiking, tetapi tidak untuk dispersi aerosol. Arus angin sangat penting untuk pelacakan perahu layar, tetapi tidak relevan untuk petunjuk arah mengemudi.
Sekarang gagasan tentang metrik jarak yang sesuai semoga cukup termotivasi, saya dapat merekomendasikan permukaan biaya sebagai metrik jarak tujuan umum yang baik. Mereka tersedia dalam segala hal mulai dari ArcGIS, hingga R, hingga JavaScript dan cukup mudah untuk dibuat. Di qGIS misalnya, Anda dapat membuat permukaan gesekan raster dan menggunakannya untuk menghitung rute. Sesuaikan permukaan gesekan untuk memperhitungkan batas-batas Anda, dan Anda akan melihat massa dari kernel di sekitar titik Anda menyebar dengan rapi di sekitar rintangan.

JasonRDalton
sumber
+1 Ini berpotensi pendekatan yang bagus. Setelah menerapkannya dalam banyak masalah, saya telah menemukan bahwa kesulitan utama adalah yang tidak disebutkan di sini: persisnya bagaimana Anda mengusulkan penyebaran kernel sesuai dengan metrik ini? Solusi out-of-the-box tidak dapat melakukan ini.
whuber
@whuber Benar, sistem out of the box biasanya tidak memiliki kemampuan untuk memperhitungkan permukaan biaya dan kepadatan kernel secara bersamaan. Saran saya adalah menggunakan permukaan gesekan untuk menghitung jarak titik-ke-titik, lalu langsung menerapkan fungsi kernel untuk bobot. Di qGIS atau ArcGIS Anda bisa menulis menggunakan fungsi distribusi normal dengan python, dan di R ada dnorm()fungsinya.
JasonRDalton
Saya telah melakukan hal itu dalam beberapa kasus, tetapi memikirkan proses dan memeriksa hasilnya mengungkapkan beberapa masalah yang melekat. Tampaknya yang paling sulit adalah bagaimana menjamin bahwa massa dikonservasi: Anda tidak bisa hanya menyebarkan nilai menurut, fungsi Gaussian yang tetap, karena massa total yang dihasilkan dari titik penyebaran tidak akan sama dengan massa asli. Tidak ada cara yang efisien untuk melakukan perhitungan ini.
whuber
0

Saya sarankan Anda mencoba paket spatstat untuk R. Di sana Anda dapat menetapkan owinobjek untuk menentukan batas area studi. Juga ada tutorial yang bagus untuk paket ini.

SS_Rebelious
sumber
0

Saya sebenarnya membantu dengan plugin AniMove untuk QGIS, yang bertujuan untuk menghilangkan ketergantungan R untuk estimasi kepadatan kernel. Coba lihat di sini .

EDIT: Plugin ini sebenarnya tersedia sebagai percobaan di repositori plugin QGIS resmi

Dan jangan ragu untuk bertanya pada daftar , jika Anda punya saran

Jorge Arévalo
sumber
-2

Saya telah berhasil melakukan ini dengan menggunakan Geostatistic Analyst yang merupakan perpanjangan dari ESRI ArcGIS. Anda dapat memuat dataset garis fitur sebagai penghalang dan hasilnya cukup baik. Saya melakukan uji coba sambil mengubah parameter fungsi untuk mendapatkan ide yang jelas tentang cara mengkalibrasi alat. Untuk memvalidasi hasil, apa yang saya sarankan adalah jika Anda memiliki dataset yang cukup besar adalah menghapus sampel poin, menghasilkan permukaan kepadatan tanpa titik-titik tersebut, kemudian membandingkan perbedaan antara nilai-nilai titik yang dihilangkan dengan nilai-nilai permukaan di lokasi titik yang dihapus.

Petya
sumber
2
Bisakah Anda memperbesar jawaban ini sedikit untuk menjelaskan bagaimana GA - yang mengimplementasikan metode interpolasi - mampu menghitung estimasi kepadatan kernel ? Sebagai pemeriksaan ulang kebenaran solusi Anda, apakah Anda memverifikasi bahwa integral dari GA grid kira-kira sama dengan jumlah semua data input?
whuber
1
Pada 10.1 dimungkinkan untuk melakukan interpolasi kernel dengan penghalang tetapi ini tidak menghasilkan estimasi kepadatan. Meskipun, mengingat metode yang referensi posting asli saya bertanya-tanya apakah mereka tidak tertarik pada estimasi kernel Gaussian dan bukan estimasi kepadatan.
Jeffrey Evans