离群值是什么意思_离群值!离群值?离群值!

离群值(outliers)是指数据中与其他观测值明显不同的观测值,其判断依赖于具体情境。离群值对数据分析有显著影响,可能导致统计结果偏差。常见的离群值处理方法包括对数转换、缩尾、截尾和插值。对数转换能减少离群值影响,缩尾和截尾通过替换或删除离群值,插值则利用数据相关性赋予离群值新值。处理离群值的选择应根据研究需求和方法特点来定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:吴世飞 | 连玉君 ( 知乎 | 简书 | 码云 )

Note: 助教招聘信息请进入「课程主页」查看。因果推断-内生性 专题 ⌚ 2020.11.12-15 主讲:王存同 (中央财经大学);司继春(上海对外经贸大学)空间计量 专题 ⌚ 2020.12.10-13 主讲:杨海生 (中山大学);范巧 (兰州大学)

1. 何谓离群值?

离群值 (outliers)

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

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

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

郭敬明呢?

杨幂呢?

刘翔呢?

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

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

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

以我自己的经历而言,我从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 中锋中,虽然仍是高个儿,但若说他的身高是离群值,怕是有不少中锋会不高兴。

如果抛开身高,从其他特征来看,比如沟通能力,智商等,姚明可能都不能算做离群值,应该都在平均值附近。因此,离群值其实是一个主观概念!若是一般人为参照对象,

对于刘翔,其奔跑速度可能是离群值,但身高则未必是;

对于郭敬明,其身高和创作能力可能都是离群值,但情商和智商则未必是;

此外,从姚明的例子可以看出,在处理数据时,我们可以把姚明的身高视为离群值,从样本中删除之——所谓的截尾;也可以将姚明的资料视为姚明明,后者的身高被我们人为设定为 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 ttl

qui reg wage age ttl_exp collgrad if wage < 20

est store norm

esttab ttl norm, mtitle( ) ar2

回归结果如下:回归结果对比

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

3. 离群值的处理方法对数转换

缩尾

截尾

插值

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

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

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

沿前例:

对 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

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

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

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

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

3.2 缩尾

将超出变量特定百分位范围的数值替换为其特定百分位数值的方法。help winsor

沿前例:

对 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

绘图结果如下:

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

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

仅对 wage 变量进行右侧缩尾

sysuse nlsw88.dta, clear

winsor wage, gen(wage_wh) p(0.025) highonly

histogram wage_wh, ylabel(, angle(0)) xtitle("wage_wh")

绘图结果如下:

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

绘图结果如下:超过原来数据 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延伸 :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 )。参见 Imputation; Interpolation

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

4. 小结

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

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

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

相关链接

相关课程部分直播课

课程一览支持回看,所有课程可以随时购买观看。Note: 部分课程的资料,PPT 等可以前往关于我们Stata 连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。

公众号推文分类:计量专题 | 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。连享会小程序:扫一扫,看推文,看视频……扫码加入连享会微信群,提问交流更方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值