直方图
直方图(histogram)把一批数值按区间分组,再用相邻矩形显示数据在数轴上的分布。它回答的是“数值集中在哪里、分散到什么程度、哪些范围比较少见”。横轴表示有大小与距离意义的数值;矩形的宽度是区间宽度。在不等宽分组中,面积与频数或频率对应,才能公平比较各组。
把二十个数变成一幅图
设我们记录了二十次排队的等候时间,单位为分钟。以下是为讲解构造的合成数据,已经从小到大排列,不代表实际场所的调查:
直接读这串数,可以知道最短为 1 分钟、最长为 19 分钟;要判断“多数人等了多久”,逐个数字比较就不如分组清楚。先按每 5 分钟一组,把观察范围划成四个箱子:
方括号表示包含端点,圆括号表示不包含端点。例如 5 归入第二组,10 归入第三组。最后一组特意包含右端点 20,使整个范围内的值都有归属。这个约定使各组不重叠,也没有遗漏;若把相邻两组都写成闭区间,恰好等于 5 的观察就可能被数两次。
| 时间区间(分钟) | 归入本组的观察值 | 频数 | 频率 |
|---|---|---|---|
| 1,2,2,3,4,4 | 6 | ||
| 5,6,6,7,8,8,9 | 7 | ||
| 10,11,12,14 | 4 | ||
| 16,18,19 | 3 |
频数是某组包含的观察次数。两个 2 是两次观察,因此都要计数。频率是这一频数除以总观察次数;四组频数之和为 ,频率之和为 1。
读图时先沿横轴找到 5 到 10 分钟,再看对应矩形的高度 7:这表示七次等候落在这个范围内,并不表示有人恰好等了 7 分钟,也不表示平均等候时间为 7 分钟。把前两组相加,得到十三次等候少于 10 分钟,占 。这项结论可以从原始数据、分组表和图中分别核对。
这里四个矩形一样宽,高度就足以比较各组人数。NIST 的统计手册把等宽分组、组内计数列为最常见的直方图构造方式;它还区分了“高度表示频率”和“总面积等于一”的两种归一化。NIST:Histogram
为什么不等组距要看面积
假如我们只关心前十分钟的细节,把后两组合并,分组变成 、、,频数依次为 6、7、7。后两组的人数一样,但第三组覆盖 10 分钟,第二组只覆盖 5 分钟。若都画成高 7 的矩形,第三块的面积就会是第二块的两倍;视觉上占据两倍面积,实际却没有两倍观察。
解决办法是把“每组多少次”换成“每单位宽度多少次”。第三组的频数密度为 次/分钟,第二组为 次/分钟。第三组宽一倍、高一半,两组面积就都等于 7。这里“次/分钟”描述的是等候时间数轴上的计数密度,不是队列每分钟接待多少人的到达率。
为便于比较不同样本量,也可以先除以总次数 20,把矩形面积归一化为频率。设第 组的宽度为 ,频数为 ,总次数为 ,那么频率密度为
除以 的理由就在矩形面积公式里。把第 组的面积记为 ,则
把各组面积相加,宽度逐一消去:
| 区间(分钟) | 宽度 | 频数 | 频率 | 频率密度(每分钟) |
|---|---|---|---|---|
| 5 | 6 | 0.30 | ||
| 5 | 7 | 0.35 | ||
| 10 | 7 | 0.35 |
图中第三块虽然较矮,却与第二块有同样面积 0.35。若问题是“有多少比例落在 10 到 20 分钟”,读取面积;若问题是“哪一段单位时间范围内更密集”,比较高度。R 的官方直方图文档同样把不等宽分组默认画成总面积为一的密度图。R:hist 的 freq、breaks 与 Details
密度的数值可以超过 1。例如把十个观测值全部放在宽度为 0.2 的一个区间里,频率为 1,密度就是 ,面积仍为 。超过 1 的是每单位宽度的高度,并非概率超过 1。
组内位置为什么找不回来了
在第二幅图里,10 到 20 分钟这十分钟被一整块平顶矩形代替。它保存了“共七次”这一事实,却没有保存这七次分别发生在 10、11、12、14、16、18、19 分钟。只看这幅分组图,无法恢复七个原始值。
例如想知道少于 12 分钟的比例。原始数据给出十五次,因此实际样本比例为 。若只留下不等宽直方图,把 10 到 12 分钟的部分面积加到前两组面积上,得到
两个答案不同,原因是部分矩形面积相当于把这组的频率均匀摊在 10 到 20 分钟之间;原始七个值并未均匀分散。完整箱子的面积精确给出这批数据的组频率,箱子内部的部分面积则是分组后的近似。 如果分析必须准确区分 12 分钟前后,应在 12 处设置组界,或直接使用原始数据。
直方图可以作为概率密度的估计图,但这一用法还需要明确数据如何采集,以及这些观察能否代表目标总体。分组作图本身并不要求数据相互独立;把图推广为总体分布的估计,才要考虑抽样机制、依赖关系和样本量等条件。二十次特定时段的等候,不会仅因画成直方图就代表全天、所有日期或所有顾客。
箱宽改变,哪些细节会出现或消失
仍然使用最初的二十个数,把箱宽依次改成 2、5、10 分钟,均从 0 开始分组,并统一用频率密度作纵轴。这样纵轴和面积含义相同,形状才可直接比较。
箱宽 2 时,十组频数为 。例如 包含 2、2、3,密度为 。箱宽 5 时,四组频数为 ;箱宽 10 时,只剩 ,高度为 。前两幅中 18 到 20 分钟附近的局部起伏,在最后一幅里被合并掉了。
细箱保留更多局部差异,也更容易把少数观测的偶然聚集显成峰;粗箱较平稳,却可能把两个不同的聚集区合成一个。单凭一幅图里有两个高柱,不能判断总体一定有两个峰。
箱子从哪里开始也会改变计数。对等宽为 5 的箱子,把组界改成 ,同一批数据的频数变成 。原来边界上的 5 和 10,现在各随新边界改变归组。比较两批数据时,应尽量用同一组边界与同一种纵轴;若一批有 20 次、一批有 200 次,比较频率密度比只比较人数更便于看形状,同时仍应标注各自样本量。
自动分箱与密度估计的研究
大样本很难手工试遍所有箱宽。1979 年,David W. Scott 在《Biometrika》发表 On optimal and data-based histograms,以密度估计的误差为准则研究箱宽选择,并提出利用样本量与标准差、以高斯分布为参照的数据驱动方法。这把“图分得多细”变成了可研究的统计估计问题。Scott,1979,66(3):605–610
常用的 Scott 参考箱宽为 ,其中 是样本标准差。另一个常见选择是 Freedman–Diaconis 箱宽 ,用箱线图中介绍的四分位距替代标准差作为分散尺度。R 提供这些自动选择方法;若数据全相同,或四分位距为零,直接代入会得到零箱宽,软件需要退回其他处理,使用时应查看最终的分组边界。R:Compute the Number of Classes for a Histogram
这些公式给出起点,而不是保证每批数据都有一种唯一正确的分箱。实际阅读时,可以像上图一样比较几个邻近宽度,保留原始数值或点图,并核对重要结论在合理的分箱变化下是否仍然成立。
与其他统计图的分工
条形图通常比较类别,例如不同交通方式的人数;类别之间的条宽不表示数值区间,换个排列顺序也不会改变类别本身。直方图的横轴是一条有度量意义的数轴,不能按柱高把各区间重新排序,否则“相邻”就失去了原来的含义。相邻矩形共用边界,是因为数值区间连续相接,并非因为每组一定都有观察。
箱线图用中位数、四分位数和须压缩分布,便于并排比较多组;直方图能进一步显示聚集、空隙和多峰,但更依赖分箱。想看等候时间随一天中的时刻怎样变化,应保留采集时序并使用折线图或散点图,因为本篇把数据排序、计数以后已经丢失了原来的发生顺序。更多选择见统计图。
参考资料
- NIST/SEMATECH,e-Handbook of Statistical Methods,§1.3.3.14 Histogram:计数、归一化与分布形状。
- R Core Team,hist:Histograms:分组边界、端点约定与不等宽密度。
- R Core Team,nclass:Compute the Number of Classes for a Histogram:自动分组方法及退化数据的处理。
- Scott, D. W.(1979),On optimal and data-based histograms,Biometrika,66(3),605–610。
- OpenStax,Introductory Statistics 2e,§2.2 Histograms, Frequency Polygons, and Time Series Graphs:等宽直方图与频率的入门讲解。