温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh
作者: 袁煜玲 (厦门大学)
邮箱: 384860359@qq.com
目录
在回归分析时,如果数据中存在异常值,很可能对回归结果产生非常大的影响,甚至扭曲真实结果。比较简单的理解,在算平均分数时,可能会去掉最高分和最低分;在计算一群人的平均身高时,会去掉超级高的人。
在回归中,几个异常值往往可能导致结果不真实,例如回归线扭曲。在下图中,异常值导致回归曲线偏移真实趋势,从而扭曲变量之间的真实关系。如果把左图右上方的异常值去掉,曲线斜率会大幅下降。因此,在连续变量回归之前,有必要先检查异常值,多数实证文章在回归之前,会先将连续变量进行 缩尾 或 截尾 处理。
本文介绍一个很好用的外部命令—— winsor2
winsor2
是由中山大学连玉君老师编写的 Stata 外部命令,能够非常方便的对连续变量进行缩尾或截尾处理。
ssc install winsor2,replace
一般而言,在缩尾或者截尾之前,我们可以画个直方图,观察连续变量的数值分布情况。如果偏离正态分布非常远,可以考虑缩尾或者截尾处理。
histogram wage, ylabel(, angle(0)) xtitle("wage") name(fig1, replace)
winsor2
进行缩尾处理:sysuse nlsw88.dta, clear
winsor2 wage, cut(2.5 97.5)
其中,winsor2
后面跟着的是要缩尾的变量,cut(2.5 97.5)
表示将 wage 变量最小和最大的 2.5% 的值进行缩尾处理。所谓缩尾,就是将小于 2.5% 的值统一替换成 2.5% 的值,大于 97.5% 的值统一替换成 97.5% 的值。例如,如果最低的 2.5% 的工资是 5000,那么所有低于 5000 的工资都会被替换成 5000。
默认情况下,winsor2
在缩尾后自动在旧变量名后加上 "_w",即生成缩尾后的新变量 wage_w。如果希望改变新变量的后缀,可以在 winsor2
命令行后面加 suffix()
,括号内填写新变量名称所要增加的后缀。如果希望缩尾后直接替换掉旧变量,而不生成新变量,则加上 replace
:
sysuse nlsw88.dta, clear
winsor2 wage, cut(2.5 97.5) replace //这是 winsor2 与 winsor 的主要区别
trim
,即:sysuse nlsw88.dta, clear
winsor2 wage, cut(2.5 97.5) trim
这样一来,就是所有位于 wage 最低 2.5% 和最高 2.5% 的观测值都被直接删除。但是,我们发现,wage 主要是右偏,因此我们可以对极大值进行截尾,而极小值则不截尾。截尾之后,默认生成新变量 wage_tr。
sysuse nlsw88.dta, clear
winsor2 wage, cut(0 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
其中,wage 是截尾之前的变量,wage_tr 是截尾之后的变量,我们用 graph combine
将两幅图拼在一起。可以看到,在去掉极大的异常值后,变量分布更加均匀。
reg wage hours
eststo e1
reg wage_tr hours
eststo e2
esttab e1 e2
可以看出,对 wage 截尾之后,Hours 对 wage 的回归系数有所下降,表明可能工资异常高的那一小部分人,每小时能赚的工资很高,因而把这最高的 2.5% 的样本删掉之后,剩下的样本每多工作一个小时所获取的工资就相对较少了。
--------------------------------------------
(1) (2)
wage wage_tr
--------------------------------------------
hours 0.0872*** 0.0607***
(7.63) (8.15)
_cons 4.530*** 4.825***
(10.25) (16.78)
--------------------------------------------
N 2242 2186
--------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001
. sysuse nlsw88.dta, clear
. winsor2 wage, cut(0 97.5) trim //仅对右侧截尾
. winsor2 wage, cut(0 97.5) //仅对右侧缩尾
. histogram wage, ylabel(, angle(0)) xtitle("wage") name(fig1, replace)
. histogram wage_tr, ylabel(, angle(0)) xtitle("wage_tr") name(fig2, replace)
. histogram wage_w, ylabel(, angle(0)) xtitle("wage_w") name(fig3, replace)
. graph combine fig1 fig2 fig3
可以看出,右侧截尾是把右侧最高的 2.5% 的值直接截掉,而缩尾则是把这些值替换成 97.5% 分位数的值,因而在最右端多出了一个较长的柱体。
winsor
:一般而言,我们会有多个连续变量,此时第一反应可能是利用循环语句,实现批量缩尾处理:
sysuse nlsw88.dta, clear
foreach v of varlist wage hours race{
winsor `v', gen(`v'_wi) p(0.025)
}
使用 winsor
加循环语句,能够一次性对三个变量 wage 、hours 和 wage 进行缩尾处理,并生成三个缩尾后的新变量 wage_wi、hours_wi 和 race_wi。选项 p()
中填写该变量进行缩尾的数值百分比,例如对最高和最低 2.5% 的数值进行缩尾,则设定 p(0.025)
。默认进行两侧缩尾,如果只需要对最高值做缩尾处理,只需在命令行后面加上 highonly
,反之则加上 lowonly
。
winsor2
实现一行命令,批量缩尾:以上使用 winsor
批量处理难免有点冗杂,有没有更简洁的方式呢?使用连老师编写的外部命令 winsor2
,无需循环,一行命令即可实现多变量的批量缩尾或截尾处理:
winsor2 wage hours race, cut(2.5, 97.5) //是不是很方便呢^.^?
winsor2
还有一个功能,就是分组缩尾,即将变量在分组内部分别进行缩尾。
例如,对变量 wage 进行分行业缩尾处理:
sysuse nlsw88.dta, clear
winsor2 wage hours race, cut(2.5, 97.5) by(ind)
如果希望缩尾或截尾后的变量自带“缩尾”或“截尾”标签,则在命令行后面加上 label
:
sysuse nlsw88.dta, clear
winsor2 wage hours race, cut(2.5, 97.5) by(ind) label
生成的新变量则都会自带标签,例如 wage_w 的标签是"hourly wage-Winsor(p00,p97.5)"。
更多关于离群值处理的信息,可以参考 吴世飞,连玉君,Stata:离群值!离群值?离群值!
Note:产生如下推文列表的命令为:
lianxh 离群值
安装最新版lianxh
命令:
ssc install lianxh, replace
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1 小时 40 分钟,课程主页 Stata 33 讲 - 连玉君, 每讲 15 分钟. Stata 小白的取经之路 - 龙志能,时长:2 小时,课程主页 部分直播课 课程资料下载 (PPT,dofiles 等)
支持回看
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2 小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh