本文介绍了分位数的几种不同的定义,并解释了为何不同的软件计算分位数结果都有差异的原因,通过最权威的文献说明,追本溯源。
当 MSTATA 结果和 SPSS 冲突的时候,请放心选择 MSTATA 的结果。和其他快速开发的统计平台不同,MSTATA 是严肃的品牌统计软件,开发速度较慢,对微小的细节都非常较真,每个模块都经过严格peer review 之后才会发布,对每个统计原理都经过深思熟虑和大量的验证,绝不是那种几个月版本号就从 0.1 到 5.X 的搬运工统计平台。
以前只有 SPSS 可用的年代,大家没有什么可选,也就没有多少争议,现在 SPSS、R、SAS、Stata 等等软件太多了,经常碰到统计结果不一样的情况,复杂模型结果不一样可以理解,但简单计算个中位数,计算个 Q1,Q2,Q3,Q4 结果都不一样,着实令人抓狂。
统计学在发展,往往在我们认为最基础,最应该这样的时候,事实不是这样,我们会发现我们在学校学习的,教科书里讲的,到了实际应用的时候,是错的,或者是过时的。就像我们在学校学习的内科学,外科学课本,等毕业的时候,很多都过时了,真正在工作中需要的,是学习各种指南,学习各种最新的文献。
中位数的计算,或者是分位数的计算,我们都想当然的以为,太简单,太基础,毫无讨论价值,但是等实际应用的时候才发现,这是一门很深的理论,不深入学习,了解整个统计学历史,根本就无法解释统计结果五花八门的差异。
在小样本情况下,尤其是 10 个以内的样本,有时候我们惊奇的发现,SPSS 计算的中位生存期,是 10 个月,而 R 计算的中位生存期,是 18 个月,这是疯了吗?很多同学开始怀疑人生,束手无策。
我们在课堂里学的统计学课本只会告诉你,最基础的分位数的定义和计算方法,绝不会告诉你分位数的定义有 9 种之多,而且充满争议,且没有公认的标准!而SPSS 默认用的统计方法,在目前的年代并不是统计学家首选推荐的方法!
追根溯源,SPSS 提供的计算分位数的方法,有待商榷,而 SAS 和 R 则可以选择 7-9 种计算分位数的方法,而 R 默认的方法,和 SPSS 不一致。
SAS 和 R 选用的这 7-9 种方法,主要来自这个领域最著名的一篇论文(已被引用 1384 次):
Hyndman, R. J. and Fan, Y. (1996) Sample quantiles in statistical packages, American Statistician 50, 361--365. 10.2307/2684934.
在统计学中,样本分位数是一种非常有用的概念,它帮助我们了解数据的分布情况,比如说我们可以通过它来找出中位数(也就是排在中间的数),或者其他任何位置的数值。但是,要准确地计算出这些分位数,事情就变得有些复杂了。
首先,假设你有一组数据,这组数据包含了N个观察值,并且这些值已经从小到大排好了序,我们用x[1], x[2], ..., x[N]来表示。现在,如果你对某个特定的分位数p感兴趣(这里的p是一个介于0和1之间的数,比如0.5代表中位数,0.25代表第一四分位数,等等),你可能会想知道这个分位数在你的数据集中对应哪个值。
这里有个直观的方法:找到第j个数据点,其中j是根据你感兴趣的分位数p计算出来的,具体来说就是N乘以p然后向下取整。例如,如果你有10个数据点(N=10),而你想估计第64%的分位数(p=0.64),那么j就是10乘以0.64等于6.4,向下取整后得到6。这意味着第六个数据点(x[6])及其附近的值是估计这个分位数的合理选择。
但是,事情并没有那么简单。因为在统计软件包中,对于如何从这些数据点中精确计算分位数,有九种不同的定义。Hyndman和Fan在他们的研究中提到,这九种定义大致可以分为两大类:三种是基于四舍五入的方法,而另外六种则是基于线性插值的。
线性插值基本上是说,当我们的p点不恰好落在某个具体的数据点上时,我们可以通过在两个相邻数据点之间“画一条直线”,根据这条直线来估算p点的值。比如,在我们的例子中,64%的分位数位于第六个和第七个数据点之间,我们就可以通过在这两点之间插值来得到一个更精确的估计。
Hyndman和Fan进一步说明,这些方法通常会涉及到一个插值参数λ,这个参数帮助我们确定在相邻数据点之间的确切位置。同时,每种定义方法还会有一个叫做m的参数,这个参数影响着我们如何根据p值和样本大小N来选择相邻的数据点。
有一个非常直观的方法来比较这些不同的计算方法,那就是在同一个图表中展示它们。举个例子,我们知道在统计软件中,不同的软件可能会采用不同的默认方法来计算分位数。比如,SAS软件默认使用的是所谓的“type=2”方法来计算样本分位数,而R软件则默认采用“type=7”方法。如果我们在同一个图上展示这两种方法计算出来的分位数,就可以直观地看出它们之间的差异。
具体来说,SAS的默认方法总是会返回某个具体的数据值,或者是两个相邻数据值的平均值,这意味着它更倾向于返回数据集中实际出现过的数值。而R的默认方法则可以返回数据范围内的任何一个值,这表明它在计算分位数时更加灵活,不一定非要是数据集中已有的数值。
通过这样的对比,我们可以更清楚地看到,即使是在处理同一组数据时,不同的分位数计算方法也可能会导致非常不同的结果。这种差异来源于它们背后的数学逻辑和计算原理,这也是为什么在选择分位数计算方法时,需要根据具体的应用场景和需求来做出决定。
MSTATA 采用 R 的默认算法,选择的是 type = 7 的计算方法,和下面的 R 代码相同:
quantile(numbers, probs = c(0.25, 0.5, 0.75, 1),type = 7)
或者:
quantile(numbers, probs = c(0.25, 0.5, 0.75, 1))
因此,当 MSTATA 结果和 SPSS 冲突的时候,请放心选择 MSTATA 的结果。
和其他快速开发的统计平台不同,MSTATA是严肃的品牌统计软件,开发速度较慢,对微小的细节都非常较真,每个模块都经过 peer review 之后才会发布,对每个统计细节都经过深思熟虑和大量的验证,绝不是那种几个月版本号就从 0.1 到 5.X 的搬运工统计平台。
图 1:MSTATA 的计算结果截图
MSTATA 可以一键生成这样的表格,请访问 www.mstata.com 主页,进入软件,选择 描述统计 - 基线表(全能版),功能为免费。