【问题标题】:Plot an envelope for an mppm object in spatstat在 spatstat 中为 mppm 对象绘制包络
【发布时间】:2021-09-22 15:00:52
【问题描述】:

我的问题与上一个问题密切相关:Simulation-based hypothesis testing on spatial point pattern hyperframes using "envelope" function 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”

【问题讨论】:

    标签: r spatstat


    【解决方案1】:

    子集索引类型错误。使用

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

    或者只是

    pool(EE1)
    

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

    但是,从统计上看,这个过程几乎没有意义。您已经安装了一个模型,该模型允许使用 anova.mppm 和其他工具进行严格的统计推断。取而代之的是,您正在从拟合模型生成模拟数据并执行蒙特卡罗测试,其中包含多次测试和低功率的所有令人担忧的问题。这种方法还有其他问题 - 例如,即使模型对于超帧的每一行都是“相同的”,但除非点模式的窗口相同,否则这些模式在统计上并不等效,等等。

    【讨论】:

    • 非常感谢。实际上,这些图只是作为一种健全性检查(我的模型通过将其 AIC 与这些零假设模型进行比较来验证)并直观地表示拟合过程的成功(对于科学出版物)。跨度>
    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多