代码拉取完成,页面将自动刷新
同步操作将从 songbl/stata_do 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
*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处理,该处理会损失样本
* 但对于大样本而言,该方法比较“干净”
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。