箱形图(Box Plot),又称盒须图,是一种强大的数据可视化工具,它能以简洁的形式展示数据的分布特征、中心趋势、离散程度以及异常值。在统计分析中,尤其是在探索性数据分析(EDA)阶段,箱形图是理解数据结构、发现潜在问题(如异常值)和比较不同组别差异的首选方法之一。Stata作为一款功能强大的统计软件,提供了便捷的命令来生成和解读箱形图。本指南将深入探讨如何在Stata中创建箱形图,并详细解读其各个组成部分,从而帮助您从数据分布中提取有价值的信息,并有效识别异常值。

1. 理解箱形图的基本构成

在深入Stata操作之前,我们首先需要理解箱形图的数学和视觉含义。一个标准的箱形图由以下几个关键部分组成:

  • 箱体(Box):箱体的下边界是第一四分位数(Q1),上边界是第三四分位数(Q3)。箱体的中间有一条线,代表中位数(Q2或Median)。箱体的高度(Q3 - Q1)称为四分位距(IQR),它衡量了中间50%数据的离散程度。
  • 须(Whiskers):从箱体延伸出的两条线。通常,须的末端被定义为:
    • 下须:从Q1向下延伸,末端是下限,即 Q1 - 1.5 * IQR。
    • 上须:从Q3向上延伸,末端是上限,即 Q3 + 1.5 * IQR。
    • 须的末端代表了数据的正常范围。落在须之外的数据点通常被视为潜在的异常值。
  • 异常值(Outliers):任何落在须之外的数据点。在Stata的默认箱形图中,异常值通常用单独的点(如圆点或星号)表示。有时,异常值还会被进一步分类为温和异常值(在1.5倍IQR到3倍IQR之间)和极端异常值(超过3倍IQR),但Stata默认将所有须外的点都视为异常值。

重要提示:1.5倍IQR是一个经验法则,由统计学家John Tukey提出。它并非绝对标准,但在大多数情况下能有效识别出与数据主体分布显著不同的点。

2. 在Stata中创建箱形图

Stata提供了多种创建箱形图的命令,最常用的是 graph box 和 twoway box。我们将通过一个具体的例子来演示。

2.1 准备数据

我们使用Stata自带的 auto.dta 数据集,该数据集包含1978年74款汽车的详细信息。我们将分析汽车价格(price)的分布。

sysuse auto, clear

2.2 基本箱形图:graph box

graph box 是创建箱形图最直接的命令。

命令语法:

graph box varlist [if] [in] [weight] [, options]

示例:绘制汽车价格的箱形图。

graph box price

输出解读:

  • 箱体:显示了价格的Q1、中位数和Q3。
  • 须:从箱体延伸出的线,末端是 Q1 - 1.5*IQR 和 Q3 + 1.5*IQR。
  • 异常值:在须之外的点。对于 price,你会看到几个点位于上须之上,这些就是价格较高的汽车,可能被视为异常值。

2.3 分组箱形图:graph box 与 over() 选项

箱形图的强大之处在于比较不同组别的分布。我们可以使用 over() 选项按类别变量(如 foreign,国产车 vs 进口车)分组绘制箱形图。

示例:比较国产车和进口车的价格分布。

graph box price, over(foreign, label(1 "国产车" 2 "进口车")) title("国产车与进口车价格分布比较")

输出解读:

  • 你会得到两个并排的箱形图,分别代表国产车和进口车。
  • 通过比较两个箱体的位置、高度(IQR)和须的长度,可以直观判断:
    • 中心趋势:哪个组的中位数更高?(进口车中位数明显更高)
    • 离散程度:哪个组的价格波动更大?(进口车的箱体更长,IQR更大)
    • 异常值:哪个组有更多或更极端的异常值?(进口车可能有更多高价异常值)

2.4 使用 twoway box 创建更灵活的箱形图

twoway 是Stata的图形框架,允许叠加多种图形类型。twoway box 提供了更多自定义选项。

命令语法:

twoway (box varlist, options) [, global_options]

示例:创建一个更美观的分组箱形图,并添加标签。

twoway (box price if foreign==0, label(国产车)) (box price if foreign==1, label(进口车)), ///
       title("汽车价格分布对比") ytitle("价格") legend(order(1 2))

