R语言:已知标准正态分布CDF的Y值0.95,求解对应X值
求解标准正态分布CDF的逆函数值(95%分位数)
嘿,你要解决的其实就是求标准正态分布的95%分位数——也就是找到x使得标准正态累积分布函数在x处的取值等于0.95。这里有两种常用的方法,我给你详细说说:
方法1:直接用R内置的分位数函数(最推荐)
因为你定义的dist(x)本质就是pnorm(x, 0, 1)(标准正态CDF),而R里刚好有它的反函数qnorm(),专门用来计算分位数。直接运行下面的代码就能得到结果:
qnorm(0.95)
运行后会返回约1.644854,这就是你要的x值。这个方法最简洁,而且R的内置函数经过了优化,精度和效率都有保障。
方法2:用数值求根函数手动求解
如果你想手动实现解方程的过程,可以用R的uniroot()函数来找函数的根。步骤如下:
- 先构造一个目标函数,把方程
0.95 = dist(x)转化为找dist(x) - 0.95 = 0的根:
dist <- function(x) pnorm(x, 0, 1) # 构造待求根的函数 target_func <- function(x) dist(x) - 0.95
- 调用
uniroot(),指定一个合理的搜索区间(因为标准正态95%分位数肯定在0到5之间,这个区间足够覆盖解):
root_result <- uniroot(target_func, interval = c(0, 5)) # 提取根的值 root_result$root
运行后同样会得到约1.644854的结果。
简单总结一下:优先用qnorm(),这是最直接的方式;如果想理解数值求解的过程,再用uniroot()手动实现。
内容的提问来源于stack exchange,提问作者Codey
相关产品推荐
相关产品推荐

