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

Extracting kernel density estimates to a new sample points in 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:

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

如果 p 是点模式 (class ppp),则 D <- density(p) 计算未归一化的核密度估计。有关说明和示例,请参阅 help(density.ppp)

结果 D 是一个像素图像 (class im),可以打印、绘图和子集化等。(在你的问题中,你刚刚打印了内部结构im 对象的。)

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

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

如果您想知道原始数据位置p的密度值,那么使用at参数会更快更准确到 density.ppp:

values <- density(p, at="points")

警告:在您的示例(以及上面的示例)中,未指定平滑带宽 sigmasigma 的默认值可能无法满足您的数据要求。请参阅 density.ppp.

的帮助文件和示例