将核密度估计提取到 R 中的新样本点

问题描述

我有 400 个多边形和分布在它们上面的点的空间参考数据(shapefile)。我希望根据每个多边形包含的点为每个多边形创建一个内核密度估计栅格。之后,我想为每个多边形创建一个包含 100 个随机点的样本,其中每个点都有一个空间参考(x 和 y 坐标)和一个 kde 值。到目前为止,我所做的只是使用“ppp.density”函数创建一个多边形形状的 kde 图像,但是输出的结果与文档中描述的不同,我不知道是什么格式以及如何获得新点样本的kde值。

任何帮助将不胜感激。

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

 library(spatstat)
 
 for (p in 1:400) {
  if(p %in% pbb$value) {
    poly123<- pbb[pbb$value == p,]
    
    C <- as.owin(buffer$geometry[p])
    point<- ppp(poly123$X,poly123$Y,window = C)
    d <- density(point,kernel = "gaussian")
    plot(d)

kde plot

The 'density' output is this:

解决方法

您正在使用 density.ppp 包中的函数 spatstat(不是“ppp.density”)。

如果 p 是一个点模式(类 ppp),那么 D <- density(p) 计算非标准化核密度估计。有关说明和示例,请参阅 help(density.ppp)

结果 D 是一个像素图像(类 im),可以打印、绘制和子集化等(在您的问题中,您刚刚打印了 {{1} } 对象。)

计算像素图像im后,如果你想知道D在某些空间位置的值,那么你可以

  • 将查询位置变成点模式D,然后通过X提取这些位置的数值;或
  • 通过 values <- D[X] 将像素图像转换为函数,然后通过 f <- as.function(D) 在所需坐标 x,y 处评估函数。

如果您想知道原始数据位置 values <- f(x,y) 处的密度值,那么使用 p 参数 {{1} }:

at

警告:在您的示例(以及上面的示例)中,未指定平滑带宽 density.pppvalues <- density(p,at="points") 的默认值可能无法满足您的数据。请参阅 sigma 的帮助文件和示例。