BH_SBVAR {BHSBVAR} | R Documentation |
Structural Bayesian Vector Autoregression
Description
Estimates the parameters of a Structural Bayesian Vector Autoregression model with the method developed by Baumeister and Hamilton (2015/2017/2018).
Usage
BH_SBVAR(
y,
nlags,
pA,
pdetA = NULL,
pH = NULL,
pP = NULL,
pP_sig = NULL,
pR_sig = NULL,
kappa1 = NULL,
itr = 5000,
burn = 0,
thin = 1,
cri = 0.95
)
Arguments
y |
(T x n) matrix containing the endogenous variables. T is the number of observations and n is the number of endogenous variables. |
nlags |
Integer specifying the lag order. |
pA |
(n x n x 8) array where n is the number of endogenous variables and each slice of the third dimension contains the prior distributions (NA - no prior, 0 - symmetric t-distribution, 1 - non-central t-distribution, 2 - inverted beta distribution, 3 - beta distribution), sign restrictions (NA - no restriction, 1 - positive restriction, -1 - negative restriction), distribution position parameters, distribution scale or shape1 parameters for t-distributions or inverted beta and beta distributions, distribution degrees of freedom or shape2 parameters for t-distributions or inverted beta and beta distributions, distribution skew parameters for t-distributions, indication for long-run restrictions (NA - no long-run restriction, 1 - long-run restriction), and random-walk proposal scale parameters for A, respectively. |
pdetA |
(1 x 1 x 6) array where each slice of the third dimension contains the prior distributions (NA - no prior, 0 - symmetric t-distribution, 1 - non-central t-distribution, 2 - inverted beta distribution, 3 - beta distribution), sign restrictions (NA - no restriction, 1 - positive restriction, -1 - negative restriction), distribution position parameters, distribution scale or shape1 parameters for t-distributions or inverted beta and beta distributions, distribution degrees of freedom or shape2 parameters for t-distributions or inverted beta and beta distributions, and distribution skew parameters for t-distributions for the determinant of A, respectively (default = NULL). NULL indicates no priors for the determinant of A. |
pH |
(n x n x 6) array where n is the number of endogenous variables and each slice of the third dimension contains the prior distributions (NA - no prior, 0 - symmetric t-distribution, 1 - non-central t-distribution, 2 - inverted beta distribution, 3 - beta distribution), sign restrictions (NA - no restriction, 1 - positive restriction, -1 - negative restriction), distribution position parameters, distribution scale or shape1 parameters for t-distributions or inverted beta and beta distributions, distribution degrees of freedom or shape2 parameters for t-distributions or inverted beta and beta distributions, and distribution skew parameters for t-distributions for H, the inverse of A, respectively (default = NULL). NULL indicates no priors for the inverse of A. |
pP |
(k x n) matrix containing the prior position parameters for the reduced form lagged coefficient matrix |
pP_sig |
(k x k) matrix containing values indicating confidence in the priors for |
pR_sig |
(k x k x n) array containing values indicating confidence in long-run restrictions on the lagged structural coefficient matrix B (default = NULL). |
kappa1 |
(1 x n) matrix containing values indicating confidence in priors for the structural variances (default = NULL). n is the number of endogenous variables. NULL indicates no priors for structural variances. |
itr |
Integer specifying the total number of iterations for the algorithm (default = 5000). |
burn |
Integer specifying the number of draws to throw out at the beginning of the algorithm (default = 0). |
thin |
Integer specifying the thinning parameter (default = 1). All draws beyond burn are kept when thin = 1. Draw 1, draw 3, etc. beyond burn are kept when thin = 2. |
cri |
credibility intervals for the estimates to be returned (default = 0.95). A value of 0.95 will return 95% credibility intervals. A value of 0.90 will return 90% credibility intervals. |
Details
Estimates the parameters of a Structural Bayesian Vector Autoregression model with the method developed in Baumeister and Hamilton (2015/2017/2018). The function returns a list containing the results.
Value
A list containing the following:
accept_rate: Acceptance rate of the algorithm.
y and x: Matrices containing the endogenous variables and their lags.
nlags: Numeric value indicating the number of lags included in the model.
pA, pdetA, pH, pP, pP_sig, pR, pR_sig, tau1, and kappa1: Matrices and arrays containing prior information.
A_start: Matrix containing estimates of the parameters in A from the optimization routine.
A, detA, H, B, Phi, and D: Arrays containing estimates of the model parameters. The first, second, and third slices of the third dimension are lower, median, and upper bounds of the estimates.
A_den, detA_den, and H_den: Lists containing the horizontal and vertical axis coordinates of posterior densities of A, det(A), and H.
A_chain, B_chain, D_chain, detA_chain, H_chain: Arrays containing the raw results for A, B, D, detA, H.
Line and ACF plots of the estimates for A, det(A), and H.
Author(s)
Paul Richardson
References
Baumeister, C., & Hamilton, J.D. (2015). Sign restrictions, structural vector autoregressions, and useful prior information. Econometrica, 83(5), 1963-1999.
Baumeister, C., & Hamilton, J.D. (2017). Structural interpretation of vector autoregressions with incomplete identification: Revisiting the role of oil supply and demand shocks (No. w24167). National Bureau of Economic Research.
Baumeister, C., & Hamilton, J.D. (2018). Inference in structural vector autoregressions when the identifying assumptions are not fully believed: Re-evaluating the role of monetary policy in economic fluctuations. Journal of Monetary Economics, 100, 48-65.
See Also
Dr. Christiane Baumeister's website https://sites.google.com/site/cjsbaumeister/.
Dr. James D. Hamilton's website https://econweb.ucsd.edu/~jhamilton/.
Examples
# Import data
library(BHSBVAR)
set.seed(123)
data(USLMData)
y0 <- matrix(data = c(USLMData$Wage, USLMData$Employment), ncol = 2)
y <- y0 - (matrix(data = 1, nrow = nrow(y0), ncol = ncol(y0)) %*%
diag(x = colMeans(x = y0, na.rm = FALSE, dims = 1)))
colnames(y) <- c("Wage", "Employment")
# Set function arguments
nlags <- 8
itr <- 5000
burn <- 0
thin <- 1
cri <- 0.95
# Priors for A
pA <- array(data = NA, dim = c(2, 2, 8))
pA[, , 1] <- c(0, NA, 0, NA)
pA[, , 2] <- c(1, NA, -1, NA)
pA[, , 3] <- c(0.6, 1, -0.6, 1)
pA[, , 4] <- c(0.6, NA, 0.6, NA)
pA[, , 5] <- c(3, NA, 3, NA)
pA[, , 6] <- c(NA, NA, NA, NA)
pA[, , 7] <- c(NA, NA, 1, NA)
pA[, , 8] <- c(2, NA, 2, NA)
# Position priors for Phi
pP <- matrix(data = 0, nrow = ((nlags * ncol(pA)) + 1), ncol = ncol(pA))
pP[1:nrow(pA), 1:ncol(pA)] <-
diag(x = 1, nrow = nrow(pA), ncol = ncol(pA))
# Confidence in the priors for Phi
x1 <-
matrix(data = NA, nrow = (nrow(y) - nlags),
ncol = (ncol(y) * nlags))
for (k in 1:nlags) {
x1[, (ncol(y) * (k - 1) + 1):(ncol(y) * k)] <-
y[(nlags - k + 1):(nrow(y) - k),]
}
x1 <- cbind(x1, 1)
colnames(x1) <-
c(paste(rep(colnames(y), nlags),
"_L",
sort(rep(seq(from = 1, to = nlags, by = 1), times = ncol(y)),
decreasing = FALSE),
sep = ""),
"cons")
y1 <- y[(nlags + 1):nrow(y),]
ee <- matrix(data = NA, nrow = nrow(y1), ncol = ncol(y1))
for (i in 1:ncol(y1)) {
xx <- cbind(x1[, seq(from = i, to = (ncol(x1) - 1), by = ncol(y1))], 1)
yy <- matrix(data = y1[, i], ncol = 1)
phi <- solve(t(xx) %*% xx, t(xx) %*% yy)
ee[, i] <- yy - (xx %*% phi)
}
somega <- (t(ee) %*% ee) / nrow(ee)
lambda0 <- 0.2
lambda1 <- 1
lambda3 <- 100
v1 <- matrix(data = (1:nlags), nrow = nlags, ncol = 1)
v1 <- v1^((-2) * lambda1)
v2 <- matrix(data = diag(solve(diag(diag(somega)))), ncol = 1)
v3 <- kronecker(v1, v2)
v3 <- (lambda0^2) * rbind(v3, (lambda3^2))
v3 <- 1 / v3
pP_sig <- diag(x = 1, nrow = nrow(v3), ncol = nrow(v3))
diag(pP_sig) <- v3
# Confidence in long-run restriction priors
pR_sig <-
array(data = 0,
dim = c(((nlags * ncol(y)) + 1),
((nlags * ncol(y)) + 1),
ncol(y)))
Ri <-
cbind(kronecker(matrix(data = 1, nrow = 1, ncol = nlags),
matrix(data = c(1, 0), nrow = 1)),
0)
pR_sig[, , 2] <- (t(Ri) %*% Ri) / 0.1
# Confidence in priors for D
kappa1 <- matrix(data = 2, nrow = 1, ncol = ncol(y))
# Set graphical parameters
par(cex.axis = 0.8, cex.main = 1, font.main = 1, family = "serif",
mfrow = c(2, 2), mar = c(2, 2.2, 2, 1), las = 1)
# Estimate the parameters of the model
results1 <-
BH_SBVAR(y = y, nlags = nlags, pA = pA, pP = pP, pP_sig = pP_sig,
pR_sig = pR_sig, kappa1 = kappa1, itr = itr, burn = burn,
thin = thin, cri = cri)