simulate
Simulate sample paths of thresholdswitching dynamic regression model
Since R2021b
Description
uses additional
options specified by one or more namevalue arguments. For example, Y
= simulate(Mdl
,numObs
,Name,Value
)simulate(Mdl,10,NumPaths=1000,Y0=Y0)
simulates
1000
sample paths of length 10
, and initializes the
dynamic component of each submodel by using the presample response data
Y0
.
[
also returns the simulated innovation paths Y
,E
,StatePaths
] = simulate(___)E
and the simulated state
paths StatePaths
, using any of the input argument combinations in the
previous syntaxes.
Examples
Simulate Response Path from SETAR Model
Suppose a datagenerating process (DGP) is a twostate, selfexciting threshold autoregressive (SETAR) model for a 1D response variable. Specify all parameter values (this example uses arbitrary values).
Create Fully Specified Model for DGP
Create a discrete threshold transition at level 0. Label the regimes to reflect the state of the economy:
When the threshold variable (currently unknown) is in $\left(\infty ,0\right)$, the economy is in a recession.
When the threshold variable is in $[0,\infty )$, the economy is expanding.
t = 0; tt = threshold(t,StateNames=["Recession" "Expansion"])
tt = threshold with properties: Type: 'discrete' Levels: 0 Rates: [] StateNames: ["Recession" "Expansion"] NumStates: 2
tt
is a fully specified threshold
object that describes the switching mechanism of the thresholdswitching model.
Assume the following univariate models describe the response process of the system:
Recession: ${\mathit{y}}_{\mathit{t}}=1+0.1{\mathit{y}}_{\mathit{t}1}+{\epsilon}_{1,\mathit{t}}$, where ${\epsilon}_{1,\mathit{t}}\sim {\rm N}\left(0,1\right)$.
Expansion: ${\mathit{y}}_{\mathit{t}}=1++0.3{\mathit{y}}_{\mathit{t}1}+0.2{\mathit{y}}_{\mathit{t}2}+{\epsilon}_{2,\mathit{t}}$, where ${\epsilon}_{2,\mathit{t}}\sim {\rm N}\left(0,{2}^{2}\right)$.
For each regime, use arima
to create an AR model that describes the response process within the regime.
c1 = 1; c2 = 1; ar1 = 0.1; ar2 = [0.3 0.2]; v1 = 1; v2 = 4; mdl1 = arima(Constant=c1,AR=ar1,Variance=v1,... Description="Recession State Model")
mdl1 = arima with properties: Description: "Recession State Model" SeriesName: "Y" Distribution: Name = "Gaussian" P: 1 D: 0 Q: 0 Constant: 1 AR: {0.1} at lag [1] SAR: {} MA: {} SMA: {} Seasonality: 0 Beta: [1×0] Variance: 1 ARIMA(1,0,0) Model (Gaussian Distribution)
mdl2 = arima(Constant=c2,AR=ar2,Variance=v2,... Description="Expansion State Model")
mdl2 = arima with properties: Description: "Expansion State Model" SeriesName: "Y" Distribution: Name = "Gaussian" P: 2 D: 0 Q: 0 Constant: 1 AR: {0.3 0.2} at lags [1 2] SAR: {} MA: {} SMA: {} Seasonality: 0 Beta: [1×0] Variance: 4 ARIMA(2,0,0) Model (Gaussian Distribution)
mdl1
and mdl2
are fully specified arima
objects.
Store the submodels in a vector with order corresponding to the regimes in tt.StateNames
.
mdl = [mdl1; mdl2];
Use tsVAR
to create a TAR model from the switching mechanism tt
and the statespecific submodels mdl
.
Mdl = tsVAR(tt,mdl)
Mdl = tsVAR with properties: Switch: [1x1 threshold] Submodels: [2x1 varm] NumStates: 2 NumSeries: 1 StateNames: ["Recession" "Expansion"] SeriesNames: "1" Covariance: []
Mdl.Submodels(2)
ans = varm with properties: Description: "ARStationary 1Dimensional VAR(2) Model" SeriesNames: "Y1" NumSeries: 1 P: 2 Constant: 1 AR: {0.3 0.2} at lags [1 2] Trend: 0 Beta: [1×0 matrix] Covariance: 4
Mdl
is a fully specified tsVAR
object representing a univariate twostate TAR model. tsVAR
stores specified arima
submodels as varm
objects.
Simulate Response Data from DGP
Generate one random response path of length 50 from the model. simulate
assumes that the threshold variable is ${\mathit{y}}_{\mathit{t}1}$, which implies that the model is selfexciting.
rng(1); % For reproducibility
y = simulate(Mdl,50);
y
is a 50by1 vector of one response path.
Plot the response path with the threshold by using ttplot
.
figure ttplot(Mdl.Switch,Data=y)
Simulate Multiple Paths
Consider the following logistic TAR (LSTAR) model for the annual, CPIbased, Canadian inflation rate series ${\mathit{y}}_{\mathit{t}}$.
State 1: ${\mathit{y}}_{\mathit{t}}=5+{\epsilon}_{1,\mathit{t}}$, where ${\epsilon}_{1,\mathit{t}}\sim {\rm N}\left(0,0.{1}^{2}\right).$
State 2: ${\mathit{y}}_{\mathit{t}}={\epsilon}_{2,\mathit{t}}$, where ${\epsilon}_{2,\mathit{t}}\sim {\rm N}\left(0,0.{2}^{2}\right).$
State 3: ${\mathit{y}}_{\mathit{t}}=5+{\epsilon}_{3,\mathit{t}}$, where ${\epsilon}_{3,\mathit{t}}\sim {\rm N}\left(0,0.{3}^{2}\right).$
The system is in state 1 when ${\mathit{y}}_{\mathit{t}}<2$, the system is in state 2 when $2\le {\mathit{y}}_{\mathit{t}}<8$, and the system is in state 3 otherwise.
The transition function rate between states 1 and 2 is 3.5, and the transition function rate between states 2 and 3 is 1.5.
Create an LSTAR model representing ${\mathit{y}}_{\mathit{t}}$.
t = [2 8];
tt = threshold([2 8],Type="logistic",Rates=[3.5 1.5]);
mdl1 = arima(Constant=5,Variance=0.1);
mdl2 = arima(Constant=0,Variance=0.2);
mdl3 = arima(Constant=5,Variance=0.3);
Mdl = tsVAR(tt,[mdl1; mdl2; mdl3]);
Load the Canadian inflation and interest rate data set.
load Data_Canada
Extract the CPIbased inflation rate series.
INF_C = DataTable.INF_C; numObs = length(INF_C);
Simulate ten paths from the model. Specify the threshold variable type and its data.
Y = simulate(Mdl,numObs,NumPaths=10,Type="exogenous",Z=INF_C);
Y is a numObs
by10 matrix of simulated paths. Each column represents an independently simulated path.
In a tiled layout, plot the threshold transitions with the data by using ttplot
,and plot the simulated paths to one tile.
tiledlayout(2,1) nexttile ttplot(tt,Data=INF_C) colorbar('off') xticklabels(dates(xticks)) nexttile plot(dates,Y) grid on axis tight title("Simulations")
Y
switches between submodels according to the value of the threshold variable INF_C
. Mixing is evident for observations near thresholds, such as at the inflation rates of 1964 and 1978.
Return Innovations and States
Consider the model for the annual, CPIbased, Canadian inflation rate series in Simulate Multiple Paths.
Create the LSTAR model for the series.
t = [2 8];
tt = threshold([2 8],Type="logistic",Rates=[3.5 1.5]);
mdl1 = arima(Constant=5,Variance=0.1);
mdl2 = arima(Constant=0,Variance=0.2);
mdl3 = arima(Constant=5,Variance=0.3);
Mdl = tsVAR(tt,[mdl1; mdl2; mdl3]);
Load the Canadian inflation and interest rate data set and extract the inflation rate series.
load Data_Canada
INF_C = DataTable.INF_C;
numObs = length(INF_C);
Simulate a length numObs
path from the model. Specify the threshold variable type and its data. Return the innovations and states.
[y,e,s] = simulate(Mdl,numObs,NumPaths=10,Type="exogenous",Z=INF_C); tiledlayout(3,1) nexttile plot(y); ylabel("Simulated Response") grid on nexttile plot(e) ylabel('Innovation') grid on nexttile stem(s) ylabel('State') yticks([1 2 3]) yticklabels(Mdl.StateNames)
Initialize Multivariate Model Simulation from Multiple Starting Conditions
This example shows how to initialize simulated paths from presample responses and initial states. The example uses arbitrary parameter values.
Fully Specify LSETAR Model
Consider the following 2D LSETAR model.
State 1,
"Low"
: $${y}_{t}=\left[\begin{array}{c}1\\ 1\end{array}\right]+{\epsilon}_{1,t},$$ where $${\epsilon}_{1,t}\sim N\left(\left[\begin{array}{c}0\\ 0\end{array}\right],\left[\begin{array}{cc}1& 0.1\\ 0.1& 1\end{array}\right]\right).$$State 2 ,
"Med"
: $${y}_{t}=\left[\begin{array}{c}2\\ 2\end{array}\right]+\left[\begin{array}{cc}0.5& 0.1\\ 0.5& 0.5\end{array}\right]{y}_{t1}+{\epsilon}_{2,t},$$ where $${\epsilon}_{2,t}\sim N\left(\left[\begin{array}{c}0\\ 0\end{array}\right],\left[\begin{array}{cc}2& 0.2\\ 0.2& 2\end{array}\right]\right).$$State 3,
"High"
: $${y}_{t}=\left[\begin{array}{c}3\\ 3\end{array}\right]+\left[\begin{array}{cc}0.25& 0\\ 0& 0\end{array}\right]{y}_{t1}+\left[\begin{array}{cc}0& 0\\ 0.25& 0\end{array}\right]{y}_{t2}+{\epsilon}_{3,t},$$ where $${\epsilon}_{3,t}\sim N\left(\left[\begin{array}{c}0\\ 0\end{array}\right],\left[\begin{array}{cc}3& 0.3\\ 0.3& 3\end{array}\right]\right).$$The system is in state 1 when ${\mathit{y}}_{2,\mathit{t}4}<1$, the system is in state 2 when $1\le {\mathit{y}}_{2,\mathit{t}4}<1$, and the system is in state 3 otherwise.
The transition function is logistic. The transition rate from state 1 to 2 is 3.5, and the transition rate from state 1 to 3 is 1.5.
Create logistic threshold transitions at midlevels 1 and 1 with rates 3.5
and 1.5
, respectively. Label the states.
t = [1 1]; r = [3.5 1.5]; stateNames = ["Low" "Med" "High"]; tt = threshold(t,Type="logistic",Rates=[3.5 1.5],StateNames=stateNames);
Create the VAR submodels by using varm
. Store the submodels in a vector with order corresponding to the regimes in tt.StateNames
.
% Constants (numSeries x 1 vectors) C1 = [1; 1]; C2 = [2; 2]; C3 = [3; 3]; % Autoregression coefficients (numSeries x numSeries matrices) AR1 = {}; % 0 lags AR2 = {[0.5 0.1; 0.5 0.5]}; % 1 lag AR3 = {[0.25 0; 0 0] [0 0; 0.25 0]}; % 2 lags % Innovations covariances (numSeries x numSeries matrices) Sigma1 = [1 0.1; 0.1 1]; Sigma2 = [2 0.2; 0.2 2]; Sigma3 = [3 0.3; 0.3 3]; % VAR Submodels mdl1 = varm('Constant',C1,'AR',AR1,'Covariance',Sigma1); mdl2 = varm('Constant',C2,'AR',AR2,'Covariance',Sigma2); mdl3 = varm('Constant',C3,'AR',AR3,'Covariance',Sigma3); mdl = [mdl1; mdl2; mdl3];
Create an LSETAR model from the switching mechanism tt
and the statespecific submodels mdl
. Label the series Y1
and Y2
.
Mdl = tsVAR(tt,mdl,SeriesNames=["Y1" "Y2"])
Mdl = tsVAR with properties: Switch: [1x1 threshold] Submodels: [3x1 varm] NumStates: 3 NumSeries: 2 StateNames: ["Low" "Med" "High"] SeriesNames: ["Y1" "Y2"] Covariance: []
Mdl
is a fully specified tsVAR
object representing a multivariate threestate LSETAR model. tsVAR
object functions enable you to specify threshold variable characteristics and data.
Initialize Simulation from Presample Responses
Consider simulating 5 paths initialized from presample responses. Specify a numPreObs
bynumSeries
bynumPaths
array of presample responses, where:
numPreObs
is the number of presample responses per series and path. You must specify enough presample observations to initialize all AR components in the VAR models and the endogenous threshold variable. The largest AR component order is 2 and the threshold variable delay is 4, thereforesimulate
requiresnumPreObs=4
presample observations per series and path.numSeries=2
, the number of response series in the system.numPaths=5
, the number of independent paths to simulate.
delay = 4; numPaths = 5; Y0 = zeros(delay,Mdl.NumSeries,numPaths); for j = 2:numPaths Y0(:,:,j) = 10*j*ones(delay,Mdl.NumSeries); end
Simulate 10 paths of length 100 from the LSETAR model from the presample. Specify the endogenous threshold variable and its delay, ${\mathit{y}}_{2,\mathit{t}4}$.
numObs = 100; rng(1); Y = simulate(Mdl,numObs,NumPaths=numPaths,Y0=Y0,Index=2,Delay=4);
Y is a 100by2by5 array of simulate response paths. For example, Y(50,2,3)
is the simulated response of path 3
, of series Y2
, at time point 50
.
Plot the simulated paths for each variable on separate plots.
tiledlayout(2,1) nexttile plot(squeeze(Y(:,1,:))) title("Y1") nexttile plot(squeeze(Y(:,2,:))) title("Y2")
The system quickly settles regardless of the presample.
Initialize Simulation from States
Simulate three paths of length 100, where each of the three states initialize a path. Specify state indices for initialization, and specify the endogenous threshold variable and its delay.
S0 = 1:Mdl.NumStates; numPaths = numel(S0); Y = simulate(Mdl,numObs,NumPaths=numPaths,S0=S0,Index=2,Delay=4); tiledlayout(2,1) nexttile plot(squeeze(Y(:,1,:))) title("Y1") nexttile plot(squeeze(Y(:,2,:))) title("Y2")
Simulate Model Containing Exogenous Regression Component
Consider including regression components for exogenous variables in each submodel of the thresholdswitching dynamic regression model in Initialize Multivariate Model Simulation from Multiple Starting Conditions.
Fully Specify LSETAR Model
Create logistic threshold transitions at midlevels 1
and 1
with rates 3.5
and 1.5
, respectively. Label the states.
t = [1 1]; r = [3.5 1.5]; stateNames = ["Low" "Med" "High"]; tt = threshold(t,Type="logistic",Rates=[3.5 1.5],StateNames=stateNames)
tt = threshold with properties: Type: 'logistic' Levels: [1 1] Rates: [3.5000 1.5000] StateNames: ["Low" "Med" "High"] NumStates: 3
Assume the following VARX models describe the response processes of the system:
State 1: $${y}_{t}=\left[\begin{array}{c}1\\ 1\end{array}\right]+\left[\begin{array}{c}1\\ 1\end{array}\right]{x}_{1,t}+{\epsilon}_{1,t},$$ where $${\epsilon}_{1,t}\sim N\left(\left[\begin{array}{c}0\\ 0\end{array}\right],\left[\begin{array}{cc}1& 0.1\\ 0.1& 1\end{array}\right]\right).$$
State 2: $${y}_{t}=\left[\begin{array}{c}2\\ 2\end{array}\right]+\left[\begin{array}{cc}2& 2\\ 2& 2\end{array}\right]{x}_{2,t}+\left[\begin{array}{cc}0.5& 0.1\\ 0.5& 0.5\end{array}\right]{y}_{t1}+{\epsilon}_{2,t},$$ where $${\epsilon}_{2,t}\sim N\left(\left[\begin{array}{c}0\\ 0\end{array}\right],\left[\begin{array}{cc}2& 0.2\\ 0.2& 2\end{array}\right]\right).$$
State 3: $${y}_{t}=\left[\begin{array}{c}3\\ 3\end{array}\right]+\left[\begin{array}{ccc}3& 3& 3\\ 3& 3& 3\end{array}\right]{x}_{3,t}+\left[\begin{array}{cc}0.25& 0\\ 0& 0\end{array}\right]{y}_{t1}+\left[\begin{array}{cc}0& 0\\ 0.25& 0\end{array}\right]{y}_{t2}+{\epsilon}_{3,t},$$ where $${\epsilon}_{3,t}\sim N\left(\left[\begin{array}{c}0\\ 0\end{array}\right],\left[\begin{array}{cc}3& 0.3\\ 0.3& 3\end{array}\right]\right).$$
${\mathit{x}}_{1,\mathit{t}}$ represents a single exogenous variable, ${\mathit{x}}_{2,\mathit{t}}$ represents two exogenous variables, and ${\mathit{x}}_{3,\mathit{t}}$ represents three exogenous variables. Store the submodels in a vector.
% Constants (numSeries x 1 vectors) C1 = [1; 1]; C2 = [2; 2]; C3 = [3; 3]; % Regression coefficients (numSeries x numRegressors matrices) Beta1 = [1; 1]; % 1 regressor Beta2 = [2 2; 2 2]; % 2 regressors Beta3 = [3 3 3; 3 3 3]; % 3 regressors % Autoregression coefficients (numSeries x numSeries matrices) AR1 = {}; AR2 = {[0.5 0.1; 0.5 0.5]}; AR3 = {[0.25 0; 0 0] [0 0; 0.25 0]}; % Innovations covariances (numSeries x numSeries matrices) Sigma1 = [1 0.1; 0.1 1]; Sigma2 = [2 0.2; 0.2 2]; Sigma3 = [3 0.3; 0.3 3]; %VARX submodels mdl1 = varm(Constant=C1,AR=AR1,Beta=Beta1,Covariance=Sigma1); mdl2 = varm(Constant=C2,AR=AR2,Beta=Beta2,Covariance=Sigma2); mdl3 = varm(Constant=C3,AR=AR3,Beta=Beta3,Covariance=Sigma3); mdl = [mdl1; mdl2; mdl3];
Create an LSETAR model from the switching mechanism tt
and the statespecific submodels mdl
. Label the series Y1
and Y2
.
Mdl = tsVAR(tt,mdl,SeriesNames=["Y1" "Y2"])
Mdl = tsVAR with properties: Switch: [1x1 threshold] Submodels: [3x1 varm] NumStates: 3 NumSeries: 2 StateNames: ["Low" "Med" "High"] SeriesNames: ["Y1" "Y2"] Covariance: []
Simulate Data Ignoring Regression Component
If you do not supply exogenous data, simulate
ignores the regression components in the submodels. Simulate a single path of responses, innovations, and states into a simulation horizon of length 50. Then plot each path separately.
rng(1); % For reproducibility numObs = 50; [Y,E,SP] = simulate(Mdl,numObs); figure tiledlayout(3,1) nexttile plot(Y) ylabel("Response") grid on legend(["y_1" "y_2"]) nexttile plot(E) ylabel("Innovation") grid on legend(["e_1" "e_2"]) nexttile stem(SP) ylabel("State") yticks([1 2 3])
Simulate Data Including Regression Component
simulate
requires exogenous data in order to generate random paths from the model. Simulate exogenous data for the three regressors by generating 50 random observations from the 3D standard Gaussian distribution.
X = randn(50,3);
Generate one random response, innovation, and state path of length 50. Specify the simulated exogenous data for the submodel regression components. Plot the results.
rng(1); % Reset seed for comparison [Y,E,SP] = simulate(Mdl,numObs,X=X); figure tiledlayout(3,1) nexttile plot(Y) ylabel("Response") grid on legend(["y_1" "y_2"]) nexttile plot(E) ylabel("Innovation") grid on legend(["e_1" "e_2"]) nexttile stem(SP) ylabel("State") yticks([1 2 3])
Perform Monte Carlo Estimation
This example shows how to use Monte Carlo estimation to obtain an interval estimate of the threshold midlevel.
Consider a SETAR model for the real US GDP growth rate ${\mathit{y}}_{\mathit{t}}$ with AR(4) submodels. Suppose the threshold variable is ${\mathit{y}}_{\mathit{t}}$ (self exciting with 0 delay).
Create a discrete threshold transition at unknown midlevel ${\mathit{t}}_{1}$. Label the states "Recession"
and "Expansion"
.
tt = threshold(NaN,StateNames=["Recession" "Expansion"]);
For each state, create a partially specified AR(4) model with one coefficient at lag 4. Store the state submodels in a vector.
submdl = arima(ARLags=4); mdl = [submdl; submdl];
Each submodel has an unknown, estimable lag 4 coefficient, model constant, and innovations variance.
Create a partially specified TAR model from the threshold transition and submodel vector.
Mdl = tsVAR(tt,mdl);
Create a fully specified threshold transition that has the same structure as tt
, but set the midlevel to 0
.
tt0 = threshold(0);
Load the US macroeconomic data set. Compute the real GDP growth rate as a percent.
load Data_USEconModel
rGDP = DataTimeTable.GDP./DataTimeTable.GDPDEF;
pRGDP = 100*price2ret(rGDP);
T = numel(pRGDP);
Fit the TAR to the real GDP rate series.
EstMdl = estimate(Mdl,tt0,pRGDP,Z=pRGDP,Type="exogenous");
Simulate 100 response paths from the estimated model.
rng(100) % For reproducibility numPaths= 100; Y = simulate(EstMdl,T,NumPaths=numPaths,Z=pRGDP,Type="exogenous");
Fit the TAR model to each simulated response path. Specify the estimated threshold transition EstMdl.Switch
to initialize the estimation procedure. For each path, store the estimated threshold transition midlevel.
tMC = nan(T,1); for j = 1:numPaths EstMdlSim = estimate(Mdl,EstMdl.Switch,Y(:,j),Z=Y(:,j),Type="exogenous"); tMC(j) = EstMdlSim.Switch.Levels; end
tMC
is a 100by1 vector representing a Monte Carlo sample of threshold transitions.
Obtain a 95% confidence interval on the true threshold transition by computing the 0.25 and .975 quantiles of the Monte Carlo sample.
tCI = quantile(tMC,[0.025 0.975])
tCI = 1×2
0.5158 0.9810
A 95% confidence interval on the true threshold transition is (0.52%, 0.98%).
Input Arguments
numObs
— Number of observations to generate
positive integer
Number of observations to generate for each sample path, specified as a positive integer.
Data Types: double
NameValue Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Namevalue arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: NumPaths=1000,Y0=Y0
simulates 1000
sample
paths and initializes the dynamic component of each submodel by using the presample response
data Y0
.
NumPaths
— Number of sample paths to generate
1
(default)  positive integer
Number of sample paths to generate, specified as a positive integer.
Example: NumPaths=1000
Data Types: double
Type
— Type of threshold variable data
"endogenous"
(default)  "exogenous"
Type of threshold variable data, specified as a value in this table.
Value  Description 

