r - 比较点模式,每个模式都有不同的窗口
问题描述
我正在使用 spatstat 包在 R 中进行模式统计。我有一堆 ppp 对象,并且想将它们全部比较,以发现它们的模式中的细微差异,我可能会通过查看热图等来错过这些差异。我还想以某种方式量化模式之间的差异。
一个问题是,对于每种模式,窗口的形状(略微)不同。
我正在将spatstat应用于植物叶子;以下是生成的镶嵌,让您了解窗口形状等:
我将如何比较这些模式并查看它们的不同之处?例如,我还想看看,如果在分析 10 个模式后,通常在叶子的中部有一条密度增加的带,这很难通过简单地查看单个密度图像来检测。有没有办法解决这个问题?
解决方案
两个人工数据集的一些想法:
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 章 可能有用(免责声明:我是合著者)。
推荐阅读
- typescript - 打字稿错误:TS2304 找不到名称
- sql - 导入数据库(传输wordpress站点数据库)
- arrays - 在 Julia 1.0 中对特征值/特征向量进行排序
- swift - 如何将值转换为 CGPoint?
- isabelle - 对两个变量进行归纳?
- powerbi - 过滤 3 个真/假列
- android - 更改平移控制器允许的 PlaneType
- python - 为什么 352GB 的 NumPy ndarray 可以在 8GB 内存的 macOS 电脑上使用?
- kubernetes - 我的 ingress.yaml 中是否需要 Namespace、Secret、ServiceAccount 和 ConfigMap?
- mysql - 如何连接两个不同的表和两个日期之间的平均值