1. 直接平滑 tssmooth
以阿克苏地区土地出让数据为例
源数据状态:
year | area |
---|---|
2004 | 2.656 |
2006 | 17.0277 |
2007 | 135.757 |
2008 | 255.5355 |
2009 | 291.1511 |
2010 | 576.9609 |
2011 | 1697.928 |
2012 | 2519.371 |
2013 | 1183.871 |
2014 | 1250.294 |
2015 | 1089.124 |
2016 | 971.8002 |
2017 | 824.4564 |
2018 | 603.0765 |
2019 | 1050.952 |
//时间序列
//先指定时间列
tsset year, yearly
//补全时间列
tsfill
//平滑
tssmooth ma area1=area, w(1,0,1)
//绘图看结果
graph twoway scatter area1 year
- 平滑结果:
2.把异常值去掉再线性内插
- 此弥补的数值是用的线性内插法。
- 在运行以下代码前需要根据一定逻辑(或手动)把异常值drop掉
(1)用3σ判定方法
- 在运行以下代码前需要根据一定逻辑(或手动)把异常值drop掉
egen meanArea=mean(area) //计算样本均值
egen stdArea=sd(area) //计算样本标准差
ge z=(area-meanArea)/stdArea //计算z统计量
ge outlier=.
replace outlier=1 if z>2 | z<-2
drop if outlier==1
(2)用残差法(Grubbs):
reg area year
predict areaHat,xb //预测值y
predict residual,res //得到残差值
egen stdArea=sd(area) //计算样本标准差
gen g=res/stdArea //计算G统计量
//“把计算值Gi与格拉布斯表给出的临界值GP(n)比较,如果计算的Gi值大于表中的临界值GP(n),则能判断该测量数据是异常值,可以剔除。但是要提醒,临界值GP(n)与两个参数有关:检出水平α (与置信概率P有关)和测量次数n (与自由度f有关)。” 需要根据样本量n在格拉布斯表查值
ge outlier=.
replace outlier=1 if g>GP(n)
//面板数据等需要分组回归,用如下命令
ssc install asreg,replace //安装分组回归asreg
asreg area year,by(分组变量) fitted
- 线性内插
//先指定时间列
tsset year, yearly
//补全时间列
tsfill
//线性内插
ipolate areadrop year,gen(ipoareadrop) epolate//这里加上epolate指既可以内插也可以外推
graph twoway scatter ipoareadrop year
- 结果
3.有关winsor
不是时间序列异常值,是所有的异常值,跟时间序列和趋势都没关系,此处不能用
winsor的命令不是去除异常值,而是把异常值用最接近的值代替了,用的时候要注意
findit winsor
winsor 变量名, gen(新变量名) p(0.01)
p()中的数字可以自己设置,一般是0.01
- 转载请和作者联系