从 spatstat 中的模拟 mppm 获取值

Obtain values from simulated mppm in spatstat

我通过使用 Rspatstat 中的 mppm 函数在几个独立的数据集上拟合模型获得了一个 mppm 对象。如何生成此模型的模拟实现并获得模拟的 xymarks 属性?

我这样安装我的模型:

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,并且是同一实验的独立实现。

sim <- simulate(model) 允许我生成该模型的模拟实现,并 plot(sim,axes = TRUE) 绘制它们。 sim本身就是一个hyperframe对象:

> sim
Hyperframe:
   Sim1
1 (ppp)
2 (ppp)
3 (ppp)

如何访问此超帧中的值(xymarks)?我的目标是从我的模型中生成大量独立的实现,并将模拟值用于另一项任务。有没有实用的方法来获取、检索和保存这些值?

既然你说你要模拟这个很多次我在这里展示了代码 有两个模拟(而不是你在问题中的一个):

library(spatstat)
data <- list(amacrine, amacrine, amacrine)
data <- hyperframe(X=1:3, Points=data)
model  <- mppm(Points ~marks*sqrt(x^2+y^2), data)
sim <- simulate(model, nsim = 2)
#> Generating simulated realisations of 3 models..
#> 1, 2,  3.

现在 sim 是一个有 2 列的 hyperframe(每个模拟一列)。每个 列是 3 点模式的列表。获取三组坐标 第一次模拟的标记在每个点模式上使用 as.data.frame

co1 <- lapply(sim$Sim1, as.data.frame)

那么co1就是一个长度为3的列表,我们可以打印出前几个 与 head() 命令协调,例如第三个坐标 点模式:

head(co1[[3]])
#>           x         y marks
#> 1 0.4942587 0.7889985   off
#> 2 0.6987270 0.7637359    on
#> 3 0.3926415 0.6819965    on
#> 4 0.7982686 0.9060733   off
#> 5 1.3507722 0.9731363    on
#> 6 0.6450985 0.6924126    on

我们可以通过另一个 lapply 提取每个模拟的坐标和标记 遍历每个模拟(在本例中为 2):

co <- lapply(sim, function(x) lapply(x, as.data.frame))

现在co是一个有2个元素的列表,每个元素是3组的列表 坐标:

length(co)
#> [1] 2
length(co[[2]])
#> [1] 3
head(co[[2]][[3]])
#>           x          y marks
#> 1 0.1660580 0.04180501    on
#> 2 0.7840025 0.71727782    on
#> 3 1.2011733 0.17109112    on
#> 4 1.0429867 0.49284639    on
#> 5 1.1411869 0.86711072   off
#> 6 1.0375942 0.06427601    on