如何为spatstat包的mppm对象绘制envelope包络图
问题根源
你报错的核心原因是提取envelope对象的语法错误:EE1是hyperframe类型,使用单括号[n]提取的仍然是只有1列的hyperframe,不是envelope类对象,需要用双括号[[n]]提取超框里的实际元素。
修正后完整代码
# 拟合模型部分(和原有逻辑一致) data <- listof(NMJ1,NMJ2,NMJ3) data <- hyperframe(X=1:3, Points=data) model <- mppm(Points ~ marks*sqrt(x^2+y^2), data) # 校正多重检验的显著性水平、确定模拟次数 gamma <- 1 - 0.95^(1/3) nsims <- round(1/gamma - 1) # 从mppm模型生成模拟样本 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)) # 逐组生成envelope,必须加savefuns=TRUE参数保证后续pool可正常计算 EE1 <- with(Hplus, envelope(Points, Kcross.inhom, nsim = nsims, simulate = Sims, savefuns = TRUE)) # 提取每个envelope对象后pool,用双括号提取超框元素 pooled_env <- pool(EE1[[1]], EE1[[2]], EE1[[3]]) # 直接绘制合并后的包络图 plot(pooled_env, main = "合并Kcross.inhom包络对比")
注意事项
- 如果不需要严格的全局显著性校验,只做可视化对比,也可以直接计算3组原始数据的Kcross.inhom值,和合并包络的上下界叠加绘制,不需要调用
pool函数 - 如果需要在图上同时标注3组原始数据的统计量曲线,可以在
plot(pooled_env)后用lines()函数分别叠加3组的计算结果
内容的提问来源于stack exchange,提问作者Camille Gontier
相关产品推荐
相关产品推荐