"endogenous"  The model is selfexciting with threshold variable data $${z}_{t}={y}_{j,(td)},$$ generated by response j, where

"exogenous"  The threshold variable is exogenous to the system. The namevalue argument 'Z' specifies the threshold variable data and is required. 
Example: Type="exogenous",Z=z
specifies the data z
for the exogenous threshold variable.
Example: Type="endogenous",Index=2,Delay=4
specifies the endogenous threshold variable as y_{2,t−4}, whose data is Y(:,2)
.
Data Types: char
 string
 cell
Y0
— Presample response data
numeric matrix  numeric array
Presample response data, specified as a numeric matrix or array.
To use the same presample data for each of the numPaths
path,
specify a numPreSampleObs
bynumSeries
matrix,
where numPaths
is the value of NumPaths
,
numPreSampleObs
is the number of presample observations, and
numSeries
is the number of response variables.
To use different presample data for each path:
For univariate ARX submodels, specify a
numPreSampleObs
bynumPaths
matrix.For multivariate VARX submodels, specify a
numPreSampleObs
bynumSeries
bynumPaths
array.
The number of presample observations numPreSampleObs
must be
sufficient to initialize the AR terms of all submodels. For models of type
"endogenous"
, the number of presample observations must also be
sufficient to initialize the delayed response. If numPreSampleObs
exceeds the number necessary to initial the model, simulate
uses only the latest observations. The last row contains the latest observations.
simulate
updates Y0
using the latest
simulated observations each time it switches states.
By default, simulate
determines Y0
by
the submodel of the initial state:
If the initial submodel is a stationary AR process without regression components,
simulate
sets presample observations to the unconditional mean.Otherwise,
simulate
sets presample observations to zero.
Data Types: double
Z
— Threshold variable data z_{t}
empty array ([]
) (default)  numeric vector  numeric matrix
Threshold variable data for simulations of type "exogenous"
,
specified as a numeric vector of length numObsZ
or a
numObsZ
bynumPaths
numeric matrix.
For a numeric vector, simulate
applies the same data to
all simulated paths. For a matrix, simulate
applies columns of
Z
to corresponding simulated paths.
If numObsZ
exceeds numobs
,
simulate
uses only the latest observations. The last row
contains the latest observation.
simulate
determines the initial state of simulations by
values in the first row Z(1,:)
.
Data Types: double
Delay
— Threshold variable delay d in y_{j,t−d}
1
(default)  positive integer
Threshold variable delay d in
y_{j,t−d}
for simulations of type "endogenous"
, specified as a positive
integer.
Example: Delay=4
specifies that the threshold variable is
y_{2,t−d},
where j is the value of Index
.
Data Types: double
Index
— Threshold variable index j in y_{j,t−d}
1
(default)  scalar in 1:Mdl.NumSeries
Threshold variable index j in
y_{j,t−d}
for simulations of type "endogenous"
, specified as a scalar in
1:Mdl.NumSeries
.
simulate
ignores Index
for univariate
AR models.
Example: Index=2
specifies that the threshold variable is
y_{2,t−d},
where d is the value of Delay
.
Data Types: double
S0
— Initial states
1
(default)  numeric scalar  numeric vector
Initial states of simulations, for simulations of type
"endogenous"
, specified as a numeric scalar or vector of length
numPaths
. Entries of S0
must be in
1:Mdl.NumStates
.
A scalar S0
applies the same initial state to all paths. A
vector S0
applies initial state
S0(
to path
j
)
.j
If you specify Y0
, simulate
ignores
S0
and determines initial states by the specified presample
data.
Example: 'S0',2
applies state 2
to initialize
all paths.
Example: 'S0',[2 3]
specifies state 2 as the initial
state.
Data Types: double
X
— Predictor data
numeric matrix  cell vector of numeric matrices
Predictor data used to evaluate regression components in all submodels of
Mdl
, specified as a numeric matrix or a cell vector of numeric
matrices.
To use a subset of the same predictors in each state, specify X
as a matrix with numPreds
columns and at least
numObs
rows. Columns correspond to distinct predictor variables.
Submodels use initial columns of the associated matrix, in order, up to the number of
submodel predictors. The number of columns in the Beta
property of
Mdl.SubModels(
determines the
number of exogenous variables in the regression component of submodel
j
)
. If the number of rows exceeds
j
numObs
, then simulate
uses the latest
observations.
To use different predictors in each state, specify a cell vector of such matrices
with length numStates
.
By default, simulate
ignores regression components in
Mdl
.
Data Types: double
Output Arguments
Y
— Simulated response paths
numeric matrix  numeric array
Simulated response paths, returned as a numeric matrix or array. Y
represents the continuation of the presample responses in Y0
.
For univariate ARX submodels, Y
is a numObs
bynumPaths
matrix. For multivariate VARX submodels, Y
is a numObs
bynumSeries
bynumPaths
array.
E
— Simulated innovation paths
numeric matrix  numeric array
Simulated innovation paths, returned as a numeric matrix or array.
For univariate ARX submodels, E
is a
numObs
bynumPaths
matrix. For multivariate VARX
submodels, E
is a
numObs
bynumSeries
bynumPaths
array.
simulate
generates innovations using the covariance
specification in Mdl
. For more details, see tsVAR
.
StatePaths
— Simulated state paths
numeric matrix
Simulated state paths, returned as a
numObs
bynumPaths
numeric matrix.
If threshold levels in Mdl.Switch.Levels
are
t_{1},
t_{2},…
,t_{n},
simulate
labels states of the threshold variable
(∞,t_{1}),
[t_{1},t_{2}),
… [t_{n},∞) as 1
,
2
, 3,... n + 1
, respectively.
References
[1] Teräsvirta, Tima. "Modelling Economic Relationships with Smooth Transition Regressions." In A. Ullahand and D.E.A. Giles (eds.), Handbook of Applied Economic Statistics, 507–552. New York: Marcel Dekker, 1998.
[2] van Dijk, Dick. Smooth Transition Models: Extensions and Outlier Robust Inference. Rotterdam, Netherlands: Tinbergen Institute Research Series, 1999.
Version History
Introduced in R2021b
Open Example
You have a modified version of this example. Do you want to open this example with your edits?
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
 América Latina (Español)
 Canada (English)
 United States (English)
Europe
 Belgium (English)
 Denmark (English)
 Deutschland (Deutsch)
 España (Español)
 Finland (English)
 France (Français)
 Ireland (English)
 Italia (Italiano)
 Luxembourg (English)
 Netherlands (English)
 Norway (English)
 Österreich (Deutsch)
 Portugal (English)
 Sweden (English)
 Switzerland
 United Kingdom (English)