首页 > 解决方案 > 比较点模式,每个模式都有不同的窗口

问题描述

我正在使用 spatstat 包在 R 中进行模式统计。我有一堆 ppp 对象,并且想将它们全部比较,以发现它们的模式中的细微差异,我可能会通过查看热图等来错过这些差异。我还想以某种方式量化模式之间的差异。

一个问题是,对于每种模式,窗口的形状(略微)不同。

我正在将spatstat应用于植物叶子;以下是生成的镶嵌,让您了解窗口形状等:

            镶嵌,叶 1                            镶嵌,叶 2                            镶嵌,叶 3

我将如何比较这些模式并查看它们的不同之处?例如,我还想看看,如果在分析 10 个模式后,通常在叶子的中部有一条密度增加的带,这很难通过简单地查看单个密度图像来检测。有没有办法解决这个问题?

标签: rgisspatialspatstat

解决方案


两个人工数据集的一些想法:

library(spatstat)
set.seed(42)
W1 <- ellipse(1,2)
W2 <- rotate(W1, angle = pi/4)
P1 <- rpoispp(20, win = W1)
P2 <- rpoispp(20, win = W2)
plot(solist(P1=P1, P2=P2), main = "", equal.scales = TRUE)

手动为每个窗口制作一条相关的中心线(您可以 ends <- clickppp(2, add = TRUE)在每个单独模式的图的顶部使用,通过单击图以交互方式选择端点,然后使用坐标创建线psp):

L1 <- psp(0, 1, 0, -1, window = W1)
L2 <- rotate(L1, angle = pi/4)
plot(solist(L1=L1, L2=L2), main = "", equal.scales = TRUE)

定义到中心线的距离:

D1 <- distfun(L1)
D2 <- distfun(L2)
plot(solist(D1=D1, D2=D2), main = "", equal.scales = TRUE)

然后,您可以使用此协变量拟合点过程模型。例如,其中一个数据集的简单对数线性模型:

ppm(P1 ~ D1)
#> Nonstationary Poisson process
#> 
#> Log intensity:  ~D1
#> 
#> Fitted trend coefficients:
#> (Intercept)          D1 
#>   3.1368706  -0.1768286 
#> 
#>               Estimate      S.E.    CI95.lo   CI95.hi Ztest       Zval
#> (Intercept)  3.1368706 0.1912389  2.7620491 3.5116920   *** 16.4028872
#> D1          -0.1768286 0.3328005 -0.8291056 0.4754484       -0.5313351

到中心距离的对数线性效应与预期的一样微不足道(因为数据是以均匀强度生成的)。从这里您可以探索不同类型的模型(例如,通过 与距离成正比offset()、Gibbs 模型、通过 重复实验的模型 mppm(),这在此处可能非常相关,等等)。例如,两个数据集的联合对数线性模型:

dat <- hyperframe(points = list(P1, P2), linedist = list(D1, D2))
mppm(points ~ linedist, data = dat)
#> Point process model fitted to 2 point patterns
#> Call: mppm(points ~ linedist, data = dat)
#> Log trend formula: ~linedist
#> Fitted trend coefficients:
#> (Intercept)    linedist 
#>  2.98511651  0.06387864 
#> 
#> Interaction for all patterns:    Poisson process

spatstat 书中的第 9 章(可在线免费获得)、13 和 16 章 可能有用(免责声明:我是合著者)。


推荐阅读