输出解读:

  • 与 graph box 类似,但 twoway 语法更灵活,便于与其他图形(如散点图、线图)叠加。
  • label() 选项可以为每个箱形图指定图例标签。

3. 深入解读箱形图:从分布到异常值

生成箱形图后,如何解读其传递的信息是关键。我们以 auto 数据集中的 price 变量为例,结合统计命令进行详细分析。

3.1 计算关键统计量

在查看图形之前,我们可以先用 summarize 命令获取数值摘要,以便与图形对应。

summarize price, detail

输出示例:

    Price
    Percentiles      Smallest
 1%        3291           3291
 5%        3748           3291
10%        3995           3291       Obs                  74
25%        4195           3291       Sum of Wgt.          74
50%        5000.5                     Mean           6165.257
                        Largest       Std. Dev.      2949.496
75%        6342           15906
90%        8359           13466       Variance        8699527
95%       10372           14500       Skewness       1.653434
99%       15906           15906       Kurtosis       4.819096

结合图形解读:

  • 箱体位置:箱体的中间线(中位数)约在5000.5,与 summarize 输出的 50% 分位数一致。箱体的下边界(Q1)约在4195,上边界(Q3)约在6342。
  • 离散程度:箱体高度(IQR) = Q3 - Q1 = 6342 - 4195 = 2147。这表示中间50%的汽车价格分布在约2147美元的范围内。
  • 数据偏态:如果中位数线在箱体中偏下,说明数据右偏(长尾在右侧);如果偏上,则左偏。对于 price,中位数(5000.5)略低于箱体中心((4195+6342)/2 ≈ 5268.5),表明价格分布略微右偏,这与 summarize 中的 Skewness 为正(1.65)一致。

3.2 识别与分析异常值

异常值是箱形图的核心价值之一。在 graph box price 的输出中,你会看到上须末端大约在 Q3 + 1.5*IQR = 6342 + 1.5*2147 ≈ 6342 + 3220.5 = 9562.5。因此,价格高于约9562.5的汽车被标记为异常值。

如何进一步分析这些异常值?

  1. 定位异常值:使用 list 命令找出这些汽车。

    list make price if price > 9562.5
    

    输出示例: “`

     make    price
    
    1. Buick Riviera 10372
    2. Cad. Eldorado 13466
    3. Cad. Seville 14500
    4. Chev. Corvette 15906

    ”` 这些都是豪华或高性能车型,价格远高于普通汽车,因此被视为异常值是合理的。

  2. 判断异常值的性质:

    • 数据录入错误? 检查这些记录是否有误。例如,15906 是否应为 1590.6?在 auto 数据集中,这些价格是真实的。
    • 特殊群体? 这些异常值代表了一个不同的子群体(豪华车)。在分析整体汽车价格时,它们可能扭曲均值(mean 为6165,而中位数为5000,均值被拉高)。此时,中位数是比均值更稳健的中心趋势度量。
    • 是否需要处理? 这取决于分析目标。如果目标是研究普通汽车市场,可能需要剔除这些异常值;如果目标是研究整个汽车市场(包括豪华车),则应保留并考虑其影响。

3.3 比较不同组别的分布

通过分组箱形图,我们可以进行更深入的比较。以国产车(foreign==0)和进口车(foreign==1)为例。

计算分组统计量:

bysort foreign: summarize price, detail

结合分组箱形图解读:

  • 国产车:中位数较低,箱体较短(IQR较小),说明价格相对集中且较低。异常值较少,且多为高价车。
  • 进口车:中位数显著更高,箱体更长(IQR更大),说明价格分布更分散,波动更大。异常值更多,且价格更高。
  • 结论:进口车不仅价格更高,而且价格差异也更大。这可能与品牌、车型多样性有关。

4. 高级技巧与自定义

Stata的图形系统非常强大,允许高度自定义箱形图以满足出版或报告需求。

4.1 自定义箱形图的外观

使用 graph box 或 twoway box 的选项可以改变颜色、标记、标签等。

示例:为国产车和进口车箱形图设置不同颜色,并添加均值标记。

graph box price, over(foreign) ///
    box(1, color(blue)) box(2, color(red)) /// 为不同组设置颜色
    marker(1, mlabel(make)) /// 为国产车添加标签(慎用,可能很乱)
    title("汽车价格分布(按产地)") ///
    ytitle("价格") ///
    legend(order(1 "国产车" 2 "进口车"))

