我想在一个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
的对象列表。若fit1
和fit2
是kppm
类的拟合模型,则
m <- list(fit1, fit2)
是kppm
类对象的列表。
问题是,然后您将此列表作为参数传递给不接受此格式的函数envelope
。来自envelope.ppp
或envelope.kppm
的错误消息表明,参数simulate
必须是一个拟合模型,或者是一个点模式列表。
通过生成模拟点模式,计算每个模拟模式的总结函数,并计算这些总结函数的上极值和下极值来构造包络。参数simulate
(如果给出了)是生成模拟点图案的配方。如果simulate
是一个类似expression(runifpoint(42))
的表达式,那么这个表达式将被计算nsim
次以产生nsim
不同的点模式。如果simulate
是一个拟合模型,则生成该模型的nsim
模拟实现。若simulate
为点模式列表,则取其为模拟随机模式。
不清楚您想要如何处理您的模型列表。您想要构建一个信封,还是一个信封列表?
- 选项1:您有
kppm
类模型的m
列表。对于每个模型m[[i]]
,您想要构建一个包络e[[i]]
,其中的限制是确定的by simulation from
m[[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)
如果您还需要什么,请说明。