基于协变量的点过程建模:R中quadscheme函数的正确使用
以降水为协变量建模火灾爆发:quadscheme与协变量匹配问题解决
错误原因
你遇到的Number of rows in ‘covariates’ does not equal the number of quadrature points错误,核心原因是:
quadscheme生成的求积点包含两部分:100个火灾观测点 + 40个自定义虚拟点,总计140个点- 你传入的
Cov只有40行(对应虚拟点的降水数据),无法覆盖所有140个求积点,导致行数不匹配
正确解决方案
协变量必须为**每一个求积点(观测点+虚拟点)**提供对应的值。由于你的降水数据是稀疏站点数据,需要通过空间插值将其扩展到整个研究区域,再为每个求积点匹配降水值。
修正后的完整代码
library(spatstat) # 1. 构建火灾观测点模式 fire_outbreaks <- data.frame( x = runif(100, min = 0, max = 100), y = runif(100, min = 0, max = 100) ) fire_ppp <- ppp(fire_outbreaks$x, fire_outbreaks$y, owin(c(0, 100), c(0, 100))) # 2. 构建带标记的降水点模式(标记为降水值) precipitation <- data.frame( x = runif(40, min = 0, max = 100), y = runif(40, min = 0, max = 100), precip_mm = runif(40, min = 0, max = 4) ) precip_ppp <- ppp( x = precipitation$x, y = precipitation$y, window = owin(c(0, 100), c(0, 100)), marks = precipitation$precip_mm ) # 3. 创建求积方案(观测点+自定义虚拟点) dummy_ppp <- ppp(precipitation$x, precipitation$y, window = owin(c(0, 100), c(0, 100))) quad <- quadscheme(data = fire_ppp, dummy = dummy_ppp) # 4. 空间插值:将稀疏降水数据扩展为区域连续图像 # 这里使用双线性插值,也可根据需求选择其他方法(如"idw") precip_im <- interpolate(precip_ppp, method = "bilinear") # 5. 为所有求积点匹配降水值 cov_precip <- as.im(quad) %over% precip_im cov_df <- data.frame(precip_mm = cov_precip) # 6. 拟合泊松点过程模型 model <- ppm(quad, ~ precip_mm, family = Poisson()) summary(model)
简化写法
你也可以直接将插值后的降水图像传入ppm,函数会自动提取每个求积点的协变量值,无需手动构建数据框:
# 直接用插值图像作为协变量 model <- ppm(quad, ~ precip_im, family = Poisson())
关键注意事项
- 虚拟点必须转为
ppp格式传入quadscheme,不能直接传列表 - 协变量需覆盖所有求积点:观测点也需要对应降水值,不能只提供虚拟点的
- 插值方法可根据数据特性调整:如降水数据更适合反距离加权(
method="idw"),可替换interpolate中的参数
内容的提问来源于stack exchange,提问作者Alex Monito Nhancololo
相关产品推荐
相关产品推荐

