带有GARCH误差的状态空间模型
这篇博文旨在介绍一个新的插件(即 SSPACEGARCH),它扩展了 EViews 可用功能的当前功能,用于估计单变量状态空间模型。
目录
- 介绍
- 更改变异问题的解决方法
- CAPM型规格的应用
- 代码
- 责任
介绍
线性状态空间模型 (LSSM) 假设测量/信号方程的误差方差是恒定的。然而,在实践中,在某些情况下可能并非如此,并且误差的差异是随时间变化的。忽略这一事实可能会使参数估计值产生偏差。
更改变异问题的解决方法
假设我们有一个完整的时变参数模型:\
虽然上面的动态系统可以从状态空间中放入状态空间,但由于方差方程在状态变量中不是线性的,因此无法通过默认算法求解。 卡尔曼滤波和平滑器可以迭代应用,以获得新的状态变量平滑估计值 bit。信号估计值et的新值被建模为GARCH过程,用于计算的新值,直到收敛到、或对数似然。
CAPM型规格的应用
MSCI新兴市场货币指数®是一个有用的基准,可以了解特定新兴市场货币相对于其同行的表现是高于还是低于其他货币。在本练习中,我们将尝试确定 TRY 和 MSCI 之间的关系(见图 1)。
即使通过目视检查,两个指数的差异也很明显,但我们感兴趣的是回报之间的关系如何随时间变化。首先,使用上面的时变参数模型,我们估计假设方差固定的参数(见图2)。
自2008年全球金融危机以来,阿尔法系数已从零显著偏离到负值。贝塔系数在 2008 年和 2021 年期间徘徊在 1 附近,但随后下降,并在 2022 年期间变得不显着。还要注意 2018 年 8 月左右的峰值,这导致我们怀疑特殊因素/发展。
为了估计参数以及不断变化的方差模型,我们可以使用加载项(参见图 3)。
由于我们每天处理财务数据的频率,因此假设错误的 GARCH(1,1) 结构是解决变化方差问题的合理选择。然后,我们可以比较结果,看看与固定方差模型的结果相比有何差异(见图4)。
alpha 系数在整个样本上变得恒定。尽管与固定方差模型相比,平滑 beta 系数水平在完整样本中发生变化,但除某些时期外,两种估计值的动态或多或少保持不变。仔细观察这些时期以及波动性行为可能会揭示我们观察到的一些差异(图5)。
毫不奇怪,参数估计的许多巨大差异与波动率跳跃的时期重叠,其中大部分是由于当时土耳其金融市场发生的特定事件。
代码
'create a daily workfile
wfcreate d5 2005 2022
'retrieve data from Bloomberg
fetch(d=none) "tryusd curncy" 'TRY currency in USD
fetch(d=none) "mxef0cx0 index" 'MSCI Emerging Markets Currency Index in USD
'rename msci currency index
rename mxef0cx0 msci_curncy
'drop missing values in data
group data.add tryusd msci_curncy
pagecontract @all if @rnas(data)=0
'generate an index from tryusd for comparison purposes
smpl @first @first
series try_curncy = msci_curncy
smpl @first+1 @last
try_curncy = try_curncy(-1)*tryusd/tryusd(-1)
smpl @all
'draw charts
graph figure1.line try_curncy msci_curncy
'build a time-varying parameter CAPM model in state space
sspace ssmodel
ssmodel.append @signal dlog(tryusd)*100 = alpha + beta*dlog(msci_curncy)*100 + [var=exp(c(1))]
ssmodel.append @state alpha = alpha(-1) + [var=exp(c(2))]
ssmodel.append @state beta = beta(-1) + [var=exp(c(3))]
ssmodel.append @param c(1) .0 c(2) .0 c(3) .0
'estimate the model
ssmodel.ml
'display and save the smoothed estimates of time varying coefficients
freeze(mode=overwrite,figure2) ssmodel.stategraphs(t=smooth) *f
figure2.align(2,1,1)
ssmodel.makestates(t=smooth) sm_*
'estimate the model assuming GARCH(1,1) errors
ssmodel.sspacegarch(type=1,ref=1,iters=15,tol=1e-02,adjsave,garchsave)
'save the smoothed estimates of time varying coefficients
ssmodel_new.makestates(t=smooth) sm_*_new
'compare the smoothed estimates of beta coefficients
group gr_alpha.add sm_alpha*
freeze(mode=overwrite,figure4a) gr_alpha.line
group gr_beta.add sm_beta*
freeze(mode=overwrite,figure4b) gr_beta.line
graph figure4.merge figure4a figure4b
figure4.align(2,1,1)
'compare the absolute difference in estimates to GARCH errors
group gr_diff.add @abs((sm_beta-sm_beta_new)) @sqrt(garchvar)
freeze(mode=overwrite,figure5) gr_diff.line
figure5.axis overlap
figure5.setelem(2) axis(r)
责任
请注意,据作者所知,任何同行评审的研究都没有特别推荐加载项中实现的方法,因为从计量经济学的角度来看,这不是处理问题的首选方法。这只是一个迭代过程,涉及对模型的重复估计,假设误差具有适当的 GARCH 结构,以纠正变化的方差问题(如果有)。它只能用于实际目的,但您应该谨慎使用它并自担风险。