R - spatstat:计算新点的密度

问题描述

是否可以使用 spatstat 来估计给定 ppp 对象的强度函数并计算其考虑新点的值?例如,我可以在 D:

处评估 new_point
# packages
library(spatstat)

# define a random point within Window(swedishpines)
new_point <- ppp(x = 45,y = 45,window = Window(swedishpines))

# estimate density
(D <- density(swedishpines))
#> real-valued pixel image
#> 128 x 128 pixel array (ny,nx)
#> enclosing rectangle: [0,96] x [0,100] units (one unit = 0.1 metres)

reprex package (v1.0.0) 于 2021 年 3 月 30 日创建

我在想也许我可以superimpose()这两个ppp对象(即swedishpinesnew_point)然后运行density设置{{1} } 和 at = "points" 但我不确定这是否是建议的方法(我不确定在估计过程中是否忽略了附加点)。

我知道这听起来像是一个微不足道的问题,但我阅读了一些文档并没有找到答案或解决方案。

解决方法

有两种方法可以做到这一点。

首先是简单地获取强度的像素图像,并使用[提取所需位置的像素值:

D <- density(swedishpines)
v <- D[new_points]

查看 density.ppp[.im 的帮助。

另一种方式是使用densityfun

f <- densityfun(swedishpines)
v <- f(new_points)

查看 densityfun.ppp 的帮助

第一种方式效率更高,第二种方式更准确。

技术问题:如果某些 new_points 可能位于 swedishpines 的窗口之外,那么这些点处的值(数学上)未定义。上述两种方法都将简单地忽略这些点,结果向量 v 将比新点的数量短。如果您需要处理这种偶然性,最简单的方法是使用 D[new_points,drop=FALSE],它为此类位置返回 NA 值。