在 spatstat 中绘制 mppm 对象的包络

Plot an envelope for an mppm object in spatstat

我的问题与上一个问题密切相关:

我通过使用 Rspatstat 中的 mppm 函数在几个独立数据集上拟合模型获得了一个 mppm 对象。我如何研究它的包络以将其与我的观察结果进行比较?

我这样拟合我的模型:

data <- listof(NMJ1,NMJ2,NMJ3)
data <- hyperframe(X=1:3, Points=data)
model  <- mppm(Points ~marks*sqrt(x^2+y^2), data)

其中 NMJ1、NMJ2 和 NMJ3 已标记 ppp,并且是同一实验的独立实现。

但是,信封函数不接受 mppm 类型的输入:

> envelope(model, Kcross.inhom, nsim=10)
Error in UseMethod("envelope") : 
  no applicable method for 'envelope' applied to an object of class "c('mppm', 'list')"

前面提到的问题的答案表明如何为每个模式绘制全局包络线,以及如何使用乘积规则进行多重测试。然而,我的拟合模型暗示我的 3 ppp 个对象在统计上是等效的,并且是同一实验的独立实现(即它们之间没有不同的协变量)。因此,我想获得一个图,将我的拟合模型与我的 3 个数据集进行比较。以下代码:

gamma= 1 - 0.95^(1/3)
nsims=round(1/gamma-1)
sims <- simulate(model, nsim=2*nsims)
SIMS <- list()
for(i in 1:nrow(sims)) SIMS[[i]] <- as.solist(sims[i,,drop=TRUE])
Hplus <- cbind(data, hyperframe(Sims=SIMS))

EE1 <- with(Hplus, envelope(Points, Kcross.inhom, nsim=nsims, simulate=Sims))

pool(EE1[1],EE1[2],EE1[3])

导致以下错误:

Error in pool.envelope(`1` = list(r = c(0, 0.78125, 1.5625, 2.34375, 3.125,  : 
  Arguments 2 and 3 do not belong to the class “envelope”

子集索引类型错误。使用

pool(EE1[[1]], EE1[[2]], EE1[[3]])

或者只是

pool(EE1)

这些会给出一条错误消息,即 envelope 命令应该用 savefuns=TRUE 调用。所以你只需要改变那个步骤。

但是,从统计上讲,此过程意义不大。您已经拟合了一个模型,该模型允许使用 anova.mppm 和其他工具进行严格的统计推断。取而代之的是,您正在从拟合模型生成模拟数据并执行 Monte Carlo 测试,其中包含多重测试和低功耗的所有令人担忧的问题。这种方法还有其他问题——例如,即使模型对于超帧的每一行都是“相同的”,模式在统计上也不是等效的,除非点模式的 windows 相同,等等.