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

R中spatstat点格局空间随机性分析envelope函数报错求解

报错根因

触发Window containing simulated patterns is not a subset of data window报错的直接原因是观测点模式与模拟点模式的分析窗口不统一:

  • 创建coords.ppp_1时手动传入的是覆盖瑞典全域的矩形坐标范围作为窗口,没有绑定瑞典实际国界多边形
  • 后续模拟完全空间随机点时使用的sw是瑞典国界转换得到的不规则多边形窗口,范围小于前述矩形窗口,不满足envelope函数要求的「模拟点窗口必须完全包含于观测点窗口」的校验规则。

原有代码还存在一处逻辑问题:模拟点数量取的是去重前的原始点个数,但实际分析用的是去重后的点集,二者样本量不一致会导致结果偏差。

修正方案

直接将瑞典国界多边形作为观测点模式的窗口,统一分析边界,修正后可运行代码如下:

library(rworldmap)
library(sp)
library(spatstat)
library(maptools)

# 读取并投影瑞典边界
worldmap <- getMap(resolution = "high")
sweden <- worldmap[which(worldmap$SOVEREIGNT == "Sweden"),] 
crs.laea <- CRS("+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
sweden_proj <- spTransform(sweden, crs.laea)

# 转换为spatstat兼容的owin对象,添加snap参数修复微小拓扑裂隙
sw <- as.owin(sweden_proj, snap = 1e-5)

# 观测点坐标
x <- c(669894, 669894, 669894, 671088, 671117, 671117, 671117, 670513, 670513, 670513, 669921, 669310, 669310, 669310, 669303, 629720, 630318, 630925, 630925, 630925)
y <- c(7116684, 7116684, 7116684, 7116706, 7114900, 7114900, 7114900, 7114896, 7114896, 7114896, 7114888, 7115473, 7115473, 7115473, 7116075, 7131172, 7131180, 7131190, 7131190, 7131190)

# 关键修正:创建ppp对象时直接绑定瑞典国界窗口,不再手动设置矩形范围
coords.ppp_1 <- ppp(x, y, window = sw)
# 去除重复点
coords.ppp <- unique(coords.ppp_1)

# 校验:确认所有点都落在研究区窗口内,正常运行应返回TRUE
all(inside.owin(coords.ppp$x, coords.ppp$y, sw))

# 模拟与包络线计算
n <- npoints(coords.ppp) # 取去重后的实际点数量作为模拟样本量
ex <- expression(runifpoint(n, win = sw))

set.seed(1)
res <- envelope(coords.ppp, Gest, nsim = 99, simulate = ex, verbose = FALSE, savefuns = TRUE)
plot(res)
补充说明
  • 如果转换owin时提示多边形拓扑错误,可先运行sweden_proj <- rgeos::gBuffer(sweden_proj, byid=TRUE, width=0)修复边界自相交、裂隙等问题后再做转换
  • 所有基于spatstat的点模式分析都必须保证观测点、模拟点的分析窗口完全一致,手动设置矩形窗口仅适用于研究区本身为矩形的采样场景,针对不规则研究区必须传入实际边界作为窗口,否则分析结果会存在系统性偏差。

内容的提问来源于stack exchange,提问作者ZsReka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:15:15