首页 > 解决方案 > 为 r 中的核密度估计图 (density.ppp) 选择像素大小

问题描述

我有一个多边形的 shapefile 和一个分布在多边形内的点的 shapefile。我已经使用包中的 density.ppp 函数根据每个多边形包含的点为每个多边形创建了内核密度估计 (KDE) 映射spatstat。我现在希望创建具有不同像素大小的不同 kde,以便选择最适合我的模型的 kde。我尝试在as.mask函数中使用 eps 参数,但这只改变了窗口的像素大小,而不是内核映射本身的大小,因此结果没有改变。在扔掉了 density.ppp 函数的整个手册之后,我发现所有看起来相关的是包中的pixellate.ppp函数spatstat.geom,但我不确定如何将它与.ppp 函数一起使用density.ppp

任何建议如何更改kde的像素大小?

library(sf)
library(spatstat)

buffer <- st_read("gis/layers/buffers.shp")
pbb<- st_read("gis/layers/points_by_buffer.shp")

for (p in 1:10) {
 if(p %in% pbb$field_id) {
   
   poly123 <- pbb[pbb$field_id == p,]
   
   C <- as.owin(buffer$geometry[p])

   W<- as.mask(C, eps = 100)

   point<- ppp(poly123$X,poly123$Y, window = W)

   sigma <- bw.diggle(point)
   
   d <- density.ppp(point, kernel = "gaussian", sigma=sigma, positive = TRUE, at="pixels", )
   plot(d) 
}

标签: rspatialkernel-densityspatstat

解决方案


改变像素大小只会改变结果的分辨率,但基本的数学是一样的。这只是一个关于生成的网格有多好的问题。您可以通过使用参数epsdimyx在调用density.ppp(). 这当然是相关的,但在很大程度上答案只是:更精细的分辨率更好(或者至少通常不会更差,除非你走极端并遇到数值不稳定性)。更精细的分辨率使估计强度的图看起来更好,但是当你说你想要“选择最适合我的模型的那个”时,这可能不是你想要的。看到所选择的平滑带宽的效果通常更有趣sigma. 您刚刚使用 Diggle 的规则解决了这个问题,但这绝不是一个既定的“最佳实践”。实际上选择带宽是一个没有简单通用解决方案的问题。您可以尝试一系列不同的带宽,看看哪个最适合您的目的。像素分辨率应该足够高以使绘图看起来不错,并且足够低以使计算不会花费太长时间。


推荐阅读