simulate
Monte Carlo simulation of conditional variance models
Syntax
Description
specifies options using one or more name-value arguments. For example,
V = simulate(Mdl,numobs,Name=Value)simulate(Mdl,100,NumPaths=1000,V0=v0) returns a numeric
matrix of 1000, 100-period simulated conditional variance paths from
Mdl and specifies the numeric vector of presample
conditional variances v0 to initialize each returned
path.
To produce a conditional simulation, specify response data in the simulation
horizon by using the YF name-value argument.
returns the table or timetable Tbl = simulate(Mdl,numobs,Presample=Presample,Name=Value)Tbl containing the random
conditional variance and response series, which results from simulating the
model Mdl. simulate uses the table
or timetable of innovations or conditional variance presample data
Presample to initialize the model. If you specify
Presample, you must specify the variable containing the
presample innovation or conditional variance data by using the
PresampleInnovationVariable or
PresampleVarianceVariable name-value argument.
Examples
Simulate conditional variance and response paths from a GARCH(1,1) model. Return results in numeric matrices.
Specify a GARCH(1,1) model with known parameters.
Mdl = garch(Constant=0.01,GARCH=0.7,ARCH=0.2);
Simulate 500 sample paths, each with 100 observations.
rng("default") % For reproducibility [V,Y] = simulate(Mdl,100,NumPaths=500);
V and Y are 100-by-500 matrices of 500 simulated paths of conditional variances and responses, respectively.
figure tiledlayout(2,1) nexttile plot(V) title("Simulated Conditional Variances") nexttile plot(Y) title("Simulated Responses")

The simulated responses look like draws from a stationary stochastic process.
Plot the 2.5th, 50th (median), and 97.5th percentiles of the simulated conditional variances.
lower = prctile(V,2.5,2); middle = median(V,2); upper = prctile(V,97.5,2); figure plot(1:100,lower,"r:",1:100,middle,"k", ... 1:100,upper,"r:",LineWidth=2) legend("95% Confidence interval","Median") title("Approximate 95% Intervals")

The intervals are asymmetric due to positivity constraints on the conditional variance.
Simulate conditional variance and response paths from an EGARCH(1,1) model.
Specify an EGARCH(1,1) model with known parameters.
Mdl = egarch(Constant=0.001,GARCH=0.7,ARCH=0.2, ...
Leverage=-0.3);Simulate 500 sample paths, each with 100 observations.
rng("default") % For reproducibility [V,Y] = simulate(Mdl,100,NumPaths=500); figure tiledlayout(2,1) nexttile plot(V) title("Simulated Conditional Variances") nexttile plot(Y) title("Simulated Responses (Innovations)")

The simulated responses look like draws from a stationary stochastic process.
Plot the 2.5th, 50th (median), and 97.5th percentiles of the simulated conditional variances.
lower = prctile(V,2.5,2); middle = median(V,2); upper = prctile(V,97.5,2); figure plot(1:100,lower,"r:",1:100,middle,"k", ... 1:100, upper,"r:",LineWidth=2) legend("95% Confidence interval","Median") title("Approximate 95% Intervals")

The intervals are asymmetric due to positivity constraints on the conditional variance.
Simulate conditional variance and response paths from a GJR(1,1) model.
Specify a GJR(1,1) model with known parameters.
Mdl = gjr(Constant=0.001,GARCH=0.7,ARCH=0.2, ...
Leverage=0.1);Simulate 500 sample paths, each with 100 observations.
rng("default") % For reproducibility [V,Y] = simulate(Mdl,100,NumPaths=500); figure tiledlayout(2,1) nexttile plot(V) title("Simulated Conditional Variances") nexttile plot(Y) title("Simulated Responses (Innovations)")

The simulated responses look like draws from a stationary stochastic process.
Plot the 2.5th, 50th (median), and 97.5th percentiles of the simulated conditional variances.
lower = prctile(V,2.5,2); middle = median(V,2); upper = prctile(V,97.5,2); figure plot(1:100,lower,"r:",1:100,middle,"k", ... 1:100, upper,"r:",LineWidth=2) legend("95% Confidence interval","Median") title("Approximate 95% Intervals")

