Stata:离群值!离群值?离群值!

发布时间:2020-07-22 阅读 967

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

吴世飞 (东北财经大学,wshf1117@163.com)
连玉君 (中山大学,wshf1117@163.com)


目录


1. 何谓离群值?

离群值 (outliers) 是指在一份数据中,与其他观察值具有明显不同特征的那些观察值。

然而,并没有一个明确的准则来判断哪些观察值属于“离群值”。这主要取决于多种因素。

比如,下图中: 姚明算不算离群值?郭敬明呢?

Paste_Image.png
Paste_Image.png

对于姚明算不算离群值?,这本身就是一个非常不严谨的问题。

因为,我们可以找到很多变量来描述姚明的特征,比如身高、颜值、智商、情商、跑步速度、沟通能力,等等。

可能所有看到图片的读者的第一反应都是,姚明好高!如果据此推断“姚明的身高是离群值”,那你实际上潜意识里把图片中四人的身高构成的样本视为从一个更大的母体中的随机抽样。换言之,你将普通人的身高作为分析对象。此时,基本上可以认为姚明是离群值。

以我自己的经历而言,我从 16 岁停止长身高开始,到现在过去了 20 多年,亲眼见过的人应该不少于 10000 人了。其中只有 3-5 位身高超过 2 米,最高的那位身高 2.10 米,曾是广东排球队的队员。根据 NBA 的官方统计,姚明的身高是 2.26 米。这意味着,若以普通人的身高作为母体来随机抽样,抽取的 10000 个观察值中身高超过 2.26 米的概率是接近于 0 ( 0/10000 = 0)。

若将对照组调整为 NBA 球员,情况又如何呢?在 NBA 的官网上可以看到,2002-2003 赛季所有 413 个球员中,姚明身高位列第二。

然而,若我们将对照组改为“NBA 中锋” ,从下图可以看到, NBA 中锋的平均身高为 2.11 米。由于不知道标准差,所以无法判断具体的分布,但可以想象,姚明站在一群 NBA 中锋中,虽然仍是高个儿,但若说他的身高是离群值,怕是有不少中锋会不高兴。

image.png
image.png

如果抛开身高,从其他特征来看,比如沟通能力,智商等,姚明可能都不能算做离群值,应该都在平均值附近。

因此,离群值其实是一个主观概念!若是一般人为参照对象, 对于刘翔,其奔跑速度可能是离群值,但身高则未必是; 对于郭敬明,其身高和创作能力可能都是离群值,但情商和智商则未必是;

此外,从姚明的例子可以看出,在处理数据时,我们可以把姚明的身高视为离群值,从样本中删除之——所谓的截尾;也可以将姚明的资料视为姚明明,后者的身高被我们人为设定为 1.98 米 (样本中的第 1 百分位数),而其他方面的资料则与姚明完全相同——所谓的缩尾

2. 离群值存在会怎样?

大多数的参数统计数值,如 均值、标准差、相关系数 等,以及基于这些参数的统计分析,均对离群值高度敏感。因此,离群值的存在会对数据分析造成极大影响。

范例:美国妇女工资的决定因素

先看一看数据中小时工资( wage )的分布情况

sysuse nlsw88.dta, clear
histogram wage,  ylabel(, angle(0))

绘图结果如下:

妇女小时工资的直方图
妇女小时工资的直方图

从上图中可以发现,小时工资在 20 以上的观察值比重较小(在 1988 年,仅有极少的女性能够在每小时赚到 20 美元以上!这些是所谓的 高薪个体。),这些观察值很可能属于离群值。

下面我们来看一下,在包含和不包含 高薪个体 的情况下,工资方程的回归结果分别是怎样的。

. sysuse nlsw88.dta, clear
. qui reg wage age  ttl_exp  collgrad
. est store With
. qui reg wage age  ttl_exp  collgrad if wage < 20
. est store No

