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

如何用spatstat的kppm获取LGCP模型scale和var参数的置信区间

获取LGCP模型协方差参数(scale/var)的置信区间

问题背景

使用spatstat包的kppm()拟合对数高斯Cox过程(LGCP)模型时,调用confint()仅能返回固定效应(如Intercept、协变量系数)的置信区间,无法获取协方差参数scale和var的区间。示例代码:

library(spatstat)
mod <- kppm(redwood ~ x, "LGCP", model = "matern", nu = 0.5)
confint(mod)

返回结果仅包含Intercept和x的系数区间,缺失scale和var的置信区间。

你尝试过参数自助法模拟获取区间,但对合理性存疑且大数据下耗时过长:

sim_pp <- simulate(mod, nsim = 200)

mod_sim <- lapply(sim_pp, function(Y){
  kppm (Y ~ x, "LGCP", model = "matern", nu = 0.5)
})

cov_pars <- lapply(mod_sim, function(X){
  var <- X[["par"]][1]
  scale <- X[["par"]][2]
  return(data.frame(Var = var, Scale = scale))
})

cov_pars <- Reduce(rbind, cov_pars)

var_CI <- round(quantile(cov_pars$Var, probs = c(0.025, 0.975)), 6)
scale_CI <- round(quantile(cov_pars$Scale, probs = c(0.025, 0.975)), 6)

可行解决方案

1. 渐近正态近似法(最快)

利用模型的渐近方差-协方差矩阵,基于正态分布假设计算置信区间,大样本下可靠:

# 获取包含所有参数的方差-协方差矩阵
vcov_full <- vcov(mod, type = "vcov")
# 查看所有参数的名称及顺序
print(names(coef(mod)))
# 提取协方差参数的索引(根据实际输出调整)
cov_par_idx <- which(names(coef(mod)) %in% c("var", "scale"))
# 计算95%置信区间
cov_pars_ci <- coef(mod)[cov_par_idx] + qnorm(c(0.025, 0.975)) %o% sqrt(diag(vcov_full)[cov_par_idx])
colnames(cov_pars_ci) <- c("2.5%", "97.5%")
print(cov_pars_ci)

注意:小样本下正态假设可能不成立,结果偏差较大。

2. 优化参数自助法

你的模拟方法本身是合理的(参数自助法),可通过并行计算大幅提速:

library(parallel)
# 使用除1个核心外的所有CPU核心
n_cores <- detectCores() - 1
# 并行拟合模拟数据集
sim_pp <- simulate(mod, nsim = 100) # 可根据精度需求调整模拟次数
mod_sim <- mclapply(sim_pp, function(Y){
  kppm(Y ~ x, "LGCP", model = "matern", nu = 0.5)
}, mc.cores = n_cores)
# 提取协方差参数并计算分位数区间
cov_pars <- do.call(rbind, lapply(mod_sim, function(X){
  data.frame(Var = X[["par"]]["var"], Scale = X[["par"]]["scale"])
}))
var_CI <- round(quantile(cov_pars$Var, c(0.025, 0.975)), 6)
scale_CI <- round(quantile(cov_pars$Scale, c(0.025, 0.975)), 6)

合理性说明:参数自助法基于原模型正确设定的假设,若原模型拟合良好,区间可靠性高;若模型拟合差,结果不可靠。

3. 剖面似然法(最稳健)

剖面似然法不依赖正态假设,结果更稳健,spatstat的profile.plppm()支持此功能:

# 计算var参数的剖面似然并获取置信区间
prof_var <- profile.plppm(mod, which = "var")
ci_var <- confint(prof_var)

# 计算scale参数的剖面似然并获取置信区间
prof_scale <- profile.plppm(mod, which = "scale")
ci_scale <- confint(prof_scale)

print("var的95%置信区间:")
print(ci_var)
print("scale的95%置信区间:")
print(ci_scale)

优势:无需正态假设,对小样本更友好;计算量通常介于渐近法和自助法之间。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:20:59