R语言绘制含绝对值Z值的分布图空白无上下界问题如何解决
代码问题排查与修正
你当前的代码存在以下几处问题,是导致绘图空白的核心原因:
- 阈值定义错误:你将上下阈值
z.lbscore_d、z.ubscore_d都设为2,后续筛选条件range.d > z.lbscore_d & range.d < z.ubscore_d没有符合要求的取值,自然没有内容可绘制。如果要匹配|Z| > 2的统计要求,应该设置阈值边界为-2和2,分别绘制左右两侧的尾部区域。 - 语法错误:
polygon代码行存在括号不匹配的问题,代码里的转义引号"也需要替换为正常的双引号,同时polygon的参数顺序错误,需要先传入x坐标向量,再传入y坐标向量才能正常绘制。 - 坐标轴缺失:你在
plot函数中设置了axes=FALSE,但后续只添加了x轴,未生成y轴。 - 概率计算逻辑错误:原代码计算的是Z在两个相同取值之间的概率,结果必然为0,不符合
|Z|>2的概率计算要求。
下面是修正后的可运行代码:
mu1 = 0 sigma1 = 1 # 匹配|Z|>2的要求设置阈值 z.cutoff <- 2 # 绘制正态分布曲线 range.d = seq(mu1-5*sigma1, mu1 + 5*sigma1, 0.01) y.d = dnorm(range.d, mu1, sigma1) plot(range.d, y.d, type='l', ylim=c(0,max(y.d)+0.01)) # 分别绘制左侧|Z|<-2和右侧|Z|>2的红色区域 # 左侧尾部 d_left <- range.d < -z.cutoff polygon(c(min(range.d), range.d[d_left], -z.cutoff), c(0, y.d[d_left], 0), col = "red") # 右侧尾部 d_right <- range.d > z.cutoff polygon(c(z.cutoff, range.d[d_right], max(range.d)), c(0, y.d[d_right], 0), col = "red") # 计算|Z|>2的概率并展示 area <- 1 - (pnorm(z.cutoff, mu1, sigma1) - pnorm(-z.cutoff, mu1, sigma1)) result <- paste("P(|Z| > ", z.cutoff, ") =", signif(area, digits = 4)) mtext(result, side = 3, line = 0.5)
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

