13.4 直方图的绘制
简单而言,绘制直方图的基本步骤为:
选择区间数:根据数据的范围和分布情况,选择合适的区间数 \(K\)。
计算区间宽度:根据数据的最大值和最小值,计算每个区间的宽度 \(h\)。
统计频数:统计每个区间内的数据点数量,得到频数 \(f_k\)。
绘制直方图:使用绘图工具将频数、频率或密度绘制成直方图,横轴表示区间,纵轴表示频数、频率或密度。
下面做详细介绍。
假设我们有一组数据 \(\{x_1, x_2, \ldots, x_N\}\),绘制直方图的主要步骤如下: >Step 1: 确定区间总数(K)
将数据划分为 \(K\) 个区间。常见的选择区间总数的方法有:
经验法则:通常取 \(K = 10\) 或 \(K=20\)。
斯特金斯法则(Sturges’ Rule)
\[K = \lceil \log_2 N + 1 \rceil\]
其中,\(\lceil z \rceil\) 表示对 \(z\) 向上取整。
费根纳法则(Freedman-Diaconis Rule)
\[K = \lceil \frac{2 \cdot IQR \cdot N^{-\frac{1}{3}}}{h} \rceil\]
其中,\(IQR\) 为四分位距,\(h\) 为区间宽度。
相机调整法则(Rice Rule) 在 Stata 中,区间总数 \(K\) 的选取与样本数 \(N\) 有关:
\[K = \min \left\{\sqrt{N}, \frac{10 \ln(N)}{\ln(10)}\right\}\]
该方法结合平方根法则和对数法则,适用于不同规模的数据集。当 \(N<784\) 时,可直接采用 \(\sqrt{N}\) 快速计算。
Step 2: 确定区间宽度
区间宽度 \(h\) 根据数据的范围和区间总数 \(K\) 确定: \[
h = \frac{\max(x) - \min(x)}{K}
\]
Step 3: 确定区间边界
设数据的最小值为 \(x_{\min}\),最大值为 \(x_{\max}\),则区间的边界可以表示为:
\[
b_k = x_{\min} + (k-1) \cdot h \quad \text{for } k = 1, 2, \ldots, K+1
\]
每个区间为 \([b_k, b_{k+1})\),最后一个区间为 \([b_K, b_{K+1}]\)。
Step 4: 统计每个区间的观察值个数
统计每个区间内的观察值个数,即每个区间的频数 \(f_k\):
\[
f_k = \sum_{j=1}^{N} I(b_k \leq x_j < b_{k+1}) \quad \text{for } k = 1, 2, \ldots, K
\]
其中 \(I(\cdot)\) 为指示函数,当条件为真时,取值为 \(1\),否则取值为 \(0\)。
Step 5: 绘制直方图
绘制直方图时,将每个区间的频数 \(f_k\) 作为柱状图的高度。对于区间 \([b_k, b_{k+1})\),其对应的柱状图高度为 \(f_k\),宽度为 \(h\)。
当然,也可以根据需要用频率或密度来绘制直方图。