资源描述
文档结尾是FAQ和var建模的15点注意事项
【梳理概念】
向量自回归(VAR, Vector Auto regression)常用于预测相互联系的时间序列系统以及分析随机扰动对变量系统的动态影响。
VAR模型:
VAR方法通过把系统中每一个内生变量,作为系统中所有内生变量的滞后值的函数来构造模型,从而回避了结构化模型的要求。
VAR模型对于相互联系的时间序列变量系统是有效的预测模型,同时,向量自回归模型也被频繁地用于分析不同类型的随机误差项对系统变量的动态影响。如果变量之间不仅存在滞后影响,而不存在同期影响关系,则适合建立VAR模型,因为VAR模型实际上是把当期关系隐含到了随机扰动项之中。
协整:
Engle和Granger(1987a)指出两个或多个非平稳时间序列的线性组合可能是平稳的。假如这样一种平稳的或的线性组合存在,这些非平稳(有单位根)时间序列之间被认为是具有协整关系的。这种平稳的线性组合被称为协整方程且可被解释为变量之间的长期均衡关系。
* 第六讲 时间序列分析
*---- 目录 -----
*
*-- 简介
* 6.1 时间序列数据的处理
*-- 平稳时间序列模型
* 6.2 ARIMA 模型
* 6.3 VAR 模型
*-- 非平稳时间序列模型——近些年得到重视,发展很快
* 6.4 非平稳时间序列简介
* 6.5 单位根检验——检验非平稳
* 6.6 协整分析——非平稳序列的分析
*-- 自回归条件异方差模型
* 6.7 GARCH 模型 ——金融序列 不同时点上序列的差异
反映动态关系的时间数据顺序不可颠倒
cd d:\stata10\ado\personal\Net_Course\B6_TimeS
*=======================
* 时间序列数据的处理 help time
*=======================
* 声明时间序列:tsset 命令
use gnp96.dta, clear
list in 1/20
gen Lgnp = L.gnp(此时没办法生成之后一阶的变量,因为没有设定时间变量)
tsset date(设定date为时间变量,timeseries)
list in 1/20
gen Lgnp = L.gnp96
滞后一期,所以会产生1个缺失值
l 检查是否有断点 ——肉眼看不方便,用命令检查
use gnp96.dta, clear
tsset date
tsreport, report
drop in 10/10 ——去掉断点成连续的,才能继续进行
list in 1/12
tsreport, report
tsreport, report list /*列出存在断点的样本信息*/
l 填充缺漏值——接着上一步,看看stata如何填充缺漏值。一般用前面的数据的平均值或预测等
Tsfill(以缺漏值的形式)
tsreport, report list
list in 1/12
* 追加样本——有时候追加样本不是为了追加新的值,而是为了预测(见应用)
use gnp96.dta, clear
tsset date
list in -10/-1
sum
tsappend , add(5) /*追加5个观察值*/
list in -10/-1 增加的样本值都是缺漏的 可以手动输入
sum
* 应用:样本外预测
reg gnp96 L.gnp96
predict gnp_hat
list in -10/-1——接上一步 这样增加的样本值的预测值就显示出来了(前提是追加了样本值)
* 清除时间标识
tsset, clear——若数据的形态有所改变 就清除
*---------------------
* 变量的生成与处理
*---------------------
滞后L—lag 前导F—forward 差分D-difference
*--- 滞后项、超前项和差分项 help tsvarlist
use gnp96.dta, clear
tsset date
gen Lgnp = L.gnp96 /*一阶滞后*/
gen L2gnp = L2.gnp96 /*二阶滞后*/
gen Fgnp = F.gnp96
gen F2gnp = F2.gnp96
gen Dgnp = D.gnp96
gen D2gnp = D2.gnp96
list in 1/10
list in -10/-1
D,L,F可以组合生成变量 gen 新变量名= DL.变量名 先滞后再差分
*--- 产生增长率变量gen 变量名=D.ln(gnp96): 对数差分——得到近似的增长率
先设定时间变量 tsset date
gen lngnp = ln(gnp96)
gen growth = D.lngnp(得到近似的增长率)
上面两步的简写形式(gen growth=D.ln(gnp96))——该简化方法在stata12中不可行
gen growth2 = (gnp96-L.gnp96)/L.gnp96——增长率的最基本定义
gen diff = growth - growth2——若对数差分和真正的增长率接近,diff约等于0
list date gnp96 lngnp growth* diff in 1/10
*---------------------
* 日期的处理
*---------------------
*--- 日期的格式 help tsfmt
*
* 基本时点:整数数值,如 -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 命令指定显示格式
use B6_tsset.dta, clear
tsset t, daily
list
use B6_tsset.dta, clear
tsset t, weekly——定义基本时点1.2.3间的间隔 是日、周、年等
list
* 相同的基本时点,采用不同的方式显示会有不同的效果
clear
set obs 100
gen t = _n
replace t = t-3
local format "td tw tm tq th ty"
foreach f of local format{
gen t_`f' = t
format t_`f' %`f'
}
list in 1/20
* 说明:同样的数值,采用不同的显示方式,会有完全不同的含义
* 指定起始时点
cap drop month
generate month = m(1990-1) + _n - 1
format month %tm
list month in 1/20
cap drop year
gen year = y(1952) + _n - 1
format year %ty
list t year in 1/20
* 设定不同的显示格式 help dfmt
*
* 日期的显示格式 %d (%td) 定义如下:
* %[-][t]d<描述特定的显示格式>
*
* 具体项目释义:
* “<描述特定的显示格式>”中可包含如下字母或字符
* c y m l n d j h q w _ . , : - / ' !c
* C Y M L N D J W
* 定义如下:
/*
c and C 世纪值(个位数不附加/附加0)
y and Y 不含世纪值的年份(个位数不附加/附加0)
m 三个英文字母的月份简写(第一个字母大写)
M 英文字母拼写的月份(第一个字母大写)
n and N 数字月份(个位数不附加/附加0)
d and D 一个月中的第几日(个位数不附加/附加0)
j and J 一年中的第几日(个位数不附加/附加0)
h 一年中的第几半年 (1 or 2)
q 一年中的第几季度 (1, 2, 3, or 4)
w and W 一年中的第几周(个位数不附加/附加0)
_ display a blank (下划线)
. display a period(句号)
, display a comma(逗号)
: display a colon(冒号)
- display a dash (短线)
/ display a slash(斜线)
' display a close single quote(右引号)
!c display character c (code !! to display an exclamation point)
*/
*
* 例如:
* Format Sample date in format
* -----------------------------------
* %td 07jul1948
* %tdM_d,_CY July 7, 1948
* %tdY/M/D 48/07/11
* %tdM-D-CY 07-11-1948
* %tqCY.q 1999.2
* %tqCY:q 1992:2
* %twCY,_w 2010, 48
* -----------------------------------
* 又如:
* Format Sample date in format
* ----------------------------------
* %d 11jul1948
* %dDlCY 11jul1948
* %dDlY 11jul48
* %dM_d,_CY July 11, 1948
* %dd_M_CY 11 July 1948
* %dN/D/Y 07/11/48
* %dD/N/Y 11/07/48
* %dY/N/D 48/07/11
* %dN-D-CY 07-11-1948
* ----------------------------------
clear
set obs 100
gen t = _n + d(13feb1978)(第一个数显示的是1978年2月14对应的数值)
list t in 1/5
format t %dCY-N-D /*1978-02-14*/
list t in 1/5
format t %dcy_n_d /*1978 2 14*/
list t in 1/5
use B6_tsset, clear
list
tsset t, format(%twCY-m)
list
* 一个实例:生成连续的时间变量
use e1920.dta, clear
list year month in 1/30
sort year month
gen time = _n
tsset time
list year month time in 1/30
generate newmonth = m(1920-1) + time - 1
tsset newmonth, monthly
list year month time newmonth in 1/30
*--- 处理日期的函数
help dates_and_times
help time-series functions
* 以下适用于 STATA9.2 版本
*-- 时间序列日期概览 help tdates
*-- 将文字变量转换为日期 help dlyfcns
*-- 利用年、月、季度转换日期 help dlyfcns
*-- 日期转换函数 help dcfcns
*-----------------------
* 图解时间序列
*-----------------------
* help tsline
* 例1:
clear
set seed 13579113
sim_arma ar2, ar(0.7 0.2) nobs(200)
sim_arma ma2, ma(0.7 0.2)
tsset _t
tsline ar2 ma2
* 亦可采用 twoway line 命令绘制,但较为繁琐
twoway line ar2 ma2 _t(前面两个为纵坐标,后面的为横坐标)
* 例2:增加文字标注
sysuse tsline2, clear
tsset day
#delimit ;
tsline calories, ttick(28nov2002 25dec2002, tpos(in))
ttext(3470 28nov2002 "thanks"
3470 25dec2002 "x-mas", orient(vert));
#delimit cr(clear)
* 例3:增加两条纵向的标示线
sysuse tsline2, clear
tsset day
tsline calories, tline(28nov2002 25dec2002)(在某时点画垂直线)
* 或采用 twoway line 命令
local d1 = d(28nov2002)
local d2 = d(25dec2002)
line calories day, xline(`d1' `d2')
* 例4:改变标签
tsline calories, tlabel(, format(%tdmd)) ttitle("Date (2002)")(分别为刻度名和横坐标名)
tsline calories, tlabel(, format(%td))
****** 计量分析与Stata应用 ******
* 主讲人:连玉君 博士
* 单 位:中山大学岭南学院金融系
* 电 邮: arlionn@
* 主 页:
* ::高级部分::
* 计量分析与Stata应用
* ==========================
* 第六讲 时间序列分析
* ==========================
* 6.2 ARIMA 模型
cd d:\stata10\ado\personal\Net_Course\B6_TimeS
*=======================
* 平稳时间序列模型
*=======================
*-----------------
* ARIMA 模型 help arima
*-----------------
*-- 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_arma y_ar, ar(0.9) nobs(300)(自回归系数是0.9,观察值的个数是300)
line y_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}
* 相当于控制其它滞后项的影响后,得到的“净”相关系数
*-----------------------------------------------------------
ac y_ar /*AR过程的 ACF 具有“拖尾”特征,长期记忆*/
pac y_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_arma y_ma, ma(0.8) nobs(300)
line y_ma _t, yline(0)
ac y_ma /*MA过程的 ACF 具有“截尾”特征,短期记忆*/
pac y_ma /*MA过程的 PACF 具有锯齿型“拖尾”特征*/
* 稳定性与可逆性
* 定义:协方差稳定(Covariance Stationary)
* 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
* 实例:固定资产投资行为
* -- 估计 --
use wpi1.dta, clear
d
dfuller wpi
gen d_wpi = D.wpi
dfuller d_wpi
* ARMA(1,1,1) 模型 由于原始序列包含单位根,所以要采用ARIMA模型
arima wpi, arima(1,1,1)
* 另一种设定方式,更加灵活
arima d_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
set seed 1357
sim_arma y_arma21, ar(0.8) ma(0.2) nobs(300)
* 估计 ARMA(1,1) 模型,MLE
arima y_arma21, ar(1) ma(1)
* 列示信息准则
estat ic
* 估计 ARMA(2,1) 模型
arima y_arma21, ar(1 2) ma(1)(既包含一阶,也包含二阶滞后项)
estat ic
ret list
mat list r(S)
mat s = r(S)
dis "AIC = " s[1,5]
* 根据信息准则筛选模型
* 例1:模拟数据
tsset _t(设定时间变量)
mat b = J(6,4,0)(产生一个矩阵,六行四列,元素全部为0)
local p = 1(定义展元)
forvalues i = 1(1)3{(i=1-3,每次增加1)
forvalues j = 1(1)2{
mat b[`p',1] = `i'
mat b[`p',2] = `j'(b矩阵的第一列和第二列分别记录i和j的数值)
qui arima y_arma21 , ar(1/`i') ma(1/`j')
est store arma`i'`j'
qui estat ic
mat S = r(S)
mat b[`p',3] = (S[1,5], S[1,6])
local p = `p' + 1
}
}
mat colnames b = AR MA AIC BIC(定义矩阵的名称)(第三列第四列分别记录AIC和BIC的数值)
mat list b
local mm arma11 arma12 arma21 arma22 arma31 arma32
esttab `mm', mtitle(`mm') compress nogap scalar(ll aic bic)
* 例2:真实数据——美国零售价格指数
use wpi1.dta, clear
tsset t
line wpi t
line D.wpi t
line D.ln_wpi t
ac D.ln_wpi /*包含AR过程*/
pac D.ln_wpi /*基本上可以判断是AR(1),或ARMA(1,1)过程*/
* 采用信息准则筛选滞后阶数
local y "D.ln_wpi"
local a = 3 /*AR(a)*/
local b = 1 /*MA(b)*/
forvalues i = 1(1)`a'{
forvalues j = 0(1)`b'{ (0表示有可能只估计一个AR模型)
if `j' == 0{
local ma ""
}
else{
local ma "ma(1/`j')"
}
qui arima `y' , ar(1/`i') `ma' /*填写变量名称*/
est store arma`i'`j'
*qui estat ic
}
}
local mm arma10 arma11 arma20 arma21 arma30 arma31
esttab `mm', mtitle(`mm') compress nogap scalar(ll aic bic)
* 评论:
* (1) 本例中,AIC和BIC判断的结论一致,都是选择 ARMA(1,1) 模型;
* (2) 多数情况下,ARMA(1,1) 模型都有较好的表现。
* -- 季节效应 --
use wpi1.dta, clear
set scheme s2color
tsset t
line wpi t
line d.wpi t, yline(0)
ac D.ln_wpi, ylabels(-0.4(0.2)0.6) /*注意前四阶*/
pac D.ln_wpi, ylabels(-0.4(0.2)0.6)
arima D.ln_wpi, ar(1) ma(1)
est store arma11
arima D.ln_wpi, ar(1) ma(1 4)(一阶和四阶)
est store arma114
arima D.ln_wpi, ar(1) ma(1/4)(一阶到四阶)
est store arma11234
local mm "arma11 arma114 arma11234"
esttab `mm', mtitle(`mm') scalar(ll aic bic)
* 此时,我们发现,选择 ARMA(1,(1,4)) 模型更加合理
* 注意资料的特性: 季节资料通常会呈现出“季节效应”
* 月度资料有时也会呈现出“月度效应”
* -- 预测 --
use wpi1.dta, clear
arima D.ln_wpi, ar(1) ma(1 4)
cap drop y_hat0
cap drop y_hat1
cap drop y_hat_dy
* 样本内预测
predict y_hat0 /* y 的拟合值 */
* 样本外预测
list in -15/-1
tsappend, add(8)(增加8个季度资料)
list in -15/-1
predict y_hat1 /* y 的样本外一步预测值 */
list in -15/-1
gen Dln_wpi = D.ln_wpi
sum
predict y_hat_dy0, dynamic(124) /*动态预测*/(从124期开始动态预测)
* 解释:
* 当 t<123 时,采用 y_t 的真实值进行预测;
* 当 t>=123 时,采用 y_t 的预测值进行进一步的预测
predict y_hat_dy5, dynamic(120)
list in -20/-1
****** 计量分析与Stata应用 ******
* 主讲人:连玉君 博士
* 单 位:中山大学岭南学院金融系
* 电 邮: arlionn@
* 主 页:
* ::高级部分::
* 计量分析与Stata应用
* ==========================
* 第六讲 时间序列分析
* ==========================
* 6.3 VAR 模型(I)
cd d:\stata10\ado\personal\Net_Course\B6_TimeS
*=======================
* 向量自回归(VAR)模型
*=======================
*-----------------
* 简 介
*-----------------
*== 结构型 VAR 模型与缩减型 VAR 模型——两种var模型
Arima模型和移动平均 单个时间序列变量
VAR 模型 估计多个变量相当于多个Arima模型联合的估计 需要考虑跨期、同期的相关性
*-(一) 结构型 VAR
* p
* S*Y_t = C + SUM S_i*Y_t-p + R*X_t + E_t (1)
* i=1
*每个变量可能受到自身滞后的影响(表现自我相关的特征),也可能受到其他变量或其滞后的影响、还有随机干扰项的影响 每一个序列都有干扰项 所以一共M个
* 其中,
* Y_t = [y1_t y2_t ... yM_t]' ,是一个 MxT 维列向量, M 个内生变量
* X_t = [x1_t x2_t ... xK_t] ,是一个 MTxK 维矩阵,表示外生变量
* E_t = [u1_t u2_t ... uM_t]' ,是一个 MxT 维列向量(干扰项)
*- 缩减型 VAR
*
* 若 S 矩阵可逆,则 (1) 式可表示为:
*
* p
* Y_t = C + SUM A_i*Y_t-p + B*X_t + U_t (2)
* i=1
*
* 其中,
* A_i = inv(S)*S_i
* B = inv(S)*R
*- 评论:
* (1) 结构型SVAR 重点关注变量之间的同期相关性;同一时点之间变量的相互影响
* (2) 缩减型VAR 重点关注变
展开阅读全文