semiconjugatebvarm
Bayesian vector autoregression (VAR) model with semiconjugate prior for data likelihood
Since R2020a
Description
The Bayesian VAR model object semiconjugatebvarm
specifies the joint prior distribution of the array of model coefficients Λ and the innovations covariance matrix Σ of an m-D VAR(p) model. The joint prior distribution (Λ,Σ) is the independent, normal-inverse-Wishart semiconjugate model.
In general, when you create a Bayesian VAR model object, it specifies the joint prior distribution and characteristics of the VARX model only. That is, the model object is a template intended for further use. Specifically, to incorporate data into the model for posterior distribution analysis, pass the model object and data to the appropriate object function.
Creation
Syntax
Description
To create a semiconjugatebvarm
object, use either the semiconjugatebvarm
function (described here) or the bayesvarm
function. The syntaxes for each function are similar, but the options differ. bayesvarm
enables you to set prior hyperparameter values for Minnesota prior[1] regularization easily, whereas semiconjugatebvarm
requires the entire specification of prior distribution hyperparameters.
creates a PriorMdl
= semiconjugatebvarm(numseries
,numlags
)numseries
-D Bayesian VAR(numlags
) model object PriorMdl
, which specifies dimensionalities and prior assumptions for all model coefficients and the innovations covariance Σ, where:
numseries
= m, the number of response time series variables.numlags
= p, the AR polynomial order.The joint prior distribution of (λ,Σ) is the independent, normal-inverse-Wishart semiconjugate model.
sets writable properties (except PriorMdl
= semiconjugatebvarm(numseries
,numlags
,Name,Value
)NumSeries
and P
) using name-value pair arguments. Enclose each property name in quotes. For example, semiconjugatebvarm(3,2,'SeriesNames',["UnemploymentRate" "CPI" "FEDFUNDS"])
specifies the names of the three response variables in the Bayesian VAR(2) model.
Input Arguments
numseries
— Number of time series m
1
(default) | positive integer
Number of time series m, specified as a positive integer. numseries
specifies the dimensionality of the multivariate response variable yt and innovation εt.
numseries
sets the NumSeries
property.
Data Types: double
numlags
— Number of lagged responses
nonnegative integer
Number of lagged responses in each equation of yt, specified as a nonnegative integer. The resulting model is a VAR(numlags
) model; each lag has a numseries
-by-numseries
coefficient matrix.
numlags
sets the P
property.
Data Types: double
Properties
You can set writable property values when you create the model object by using name-value argument syntax, or after you create the model object by using dot notation. For example, to create a 3-D Bayesian VAR(1) model and label the first through third response variables, and then include a linear time trend term, enter:
PriorMdl = semiconjugatebvarm(3,1,'SeriesNames',["UnemploymentRate" "CPI" "FEDFUNDS"]); PriorMdl.IncludeTrend = true;
Model Characteristics and Dimensionality
Description
— Model description
string scalar | character vector
Model description, specified as a string scalar or character vector. The default value describes the model dimensionality, for example '2-Dimensional VAR(3) Model'
.
Example: "Model 1"
Data Types: string
| char
NumSeries
— Number of time series m
positive integer
This property is read-only.
Number of time series m, specified as a positive integer. NumSeries
specifies the dimensionality of the multivariate response variable yt and innovation εt.
Data Types: double
P
— Multivariate autoregressive polynomial order
nonnegative integer
This property is read-only.
Multivariate autoregressive polynomial order, specified as a nonnegative integer. P
is the maximum lag that has a nonzero coefficient matrix.
P
specifies the number of presample observations required to initialize the model.
Data Types: double
SeriesNames
— Response series names
string vector | cell array of character vectors
Response series names, specified as a NumSeries
length string vector. The default is ['Y1' 'Y2' ... 'Y
. NumSeries
']semiconjugatebvarm
stores SeriesNames
as a string vector.
Example: ["UnemploymentRate" "CPI" "FEDFUNDS"]
Data Types: string
IncludeConstant
— Flag for including model constant c
true
(default) | false
Flag for including a model constant c, specified as a value in this table.
Value | Description |
---|---|
false | Response equations do not include a model constant. |
true | All response equations contain a model constant. |
Data Types: logical
IncludeTrend
— Flag for including linear time trend term δt
false
(default) | true
Flag for including a linear time trend term δt, specified as a value in this table.
Value | Description |
---|---|
false | Response equations do not include a linear time trend term. |
true | All response equations contain a linear time trend term. |
Data Types: logical
NumPredictors
— Number of exogenous predictor variables in model regression component
0
(default) | nonnegative integer
Number of exogenous predictor variables in the model regression component, specified as a nonnegative integer. semiconjugatebvarm
includes all predictor variables symmetrically in each response equation.
Distribution Hyperparameters
Mu
— Mean of multivariate normal prior on λ
zeros(NumSeries*(NumSeries*P + IncludeIntercept + IncludeTrend + NumPredictors),1)
(default) | numeric vector
Mean of the multivariate normal prior on λ, specified as a NumSeries*
-by-1 numeric vector, where k
(the number of coefficients in a response equation).k
= NumSeries*P + IncludeIntercept + IncludeTrend + NumPredictors
Mu(1:
corresponds to all coefficients in the equation of response variable k
)SeriesNames(1)
, Mu((
corresponds to all coefficients in the equation of response variable k
+ 1):(2*k
))SeriesNames(2)
, and so on. For a set of indices corresponding to an equation:
Elements
1
throughNumSeries
correspond to the lag 1 AR coefficients of the response variables ordered bySeriesNames
.Elements
NumSeries + 1
through2*NumSeries
correspond to the lag 2 AR coefficients of the response variables ordered bySeriesNames
.In general, elements
(
throughq
– 1)*NumSeries + 1
corresponds to the lagq
*NumSeries
AR coefficients of the response variables ordered byq
SeriesNames
.If
IncludeConstant
istrue
, elementNumSeries*P + 1
is the model constant.If
IncludeTrend
istrue
, elementNumSeries*P + 2
is the linear time trend coefficient.If
NumPredictors
> 0, elementsNumSeries*P + 3
through
constitute the vector of regression coefficients of the exogenous variables.k
This figure shows the structure of the transpose of Mu
for a 2-D VAR(3) model that contains a constant vector and four exogenous predictors:
where
ϕq,jk is element (j,k) of the lag q AR coefficient matrix.
cj is the model constant in the equation of response variable j.
Bju is the regression coefficient of the exogenous variable u in the equation of response variable j.
Tip
bayesvarm
enables you to specify Mu
easily by using the Minnesota regularization method. To specify Mu
directly:
Set separate variables for the prior mean of each coefficient matrix and vector.
Horizontally concatenate all coefficient means in this order:
Vectorize the transpose of the coefficient mean matrix.
Mu = Coeff.'; Mu = Mu(:);
Data Types: double
V
— Conditional covariance matrix of multivariate normal prior on λ
eye(NumSeries*(NumSeries*P + IncludeIntercept + IncludeTrend + NumPredictors))
(default) | symmetric, positive definite numeric matrix
Conditional covariance matrix of multivariate normal prior on λ, specified as a NumSeries*
-by-k
NumSeries*
symmetric, positive definite matrix, where k
(the number of coefficients in a response equation).k
= NumSeries*P + IncludeIntercept + IncludeTrend + NumPredictors
Row and column indices correspond to the model coefficients in the same way as Mu. For example, consider a 3-D VAR(2) model containing a constant and four exogenous variables.
V(1,1)
is Var(ϕ1,11).V(5,6)
is Cov(ϕ2,12,ϕ2,13).V(8,9)
is Cov(β11,β12).
Tip
bayesvarm
enables you to create any Bayesian VAR prior model and specify V
easily by using the Minnesota regularization method.
Data Types: double
Omega
— Inverse Wishart scale matrix
eye(numseries)
(default) | positive definite numeric matrix
Inverse Wishart scale matrix, specified as a NumSeries
-by-NumSeries
positive definite numeric matrix.
Data Types: double
DoF
— Inverse Wishart degrees of freedom
numseries + 10
(default) | positive numeric scalar
Inverse Wishart degrees of freedom, specified as a positive numeric scalar.
For a proper distribution, specify a value that is greater than numseries – 1
. For a distribution with a finite mean, specify a value that is greater than numseries + 1
.
Data Types: double
VAR Model Parameters Derived from Distribution Hyperparameters
AR
— Distribution mean of autoregressive coefficient matrices Φ1,…,Φp
cell vector of numeric matrices
This property is read-only.
Distribution mean of the autoregressive coefficient matrices Φ1,…,Φp associated with the lagged responses, specified as a P
-D cell vector of NumSeries
-by-NumSeries
numeric matrices.
AR{
is
Φj
}j
, the coefficient matrix of
lag j
. Rows correspond to equations and columns correspond to
lagged response variables; SeriesNames
determines the order of
response variables and equations. Coefficient signs are those of the VAR model expressed
in difference-equation notation.
If P
= 0, AR
is an empty cell. Otherwise, AR
is the collection of AR coefficient means extracted from Mu
.
Data Types: cell
Constant
— Distribution mean of model constant c
numeric vector
This property is read-only.
Distribution mean of the model constant c (or intercept), specified as a NumSeries
-by-1 numeric vector. Constant(
is the constant in equation j
)j
; SeriesNames
determines the order of equations.
If IncludeConstant
= false
, Constant
is an empty array. Otherwise, Constant
is the model constant vector mean extracted from Mu
.
Data Types: double
Trend
— Distribution mean of linear time trend δ
numeric vector
This property is read-only.
Distribution mean of the linear time trend δ, specified as a NumSeries
-by-1 numeric vector. Trend(
is the linear time trend in equation j
)j
; SeriesNames
determines the order of equations.
If IncludeTrend
= false
(the default), Trend
is an empty array. Otherwise, Trend
is the linear time trend coefficient mean extracted from Mu
.
Data Types: double
Beta
— Distribution mean of regression coefficient matrix Β
numeric matrix
This property is read-only.
Distribution mean of the regression coefficient matrix B associated with the exogenous predictor variables, specified as a NumSeries
-by-NumPredictors
numeric matrix.
Beta(
contains the regression coefficients of each predictor in the equation of response variable j
yj
,:)j
,t. Beta(:,
contains the regression coefficient in each equation of predictor xk. By default, all predictor variables are in the regression component of all response equations. You can down-weight a predictor from an equation by specifying, for the corresponding coefficient, a prior mean of 0 in k
)Mu
and a small variance in V
.
When you create a model, the predictor variables are hypothetical. You specify predictor data when you operate on the model (for example, when you estimate the posterior by using estimate
). Columns of the predictor data determine the order of the columns of Beta
.
Data Types: double
Covariance
— Distribution mean of innovations covariance matrix Σ
positive definite numeric matrix
This property is read-only.
Distribution mean of the innovations covariance matrix Σ of the NumSeries
innovations at each time t = 1,...,T, specified as a NumSeries
-by-NumSeries
positive definite numeric matrix. Rows and columns correspond to innovations in the equations of the response variables ordered by SeriesNames
.
Data Types: double
Object Functions
estimate | Estimate posterior distribution of Bayesian vector autoregression (VAR) model parameters |
forecast | Forecast responses from Bayesian vector autoregression (VAR) model |
simsmooth | Simulation smoother of Bayesian vector autoregression (VAR) model |
simulate | Simulate coefficients and innovations covariance matrix of Bayesian vector autoregression (VAR) model |
summarize | Distribution summary statistics of Bayesian vector autoregression (VAR) model |
Examples
Create Normal-Inverse-Wishart Semiconjugate Prior Model
Consider the 3-D VAR(4) model for the US inflation (INFL
), unemployment (UNRATE
), and federal funds (FEDFUNDS
) rates.
For all , is a series of independent 3-D normal innovations with a mean of 0 and covariance . Assume the following prior distributions:
, where is a 39-by-1 vector of means and is the 39-by-39 covariance matrix.
, where is the 3-by-3 scale matrix and is the degrees of freedom.
Create a semiconjugate prior model for the 3-D VAR(4) model parameters.
numseries = 3; numlags = 4; PriorMdl = semiconjugatebvarm(numseries,numlags)
PriorMdl = semiconjugatebvarm with properties: Description: "3-Dimensional VAR(4) Model" NumSeries: 3 P: 4 SeriesNames: ["Y1" "Y2" "Y3"] IncludeConstant: 1 IncludeTrend: 0 NumPredictors: 0 Mu: [39x1 double] V: [39x39 double] Omega: [3x3 double] DoF: 13 AR: {[3x3 double] [3x3 double] [3x3 double] [3x3 double]} Constant: [3x1 double] Trend: [3x0 double] Beta: [3x0 double] Covariance: [3x3 double]
PriorMdl
is a semiconjugatebvarm
Bayesian VAR model object representing the prior distribution of the coefficients and innovations covariance of the 3-D VAR(4) model. The command line display shows properties of the model. You can display properties by using dot notation.
Display the prior mean matrices of the four AR coefficients by setting each matrix in the cell to a variable.
AR1 = PriorMdl.AR{1}
AR1 = 3×3
0 0 0
0 0 0
0 0 0
AR2 = PriorMdl.AR{2}
AR2 = 3×3
0 0 0
0 0 0
0 0 0
AR3 = PriorMdl.AR{3}
AR3 = 3×3
0 0 0
0 0 0
0 0 0
AR4 = PriorMdl.AR{4}
AR4 = 3×3
0 0 0
0 0 0
0 0 0
semiconjugatebvarm
centers all AR coefficients at 0
by default. The AR
property is read-only, but it is derived from the writeable property Mu
.
Create Semiconjugate Bayesian AR(2) Model
Consider a 1-D Bayesian AR(2) model for the daily NASDAQ returns from January 2, 1990 through December 31, 2001.
The priors are:
, where is a 3-by-1 vector of coefficient means and is a 3-by-3 covariance matrix.
, where is the degrees of freedom and is the scale.
Create a semiconjugate prior model for the AR(2) model parameters.
numseries = 1; numlags = 2; PriorMdl = semiconjugatebvarm(numseries,numlags)
PriorMdl = semiconjugatebvarm with properties: Description: "1-Dimensional VAR(2) Model" NumSeries: 1 P: 2 SeriesNames: "Y1" IncludeConstant: 1 IncludeTrend: 0 NumPredictors: 0 Mu: [3x1 double] V: [3x3 double] Omega: 1 DoF: 11 AR: {[0] [0]} Constant: 0 Trend: [1x0 double] Beta: [1x0 double] Covariance: 0.1111
semiconjugatebvarm
interprets the innovations covariance as an inverse Wishart random variable. Because the scales and degrees of freedom hyperparameters among the inverse Wishart and inverse gamma distributions are not equal, you can adjust them by using dot notation. For example, to achieve 10 degrees of freedom for the inverse gamma interpretation, set the inverse Wishart degrees of freedom to 20.
PriorMdl.DoF = 20
PriorMdl = semiconjugatebvarm with properties: Description: "1-Dimensional VAR(2) Model" NumSeries: 1 P: 2 SeriesNames: "Y1" IncludeConstant: 1 IncludeTrend: 0 NumPredictors: 0 Mu: [3x1 double] V: [3x3 double] Omega: 1 DoF: 20 AR: {[0] [0]} Constant: 0 Trend: [1x0 double] Beta: [1x0 double] Covariance: 0.0556
Specify High Tightness for Lags and Response Names
In the 3-D VAR(4) model of Create Normal-Inverse-Wishart Semiconjugate Prior Model, consider excluding lags 2 and 3 from the model.
You cannot exclude coefficient matrices from models, but you can specify high prior tightness on zero for coefficients that you want to exclude.
Create a semiconjugate prior model for the 3-D VAR(4) model parameters. Specify response variable names.
By default, AR coefficient prior means are zero. Specify high tightness values for lags 2 and 3 by setting their prior variances to 1e-6
. Leave all other coefficient tightness values at their defaults:
1
for AR coefficient variances1e3
for constant vector variances0
for all coefficient covariances
numseries = 3; numlags = 4; seriesnames = ["INFL"; "UNRATE"; "FEDFUNDS"]; vPhi1 = ones(numseries,numseries); vPhi2 = 1e-6*ones(numseries,numseries); vPhi3 = 1e-6*ones(numseries,numseries); vPhi4 = ones(numseries,numseries); vc = 1e3*ones(3,1); Vmat = [vPhi1 vPhi2 vPhi3 vPhi4 vc]'; V = diag(Vmat(:)); PriorMdl = semiconjugatebvarm(numseries,numlags,'SeriesNames',seriesnames,... 'V',V)
PriorMdl = semiconjugatebvarm with properties: Description: "3-Dimensional VAR(4) Model" NumSeries: 3 P: 4 SeriesNames: ["INFL" "UNRATE" "FEDFUNDS"] IncludeConstant: 1 IncludeTrend: 0 NumPredictors: 0 Mu: [39x1 double] V: [39x39 double] Omega: [3x3 double] DoF: 13 AR: {[3x3 double] [3x3 double] [3x3 double] [3x3 double]} Constant: [3x1 double] Trend: [3x0 double] Beta: [3x0 double] Covariance: [3x3 double]
Prepare Prior for Exogenous Predictor Variables
Consider the 2-D VARX(1) model for the US real GDP (RGDP
) and investment (GCE
) rates that treats the personal consumption (PCEC
) rate as exogenous:
For all , is a series of independent 2-D normal innovations with a mean of 0 and covariance . Assume the following prior distributions:
, where is an 8-by-1 vector of means and is the 4-by-4 covariance matrix.
, where Ω is the 2-by-2 scale matrix and is the degrees of freedom.
Create a semiconjugate prior model for the 2-D VARX(1) model parameters.
numseries = 2;
numlags = 1;
numpredictors = 1;
PriorMdl = semiconjugatebvarm(numseries,numlags,'NumPredictors',numpredictors)
PriorMdl = semiconjugatebvarm with properties: Description: "2-Dimensional VAR(1) Model" NumSeries: 2 P: 1 SeriesNames: ["Y1" "Y2"] IncludeConstant: 1 IncludeTrend: 0 NumPredictors: 1 Mu: [8x1 double] V: [8x8 double] Omega: [2x2 double] DoF: 12 AR: {[2x2 double]} Constant: [2x1 double] Trend: [2x0 double] Beta: [2x1 double] Covariance: [2x2 double]
Display the prior mean of the coefficients Mu
with the corresponding coefficients.
coeffnames = ["phi(11)"; "phi(12)"; "c(1)"; "beta(1)"; "phi(21)"; "phi(22)"; "c(2)"; "beta(2)"]; array2table(PriorMdl.Mu,'VariableNames',{'PriorMean'},'RowNames',coeffnames)
ans=8×1 table
PriorMean
_________
phi(11) 0
phi(12) 0
c(1) 0
beta(1) 0
phi(21) 0
phi(22) 0
c(2) 0
beta(2) 0
Set Prior Hyperparameters for Minnesota Regularization
semiconjugatebvarm
options enable you to specify prior hyperparameter values directly, but bayesvarm
options are well suited for tuning hyperparameters following the Minnesota regularization method.
Consider the 3-D VAR(4) model of Create Normal-Inverse-Wishart Semiconjugate Prior Model. The model contains 39 coefficients. For coefficient sparsity, create a semiconjugate Bayesian VAR model by using bayesvarm
. Specify the following, a priori:
Each response is an AR(1) model, on average, with lag 1 coefficient 0.75.
Prior self-lag coefficients have variance 100. This large variance setting allows the data to influence the posterior more than the prior.
Prior cross-lag coefficients have variance 1. This small variance setting tightens the cross-lag coefficients to zero during estimation.
Prior coefficient covariances decay with increasing lag at a rate of 2 (that is, lower lags are more important than higher lags).
numseries = 3; numlags = 4; seriesnames = ["INFL"; "UNRATE"; "FEDFUNDS"]; PriorMdl = bayesvarm(numseries,numlags,'ModelType','semiconjugate',... 'Center',0.75,'SelfLag',100,'CrossLag',1,'Decay',2,'SeriesNames',seriesnames)
PriorMdl = semiconjugatebvarm with properties: Description: "3-Dimensional VAR(4) Model" NumSeries: 3 P: 4 SeriesNames: ["INFL" "UNRATE" "FEDFUNDS"] IncludeConstant: 1 IncludeTrend: 0 NumPredictors: 0 Mu: [39x1 double] V: [39x39 double] Omega: [3x3 double] DoF: 13 AR: {[3x3 double] [3x3 double] [3x3 double] [3x3 double]} Constant: [3x1 double] Trend: [3x0 double] Beta: [3x0 double] Covariance: [3x3 double]
Display all prior coefficient means.
Phi1 = PriorMdl.AR{1}
Phi1 = 3×3
0.7500 0 0
0 0.7500 0
0 0 0.7500
Phi2 = PriorMdl.AR{2}
Phi2 = 3×3
0 0 0
0 0 0
0 0 0
Phi3 = PriorMdl.AR{3}
Phi3 = 3×3
0 0 0
0 0 0
0 0 0
Phi4 = PriorMdl.AR{4}
Phi4 = 3×3
0 0 0
0 0 0
0 0 0
Display a heatmap of the prior coefficient covariances for each response equation.
numexocoeffseqn = PriorMdl.IncludeConstant + ... PriorMdl.IncludeTrend + PriorMdl.NumPredictors; % Number of exogenous coefficients per equation numcoeffseqn = PriorMdl.NumSeries*PriorMdl.P + numexocoeffseqn; % Total number of coefficients per equation arcoeffnames = strings(numseries,numlags,numseries); for j = 1:numseries % Equations for r = 1:numlags for k = 1:numseries % Response Variables arcoeffnames(k,r,j) = "\phi_{"+r+","+j+k+"}"; end end arcoeffseqn = arcoeffnames(:,:,j); idx = ((j-1)*numcoeffseqn + 1):(numcoeffseqn*j) - numexocoeffseqn; Veqn = PriorMdl.V(idx,idx); figure heatmap(arcoeffseqn(:),arcoeffseqn(:),Veqn); title(sprintf('Equation of %s',seriesnames(j))) end
Work with Prior and Posterior Distributions
Consider the 3-D VAR(4) model of Create Normal-Inverse-Wishart Semiconjugate Prior Model. Estimate the posterior distribution, and generate forecasts from the corresponding posterior predictive distribution.
Load and Preprocess Data
Load the US macroeconomic data set. Compute the inflation rate. Plot all response series.
load Data_USEconModel seriesnames = ["INFL" "UNRATE" "FEDFUNDS"]; DataTimeTable.INFL = 100*[NaN; price2ret(DataTimeTable.CPIAUCSL)]; figure plot(DataTimeTable.Time,DataTimeTable{:,seriesnames}) legend(seriesnames)
Stabilize the unemployment and federal funds rates by applying the first difference to each series.
DataTimeTable.DUNRATE = [NaN; diff(DataTimeTable.UNRATE)];
DataTimeTable.DFEDFUNDS = [NaN; diff(DataTimeTable.FEDFUNDS)];
seriesnames(2:3) = "D" + seriesnames(2:3);
Remove all missing values from the data.
rmDataTimeTable = rmmissing(DataTimeTable);
Create Prior Model
Create a semiconjugate Bayesian VAR(4) prior model for the three response series. Specify the response variable names.
numseries = numel(seriesnames);
numlags = 4;
PriorMdl = semiconjugatebvarm(numseries,numlags,'SeriesNames',seriesnames);
Estimate Posterior Distribution
Estimate the posterior distribution by passing the prior model and entire data series to estimate
.
rng(1); % For reproducibility PosteriorMdl = estimate(PriorMdl,rmDataTimeTable{:,seriesnames},'Display','equation');
Bayesian VAR under semiconjugate priors Effective Sample Size: 197 Number of equations: 3 Number of estimated Parameters: 39 VAR Equations | INFL(-1) DUNRATE(-1) DFEDFUNDS(-1) INFL(-2) DUNRATE(-2) DFEDFUNDS(-2) INFL(-3) DUNRATE(-3) DFEDFUNDS(-3) INFL(-4) DUNRATE(-4) DFEDFUNDS(-4) Constant ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ INFL | 0.1267 -0.4545 0.1032 0.3197 -0.0536 0.0452 0.4210 0.2690 0.0532 0.0183 -0.1790 0.0075 0.1062 | (0.0743) (0.1466) (0.0382) (0.0852) (0.1549) (0.0402) (0.0836) (0.1542) (0.0416) (0.0868) (0.1460) (0.0379) (0.0811) DUNRATE | -0.0227 0.4551 0.0365 0.0928 0.2390 0.0521 -0.0353 0.0517 -0.0002 0.0292 -0.1774 0.0087 -0.0549 | (0.0409) (0.0808) (0.0211) (0.0461) (0.0874) (0.0222) (0.0461) (0.0855) (0.0232) (0.0481) (0.0812) (0.0212) (0.0449) DFEDFUNDS | -0.1489 -1.3020 -0.2713 0.3211 -0.2940 -0.3004 0.2550 -0.6893 0.0155 -0.0680 0.1282 -0.1341 -0.3816 | (0.1537) (0.3013) (0.0801) (0.1773) (0.3162) (0.0849) (0.1748) (0.3165) (0.0884) (0.1821) (0.3001) (0.0799) (0.1679) Innovations Covariance Matrix | INFL DUNRATE DFEDFUNDS ------------------------------------------- INFL | 0.2868 -0.0201 0.1464 | (0.0292) (0.0115) (0.0455) DUNRATE | -0.0201 0.0878 -0.1336 | (0.0115) (0.0090) (0.0264) DFEDFUNDS | 0.1464 -0.1336 1.2978 | (0.0455) (0.0264) (0.1327)
Because the prior is semiconjugate for the data likelihood, the unconditional posterior is analytically intractable. estimate
uses a Gibbs sampler to draw from the unconditional posterior distributions. Therefore, PosteriorMdl
is an empiricalbvarm
object. By default, estimate
uses the first four observations as a presample to initialize the model.
Generate Forecasts from Posterior Predictive Distribution
From the posterior predictive distribution, generate forecasts over a two-year horizon. Because sampling from the posterior predictive distribution requires the entire data set, specify the prior model in forecast
instead of the posterior.
fh = 8; FY = forecast(PriorMdl,fh,rmDataTimeTable{:,seriesnames});
FY
is an 8-by-3 matrix of forecasts.
Plot the end of the data set and the forecasts.
fp = rmDataTimeTable.Time(end) + calquarters(1:fh); figure plotdata = [rmDataTimeTable{end - 10:end,seriesnames}; FY]; plot([rmDataTimeTable.Time(end - 10:end); fp'],plotdata) hold on plot([fp(1) fp(1)],ylim,'k-.') legend(seriesnames) title('Data and Forecasts') hold off
Compute Impulse Responses
Plot impulse response functions by passing posterior estimations to armairf
.
armairf(PosteriorMdl.AR,[],'InnovCov',PosteriorMdl.Covariance)
More About
Bayesian Vector Autoregression (VAR) Model
A Bayesian VAR model treats all coefficients and the innovations covariance matrix as random variables in the m-dimensional, stationary VARX(p) model. The model has one of the three forms described in this table.
Model | Equation |
---|---|
Reduced-form VAR(p) in difference-equation notation |
|
Multivariate regression |
|
Matrix regression |
|
For each time t = 1,...,T:
yt is the m-dimensional observed response vector, where m =
numseries
.Φ1,…,Φp are the m-by-m AR coefficient matrices of lags 1 through p, where p =
numlags
.c is the m-by-1 vector of model constants if
IncludeConstant
istrue
.δ is the m-by-1 vector of linear time trend coefficients if
IncludeTrend
istrue
.Β is the m-by-r matrix of regression coefficients of the r-by-1 vector of observed exogenous predictors xt, where r =
NumPredictors
. All predictor variables appear in each equation.which is a 1-by-(mp + r + 2) vector, and Zt is the m-by-m(mp + r + 2) block diagonal matrix
where 0z is a 1-by-(mp + r + 2) vector of zeros.
, which is an (mp + r + 2)-by-m random matrix of the coefficients, and the m(mp + r + 2)-by-1 vector λ = vec(Λ).
εt is an m-by-1 vector of random, serially uncorrelated, multivariate normal innovations with the zero vector for the mean and the m-by-m matrix Σ for the covariance. This assumption implies that the data likelihood is
where f is the m-dimensional multivariate normal density with mean ztΛ and covariance Σ, evaluated at yt.
Before considering the data, you impose a joint prior distribution assumption on (Λ,Σ), which is governed by the distribution π(Λ,Σ). In a Bayesian analysis, the distribution of the parameters is updated with information about the parameters obtained from the data likelihood. The result is the joint posterior distribution π(Λ,Σ|Y,X,Y0), where:
Y is a T-by-m matrix containing the entire response series {yt}, t = 1,…,T.
X is a T-by-m matrix containing the entire exogenous series {xt}, t = 1,…,T.
Y0 is a p-by-m matrix of presample data used to initialize the VAR model for estimation.
Independent, Normal-Inverse-Wishart Semiconjugate Model
The independent , normal-inverse-Wishart semiconjugate model is an m-D Bayesian VAR model in which the conditional prior distribution of λ|Σ is multivariate normal with mean vector μ and covariance matrix V. The prior distribution of Σ is inverse Wishart with scale matrix Ω and degrees of freedom ν.
Symbolically:
where:
μ =
Mu
.V =
V
.r =
NumPredictors
.1c is 1 if
IncludeConstant
is true, and 0 otherwise.1δ is 1 if
IncludeTrend
is true, and 0 otherwise.
The posterior distributions are analytically intractable, but the full conditional posteriors are tractable.
where
MATLAB® obtains unconditional posterior distribution samples by using the Gibbs sampler.
References
[1] Litterman, Robert B. "Forecasting with Bayesian Vector Autoregressions: Five Years of Experience." Journal of Business and Economic Statistics 4, no. 1 (January 1986): 25–38. https://doi.org/10.2307/1391384.
Version History
Introduced in R2020a
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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)