stata怎么判断是否存在异常值_如何精确识别异常值——基于
Stata的进⼀步解析(原创)...
来源:Taotao Tu原创。
前⾯的帖⼦,我们介绍了异常值识别与处理的全流程⽅法。
但是,在有⼀个细节上,还需要格外注意,即如何精确识别出异常值的范围?
我们来看⼀个具体的例⼦
1.导⼊数据
webuse hsng
2.异常点的初步识别
让我们来初步看看,哪些变量可能存在异常点的问题。
⾸先,我们来看看变量的基本属性
describe
从上图可以看出,除了state是string变量,其他的均为数值型变量。
接下来,让我们初步识别⼀下 如何甄别 存在异常值的变量
graph box division region pop popgrow popden pcturban faminc hsng hsnggrow hsngval rent
可以看到,存在异常值的序列⽐较多,最为突出的是pop和hsng。我们来详细分析⼀下pop序列
3.异常值的精确识别
⾸先,分析⼀下pop序列的统计特征
sum pop,detail
如果有样本落到 最⼩值(Q1-1.5*IQR)与最⼤值(Q3+1.5*IQR)区间之外,就可以判定为异常值。
其中,第⼀个四分位数(Q1),也叫做25th percentile或者lower quartile; 第⼆个四分位数(Q2),也叫做中值或者50th percentile; 第三个四分位数(Q3),也叫做75th percentile。stata怎么发音
因此,计算上述区间的关键是 引⽤25th percentile,50th percentile,75th percentile。
我们来具体看⼀个命令
display r(p25), r(p50), r(p75)
最⼩值(Q1-1.5*IQR)计算命令如下:
scalar Minimum=r(p25)-1.5*(r(p75)-r(p25))
最⼤值(Q3+1.5*IQR)计算命令如下:
scalar Maximum=r(p75)+1.5*(r(p75)-r(p25))
想看看结果吗?
display Minimum, Maximum
可以看到,当样本落到【-5383007.5,11970773】之外时,就可断定为异常值。再绘制⼀下graph box,更直观地看看异常值的分布
graph box pop
4.异常值的精确缩尾
⽬前已经到了判断异常点的合理区间。那么,如果精确缩尾异常点呢?
在这⾥,我们采取右侧缩尾对数据进⾏处理
gen pop_win=pop
replace pop_win=Maximum if pop>Maximum
让我们来检验⼀下,看看得到的 pop_win序列是否已经消除了异常点。
graph box pop pop_win
哇~! ⼤功告成,是不是很有成就感?别着急,让我们看⼀看另⼀个⼤招。
5.实现pop与hsng序列异常点识别与右侧缩尾的批处理那么,如何实现上述步骤的⾃动化批处理呢?来看看我们的代码组合clear
webuse hsng
*pop序列异常值判断区间的计算
sum pop,detail
scalar Minimum=r(p25)-1.5*(r(p75)-r(p25))
scalar Maximum=r(p75)+1.5*(r(p75)-r(p25))
*pop序列异常值的精确右侧缩尾
gen pop_win=pop
replace pop_win=Maximum if pop>Maximum
*hsng序列异常值判断区间的计算
sum hsng,detail
scalar Minimum=r(p25)-1.5*(r(p75)-r(p25))
scalar Maximum=r(p75)+1.5*(r(p75)-r(p25))
*hsng序列异常值的精确右侧缩尾
gen hsng_win=hsng
replace hsng_win=Maximum if hsng>Maximum
graph box pop pop_win hsng hsng_win
⼤家可以看到,pop_win和hsng_win序列就是处理好以后的序列(这两个序列的graph box中已经看不到●)。通过上⾯精炼的代码,我们就可以实现多序列的异常值精准识别与缩尾处理。
上述代码具有很强的通⽤性。只要将pop或hsng替换成你所需要处理的变量,就可以实现⾃动批处理了。
思考题:
如果打算采⽤右侧截尾法来处理异常点,该如何修改代码?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。