如何在spatstat中合并多个窗口的多组pcf结果及模拟包络?
在spatstat中合并多窗口PCF结果及模拟包络的解决方案
一、合并PCF曲线(已验证可行的规范方法)
首先确保所有PCF对象的r值网格一致,再对齐后取平均值,最后封装为标准fv对象:
# 假设已有多个pcf结果:pcf1, pcf2, pcf3 # 统一r值网格(可根据需求调整步长或范围) common_r <- seq(0, max(c(pcf1$r, pcf2$r, pcf3$r)), length.out = 100) # 重新采样所有PCF到统一r网格 pcf1_resampled <- predict(pcf1, newdata = data.frame(r = common_r)) pcf2_resampled <- predict(pcf2, newdata = data.frame(r = common_r)) pcf3_resampled <- predict(pcf3, newdata = data.frame(r = common_r)) # 计算平均PCF mean_pcf <- rowMeans(cbind(pcf1_resampled, pcf2_resampled, pcf3_resampled)) # 封装为标准fv对象 merged_pcf <- fv(data.frame(r = common_r, pcf = mean_pcf), argu = "r", valu = "pcf", fmla = ~ r, alim = range(common_r), ylab = "Pair correlation function", desc = "Average PCF across multiple windows")
二、合并模拟包络(解决你遇到的核心问题)
直接对原包络上下界取平均或仅基于合并PCF重新生成包络都是错误的——包络是分位数统计量,正确做法是收集所有窗口的模拟PCF曲线,对每个r值重新计算分位数:
步骤说明
- 重新生成各窗口的模拟包络时,必须设置
savefuns = TRUE以保存所有模拟的PCF曲线(而非仅包络上下界); - 将所有窗口的模拟曲线对齐到统一
r网格; - 对每个
r值,从所有模拟曲线中提取对应值,计算所需分位数(如95%包络取2.5%和97.5%分位数); - 将平均PCF与新包络整合为标准
envelope对象。
代码实现
# 假设每个窗口的envelope对象(已设置savefuns=TRUE):env1, env2, env3 # 统一r值网格 common_r <- seq(0, max(c(env1$r, env2$r, env3$r)), length.out = 100) # 定义函数:重新采样单个窗口的所有模拟PCF曲线 resample_simfuns <- function(env, r_grid) { sims <- lapply(env$simfun, function(f) predict(f, newdata = data.frame(r = r_grid))) do.call(cbind, sims) } # 处理所有窗口的模拟曲线 sim1_resampled <- resample_simfuns(env1, common_r) sim2_resampled <- resample_simfuns(env2, common_r) sim3_resampled <- resample_simfuns(env3, common_r) # 合并所有模拟曲线到一个矩阵 all_simulations <- cbind(sim1_resampled, sim2_resampled, sim3_resampled) # 计算合并后的包络分位数(示例为95%置信区间) lower_env <- apply(all_simulations, 1, quantile, probs = 0.025) upper_env <- apply(all_simulations, 1, quantile, probs = 0.975) # 整合为标准envelope对象 merged_env <- envelope(fit = merged_pcf, fun = NULL, # 使用已计算的平均PCF r = common_r, lower = lower_env, upper = upper_env, observed = merged_pcf$pcf, savefuns = FALSE) # 绘制合并结果 plot(merged_env, main = "Merged PCF with Envelope Across Multiple Windows")
错误方法的原因解释
- 直接平均原包络上下界:分位数的平均不等于平均的分位数,会导致包络统计意义失效;
- 仅基于合并PCF重新生成包络:未利用所有窗口的模拟数据,无法反映多窗口的整体变异,统计推断逻辑不成立。
内容的提问来源于stack exchange,提问作者Yousef Erfanifard
相关产品推荐
相关产品推荐

