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

使用R语言ggplot2绘制N(0,1)的CDF与样本ECDF并求二者最大距离

R语言实现ECDF/CDF绘制及分布最大距离计算

第一步:加载依赖包并生成样本数据

首先加载绘图需要的ggplot2包,生成指定的样本数据,这里加set.seed保证运行结果可复现,不需要可以删除:

library(ggplot2)
# 固定随机种子,结果可复现
set.seed(123)
x <- rnorm(50, 1, 1)

第二步:计算两个分布的最大距离

你需要的两个分布的最大垂直距离就是Kolmogorov-Smirnov(KS)检验的统计量,直接调用内置函数计算即可:

# 对比样本分布与标准正态N(0,1)的KS检验
ks_res <- ks.test(x, "pnorm", mean = 0, sd = 1)
max_dist <- ks_res$statistic
# 输出最大距离,保留4位小数
cat("两个分布的最大距离:", round(max_dist, 4), "\n")

如果需要手动验证结果,可以用以下代码,输出结果和KS检验返回的统计量完全一致:

# 手动计算验证最大距离
sample_ecdf <- ecdf(x)(x)
theory_cdf <- pnorm(x, 0, 1)
manual_max <- max(abs(sample_ecdf - theory_cdf))

第三步:ggplot2绘制对比图

直接用ggplot2的内置图层分别绘制样本ECDF和理论CDF,用颜色和线型区分:

ggplot(data.frame(val = x), aes(x = val)) +
  # 绘制样本ECDF阶梯曲线
  stat_ecdf(geom = "step", aes(color = "样本ECDF"), linewidth = 1) +
  # 绘制标准正态理论CDF虚线
  stat_function(fun = pnorm, args = list(mean = 0, sd = 1),
                aes(color = "标准正态CDF"), linewidth = 1, linetype = 2) +
  # 标签设置
  labs(
    x = "变量取值",
    y = "累积概率",
    color = "分布类型",
    title = paste0("分布对比(最大距离:", round(max_dist, 4), ")")
  ) +
  # 配色和主题调整
  scale_color_manual(values = c("样本ECDF" = "darkblue", "标准正态CDF" = "firebrick")) +
  theme_bw()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:36:05