. local m "With No"
. esttab `m', mtitle(`m') compress replace ///
         b(%6.3f) s(N r2_a) drop(`drop')   ///
         star(* 0.1 ** 0.05 *** 0.01)      ///
	     addnotes("*** 1% ** 5% * 10%") nogap


------------------------------------
                 (1)          (2)
                With           No
------------------------------------
age           -0.123***    -0.042**
             (-3.28)      (-2.00)
ttl_exp        0.309***     0.281***
             (12.39)      (20.03)
collgrad       3.241***     2.764***
             (12.09)      (18.06)
_cons          7.927***     4.462***
              (5.43)       (5.40)
------------------------------------
N           2246.000     2174.000
r2_a           0.131        0.273
------------------------------------
t statistics in parentheses
*** 1% ** 5% * 10%
* p<0.1, ** p<0.05, *** p<0.01

从以上回归结果中可以发现,在去掉样本中的 高薪个体 后,模型的 拟合优度 (r2_a) 明显提高,年龄(age)系数的显著性有所下降,这些均体现了离群值对分析所带来的影响。

3. 离群值的处理方法

  • 对数转换
  • 缩尾
  • 截尾
  • 插值

3.1 对数转换

对存在离群值的变量作对数转换可以克服其离群值问题,且对数转换并不影响各观察值之间在此变量上的相对大小。

为什么对数转换可以克服离群值问题呢?这是因为,转换后数据的分布会变得更加集中。换句话说,虽然对数转换并不改变原有数值的相对大小关系,但却使得转换后数值之间的相对距离缩小了

比如,在下表中, 10 与 1000 相差百倍,但二者的对数值却仅相差 3 倍。可见对数转换后,其分布变得更加集中了。

x ln( x )
10 2.3
100 2.3 × 2 = 4.6
1000 2.3 × 3 = 6.9

沿前例:
对 wage 变量进行对数转换

sysuse nlsw88.dta, clear
gen ln_wage = ln(wage)

看看对数转换后发生了什么变化

histogram wage,  ylabel(, angle(0)) xtitle("wage") name(fig1, replace)
histogram ln_wage, ylabel(, angle(0)) xtitle("ln_wage") name(fig2, replace)
graph combine fig1 fig2

绘图结果如下

对数转换.png
对数转换.png

从上图中可见,经对数转换后的工资变量(ln_wage)的离群值明显减少,分布也更加集中。

需要注意的是,如果用对数转换后的数据进行回归分析,则回归模型中系数的经济含义会发生变化

以线性回归为例,下表列示了不同模型设定下,回归系数的经济含义。

回归模型 回归系数( β )的经济含义
y=α+βx+u 边际效应
ln(y)=α+βln(x)+u 弹性
ln(y)=α+βx+u 半弹性

3.2 缩尾

处理思路:将超出变量特定百分位范围的数值替换为其特定百分位数值的方法。我们可以用 winsorwinsor2 命令实现这一处理。

沿前例,对 wage 变量进行缩尾处理:

sysuse nlsw88.dta, clear
winsor wage, gen(wage_w) p(0.025)
  • gen(wage_w) 选项:为缩尾后所得的新变量设定名称为 wage_w
  • p(0.025) 选项:指定分别在第 2.5 百分位和第 97.5 百分位进行缩尾。即,将 wage 变量中小于其 2.5 百分位的数值 替换为 其 2.5 百分位数值;将 wage 变量中大于其 97.5 百分位的数值 替换为 其 97.5 百分位数值。(:这一过程是 双侧缩尾,是 winsor命令的默认处理方式。)

看看缩尾后发生了什么变化

histogram wage,  ylabel(, angle(0)) xtitle("wage") name(fig1, replace)
histogram wage_w,  ylabel(, angle(0)) xtitle("wage_w") name(fig2, replace)
graph combine fig1 fig2

绘图结果如下

winsor.png
winsor.png

缩尾后,对应于之前变量的 2.597.5 百分位上的数值变多了,这是由原来超过该范围的“离群值”转换而来的。

但是,我们之前已经发现, wage 变量的原始数据似乎只在右侧存在离群值,在左侧并不存在离群值。我们可以通过 winsor 命令的 highonlylowonly 选项来进行 单侧缩尾 处理。

仅对 wage 变量进行 右侧 缩尾

sysuse nlsw88.dta, clear
winsor wage, gen(wage_wh) p(0.025) highonly
histogram wage_wh,  ylabel(, angle(0)) xtitle("wage_wh")

绘图结果如下

winsor_h.png
winsor_h.png

3.3 截尾

将超出变量特定百分位范围的数值予以 删除 的方法。

help winsor2

沿前例:
对 wage 变量进行截尾处理

sysuse nlsw88.dta, clear
winsor2 wage, cut(2.5 97.5) trim
  • cut(2.5 97.5) 选项:指定分别在第 2.5 百分位和第 97.5 百分位进行截尾。即,将 wage 变量中小于其 2.5 百分位的数值或大于其 97.5 百分位的数值予以 删除
  • trim 选项:指定进行 截尾 处理(否则,默认进行缩尾处理)。

看看截尾后发生了什么变化

histogram wage,  ylabel(, angle(0)) xtitle("wage") name(fig1, replace)
histogram wage_tr,  ylabel(, angle(0)) xtitle("wage_tr") name(fig2, replace)
graph combine fig1 fig2

绘图结果如下

trim.png
trim.png

超过原来数据 2.5% ~ 97.5% 范围的部分被 截断 了。

同样,我们可能仅需对 wage 变量进行右侧截尾

sysuse nlsw88.dta, clear
winsor2 wage, cut(0 97.5) trim  suffix(_trh)
histogram wage_trh,  ylabel(, angle(0)) xtitle("wage_trh")

绘图结果如下

trim_h.png
trim_h.png

延伸winsor2命令 —— 一个命令满足缩、截尾全部需要

winsor2命令比winsor命令的功能丰富得多。不只是因为winsor2可以执行缩尾和截尾两种操作,更重要的是,它还增加了多变量操作分组操作替换原变量等实用功能。

winsor2 命令的语法如下

winsor2 varlist [if] [in], [ suffix(string) replace trim cuts(# #) by(groupvar) label ]
  • varlist:可以输入多个变量进行操作。
  • replace选项:指定用处理后的变量替换原变量
  • trim选项:指定进行截尾处理(否则默认进行缩尾处理)。
  • cuts(# #)选项:指定进行缩、截尾处理的百分位默认cuts(1 99),即在 1% 、 99% 分位数上进行缩、截尾。同理, cuts(0 #) 表示右侧缩、截尾。 cuts(# 100) 表示左侧缩、截尾。
  • by(groupvar)选项:指定分组操作的组别变量。

3.4 插值

应用原有数据信息对离群值赋予一个相对合理的新值的方法。

对数据进行赋值的方法有很多。比如,随机赋值、最近点赋值、均值赋值、回归赋值等。插值法是对数据赋值的一种方法,一般指的是线性插值( linear interpolation )。参见 维基百科 - 插值

在 Stata 中,ipolate 命令可以进行线性插值操作。impute 命令可以进行回归赋值操作。

4. 小结

最后,具体采用哪种方法来处理离群值需要结合各方法的特点和研究的需要而定。

比如,在上述方法中,对数转换对某变量的全部观察值均进行了处理,而其他方法则仅对变量中的离群值进行了处理;插值法利用了原有数据中的相关性信息,其他方法则没有利用这些信息;截尾处理会减少数据中的样本量,其他方法则保留了原有数据的样本量。在实际操作中应该结合这些特点进行选择。

此外,对于不同的研究领域,也有不同的适用方法和偏好。比如,在公司金融领域,缩尾被较为广泛地运用。而在时间序列分析中,则更适宜采用插值法。

5. 相关链接

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD