You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:24:01