The intervals are asymmetric due to positivity constraints on the conditional variance.
Since R2023a
Simulate conditional variances of the average weekly closing NASDAQ returns for 100 weeks. Use the simulations to make forecasts and approximate 95% forecast intervals. Compare the forecasts among GARCH(1,1), EGARCH(1,1), and GJR(1,1) fits. Supply timetables of presample data.
Load the U.S. equity indices data Data_EquityIdx.mat.
load Data_EquityIdxThe timetable DataTimeTable contains the daily NASDAQ closing prices, among other indices.
Compute the weekly average closing prices of all timetable variables.
DTTW = convert2weekly(DataTimeTable,Aggregation="mean");Compute the weekly returns.
DTTRet = price2ret(DTTW); DTTRet.Interval = []; T = height(DTTRet)
T = 626
When you plan to supply a timetable, you must ensure it has all the following characteristics:
The selected response variable is numeric and does not contain any missing values.
The timestamps in the
Timevariable are regular, and they are ascending or descending.
Remove all missing values from the timetable, relative to the NASDAQ returns series.
DTTRet = rmmissing(DTTRet,DataVariables="NASDAQ");
numobs = height(DTTRet)numobs = 626
Because all sample times have observed NASDAQ returns, rmmissing does not remove any observations.
Determine whether the sampling timestamps have a regular frequency and are sorted.
areTimestampsRegular = isregular(DTTRet,"weeks")areTimestampsRegular = logical
1
areTimestampsSorted = issorted(DTTRet.Time)
areTimestampsSorted = logical
1
areTimestampsRegular = 1 indicates that the timestamps of DTTRet represent a regular weekly sample. areTimestampsSorted = 1 indicates that the timestamps are sorted.
Fit GARCH(1,1), EGARCH(1,1), and GJR(1,1) models to the entire data set.
Mdl = cell(3,1); % Preallocation Mdl{1} = garch(1,1); Mdl{2} = egarch(1,1); Mdl{3} = gjr(1,1); EstMdl = cellfun(@(x)estimate(x,DTTRet,ResponseVariable="NASDAQ", ... Display="off"),Mdl,UniformOutput=false);
EstMdl is 3-by-1 cell vector. Each cell is a different type of estimated conditional variance model, e.g., EstMdl{1} is an estimated GARCH(1,1) model.
Simulate 1000 samples paths with 100 observations each. Infer conditional variances and residuals to use as a presample for the forecast simulation.
T0 = 100; DTTSim = cell(3,1); % Preallocation PS = cell(3,1); for j = 1:3 rng("default") % For reproducibility PS{j} = infer(EstMdl{j},DTTRet,ResponseVariable="NASDAQ"); DTTSim{j} = simulate(EstMdl{j},T0,NumPaths=1000, ... Presample=PS{j},PresampleInnovationVariable="Y_Residual", ... PresampleVarianceVariable="Y_Variance"); end
DTTSim is a 3-by-1 cell vector, and each cell contains a 100-by-2 timetable of 1000 simulated paths of conditional variances and responses generated from the corresponding estimated model.
Plot the simulation mean forecasts and approximate 95% forecast intervals, along with the conditional variances inferred from the data.
lower = cellfun(@(x)prctile(x.Y_Variance,2.5,2),DTTSim,UniformOutput=false); upper = cellfun(@(x)prctile(x.Y_Variance,97.5,2),DTTSim,UniformOutput=false); mn = cellfun(@(x)mean(x.Y_Variance,2),DTTSim,UniformOutput=false); datesPlot = DTTRet.Time(end - 50:end); datesFH = DTTRet.Time(end) + caldays(1:100)'; h = zeros(3,4); figure for j = 1:3 col = zeros(1,3); col(j) = 1; h(j,1) = plot(datesPlot,PS{j}.Y_Variance(end-50:end),Color=col); hold on h(j,2) = plot(datesFH,mn{j},Color=col,LineWidth=3); h(j,3:4) = plot([datesFH datesFH],[lower{j} upper{j}],":", ... Color=col,LineWidth=2); end hGCA = gca; plot(datesFH([1 1]),hGCA.YLim,"k--"); axis tight; h = h(:,1:3); legend(h(:),'GARCH - Inferred','EGARCH - Inferred','GJR - Inferred',... 'GARCH - Sim. Mean','EGARCH - Sim. Mean','GJR - Sim. Mean',... 'GARCH - 95% Fore. Int.','EGARCH - 95% Fore. Int.',... 'GJR - 95% Fore. Int.','Location','NorthEast') title('Simulated Conditional Variance Forecasts') hold off

