我的问题与前面的问题密切相关:Simulation-based hypothesis testing on spatial point pattern hyperframes using "envelope" function in spatstat
我已经获得了一个mppm对象,方法是使用R包spatstat中的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”发布于 2021-09-23 08:29:38
子集索引类型错误。使用
pool(EE1[[1]], EE1[[2]], EE1[[3]])或者只是
pool(EE1)这些函数会给出一条错误消息,指出应该使用savefuns=TRUE调用envelope命令。因此,您只需更改该步骤即可。
然而,从统计学上讲,这个过程没有什么意义。您已经拟合了一个模型,该模型允许使用anova.mppm和其他工具进行严格的统计推断。取而代之的是,您将从拟合的模型生成模拟数据,并执行蒙特卡洛测试,其中包含多个测试和低功耗的所有令人担忧的问题。这种方法还有其他问题-例如,即使模型对于超帧的每一行都是“相同的”,除非点模式的窗口是相同的,否则这些模式在统计上是不等价的,等等。
https://stackoverflow.com/questions/69286805
复制相似问题