r - 为 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)
}
解决方案
改变像素大小只会改变结果的分辨率,但基本的数学是一样的。这只是一个关于生成的网格有多好的问题。您可以通过使用参数eps
或dimyx
在调用density.ppp()
. 这当然是相关的,但在很大程度上答案只是:更精细的分辨率更好(或者至少通常不会更差,除非你走极端并遇到数值不稳定性)。更精细的分辨率使估计强度的图看起来更好,但是当你说你想要“选择最适合我的模型的那个”时,这可能不是你想要的。看到所选择的平滑带宽的效果通常更有趣sigma
. 您刚刚使用 Diggle 的规则解决了这个问题,但这绝不是一个既定的“最佳实践”。实际上选择带宽是一个没有简单通用解决方案的问题。您可以尝试一系列不同的带宽,看看哪个最适合您的目的。像素分辨率应该足够高以使绘图看起来不错,并且足够低以使计算不会花费太长时间。
推荐阅读
- java - 当editText聚焦并且键盘打开时如何移动视图?
- maven - IDEA 不再在运行前编译项目
- java - 指定顶级容器的 ContentPane 是否有优势?
- java - 如何在整个项目中传递一个值并在程序的任何地方使用它
- java - 通过 TestNG 在不同的浏览器上运行 selenium 测试
- java - Android Volley NoConnectionError
- bash - 运行 shell 脚本时替换错误
- ruby-on-rails - DB 值在视图中显示不一致
- php - WordPress。将徽标放在菜单或标题的前面
- python - 刮掉具有许多变体的项目,不要列出或听写,而是每行(多行)