如何在spatstat中基于拟合模型在非重叠窗口模拟点过程?
基于spatstat在新窗口模拟拟合好的空间点过程模型
需求背景
我有两个来自不同空间过程的空间数据集,二者坐标系统尺度一致,强度单位可迁移,但尺寸不同且可能不重叠。目标是:
- 用
spatstat的ppm函数拟合第一个数据集(data1)的空间模型 - 基于该模型参数,在第二个数据集(data2)的坐标窗口内进行点过程模拟
最初尝试用rmhcontrol的expand参数传入data2的窗口,但该参数的作用是先在扩展域模拟再裁剪回原模型窗口(即data1的窗口),无法实现直接在data2窗口模拟的需求,且代码调用还存在报错。
解决方案:修改拟合模型的窗口属性
ppm拟合得到的模型对象包含原数据的窗口信息,直接修改这个窗口属性,就能让rmh在新窗口(data2的窗口)内进行模拟。具体步骤如下:
1. 准备测试数据
# 创建数据集1 x <- rnorm(50) y <- rnorm(50) data1 <- ppp(x = x, y = y, marks = factor(sample(c("A", "B"), size = 50, replace = TRUE)), window = owin(range(x), range(y))) # 创建数据集2(窗口与data1不重叠) x <- rnorm(20, mean = 10) y <- rnorm(20, mean = 10) data2 <- ppp(x = x, y = y, marks = factor(sample(c("A", "B"), size = 20, replace = TRUE)), window = owin(range(x), range(y)))
2. 拟合原模型
# 拟合data1的空间模型 m1 <- ppm(data1 ~ marks)
3. 修改模型的窗口为data2的窗口
直接替换模型对象的window属性:
# 将模型的窗口替换为data2的窗口 m1$window <- as.owin(data2)
4. 设置模拟起始点并执行模拟
因为新窗口和原窗口不重叠,需要在新窗口内设置起始点:
# 设置新窗口内的起始点(按标记指定数量) s2 <- rmhstart(n.start = c(5, 5), window = as.owin(data2)) # 配置模拟控制参数 c2 <- rmhcontrol(p = 1, fixall = TRUE) # 执行模拟 sim_results <- rmh(model = m1, control = c2, start = s2, nsim = 2)
注意事项
- 如果模型包含空间协变量(如趋势面、外部协变量),需要确保协变量在新窗口内有完整的取值定义,否则模拟会报错。
- 对于复杂交互模型(如Gibbs点过程、成对交互模型等),该方法依然适用,只要起始点位于新窗口内,
rmh会自动在新窗口内执行Metropolis-Hastings抽样。
内容的提问来源于stack exchange,提问作者epurdom
相关产品推荐
相关产品推荐

