D4. 离群值的处理

整理人:周涛 (华中师范大学)
E-Mail:

1. 离群值的简介

在实证分析中,原始数据的离群值会对回归结果产生直接影响,因此在估计模型参数之前,我们经常需要对离群值进行检查和校正。基于此,本讲将通过如下几节重点介绍离群值的来源、影响以及处理方式。

1.1 离群值的来源

来源1:记录错误, 衡量偏误

    成人身高:       max = 3.5m 
    新生儿体重:     max = 33kg

一般而言,论文中需要呈现数据的基本统计量, 以便读者了解资料形态。我们通过 min, max, sd 等统计量可以初步判断是否存在严重的离群值。

举个例子,最大最小值可以用来判断这个变量的取值是否超过了合理的范围。例如我们在研究成人身高的决定因素时,假设在基本统计量里面看到成人身高的最大值为3.5m,那么很容易怀疑这是一个离群值。类似的还有新生儿体重最大值为33kg,这也超过了合理的范围。

来源2:混合分布

    举重运动员  v.s.  篮球运动员
    体操运动员  v.s.  相扑运动员

混合分布是指同一变量内部的数据结构存在两种及以上的不同分布。

举个例子,假设要研究运动员的体重受哪些因素的影响,那么就不能将举重运动员和篮球运动员的数据混在一起进行研究,需要进行分组回归。类似的还有体重运动员和相扑运动员,他们的体重数据也完全是两种不同的分布形态,在研究时也不能将他们的体重数据混在一起进行分析。

1.2 离群值的影响

在本节中,我们通过使用1978年汽车价格资料作为实例来了解离群值对回归结果的影响。具体来说,我们比较全样本和删除汽车价格离群值之后,不同因素对汽车价格的影响。

sysuse auto, clear
histogram price

图1 变量分布柱状图

从密度图中可以看出,price的数据分布呈现出向右拖尾的形态,price大多在10000以下。在本例中,我们删除price超过13000的离群值。

count if price > 13000
4

reg price weight length foreign
est store r1
reg price weight length foreign if price<13000
est store r2
esttab r1 r2, mtitle("with" "without")

--------------------------------------------------
                      (1)             (2)   
                     with         without   
--------------------------------------------------
weight              5.775***        3.183***
                   (6.02)          (3.74)   

length             -91.37**        -21.79   
                  (-2.78)         (-0.78)   

foreign            3573.1***       3383.8***
                   (5.59)          (6.70)   

_cons              4838.0          -698.8   
                   (1.29)         (-0.23)   
-------------------------------------------------
N                      74              70   
-------------------------------------------------

通过比较删除离群值前后的回归结果可以看出,虽然price超过13000的离群值只有4个,但对回归结果的影响却很大。

2. 离群值的处理方法

2.1 对数转换

  • 原理:对数变换后的数据之间的差异将减少很多
dis %2.1f ln(10)
 2.3

dis %2.1f ln(100)
 4.6

dis %2.1f ln(1000)
 6.9

再举个例子:

sysuse nlsw88, clear
gen ln_wage = ln(wage)

twoway (histogram    wage, color(green))  ///
        (histogram ln_wage, color(yellow)) 

图2 对数转换后的变量分布

从密度图中可以看出,wage的原始数据分布是比较分散的。但在取对数之后,ln_wage取值在0到5的区间内,它的分布更加集中。

Note: 对数转换后,系数估计值的含义会发生变化,解释结果时要慎重。

2.2 删除或截尾处理 (Trimming)

  • 以某一百分位上的数值为临界点,删除在此区间外的样本,我们可以使用 winsor2 命令来进行结尾处理。

举个例子:以 1th 和 99th 百分位数值为临界点进行缩尾。

sysuse nlsw88, clear
winsor2 wage, cuts(1 99)  suffix(_tr) trim 
summ wage*

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
        wage |      2,246    7.766949    5.755523   1.004952   40.74659
     wage_tr |      2,205    7.566545    4.972783   1.932367   38.70926

可以看到,在删除1th 和 99th 百分位以外的数值之后,虽然数据会更加集中,但样本量会有所损失。

2.3 缩尾处理(winsor)

在公司财务领域里面,当我们需要对多个变量进行处理时,应用比较广泛的是缩尾处理,因为它能够避免样本量的损失。

  • 缩尾处理的原理

以 1th 和 99th 百分位的缩尾为例,缩尾处理是将小于 1th 百分位的数值设定为 1th 的数值,将大于 99th 百分位的数值设定为 99th 的数值。

sysuse nlsw88, clear
sum wage, detail

                          wage
-------------------------------------------------------
      Percentiles      Smallest
 1%     1.930993       1.004952
 5%     2.801002       1.032247
10%     3.220612       1.151368    Obs            2,246
25%     4.259257       1.344605    Sum of Wgt.    2,246

50%      6.27227                   Mean        7.766949
                        Largest    Std. Dev.   5.755523
75%     9.597424       40.19808
90%     12.77777       40.19808    Variance    33.12604
95%     16.52979       40.19808    Skewness    3.096199
99%     38.70926       40.74659    Kurtosis    15.85446

replace wage=1.930993 if wage<1.930993 
replace wage=38.70926 if wage>38.70926

我们也可以直接用 winsor2 命令直接进行缩尾

sysuse nlsw88, clear
winsor2 wage, cuts(1 99) 
summ wage*

Variable |   Obs      Mean  Std. Dev.      Min        Max
---------+-----------------------------------------------
    wage | 2,246  7.766949  5.755523  1.004952   40.74659
  wage_w | 2,246   7.75842  5.686979  1.930993   38.70926

从结果中可以看到,对数据缩尾之后数据标准差会变小,同时样本量不会发生变化。

3. 扩展阅读