[英]Calculate similarity in spatial utilization between .tif rasters using Earth Mover's Distance (EMD)
我正在使用動態布朗橋運動模型分析聲學接收器陣列內的動物跟蹤數據。 數據集包含一個動物標識符,接收器上的每個檢測都有一個時間戳和一個緯度/經度坐標(十進制度)。 此外,還有兩個額外的分組變量“studyperiod”和“sgroup”。
Elasmo Datetime Lat Lon studyperiod sgroup
1 X10141 2019-02-13 15:29:00 25.72441 -79.30922 IS2019 naive
2 X10141 2019-02-13 15:44:00 25.72441 -79.30922 IS2019 naive
3 X10141 2019-02-13 15:48:00 25.72441 -79.30922 IS2019 naive
4 X10141 2019-02-13 17:17:00 25.72441 -79.30922 IS2019 naive
5 X10141 2019-02-13 17:20:00 25.72441 -79.30922 IS2019 naive
6 X10141 2019-02-13 18:00:00 25.72441 -79.30922 IS2019 naive
然后,我首先使用 GitHub package 'dBBMMhomeRange' (/https://github.com/SimonDedman/dBBMMhomeRange) 計算個人級別的利用率分布,然后對其進行縮放、加權、匯總到組級別的 UD。 生成的組級 UD 保存為 .ascii 柵格。 由於柵格有不同的范圍,我將它們導入 ArcMap 並在程序中指定一個共享范圍。 然后將具有相同共享范圍的柵格從 Arcmap 導出並導入 R。 柵格具有以下屬性:
r1 <- raster("~/N_IS2017_sc.tif")
r4 <- raster("~/N_IS2020_sc.tif")
> r1;r4
class : RasterLayer
dimensions : 1450, 1264, 1832800 (nrow, ncol, ncell)
resolution : 50, 50 (x, y)
extent : -31658.67, 31541.33, -36085.92, 36414.08 (xmin, xmax, ymin, ymax)
crs : NA
source : N_IS2017_sc.tif
names : N_IS2017_sc
values : 0, 0.0003713508 (min, max)
class : RasterLayer
dimensions : 1450, 1264, 1832800 (nrow, ncol, ncell)
resolution : 50, 50 (x, y)
extent : -31658.67, 31541.33, -36085.92, 36414.08 (xmin, xmax, ymin, ymax)
crs : NA
source : N_IS2020_sc.tif
names : N_IS2020_sc
values : 0, 0.0004588088 (min, max)
現在,我想使用 Kranstauber 等人描述的 Earth Mover 距離。 (2016)計算不同組之間空間使用的相似性。 為此,我使用了移動 package 中的 emdDists() function。
## create a raster stack
allrasters <- stack(r1,r4)
## EMD
emdDists <- emd(allrasters/cellStats(allrasters, sum), threshold = 700)
但是,function 開始運行但總是崩潰。 這讓我覺得我做的事情是不正確的。
所以,這給我帶來了兩個問題:
相應的論文使用 UDStack 作為 object 來提供給 EMDDists()。 所以我不確定是否也可以為這里描述的.tif 柵格實施 EMD 方法?
如果正確,有沒有辦法降低對 R 的計算能力需求?
感謝 Chris 的評論(背景見上文),我找到了問題的答案。 重要的步驟是將導入的柵格轉換為 .UD class 對象,以便它們可以用於創建 UDStack。 使用“move”package 和“move”package 中的函數,代碼非常簡單快捷。
library("move")
library("raster")
# Import rasters
r1 <- raster("~/R1.tif")
r2 <- raster("~/R2.tif")
r3 <- raster("~/R3.tif")
# create .UD class rasters
r1ud <- new(".UD", r1)
r2ud <- new(".UD", r2)
r3ud <- new(".UD", r3)
# create a UDStack needed for emd()
stk <- UDStack(as.list(r1ud, r2ud, r3ud))
# 'stk' can now be used within the emd() function as described by Kranstauber et al. 2017
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.