Stata时间序列笔记.docx
《Stata时间序列笔记.docx》由会员分享,可在线阅读,更多相关《Stata时间序列笔记.docx(18页珍藏版)》请在冰豆网上搜索。
![Stata时间序列笔记.docx](https://file1.bdocx.com/fileroot1/2022-12/31/2858bc56-04dd-4fa9-a744-078c5d502030/2858bc56-04dd-4fa9-a744-078c5d5020301.gif)
Stata时间序列笔记
文档结尾是FAQ和var建模的15点注意事项
【梳理概念】
向量自回归(VAR,VectorAutoregression)常用于预测相互联系的时间序列系统以及分析随机扰动对变量系统的动态影响。
VAR模型:
VAR方法通过把系统中每一个内生变量,作为系统中所有内生变量的滞后值的函数来构造模型,从而回避了结构化模型的要求。
VAR模型对于相互联系的时间序列变量系统是有效的预测模型,同时,向量自回归模型也被频繁地用于分析不同类型的随机误差项对系统变量的动态影响。
如果变量之间不仅存在滞后影响,而不存在同期影响关系,则适合建立VAR模型,因为VAR模型实际上是把当期关系隐含到了随机扰动项之中。
协整:
Engle和Granger(1987a)指出两个或多个非平稳时间序列的线性组合可能是平稳的。
假如这样一种平稳的或的线性组合存在,这些非平稳(有单位根)时间序列之间被认为是具有协整关系的。
这种平稳的线性组合被称为协整方程且可被解释为变量之间的长期均衡关系。
*第六讲时间序列分析
*----目录-----
*
*--简介
*6.1时间序列数据的处理
*--平稳时间序列模型
*6.2ARIMA模型
*6.3VAR模型
*--非平稳时间序列模型——近些年得到重视,发展很快
*6.4非平稳时间序列简介
*6.5单位根检验——检验非平稳
*6.6协整分析——非平稳序列的分析
*--自回归条件异方差模型
*6.7GARCH模型——金融序列不同时点上序列的差异
反映动态关系的时间数据顺序不可颠倒
cdd:
\stata10\ado\personal\Net_Course\B6_TimeS
*=======================
*时间序列数据的处理helptime
*=======================
*声明时间序列:
tsset命令
usegnp96.dta,clear
listin1/20
genLgnp=L.gnp(此时没办法生成之后一阶的变量,因为没有设定时间变量)
tssetdate(设定date为时间变量,timeseries)
listin1/20
genLgnp=L.gnp96
滞后一期,所以会产生1个缺失值
●检查是否有断点——肉眼看不方便,用命令检查
usegnp96.dta,clear
tssetdate
tsreport,report
dropin10/10——去掉断点成连续的,才能继续进行
listin1/12
tsreport,report
tsreport,reportlist/*列出存在断点的样本信息*/
●填充缺漏值——接着上一步,看看stata如何填充缺漏值。
一般用前面的数据的平均值或预测等
Tsfill(以缺漏值的形式)
tsreport,reportlist
listin1/12
*追加样本——有时候追加样本不是为了追加新的值,而是为了预测(见应用)
usegnp96.dta,clear
tssetdate
listin-10/-1
sum
tsappend,add(5)/*追加5个观察值*/
listin-10/-1增加的样本值都是缺漏的可以手动输入
sum
*应用:
样本外预测
reggnp96L.gnp96
predictgnp_hat
listin-10/-1——接上一步这样增加的样本值的预测值就显示出来了(前提是追加了样本值)
*清除时间标识
tsset,clear——若数据的形态有所改变就清除
*---------------------
*变量的生成与处理
*---------------------
滞后L—lag前导F—forward差分D-difference
*---滞后项、超前项和差分项helptsvarlist
usegnp96.dta,clear
tssetdate
genLgnp=L.gnp96/*一阶滞后*/
genL2gnp=L2.gnp96/*二阶滞后*/
genFgnp=F.gnp96
genF2gnp=F2.gnp96
genDgnp=D.gnp96
genD2gnp=D2.gnp96
listin1/10
listin-10/-1
D,L,F可以组合生成变量gen新变量名=DL.变量名先滞后再差分
*---产生增长率变量gen变量名=D.ln(gnp96):
对数差分——得到近似的增长率
先设定时间变量tssetdate
genlngnp=ln(gnp96)
gengrowth=D.lngnp(得到近似的增长率)
上面两步的简写形式(gengrowth=D.ln(gnp96))——该简化方法在stata12中不可行
gengrowth2=(gnp96-L.gnp96)/L.gnp96——增长率的最基本定义
gendiff=growth-growth2——若对数差分和真正的增长率接近,diff约等于0
listdategnp96lngnpgrowth*diffin1/10
*---------------------
*日期的处理
*---------------------
*---日期的格式helptsfmt
*
*基本时点:
整数数值,如-3,-2,-1,0,1,2,3....
*1960年1月1日,取值为0;
*显示格式:
*-------------------------------
*定义含义默认格式
*-------------------------------
*%td日%tdDlCY
*%tw周%twCY!
ww
*%tm月%tmCY!
mn
*%tq季度%tqCY!
qq
*%th半年%thCY!
hh
*%ty年%tyCY
*-------------------------------
*使用tsset命令指定显示格式
useB6_tsset.dta,clear
tssett,daily
list
useB6_tsset.dta,clear
tssett,weekly——定义基本时点1.2.3间的间隔是日、周、年等
list
*相同的基本时点,采用不同的方式显示会有不同的效果
clear
setobs100
gent=_n
replacet=t-3
localformat"tdtwtmtqthty"
foreachfoflocalformat{
gent_`f'=t
formatt_`f'%`f'
}
listin1/20
*说明:
同样的数值,采用不同的显示方式,会有完全不同的含义
*指定起始时点
capdropmonth
generatemonth=m(1990-1)+_n-1
formatmonth%tm
listmonthin1/20
capdropyear
genyear=y(1952)+_n-1
formatyear%ty
listtyearin1/20
*设定不同的显示格式helpdfmt
*
*日期的显示格式%d(%td)定义如下:
*%[-][t]d<描述特定的显示格式>
*
*具体项目释义:
*“<描述特定的显示格式>”中可包含如下字母或字符
*cymlndjhqw_.,:
-/'!
c
*CYMLNDJW
*定义如下:
/*
candC世纪值(个位数不附加/附加0)
yandY不含世纪值的年份(个位数不附加/附加0)
m三个英文字母的月份简写(第一个字母大写)
M英文字母拼写的月份(第一个字母大写)
nandN数字月份(个位数不附加/附加0)
dandD一个月中的第几日(个位数不附加/附加0)
jandJ一年中的第几日(个位数不附加/附加0)
h一年中的第几半年(1or2)
q一年中的第几季度(1,2,3,or4)
wandW一年中的第几周(个位数不附加/附加0)
_displayablank(下划线)
.displayaperiod(句号)
displayacomma(逗号)
:
displayacolon(冒号)
-displayadash(短线)
/displayaslash(斜线)
'displayaclosesinglequote(右引号)
!
cdisplaycharacterc(code!
!
todisplayanexclamationpoint)
*/
*
*例如:
*FormatSampledateinformat
*-----------------------------------
*%td07jul1948
*%tdM_d,_CYJuly7,1948
*%tdY/M/D48/07/11
*%tdM-D-CY07-11-1948
*%tqCY.q1999.2
*%tqCY:
q1992:
2
*%twCY,_w2010,48
*-----------------------------------
*又如:
*FormatSampledateinformat
*----------------------------------
*%d11jul1948
*%dDlCY11jul1948
*%dDlY11jul48
*%dM_d,_CYJuly11,1948
*%dd_M_CY11July1948
*%dN/D/Y07/11/48
*%dD/N/Y11/07/48
*%dY/N/D48/07/11
*%dN-D-CY07-11-1948
*----------------------------------
clear
setobs100
gent=_n+d(13feb1978)(第一个数显示的是1978年2月14对应的数值)
listtin1/5
formatt%dCY-N-D/*1978-02-14*/
listtin1/5
formatt%dcy_n_d/*1978214*/
listtin1/5
useB6_tsset,clear
list
tssett,format(%twCY-m)
list
*一个实例:
生成连续的时间变量
usee1920.dta,clear
listyearmonthin1/30
sortyearmonth
gentime=_n
tssettime
listyearmonthtimein1/30
generatenewmonth=m(1920-1)+time-1
tssetnewmonth,monthly
listyearmonthtimenewmonthin1/30
*---处理日期的函数
helpdates_and_times
helptime-seriesfunctions
*以下适用于STATA9.2版本
*--时间序列日期概览helptdates
*--将文字变量转换为日期helpdlyfcns
*--利用年、月、季度转换日期helpdlyfcns
*--日期转换函数helpdcfcns
*-----------------------
*图解时间序列
*-----------------------
*helptsline
*例1:
clear
setseed13579113
sim_armaar2,ar(0.70.2)nobs(200)
sim_armama2,ma(0.70.2)
tsset_t
tslinear2ma2
*亦可采用twowayline命令绘制,但较为繁琐
twowaylinear2ma2_t(前面两个为纵坐标,后面的为横坐标)
*例2:
增加文字标注
sysusetsline2,clear
tssetday
#delimit;
tslinecalories,ttick(28nov200225dec2002,tpos(in))
ttext(347028nov2002"thanks"
347025dec2002"x-mas",orient(vert));
#delimitcr(clear)
*例3:
增加两条纵向的标示线
sysusetsline2,clear
tssetday
tslinecalories,tline(28nov200225dec2002)(在某时点画垂直线)
*或采用twowayline命令
locald1=d(28nov2002)
locald2=d(25dec2002)
linecaloriesday,xline(`d1'`d2')
*例4:
改变标签
tslinecalories,tlabel(,format(%tdmd))ttitle("Date(2002)")(分别为刻度名和横坐标名)
tslinecalories,tlabel(,format(%td))
******计量分析与Stata应用******
*主讲人:
连玉君博士
*单位:
中山大学岭南学院金融系
*电邮:
*主页:
*:
:
高级部分:
:
*计量分析与Stata应用
*==========================
*第六讲时间序列分析
*==========================
*6.2ARIMA模型
cdd:
\stata10\ado\personal\Net_Course\B6_TimeS
*=======================
*平稳时间序列模型
*=======================
*-----------------
*ARIMA模型helparima
*-----------------
*--AR过程与MA过程
*--自相关系数与偏自相关系数
*--滞后阶数的筛选
*--估计
*--预测
*--简介--
*AR过程(自回归过程)
*AR
(1):
y_t=rho*y_{t-1}+u_t
*AR(p):
y_t=r_1*y_{t-1}+r_2*y_{t-2}+...+r_p*y_{t-p}+u_t
clear
sim_armay_ar,ar(0.9)nobs(300)(自回归系数是0.9,观察值的个数是300)
liney_ar_t,yline(0)(在y=0处画条横线)
*-----------------------------------------------------------
*自相关系数(ACF)
*Cov[y_t,y_{t+s}]
*r_s=-------------------
*Var[y_t]
*偏自相关系数(PACF)
*y_t=a11*y_{t-1}+u_t(a11就是一阶(偏)自相关系数,)
*y_t=a21*y_{t-1}+a22*y_{t-2}+u_t(a22就是二阶偏自相关系数)
*...
*y_t=ak1*y_{t-1}+ak2*y_{t-2}+...+akk*y_{t-k}+u_t
*
*PACF为{a11,a22,a33,...,akk}
*相当于控制其它滞后项的影响后,得到的“净”相关系数
*-----------------------------------------------------------
acy_ar/*AR过程的ACF具有“拖尾”特征,长期记忆*/
pacy_ar/*AR过程的PACF具有“截尾”特征*/
*评论:
根据AC和PAC图形可以初步判断某个序列是否为AR过程
*具体表现为:
*
(1)AC图“拖尾”
*
(2)PAC图“截断”(截断处对应的阶数就是AR的滞后阶数P)
*MA过程(移动平均过程)(干扰项存在一个自相关的过程)
*MA
(1):
y_t=theta*u_{t-1}+u_t
*MA(q):
y_t=theta1*u_{t-1}+theta2*u_{t-2}+...+thetaq*u_{t-q}+u_t
sim_armay_ma,ma(0.8)nobs(300)
liney_ma_t,yline(0)
acy_ma/*MA过程的ACF具有“截尾”特征,短期记忆*/
pacy_ma/*MA过程的PACF具有锯齿型“拖尾”特征*/
*稳定性与可逆性
*定义:
协方差稳定(CovarianceStationary)
*a.E[y_t]独立于t;
*b.Var[y_t]是一个有限的正常数,且独立于t;
*c.Cov[y_t,y_{t+s}]是s的有限函数,但与t无关。
*稳定的AR过程和MA过程可以相互转换
*ARIMA模型(最大似然估计法)
*y_t=x_t*b+u_t结构方程
*u_t=rho*u_{t-1}+theta*v_{t-1}+v_t干扰项,ARMA(1,1)
*一阶自相关一阶移动平均白噪声
*
*很多情况下,模型设定中并不包含解释变量,此时ARMA(1,1)模型可表示为:
*y_t=a+rho*y_{t-1}+theta*v_{t-1}+v_t
*实例:
固定资产投资行为
*--估计--
usewpi1.dta,clear
d
dfullerwpi
gend_wpi=D.wpi
dfullerd_wpi
*ARMA(1,1,1)模型由于原始序列包含单位根,所以要采用ARIMA模型
arimawpi,arima(1,1,1)
*另一种设定方式,更加灵活
arimad_wpi,ar
(1)ma
(1)
*--滞后阶数的确定--
*LL值,AIC准则,BIC准则
*LL越大越好,AIC和BIC越小越好
*AIC=-2*ln(L)+2*k/*ln(L)对数似然值;k参数个数;N样本数*/
*BIC=-2*ln(L)+k*ln(N)
*BIC更倾向于筛选出“精简的”模型
*产生模拟数据:
ARMA(2,1)过程
clear
setseed1357
sim_armay_arma21,ar(0.8)ma(0.2)nobs(300)
*估计ARMA(1,1)模型,MLE
arimay_arma21,ar
(1)ma
(1)
*列示信息准则
estatic
*估计ARMA(2,1)模型
arimay_arma21,ar(12)ma
(1)(既包含一阶,也包含二阶滞后项)
estatic
retlist
matlistr(S)
mats=r(S)
dis"AIC="s[1,5]
*根据信息准则筛选模型
*例1:
模拟数据
tsset_t(设定时间变量)
matb=J(6,4,0)(产生一个矩阵,六行四列,元素全部为0)
localp=1(定义展元)
forvaluesi=1
(1)3{(i=1-3,每次增加1)
forvaluesj=1
(1)2{
matb[`p',1]=`i'
matb[`p',2]=`j'(b矩阵的第一列和第二列分别记录i和j的数值)
quiarimay_arma21,ar(1/`i')ma(1/`j')
eststorearma`i'`j'
quiestatic
matS=r(S)
matb[`p',3]=(S[1,5],S[1,6])
localp=`p'+1
}
}
matcolnamesb=ARMAAICBIC(定义矩阵的名称)(第三列第四列分别记录AIC和BIC的数值)
matlistb
localmmarma11arma12arma21arma22arma31arma32
esttab`mm',mtitle(`mm')compressnogapscalar(llaicbic)
*例2:
真实数据——美国零售价格指数
usewpi1.dta,clear
tssett
linewpit
lineD.wpit
lineD.ln_wpit
acD.ln_wpi/*包含AR过程*/
pacD.ln_wpi/*基本上可以判断是AR
(1),或ARMA(1,1)过程*/
*采用信息准则筛选滞后阶数
localy"D.ln_wpi"
locala=3/*AR(a)*/
localb=1/*MA(b)*/
forvaluesi=1
(1)`a'{
forvaluesj=0
(1)`b'{(0表示有可能只估计一个AR模型)
if`j'==0{
localma""
}
else{
localma"ma(1/`j')"
}
quiarima`