四分位数算法
终极指南
你知道计算四分位数至少有 9 种不同的方法吗?我们将详细解读 R 和 Python 使用的 Hyndman & Fan 分类系统。
引言:「唯一正确答案」的误区
如果你让五位统计学家计算一个小型数据集的四分位数,你可能会得到五个不同的答案。而技术上来说,他们可能都是正确的。
1996 年,统计学家 Rob J. Hyndman 和 Yanan Fan
发表了一篇开创性论文,题为《统计软件包中的样本分位数》,他们在论文中对软件使用的 9
种最常见方法进行了分类。这个分类现已成为 R
编程语言的标准(type=1 到 type=9)。
为什么这很重要?
如果你正在复制一项研究或验证作业,使用错误的「类型」可能会导致「错误」答案,即使你的数学计算是正确的。
9 种分位数类型
这些方法通常分为两组:离散方法(Type 1-3)和 连续方法(Type 4-9)。
离散方法(不连续)
这些方法始终返回原始数据集中的值(或中点)。它们通常用于小样本或序数数据。
- Type 1(经验分布函数的逆):一些旧软件使用。它只取特定秩的值。
- Type 2(类似 Type 1 但在不连续处取平均):在某些 SAS 程序中使用。
- Type 3(最近偶数次序统计量):SAS 的默认值。它四舍五入到最近的秩。
连续方法(线性插值)
这些方法在数据点之间进行插值,意味着结果可能是一个不存在于数据集中的小数。
| 类型 | 描述 | 软件使用 |
|---|---|---|
| Type 4 | 经验分布函数的线性插值。 | 很少作为默认值使用。 |
| Type 5 | 分段线性函数。 | 水文学应用。 |
| Type 6 | Weibull 绘图位置(N+1 基础)。 | Minitab、SPSS、Excel (QUARTILE.EXC)。 |
| Type 7 | 线性插值(N-1 基础)。 | R 默认、Python (NumPy)、Excel (QUARTILE.INC)。 |
| Type 8 | 近似中位数无偏。 | Hyndman & Fan 推荐用于大多数用途。 |
| Type 9 | 近似无偏(正态分布)。 | 在某些金融建模中使用。 |
最常用的方法
虽然有 9 种类型,但实际上你通常只会遇到三种。
Type 7(R 默认、Excel INC)
现代数据科学的黄金标准。它对数据进行线性插值。
h = (n-1)*p + 1
Type 6(Excel EXC、Minitab)
当你想为小样本扩展范围时常用(排除端点)。
h = (n+1)*p
Tukey 铰链(EDA)
严格来说不是 9 种类型之一。用于手工计算和箱线图。它涉及按中位数分割数据。
代码实现
R 语言中
data <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# 比较所有 9 种类型
sapply(1:9, function(type) {
quantile(data, probs = c(0.25, 0.75), type = type)
}) Python 中(NumPy)
import numpy as np
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# method='linear' 对应 R 的 type 7
q1 = np.percentile(data, 25, method='linear')
q3 = np.percentile(data, 75, method='linear')
# 其他方法包括:'lower'、'higher'、'midpoint'、'nearest' Excel 中
' Type 7 (包含端点)
=QUARTILE.INC(A1:A10, 1) ' Q1
=QUARTILE.INC(A1:A10, 3) ' Q3
' Type 6 (排除端点)
=QUARTILE.EXC(A1:A10, 1) ' Q1
=QUARTILE.EXC(A1:A10, 3) ' Q3 你应该使用哪种方法?
对于学生
查看你的教科书!如果你在进行手工计算,你几乎肯定在使用 Tukey 铰链(包含型)。使用我们的 Tukey 计算器。
对于数据科学家
坚持使用 Type 7。它是 R、Python(NumPy、Pandas)和 Scikit-learn 的标准。对于连续数据,它具有最好的数学特性。
对于商业分析师
如果你在 Excel 中工作,使用 QUARTILE.INC(即 Type 7)。如果可能,避免使用旧版 QUARTILE 函数。
对于医学/社会科学研究人员
如果你使用 SPSS 或 SAS,请注意它们的默认设置可能与 R/Python 不同。始终在论文中记录你使用的方法。