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

如何绘制均值ECDF并填充其与上下置信区间ECDF间的区域?

解决方案:绘制均值ECDF并填充置信区间ECDF区域

要实现仅展示均值的ECDF曲线,并填充上下置信区间ECDF之间的区域,需要先手动计算三条曲线的ECDF数据,再通过插值对齐x轴点,最后用geom_ribbon实现填充。具体步骤如下:

1. 加载依赖包与准备数据

library(tidyverse)

# 示例数据
mean <- c(-0.3378003,  0.7254329,  0.6568026, -0.1529680,  0.2809831, 
          -0.5420649, 0.7665903, -0.1624082,  0.9636990,  0.5978777)
se <-  c(0.1,0.04,0.01,0.01,0.01,0.06,0.09,0.12,0.05,0.02)

df <- tibble(nodeId =1:10, mean_val = mean, up= mean+se, low = mean-se )

2. 编写ECDF计算函数

自定义函数计算单个变量的ECDF数据,返回排序后的变量值(x)和对应的累积概率(y):

compute_ecdf <- function(vec) {
  sorted_vec <- sort(vec)
  tibble(
    x = sorted_vec,
    y = seq_along(sorted_vec) / length(sorted_vec)
  )
}

# 计算均值、置信区间上下限的ECDF数据
ecdf_mean <- compute_ecdf(df$mean_val)
ecdf_up <- compute_ecdf(df$up)
ecdf_low <- compute_ecdf(df$low)

3. 插值对齐ECDF的x轴点

由于三条ECDF的x轴点是各自变量的排序值,无法直接填充区域,因此需要将所有x值合并排序,再对上下限的ECDF进行插值,确保每个x点都有对应的累积概率:

# 收集所有唯一x值并排序
all_x <- sort(unique(c(ecdf_mean$x, ecdf_up$x, ecdf_low$x)))

# 对上下限ECDF进行阶梯式插值(匹配ECDF的右连续特性)
interp_ecdf <- function(ecdf_data, target_x) {
  approx(ecdf_data$x, ecdf_data$y, xout = target_x, method = "constant", f = 0)$y
}

y_low <- interp_ecdf(ecdf_low, all_x)
y_up <- interp_ecdf(ecdf_up, all_x)

# 构建填充区域的数据框
ribbon_data <- tibble(
  x = all_x,
  ymin = y_low,
  ymax = y_up
)

4. 绘制最终图形

用geom_ribbon填充上下ECDF之间的区域,再用geom_step绘制均值的ECDF曲线:

ggplot() +
  # 填充置信区间ECDF区域(浅蓝色半透明)
  geom_ribbon(data = ribbon_data, aes(x = x, ymin = ymin, ymax = ymax), 
              fill = "lightblue", alpha = 0.3) +
  # 绘制均值ECDF曲线(深蓝色粗线)
  geom_step(data = ecdf_mean, aes(x = x, y = y), color = "darkblue", linewidth = 1) +
  # 添加标签与主题
  labs(x = "数值", y = "累积分布函数(ECDF)", title = "均值的ECDF曲线及置信区间带") +
  theme_minimal()

关键说明

  • 插值时使用method = "constant", f = 0是为了保留ECDF的阶梯状特性(右连续),避免平滑处理破坏原始分布形态。
  • geom_ribbon的alpha参数控制填充区域的透明度,可根据需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:44:58