注意:marker() 选项会为每个数据点添加标签,在数据点多时会非常混乱,通常只用于演示或数据点很少的情况。

4.2 与其它图形叠加

使用 twoway 框架,可以将箱形图与散点图叠加,以显示原始数据点。

示例:在箱形图上叠加原始数据点(散点图)。

twoway (box price if foreign==0, label(国产车)) (box price if foreign==1, label(进口车)) ///
       (scatter price foreign if foreign==0, jitter(2) mcolor(blue%50)) /// 添加抖动散点
       (scatter price foreign if foreign==1, jitter(2) mcolor(red%50)), ///
       title("汽车价格分布与原始数据点") ytitle("价格") xtitle("产地") ///
       legend(order(1 2))

输出解读:

  • 箱形图展示了分布的摘要。
  • 散点图(带抖动 jitter)展示了原始数据点的密度和位置。
  • 这种组合图形提供了更丰富的信息:既能看到整体分布,又能看到数据点的具体分布情况,有助于判断异常值是否合理。

4.3 处理非对称分布的数据

对于严重右偏的数据(如收入、房价),标准的箱形图可能无法充分展示尾部信息。Stata提供了 rbox 命令(需安装)来创建旋转箱形图,它能更好地展示偏态分布。

安装 rbox:

ssc install rbox

使用 rbox:

rbox price, over(foreign) title("旋转箱形图:汽车价格")

输出解读:

  • 旋转箱形图将数据分布“旋转”了90度,使得长尾方向更明显。
  • 对于 price 这种右偏数据,旋转箱形图能更清晰地展示高价异常值的分布情况。

5. 实际应用案例:分析学生成绩

假设我们有一个学生成绩数据集 grades.dta,包含学生ID、性别(gender,1=男,2=女)和数学成绩(math_score)。

步骤1:创建基本箱形图

use grades.dta, clear
graph box math_score

解读:查看整体成绩分布,识别低分或高分异常值。

步骤2:按性别分组比较

graph box math_score, over(gender, label(1 "男生" 2 "女生")) title("男女生成绩分布")

解读:

  • 比较中位数:哪个性别的平均成绩更高?
  • 比较IQR:哪个性别的成绩波动更大?
  • 检查异常值:哪个性别有更多低分或高分异常值?

步骤3:识别并分析异常值 假设我们发现一些低分异常值(成绩低于 Q1 - 1.5*IQR)。

summarize math_score, detail
local q1 = r(p25)
local q3 = r(p75)
local iqr = `q3' - `q1'
local lower_bound = `q1' - 1.5 * `iqr'
list student_id math_score if math_score < `lower_bound'

分析:这些学生是否需要额外辅导?他们的成绩是否与其他科目一致?是否需要进一步调查原因?

6. 注意事项与最佳实践

  1. 样本量:箱形图在样本量较大时效果最佳。对于极小样本(如n<10),箱形图可能无法准确反映分布,此时应结合原始数据点查看。
  2. 异常值的处理:异常值不一定是错误数据。在删除或修改异常值之前,必须理解其产生的原因。在报告中,应明确说明如何处理异常值。
  3. 图形美化:在正式报告中,应使用清晰的标题、轴标签和图例。避免使用过于花哨的颜色或标记,除非它们有明确的含义。
  4. 结合其他图形:箱形图是EDA的起点。对于复杂数据,应结合直方图、密度图、散点图等其他图形进行综合分析。
  5. 理解局限性:箱形图隐藏了数据的多峰分布。如果数据有多个峰值,箱形图可能无法揭示,此时应使用直方图或密度图。

7. 总结

Stata的箱形图功能强大且易于使用,是探索数据分布和识别异常值的利器。通过理解箱形图的构成(箱体、须、异常值),掌握 graph box 和 twoway box 的创建方法,并学会结合统计命令进行解读,您可以高效地从数据中提取关键信息。记住,箱形图不仅是图形,更是数据分析的起点。通过它发现的异常值和分布特征,应引导您进行更深入的统计检验和业务分析,从而做出更明智的决策。

无论是分析经济数据、社会调查还是实验结果,熟练运用Stata箱形图都将显著提升您的数据分析能力和洞察力。