Input Arguments
Sample path length, specified as a positive integer. numobs is the number of random observations to generate per output path.
Data Types: double
Since R2023a
Presample data for innovations
εt or conditional variances
σt2
to initialize the model, specified as a table or timetable with
numprevars variables and numpreobs
rows.
simulate returns the simulated variables in the
output table or timetable Tbl, which is commensurate
with Presample.
Each selected variable is a single path (numpreobs-by-1
vector) or multiple paths
(numpreobs-by-numprepaths matrix)
of numpreobs observations representing the presample of
numpreobs observations of innovations or conditional
variances.
Each row is a presample observation, and measurements in each row occur
simultaneously. The last row contains the latest presample observation.
numpreobs must be one of the following values:
Mdl.QwhenPresampleprovides only presample innovations.For GARCH(P,Q) and GJR(P,Q) models:
Mdl.PwhenPresampleprovides only presample conditional variances.max([Mdl.P Mdl.Q])whenPresampleprovides both presample innovations and conditional variances
For EGARCH(P,Q) models,
max([Mdl.P Mdl.Q])whenPresampleprovides presample conditional variances
If numpreobs exceeds the minimum number,
simulate uses the latest required number of
observations only.
If numprepaths > NumPaths,
simulate uses only the first
NumPaths columns.
If Presample is a timetable, all the following
conditions must be true:
Presamplemust represent a sample with a regular datetime time step (seeisregular).The datetime vector of sample timestamps
Presample.Timemust be ascending or descending.
If Presample is a table, the last row contains the
latest presample observation.
The defaults are:
For GARCH(P,Q) and GJR(P,Q) models,
simulatesets any necessary presample innovations to the square root of the average squared value of the offset-adjusted response seriesY.For EGARCH(P,Q) models,
simulatesets any necessary presample innovations to zero.simulatesets any necessary presample conditional variances to the unconditional variance of the process.
If you specify the Presample, you must specify the
presample innovation or conditional variance variable names by using the
PresampleInnovationVariable or
PresampleVarianceVariable name-value
argument.
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN, where Name is
the argument name and Value is the corresponding value.
Name-value 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: simulate(Mdl,100,NumPaths=1000,E0=[0.5; 0.5]) specifies
generating 1000 sample paths of length 100 from the model
Mdl, and using [0.5; 0.5] as the presample
of innovations per path.
Number of sample paths to generate, specified as a positive integer.
Example: NumPaths=1000
Data Types: double
Presample innovation paths
εt, specified as a
numpreobs-by-1 numeric column vector or a
numpreobs-by-numprepaths
matrix. Use E0 only when you supply optional data
inputs as numeric arrays.
The presample innovations provide initial values for the innovations
process of the conditional variance model Mdl. The
presample innovations derive from a distribution with mean 0.
numpreobs is the number of presample observations.
numprepaths is the number of presample
paths.
Each row is a presample observation, and measurements in each row
occur simultaneously. The last row contains the latest presample
observation. numpreobs must be at least
Mdl.Q. If numpreobs >
Mdl.Q, simulate uses the
latest required number of observations only. The last element or row
contains the latest observation.
If
E0is a column vector, it represents a single path of the underlying innovation series.simulateapplies it to each output path.If
E0is a matrix, each column represents a presample path of the underlying innovation series.numprepathsmust be at leastNumPaths. Ifnumprepaths>NumPaths,simulateuses the firstNumPathscolumns only.
The defaults are:
For GARCH(P,Q) and GJR(P,Q) models,
simulatesets any necessary presample innovations to an independent sequence of disturbances with mean zero and standard deviation equal to the unconditional standard deviation of the conditional variance process.For EGARCH(P,Q) models,
simulatesets any necessary presample innovations to an independent sequence of disturbances with mean zero and variance equal to the exponentiated unconditional mean of the logarithm of the EGARCH variance process.
Example: E0=[0.5; 0.5]
Positive presample conditional variance paths, specified as a
numpreobs-by-1 positive column vector or
numpreobs-by-numprepaths
positive matrix.. V0 provides initial values for the
conditional variances in the model. Use V0 only when
you supply optional data inputs as numeric arrays.
Each row is a presample observation, and measurements in each row occur simultaneously. The last row contains the latest presample observation.
For GARCH(P,Q) and GJR(P,Q) models,
numpreobsmust be at leastMdl.P.For EGARCH(P,Q) models,
numpreobsmust be at leastmax([Mdl.P Mdl.Q]).
If numpreobs exceeds the minimum
number, simulate uses only the latest
observations. The last element or row contains the latest
observation.
If
V0is a column vector, it represents a single path of the conditional variance series.simulateapplies it to each output path.If
V0is a matrix, each column represents a presample path of the conditional variance series.numprepathsmust be at leastNumPaths. Ifnumprepaths>NumPaths,simulateuses the firstNumPathscolumns only.
The defaults are:
For GARCH(P,Q) and GJR(P,Q) models,
simulatesets any necessary presample variances to the unconditional variance of the conditional variance process.For EGARCH(P,Q) models,
simulatesets any necessary presample variances to the exponentiated unconditional mean of the logarithm of the EGARCH variance process.
Example: V0=[1; 0.5]
Data Types: double
Since R2023a
Variable of Presample containing presample innovation paths εt, specified as one of the following data types:
String scalar or character vector containing a variable name in
Presample.Properties.VariableNamesVariable index (integer) to select from
Presample.Properties.VariableNamesA length
numprevarslogical vector, wherePresampleInnovationVariable(selects variablej) = truefromjPresample.Properties.VariableNames, andsum(PresampleInnovationVariable)is1
The selected variable must be a numeric matrix and cannot contain missing values (NaN).
If you specify presample innovation data by using the Presample name-value argument, you must specify PresampleInnovationVariable.
Example: PresampleInnovationVariable="StockRateInnov0"
Example: PresampleInnovationVariable=[false false true false] or PresampleInnovationVariable=3 selects the third table variable as the presample innovation variable.
Data Types: double | logical | char | cell | string
Since R2023a
Variable of Presample containing data for the presample conditional
variances
σt2,
specified as one of the following data types:
String scalar or character vector containing a variable name in
Presample.Properties.VariableNamesVariable index (positive integer) to select from
Presample.Properties.VariableNamesA logical vector, where
PresampleVarianceVariable(selects variablej) = truefromjPresample.Properties.VariableNames
The selected variable must be a numeric vector and cannot contain missing values
(NaNs).
If you specify presample conditional variance data by using the Presample name-value argument, you must specify PresampleVarianceVariable.
Example: PresampleVarianceVariable="StockRateVar0"
Example: PresampleVarianceVariable=[false false true false] or PresampleVarianceVariable=3 selects the third table variable as the presample conditional variance variable.
Data Types: double | logical | char | cell | string
Notes
NaNvalues inE0, andV0indicate missing values.simulateremoves missing values from specified data by list-wise deletion.simulatehorizontally concatenatesE0andV0, and then it removes any row of the concatenated matrix containing at least oneNaN. This type of data reduction reduces the effective sample size and can create an irregular time series.For numeric data inputs,
simulateassumes that you synchronize the presample data such that the latest observations occur simultaneously.simulateissues an error when any table or timetable input contains missing values.If
E0andV0are column vectors,simulateapplies them to every column of the outputsVandY. This application allows simulated paths to share a common starting point for Monte Carlo simulation of forecasts and forecast error distributions.
Output Arguments
Simulated conditional variance paths
σt2
of the mean-zero innovations associated with Y,
returned as a numobs-by-1 numeric column vector or
numobs-by-NumPaths matrix.
simulate returns V when you
do not specify the input table or timetable
Presample.
Each column of V corresponds to a simulated
conditional variance path. Rows of V are periods
corresponding to the periodicity of Mdl.
Simulated response paths yt,
returned as a numobs-by-1 numeric column vector or
numobs-by-NumPaths matrix.
simulate returns Y when you
do not specify the input table or timetable
Presample.
Y usually represents a mean-zero, heteroscedastic time
series of innovations with conditional variances given in
V (a continuation of the presample innovation
series E0).
Y can also represent a time series of mean-zero,
heteroscedastic innovations plus an offset. If Mdl
includes an offset, then simulate adds the offset to
the underlying mean-zero, heteroscedastic innovations so that
Y represents a time series of offset-adjusted
innovations.
Each column of Y corresponds to a simulated response
path. Rows of Y are periods corresponding to the
periodicity of Mdl.
Since R2023a
Simulated conditional variance
σt2
and response yt paths, returned as
a table or timetable, the same data type as Presample.
simulate returns Tbl only
when you supply the input Presample.
Tbl contains the following variables:
The simulated conditional variance paths, which are in a
numobs-by-NumPathsnumeric matrix, with rows representing observations and columns representing independent paths. Each path represents the continuation of the corresponding path of presample conditional variances inPresample.simulatenames the simulated conditional variance variable inTbl, whereresponseName_VarianceisresponseNameMdl.SeriesName. For example, ifMdl.SeriesNameisStockReturns,Tblcontains a variable for the corresponding simulated conditional variance paths with the nameStockReturns_Variance.The simulated response paths, which are in a
numobs-by-NumPathsnumeric matrix, with rows representing observations and columns representing independent paths. Each path represents the continuation of the corresponding presample innovations path inPresample.simulatenames the simulated response variable inTbl, whereresponseName_ResponseisresponseNameMdl.SeriesName. For example, ifMdl.SeriesNameisStockReturns,Tblcontains a variable for the corresponding simulated response paths with the nameStockReturns_Response.
If Tbl is a timetable, the following conditions hold:
The row order of
Tbl, either ascending or descending, matches the row order ofPreample.Tbl.Time(1)is the next time afterPresample(end)relative the sampling frequency, andTbl.Time(2:numobs)are the following times relative to the sampling frequency.
References
[1] Bollerslev, T. “Generalized Autoregressive Conditional Heteroskedasticity.” Journal of Econometrics. Vol. 31, 1986, pp. 307–327.
[2] Bollerslev, T. “A Conditionally Heteroskedastic Time Series Model for Speculative Prices and Rates of Return.” The Review of Economics and Statistics. Vol. 69, 1987, pp. 542–547.
[3] Box, G. E. P., G. M. Jenkins, and G. C. Reinsel. Time Series Analysis: Forecasting and Control. 3rd ed. Englewood Cliffs, NJ: Prentice Hall, 1994.
[4] Enders, W. Applied Econometric Time Series. Hoboken, NJ: John Wiley & Sons, 1995.
[5] Engle, R. F. “Autoregressive Conditional Heteroskedasticity with Estimates of the Variance of United Kingdom Inflation.” Econometrica. Vol. 50, 1982, pp. 987–1007.
[6] Glosten, L. R., R. Jagannathan, and D. E. Runkle. “On the Relation between the Expected Value and the Volatility of the Nominal Excess Return on Stocks.” The Journal of Finance. Vol. 48, No. 5, 1993, pp. 1779–1801.
[7] Hamilton, J. D. Time Series Analysis. Princeton, NJ: Princeton University Press, 1994.
[8] Nelson, D. B. “Conditional Heteroskedasticity in Asset Returns: A New Approach.” Econometrica. Vol. 59, 1991, pp. 347–370.
Version History
Introduced in R2012aIn addition to accepting presample data in numeric arrays,
simulate accepts presample data in tables or regular
timetables. When you supply data in a table or timetable, the following conditions
apply:
If you specify optional presample innovation or conditional variance data to initialize the model, you must also specify the presample innovation or conditional variance series name.
simulatereturns results in a table or timetable.
Name-value arguments to support tabular workflows include:
Presamplespecifies the input table or regular timetable of presample innovations and conditional variance data.PresampleInnovationVariablespecifies the variable name of the innovation paths to select fromPresample.PresampleVarianceVariablespecifies the variable name of the conditional variance paths to select fromPresample.
See Also
Objects
Functions
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)