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
相关产品推荐
相关产品推荐

