在R spatstat中模拟一个kppm对象列表



我想在一个kppm对象列表上使用包络模拟。

我有一个网格模式的点数据集。我想移动每个点,使其在单元中的位置是随机的,然后运行spatstat模拟以确定这些点是否随机分布(显然将在子单元大小规模上)。然后随机移动单元内的每个点,并重新运行模拟-重复n次并生成所有模拟的包络。有两种方法可以做到这一点:1)使用点集列表,2)使用simulation .

方法1)-一个名为my_kppm_list的列表

Lmat = envelope(fitM, Lest, nsim = 19, global=FALSE, simulate=my_kppm_list)
plot(Lmat)

如何创建集群过程模型列表(kppm)?

天真的道:

my_list <- list(kppm_0, kppm_1)

尝试运行模拟时失败:

Lmat = envelope(fitM, Lest, nsim = 19, global=FALSE, simulate=my_list)
Error in envelopeEngine(X = X, fun = fun, simul = simrecipe, nsim = nsim,  : 
‘simulate’ should be an expression, or a list of point patterns of the same kind as X

我可以将列表转换为。ppm

fitM_0 <- kppm(create_pts(), ~1, "MatClust")
fitM_1 <- kppm(create_pts(), ~1, "MatClust")
my_list <- list(fitM_0, fitM_1)
ppm_list <- lapply(my_list, as.ppm)

但试图转换为kppm失败,出现错误

kppm_list <- lapply(my_list, as.kppm)

方法2)在模拟中应用一个函数,这样在模拟运行时对每个点应用随机移位,并使用所有模拟的包络(见Baddelley等人的399页)。空间点模式书(2016):

e_rand <- function(){
j_x <- matrix(unlist(runif(dim(c_df)[1], min=-10, max=10)), ncol = 1, byrow = T)
j_y <- matrix(unlist(runif(dim(c_df)[1], min=-10, max=10)), ncol = 1, byrow = T)
x_j<- c_df[,1]+j_x
y_j<- c_df[,2]+j_y

c_j <- ppp(x = x_j, y = y_j, window = window)
return(c_j)
}
Lmat = envelope(fitM, Lest, nsim = 19, global=TRUE, simulate=e_rand)

然而,我发现null模型(输出图中的红色虚线)在添加模拟时具有扭结-没有模拟时不会出现的扭结。

如何创建集群过程模型列表(kppm)?

这不是问题所在。在您的示例中,您成功地创建了类kppm的对象列表。若fit1fit2kppm类的拟合模型,则

m <- list(fit1, fit2)

kppm类对象的列表。

问题是,然后您将此列表作为参数传递给不接受此格式的函数envelope。来自envelope.pppenvelope.kppm的错误消息表明,参数simulate必须是一个拟合模型,或者是一个点模式列表。

通过生成模拟点模式,计算每个模拟模式的总结函数,并计算这些总结函数的上极值和下极值来构造包络。参数simulate(如果给出了)是生成模拟点图案的配方。如果simulate是一个类似expression(runifpoint(42))的表达式,那么这个表达式将被计算nsim次以产生nsim不同的点模式。如果simulate是一个拟合模型,则生成该模型的nsim模拟实现。若simulate为点模式列表,则取其为模拟随机模式。

不清楚您想要如何处理您的模型列表。您想要构建一个信封,还是一个信封列表?

  • 选项1:您有kppm类模型的m列表。对于每个模型m[[i]],您想要构建一个包络e[[i]],其中的限制是确定的by simulation fromm[[i]] '。
  • 选项2:您有kppm类模型的m列表。对于每个模型m[[i]],您希望生成一个点模式,例如X[[i]],并使用这些模式构建信封e

对于选项1,输入类似

的内容
e <- anylapply(m, function(fit) { 
envelope(Y, Lest, nsim = 19, global=FALSE, simulate=fit)}) 

对于选项2,

X <- solapply(m, simulate, nsim=1, drop=TRUE)
e <- envelope(Y, Lest, nsim=19, global=FALSE, simulate=X)

如果您还需要什么,请说明。

最新更新