www.gusucode.com > econ 案例源码程序 matlab代码 > econ/ConvertStructuralVARMAModelToVECModelExample.m
%% Convert VARMA Model to VEC Model % Approximate the coefficients of the VEC model that represents % this stationary and invertible VARMA(8,4) model that is in lag % operator form % % $$\begin{array}{*{20}{l}}\left\{ {\left[ {\begin{array}{*{20}{c}} % 1&{0.2}&{ - 0.1}\\ % {0.03}&1&{ - 0.15}\\ % {0.9}&{ - 0.25}&1 % \end{array}} \right] + \left[ {\begin{array}{*{20}{c}} % {0.5}&{-0.2}&{-0.1}\\ % {-0.3}&{-0.1}&{0.1}\\ % {0.4}&{-0.2}&{-0.05} % \end{array}} \right]{L^4} + \left[ {\begin{array}{*{20}{c}} % {0.05}&{-0.02}&{-0.01}\\ % {-0.1}&{-0.01}&{-0.001}\\ % {0.04}&{-0.02}&{-0.005} % \end{array}} \right]{L^8}} \right\}{y_t} =\\ % \left\{ {\left[ {\begin{array}{*{20}{c}} % { 1}&{0}&{0}\\ % {0}&{1}&{0}\\ % {0}&{0}&{1} % \end{array}} \right] + \left[ {\begin{array}{*{20}{c}} % { - 0.02}&{ 0.03}&{0.3}\\ % {0.003}&{0.001}&{0.01}\\ % { 0.3}&{0.01}&{0.01} % \end{array}} \right]{L^4}} \right\}{\varepsilon _t}\end{array}$$ % % where $y_t = \left[y_{1t}\;\;\;y_{2t}\;\;\;y_{3t}\right]'$ and $\varepsilon_t = % \left[\varepsilon_{1t}\;\;\;\varepsilon_{2t}\;\;\;\varepsilon_{3t}\right]'$. % Copyright 2015 The MathWorks, Inc. %% % Create a cell vector containing the VAR coefficient matrices. Start with % the coefficient of $y_t$, and then enter the rest in order by lag. % Construct a vector that indicates the degree of the lag term for the % corresponding coefficients. VAR0 = {[1 0.2 -0.1; 0.03 1 -0.15; 0.9 -0.25 1],... [0.5 -0.2 -0.1; -0.3 -0.1 0.1; 0.4 -0.2 -0.05],... [0.05 -0.02 -0.01; -0.1 -0.01 -0.001; 0.04 -0.02 -0.005]}; var0Lags = [0 4 8]; %% % Create a cell vector containing the VMA coefficients matrices. Start % with the coefficient of $\varepsilon_t$, and then enter the rest in order % by lag. Construct a vector that indicates the degree of the lag term for % the corresponding coefficients. VMA0 = {eye(3),... [-0.02 0.03 0.3; 0.003 0.001 0.01; 0.3 0.01 0.01]}; vma0Lags = [0 4]; %% % |arma2ma| requires |LagOp| lag operator polynomials for input arguments % that comprise structural VAR or VMA models. Construct separate |LagOp| % polynomials that describe the VAR(8) and VMA(4) components of the % VARMA(8,4) model. VARLag = LagOp(VAR0,'Lags',var0Lags); VMALag = LagOp(VMA0,'Lags',vma0Lags); %% % |VARLag| and |VMALag| are |LagOp| lag operator polynomials that % describe the VAR and VMA components of the VARMA model. %% % Convert the VARMA(8,4) model to a VAR(_p_) model by obtaining the % coefficients of the truncated approximation of the infinite-lag % polynomial. Set |numLags| to return at most 12 lagged terms. numLags = 12; VAR = arma2ar(VARLag,VMALag,numLags) %% % |VAR| is a |LagOP| lag operator polynomial. All coefficients except % those corresponding to lags 0, 4, 8, and 12 are 3-by-3 matrices of zeros. % The coefficients in |VAR.Coefficients| comprise a structural VAR(12) model % approximation of the original VARMA(8,4) model. %% % Compute the coefficients of the VEC(11) model equivalent to the resulting % VAR(12) model. [VEC,C] = var2vec(VAR) %% % |VEC| is a |LagOp| lag operator polynomial containing the coefficient % matrices of the resulting VEC(11) model in |VEC.Coefficients|. % |VEC.Coefficients{0}| is the coefficient of $\Delta y_t$, |Vec{1}| is the % coefficient of $\Delta y_{t-1}$, and so on. %% % Display the nonzero coefficients of the resulting VEC model. lag2Idx = VEC.Lags + 1; % Lags start at 0. Add 1 to convert to indices. VecCoeff = toCellArray(VEC); for j = 1:numel(lag2Idx) fprintf('___________Lag %d__________\n',lag2Idx(j) - 1) fprintf('%8.3f %8.3f %8.3f \n',VecCoeff{lag2Idx(j)}) fprintf ('__________________________\n') end