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

R ggplot绘制两个累积分布函数显示异常,交点未对齐至0.5的求助

问题原因与修正方案

问题根源

你试图用pnorm(..., sd=0)来表示单个观测值的CDF,但正态分布的标准差不能为0,R中处理sd=0的pnorm时会出现非预期的数值行为,导致两条曲线的交点偏离0.5的位置。单个观测值的CDF本质是阶跃函数:当x < 观测值时,CDF值为0;当x ≥ 观测值时,CDF值为1,在x=观测值处从0跳变到1。

修正后的代码

自定义阶跃函数来绘制观测CDF,替换原代码中红色曲线的pnorm调用:

library("ggplot2")

# 定义观测值的阶跃CDF函数
obs_cdf <- function(x) {
  ifelse(x < 10, 0, 1)
}

ggplot() +
  theme_bw() +
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major.x = element_blank(),
        panel.grid.major.y = element_line(size=0.8),
        panel.grid.minor.y = element_line(size=0.8),
        panel.grid.minor.x = element_blank(),
        panel.background = element_blank()) +
  geom_function(fun = obs_cdf, col="red", size=1) + # 使用自定义阶跃函数
  geom_function(fun = pnorm, col="blue", size=1, args = list(mean = 10, sd = 0.3)) +
  scale_x_continuous(limits = c(3, 17)) +
  scale_y_continuous(limits = c(0, 1)) # 可选:明确y轴范围,更贴合CDF的取值

效果说明

修正后,蓝色预测CDF(mean=10, sd=0.3)在x=10处的取值为0.5,正好与红色阶跃CDF的跳变点对齐,两条曲线的交点会准确落在y=0.5的位置,符合你展示连续排序概率得分计算示例的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:19:04