如何用Python根据正态分布的均值和标准差确定给定点的四分位数
正态分布中确定数值所属四分位数的Python实现
要搞定这个问题,核心是利用正态分布的累积分布函数(CDF)——它能算出给定数值在分布中的累积概率,也就是有多少比例的数据小于等于这个值。然后根据累积概率落在哪个区间,就能对应到0-3的四分位数:
- 累积概率 ≤ 25% → 返回0(第1四分位组)
- 25% < 累积概率 ≤ 50% → 返回1(第2四分位组)
- 50% < 累积概率 ≤ 75% → 返回2(第3四分位组)
- 累积概率 > 75% → 返回3(第4四分位组)
实现代码
我们可以直接用scipy.stats里的norm.cdf函数来计算CDF,代码如下:
from scipy.stats import norm def get_quantile_group(m, s, val): # 计算给定值的累积概率 cdf_prob = norm.cdf(val, loc=m, scale=s) # 判断所属四分位数组 if cdf_prob <= 0.25: return 0 elif cdf_prob <= 0.5: return 1 elif cdf_prob <= 0.75: return 2 else: return 3
示例测试
拿题目里的例子验证:mu=0.7,sigma=0.1,数值0.75。标准化后这个值对应的Z分数是(0.75-0.7)/0.1=0.5,计算得到累积概率约为69.15%,落在50%-75%区间,所以调用get_quantile_group(0.7, 0.1, 0.75)会返回2。
补充说明
如果没法用scipy,也可以自己用误差函数math.erf实现CDF计算,公式是:
import math def norm_cdf(x, mu, sigma): return 0.5 * (1 + math.erf((x - mu) / (sigma * math.sqrt(2))))
把这个替换掉上面代码里的norm.cdf就行,结果完全一致。
内容的提问来源于stack exchange,提问作者Leon Derczynski
相关产品推荐
相关产品推荐

