FEVD_Plots {BHSBVAR} | R Documentation |
Plot Forecast Error Variance Decompositions
Description
Plot Forecast Error Variance Decompositions
Usage
FEVD_Plots(
results,
varnames,
shocknames = NULL,
xlab = NULL,
ylab = NULL,
rel = TRUE
)
Arguments
results |
List containing the results from running BH_SBVAR(). |
varnames |
Character vector containing the names of the endogenous variables. |
shocknames |
Character vector containing the names of the shocks. |
xlab |
Character label for the horizontal axis of impulse response plots (default = NULL). Default produces plots without a label for the horizontal axis. |
ylab |
Character label for the vertical axis of impulse response plots (default = NULL). Default produces plots without a label for the vertical axis. |
rel |
Boolean indicating whether to display forecast error variance explained by the shock as a percent of total forecast error variance (default = TRUE). |
Details
Plots forecast error variance decompositions and returns a list containing the actual processed data used to create the plots.
Value
A list containing forecast error variance decompositions.
Author(s)
Paul Richardson
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
acc <- TRUE
h <- 20
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)
fevd <- FEVD(results = results1, h = h, acc = acc, cri = cri)
# Plot impulse responses
varnames <- colnames(USLMData)[2:3]
shocknames <- c("Labor Demand","Labor Supply")
fevd_results <-
FEVD_Plots(results = fevd, varnames = varnames,
shocknames = shocknames)