Simulate Paths of Threshold-Switching Dynamic Regression Models
The example shows how to generate random response, innovations, and state paths of various threshold-switching dynamic regression models by using the simulate
function.
Simulate Model Containing Exogenous Threshold Variable
Consider the Canadian inflation and interest rates data set Data_Canada.mat
, which contains the CPI-based inflation rate series INF_C
, among other series. Load the data set and extract INF_C
.
load Data_Canada
INF_C = DataTable.INF_C;
numObs = length(INF_C);
Model simulation requires a fully specified model. Create a univariate, three-state, mean-variance-switching, smooth threshold autoregressive (STAR) model for an arbitrary response variable in the data set with the following characteristics:
The threshold variable is
INF_C
.The threshold transitions are at mid-levels 2 and 8, the transition function is logistic, the transition rate from state 1 to 2 is 3.5, and the rate from state 2 to 3 is 1.5.
The state 1 submodel is , where .
The state 2 submodel is , where .
The state 3 submodel is , where .
ttL = threshold([2 8],Type="logistic",Rates=[3.5 1.5]); mdl1 = arima(Constant=-5,Variance=0.1); mdl2 = arima(Constant=0,Variance=0.3); mdl3 = arima(Constant=5,Variance=0.5); Mdl1 = tsVAR(ttL,[mdl1 mdl2 mdl3],SeriesNames="y")
Mdl1 = tsVAR with properties: Switch: [1x1 threshold] Submodels: [3x1 varm] NumStates: 3 NumSeries: 1 StateNames: ["1" "2" "3"] SeriesNames: "y" Covariance: []
Mdl1
is a tsVAR
object representing the STAR model. The model is agnostic of the threshold variable at this point. It is aware only of the characteristics of the threshold transitions.
Generate 10 sample paths of the STAR model. To simulate observations, the model requires threshold variable data to trigger state switching. Specify INF_C
as the exogenous threshold variable data.
rng(0) % For reproducibility y = simulate(Mdl1,numObs,NumPaths=10,Type="exogenous",Z=INF_C);
y
is a numObs
-by-10 numeric matrix of independent, simulated paths. The rows correspond to periods in the data and the columns correspond to the generated paths.
In the same figure, plot the threshold transitions and the threshold data in the same plot, and plot the simulated responses.
figure tiledlayout(2,1) nexttile ttplot(ttL,'Data',INF_C) title('Threshold Variable') colorbar('off') nexttile plot(y) title("Simulations") grid on axis tight
The submodels have conditional means –5
, 0
, and 5
with innovations variances 0.1
, 0.2
, and 0.3
. The response y
switches between submodels according to the value of the threshold variable INF_C
. Because Mdl1.Covariance
is empty, simulate
generates innovations by using the submodel covariances. Regime mixing is evident near transitions, for example, near observations 10
and 25
.
Simulate Models Containing Endogenous Threshold Variable
Models can be self-exciting, where simulations use an endogenous, lagged component of the response as a threshold variable.
Create a threshold-switching model with the following characteristics:
The threshold transitions are at mid-levels 2 and 8, and the transition function is discrete.
The state 1 submodel is .
The state 2 submodel is .
The state 3 submodel is .
The model-wide innovation variable .
ttD = threshold([2 8]); mdl1 = varm(Constant=[0; 0]); mdl2 = varm(Constant=[-5; 5]); mdl3 = varm(Constant=[-10; 10]); Sigma = 5*eye(2); SimMdl2 = tsVAR(ttD,[mdl1 mdl2 mdl3],Covariance=Sigma);
Simulate 30 periods of the self-exciting TAR (SETAR) model. Specify that the threshold variable is the second response variable with a delay of 5 periods. Return simulated responses, innovations, and states.
rng(0) [Y,E,SP] = simulate(SimMdl2,30,Type="endogenous",Index=1,Delay=5); figure tiledlayout(4,1) nexttile ttplot(ttD,Data=Y(:,1)) title('Threshold Variable') nexttile plot(Y) title("Simulation") legend(["Y1" "Y2"]) grid on nexttile plot(E) title("Innovations") legend(["E1" "E2"]) grid on nexttile stem(SP) title("State Path")
The simulation starts in state 1, below the first threshold level, where both components of the response have a conditional mean of 0. At the 5th observation, a large innovation drives the first component of the response Y1
, which is the self-exciting threshold variable, over the second threshold level and into state 3. Because the delay is 5, a switch to state 3 occurs at the 10th observation, where the two components of the response center on distinct conditional means of -10 and 10. The pattern is repeated at the 20th and 25th observations, where a switch from state 1 to state 2 causes a delayed response to components centered on conditional means of -5 and 5.
Include negative autoregression to the submodel in the first state to generate paths with more level crossings and subsequent state changes.
mdl1.AR = {[-0.6 0; 0 0]}; SimMdl2 = tsVAR(ttD,[mdl1 mdl2 mdl3],Covariance=Sigma); Y = simulate(SimMdl2,30,Type="endogenous",Index=1,Delay=5); figure tiledlayout(2,1) nexttile ttplot(ttD,Data=Y(:,1)) title("Threshold Variable") nexttile plot(Y) title("Simulation") legend(["Y1" "Y2"]) grid on
Include a regression component to the submodel in the first state to change the dynamics to be more cyclic.
mdl1.Beta = [1 1; -1 -1]; X = 5*rand(30,2); SimMdl3 = tsVAR(ttD,[mdl1 mdl2 mdl3],Covariance=Sigma); Y = simulate(SimMdl3,30,Type="endogenous",Index=1,Delay=5,X=X); figure tiledlayout(2,1) nexttile ttplot(ttD,Data=Y(:,1)) title("Threshold Variable") nexttile plot(Y) title("Simulation") legend(["Y1" "Y2"]) grid on
Change the transition function to a smooth logistic distribution to produce a model with mixed dynamics and a damped response.
ttL2 = threshold([2 8],Type="logistic",Rates=[0.2 0.3]); SimMdl4 = tsVAR(ttL2,[mdl1 mdl2 mdl3],Covariance=Sigma); YS = simulate(SimMdl4,30,Type="endogenous",Index=1,Delay=5,X=X); figure x = 1:30; plot(x,Y(x,1),"r-",x,YS(x,1),"b--") title("Simulations") legend(["TAR" "STAR"]) grid on
The plot shows the self-exciting component of the response Y1
in the two models. The logistic transitions in the STAR model result in mixing of submodel responses. When submodels of lower absolute conditional means mix with those of higher absolute conditional means, the result is mean reversion toward 0.