1 Star 0 Fork 4

HuTu_chongchong/stata_do

forked from songbl/stata_do 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
6.do 4.49 KB
一键复制 编辑 原始数据 按行查看 历史
*2.6 离群值的处理
*------------------
* ==本节目录==
* 2.6.1 离群值的影响
* 2.6.2 查找离群值
* 2.6.3 离群值的处理
* 2.6.3.1 删除
* 2.6.3.2 对数转换
* 2.6.3.3 缩尾处理
* 2.6.3.4 截尾处理
* =本节命令=
* ================================================
* histogram, winsor, hadimvo, egen outside()
* qr, adjacent, fsreg, lv
* ================================================
*--------------------
*-2.6.1 离群值的影响
*-例:离群值对回归结果的影响
sysuse "auto.dta", clear
histogram price
count if price>13000
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") nogap
*-结论:虽然离群值只有4个,但对回归结果的影响却很大
*----------------
*-2.6.2 基本概念 (self-reading)
*---------------------------------------------------
* 第25、50、75百分位上的数值分别称为第1、2、3四分位
* 四分位间距(interquartile range): iqr = p75-p25
* 上界(upper adjacent) = p75 + 1.5*iqr
* 下界(lower adjacent) = p25 - 1.5*iqr
*---------------------------------------------------
*-箱形图
help graph box
graph box price
graph box price, by(foreign)
graph box weight, by(foreign)
*-egenmore 提供的 outside() 函数
egen out = outside(price)
egen out2 = outside(price), factor(1.5)
egen outby= outside(price), by(foreign) factor(2) //可以更改容忍度
list price out*
keep if outby==. // 删除离群值
*-Notes:
* 实证分析中,很少采用上述方式处理离群值,
* 在公司金融领域,通常是把 1% 和 99% 分位点以外的观察值视为离群值。
*---------------------
*-2.6.3 离群值的处理
*-2.6.3.1 删除
sysuse "auto.dta", clear // 需要提前安装-egenmore-相关命令
egen outby = outside(price), by(foreign) factor(2)
br price foreign outby
drop if outby != .
*-2.6.3.2 对数转换
sysuse "nlsw88.dta", clear
histogram wage, normal // normal 选项的作用是什么?
gen ln_wage = ln(wage)
histogram ln_wage, normal
*-原理
dis %6.2f ln(10)
dis %6.2f ln(100)
dis %6.2f ln(1000)
dis %6.2f ln(10000)
sum wage ln_wage, d
graph box wage
graph box ln_wage
extrans wage //检验转换效果
help transint //数据转换的简要介绍
*-Note: 使用对数转换后,系数的含义会发生变化,请慎重解释
*-2.6.3.3 缩尾处理
sysuse "nlsw88.dta", clear
histogram wage
*-原理:
*-分别在第 1 和第 99 百分位上执行缩尾处理
sum wage, detail
return list
replace wage = r(p1) if wage<r(p1) // 左侧缩尾
replace wage = r(p99) if wage>r(p99) // 右侧缩尾
histogram wage
*-本例中只需右侧缩尾即可, why?
*-winsor/winsor2 命令
help winsor
help winsor2
sysuse "nlsw88.dta", clear
winsor wage, gen(wage_w2) p(0.01)
winsor2 wage, cuts(1 99)
*-Note: [1] cuts(1 99)选项可以省略,这是默认值
* [2] 产生的新变量自动命名为 wage_w
*-图示
twoway (histogram wage,color(green)) ///
(histogram wage_w2,color(yellow)), ///
legend(label(1 "wage") label(2 "wage_winsor2"))
*-单边缩尾
winsor wage, gen(wage_h) p(0.025) highonly
winsor2 wage, replace cuts(0 97.5) // 97.5 也可以写成 0.975
*-Note: replace 的作用是覆盖原始变量
*-2.6.3.4 截尾处理
sysuse "nlsw88.dta", clear
winsor2 wage, trim replace //默认: 1 99 双边截尾
*-原理解析
sysuse "nlsw88.dta", clear
_pctile wage, percentile(1 99)
return list
drop if wage<r(r1) // 删除小于第1百分位的样本
drop if wage>r(r2) // 删除大于第99百分位的样本
*-说明:
* (1) 可以先绘制直方图,进而根据分布情况选择左截尾、
* 右截尾还是双边截尾
* (2) 相比于ln()处理和winsor处理,该处理会损失样本
* 但对于大样本而言,该方法比较“干净”
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
其他
1
https://gitee.com/HuTu_chongchong/stata_do.git
[email protected]:HuTu_chongchong/stata_do.git
HuTu_chongchong
stata_do
stata_do
master

搜索帮助