G3. 直方图

整理人: 郭楚玉 (武汉大学)
邮箱:

1. 直方图简介

首先,让我们用一个简单的例子来演示直方图背后的含义。我们调入美国 1988 年妇女工资数据 (nlsw88),查看年龄的分布情况有多种方式: * sum 命令,可以展示变量的简单统计信息:比如样本个数、最小年龄、最大年龄、平均值和标准差。

sysuse nlsw88, clear
(NLSW, 1988 extract)

sum age

 Variable |    Obs      Mean   Std. Dev.  Min  Max
----------+---------------------------------------
      age |  2,246  39.15316   3.060002    34   46
  • tab 命令可以列示不同年龄段的妇女分布的频数、比例和累计占比。
tab age

  age in |
 current |
    year |   Freq.     Percent        Cum.
---------+--------------------------------
      34 |      53        2.36        2.36
      35 |     260       11.58       13.94
      36 |     257       11.44       25.38
      37 |     225       10.02       35.40
      38 |     219        9.75       45.15
      39 |     234       10.42       55.57
      40 |     208        9.26       64.83
      41 |     222        9.88       74.71
      42 |     160        7.12       81.83
      43 |     165        7.35       89.18
      44 |     163        7.26       96.44
      45 |      78        3.47       99.91
      46 |       2        0.09      100.00
---------+--------------------------------
   Total |   2,246      100.00

这两种呈现方式虽然非常准确,但是不够直观。 histogram 这个命令可以帮助我们更加直观的观察数据分布。

  • histogram age, frequency xlabel(34(1)46)

图1 直方图1

此时可以看到该样本中,年龄为 35 和 36 岁的人数最多。

  • histogram age, fraction xlabel(34(1)46) 此时每个纵轴代表频率,所以纵轴之和等于1。

图2 直方图2
  • histogram age, percent xlabel(34(1)46) 此时纵轴之后加总等于 100 %。

图3 直方图3

2. 直方图详解

刚展示的 age 是一个离散变量,下面我们用 wage 这个连续变量来进一步介绍。总样本量是2246个妇女,直方图的实现在于将这2246个妇女划分为若干组,统计每一组里出现的观察值的个数。再基于总样本数算出每组的频率或 累计占比等。

histogram wage 
(bin=33, start=1.0049518, width=1.2042921)

如上所示, Stata 给出了 wage 变量的带宽数量、初始值和宽度这三个信息。

图4 直方图4

下面我们具体来看一下这三个参数是如何确定的:

  • 最优的组数

由一系列统计学家研究过,Stata 中采用的是下面这个公式:

\[ \mathrm{k}=\min \{\operatorname{sqrt}(\mathrm{N}) ; \quad 10 \ln (\mathrm{N}) / \ln (10)\} \]

两者比较取最小值。 我们可以分别计算出这两个数,最后选取的33为组数。

dis sqrt(_N)
47.391982

dis 10*ln(_N)/ln(10) 
33.514098
  • 组宽

组宽是用极差除以组数得出的。极差就是一个变量的最大值减去最小值。

sum wage

 Variable |    Obs      Mean   Std. Dev.       Min        Max
----------+--------------------------------------------------
     wage |  2,246  7.766949   5.755523   1.004952   40.74659

dis "Max = " r(max)    //see P1_scalar.do
Max = 40.74659

dis "Min = " r(min)
Min = 1.0049518

dis "Range = " r(max)-r(min)       //极差
Range = 39.741638

dis "width = " (r(max)-r(min))/33  //组宽=极差/组数(bins)
width = 1.2042921

有了前面对细节的理解,下面我们画出 工资 这个变量的直方图。

histogram wage, frequency  
histogram wage, fraction   
histogram wage, percent    
histogram wage

图5 分组直方图

3. 直方图的美化

得到直方图后,我们可以通过一系列的选项更改直方图的外观。 * 附加正态分布密度曲线

histogram wage, normal

图6 直方图6

其中正态分布曲线是由 工资 变量的均值和标准差决定的。

  • 附加核密度函数曲线

histogram wage, kdensity

图7 直方图7
  • 长条的显示

此外,我们还可以对小柱状体的宽度和颜色,图片的颜色进行设置。

histogram wage, gap(50)  // 小柱状体间距缩小为默认值的 50%
histogram wage, gap(90) scheme(s1mono)  //黑白图形    
histogram wage, gap(60) scheme(s1mono) fcolor(white) lcolor(black) lwidth(*0.8)

Notes:

  • fcolor 代表图七中第三个图里,小柱状体里填充的是白色。
  • lcolor代表柱体的边框为黑色。

图8 直方图8
  • 附加标签

histogram age, freq addlabels

可以在直方图中标示出每组数据的频次。

图9 直方图9

4. 分组绘制直方图

如果我们想看大学毕业与否会怎样影响妇女的工资,可以使用以下命令:

histogram wage, by(collgrad) gap(80) scheme(s1mono) percent

图10 直方图10

可以看到,大学毕业的妇女平均工资 (10) 比没有大学毕业的妇女平均工资 (5) 高。但是观察两端的数据, 比如收入等于40,两组之间并没有很大差别。看起来,大学毕业只是有助于一个人平均工资的增加。对于能力特别强的人 是否上大学对他的工资水平没有太大影响。

外部命令 byhist 可以使图十中两个直方图交错的展现在一张图里。

sysuse nlsw88,clear
byhist wage, by(collgrad) frac tw(legend(row(2) ring(0) position(1)))
  
byhist wage, by(collgrad) density ///
tw1(color(black))          ///
tw2(color(blue))           ///
tw(legend(label(1 "Otherwise")  ///
label(2 "College Graduate") ///
col(1) ring(0) pos(1)))

图11 直方图11

比直方图更精简的展示,可以使用核密度函数图:

twoway (kdensity wage if collgrad==0)     /// 
(kdensity wage if collgrad==1),    /// 
xtitle("Hourly wage")              ///
legend(label(1 "Otherwise")        ///
label(2 "College Graduate") ///
col(1) ring(0) pos(3))

图12 核密度图

此时得到的结果,与直方图展示的信息完全一样。但是它更加突出两个组之间平均工资的差别。

bihist 命令可以展示对称直方图。

sysuse nlsw88, clear
    
bihist wage, by(collgrad) frac 
    
bihist wage, by(collgrad) frac tw(legend(col(1)) scheme(s1mono)) 

图13 直方图13

右边设成黑白色的图片更适合投稿。