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

如何计算spatstat中Kcross曲线(红虚线与黑实线)间的面积?

计算spatstat中Kcross观测曲线与理论曲线的面积差

问题背景

我正在使用spatstat包运行多类型交叉K函数(Kcross),数据集和绘图脚本如下:

df <- read.csv(file = "trees_rocks.csv")
df.test <- filter(df, Class %in% c("TREE", "ROCK"))

x.range <- range(df.test$coord_x)
y.range <- range(df.test$coord_y)

test.ppp <- ppp(
  df.test$coord_x, df.test$coord_y,
  x.range, y.range, marks = factor(df.test$Class))

plot(envelope(test.ppp, Kcross, nsim = 10), xlim = c(0, 100))

生成的图能展示聚类程度,但我需要更精确的量化指标:如何计算红虚线(理论期望)与黑实线(观测值)之间的面积?

我尝试过auc()函数,但因不清楚无协变量时的用法而受阻。


解决方案

步骤1:保存envelope计算结果

先不直接绘图,将envelope()的输出存储为对象,方便后续提取数据:

env <- envelope(test.ppp, Kcross, nsim = 10, xlim = c(0, 100))

步骤2:提取曲线数据

envelope对象包含了关键数据列:

  • r:距离序列
  • obs:Kcross的观测值
  • theo:Kcross的理论期望值(完全空间随机下的结果)

提取代码:

r_vals <- env$r
obs_vals <- env$obs
theo_vals <- env$theo

步骤3:计算曲线间的面积差

两条曲线间的面积等价于观测值与理论值差值曲线的积分,可以用两种方法实现:

方法1:使用spatstat的auc()函数

直接对差值曲线计算曲线下面积:

# 计算观测值与理论值的差值
diff_vals <- obs_vals - theo_vals
# 计算差值曲线的积分(即两条曲线间的面积)
area <- auc(r_vals, diff_vals)
  • 若差值有正有负,结果为净面积;若需要总面积(忽略正负),先对diff_vals取绝对值:diff_vals <- abs(obs_vals - theo_vals)

方法2:基础R梯形积分

用梯形法手动计算积分,原理是将曲线分割为多个梯形求和:

diff_vals <- obs_vals - theo_vals
# 梯形积分公式
area <- sum(diff(r_vals) * (head(diff_vals, -1) + tail(diff_vals, -1)) / 2)

步骤4:可视化验证(可选)

可以绘制差值曲线并填充面积,验证计算结果的合理性:

plot(r_vals, diff_vals, type = "l", xlab = "距离", ylab = "观测Kcross - 理论Kcross")
# 填充差值曲线与x轴之间的区域
polygon(c(r_vals, rev(r_vals)), c(diff_vals, rep(0, length(diff_vals))), 
        col = rgb(0,0,1,0.2), border = NA)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:05:16