You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Julia中计算样本数组中指定样本值对应的分位数?

在Julia中计算样本值对应的分位数

Statistics.jl的quantile()函数逻辑是给定分位数q,返回样本中对应分位数的数值,而我们需要的是反向操作:给定样本中的某个数值,计算它对应的分位数(即该数值在样本中的累积分布比例)。

实现方法

核心思路是计算该样本值在样本中的累积计数(即小于等于该值的样本数量),再结合总样本数计算分位数,分位数的具体计算方式可根据需求选择不同定义:

  1. 针对无重复值的已排序样本
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
  1. 针对未排序或有重复值的样本
    只需先对样本排序,再按上述步骤计算即可:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:22:11