如何在Julia中计算样本数组中指定样本值对应的分位数?
在Julia中计算样本值对应的分位数
Statistics.jl的quantile()函数逻辑是给定分位数q,返回样本中对应分位数的数值,而我们需要的是反向操作:给定样本中的某个数值,计算它对应的分位数(即该数值在样本中的累积分布比例)。
实现方法
核心思路是计算该样本值在样本中的累积计数(即小于等于该值的样本数量),再结合总样本数计算分位数,分位数的具体计算方式可根据需求选择不同定义:
- 针对无重复值的已排序样本
samples = collect(1:50) sample_val = 27 # 计算小于等于sample_val的样本数量 count_le = sum(samples .<= sample_val) # 总样本数 n = length(samples) # 方式1:对应Statistics.jl默认的分位数定义(type=6) quantile_type6 = (count_le - 1) / (n - 1) # 方式2:经验累积分布函数(ECDF)的估计值 quantile_ecdf = count_le / n println("分位数(type=6定义):", quantile_type6) # 输出≈0.5306 println("分位数(ECDF):", quantile_ecdf) # 输出0.54
- 针对未排序或有重复值的样本
只需先对样本排序,再按上述步骤计算即可:
using Random # 生成带重复值的未排序样本 samples = shuffle(vcat(collect(1:50), 27, 27)) sample_val = 27 sorted_samples = sort(samples) count_le = sum(sorted_samples .<= sample_val) n = length(samples) quantile_type6 = (count_le - 1) / (n - 1) quantile_ecdf = count_le / n println("分位数(type=6定义):", quantile_type6) println("分位数(ECDF):", quantile_ecdf)
说明
- 分位数的定义有多种,不同定义会导致结果略有差异,可根据业务需求选择:
(count_le - 1)/(n - 1)对应Statistics.jl中quantile()函数默认的type=6定义,适合和该函数的逆运算匹配;count_le/n是经验累积分布函数的直接估计,代表样本中小于等于该值的比例。
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

