Identification of SVAR models based on Changes in volatility (CV)
Given an estimated VAR model, this function applies changes in volatility to identify the structural impact matrix B of the corresponding SVAR model
y_t=c_t+A_1 y_{t-1}+...+A_p y_{t-p}+u_t =c_t+A_1 y_{t-1}+...+A_p y_{t-p}+B ε_t.
Matrix B corresponds to the decomposition of the pre-break covariance matrix Σ_1=B B'. The post-break covariance corresponds to Σ_2=BΛ B' where Λ is the estimated unconditional heteroskedasticity matrix.
id.cv( x, SB, SB2 = NULL, start = NULL, end = NULL, frequency = NULL, format = NULL, dateVector = NULL, max.iter = 50, crit = 0.001, restriction_matrix = NULL )
x |
An object of class 'vars', 'vec2var', 'nlVar'. Estimated VAR object |
SB |
Integer, vector or date character. The structural break is specified either by an integer (number of observations in the pre-break period), a vector of ts() frequencies if a ts object is used in the VAR or a date character. If a date character is provided, either a date vector containing the whole time line in the corresponding format (see examples) or common time parameters need to be provided |
SB2 |
Integer, vector or date character. Optional if the model should be estimated with two volatility regimes. The structural break is specified either by an integer (number of observations in the pre-break period), a vector of ts() frequencies if a ts object is used in the VAR or a date character. If a date character is provided, either a date vector containing the whole time line in the corresponding format (see examples) or common time parameters need to be provided |
start |
Character. Start of the time series (only if dateVector is empty) |
end |
Character. End of the time series (only if dateVector is empty) |
frequency |
Character. Frequency of the time series (only if dateVector is empty) |
format |
Character. Date format (only if dateVector is empty) |
dateVector |
Vector. Vector of time periods containing SB in corresponding format |
max.iter |
Integer. Number of maximum GLS iterations |
crit |
Numeric. Critical value for the precision of the GLS estimation |
restriction_matrix |
Matrix. A matrix containing presupposed entries for matrix B, NA if no restriction is imposed (entries to be estimated). Alternatively, a K^2*K^2 matrix can be passed, where ones on the diagonal designate unrestricted and zeros restricted coefficients. (as suggested in Luetkepohl, 2017, section 5.2.1). |
A list of class "svars" with elements
Lambda |
Estimated unconditional heteroscedasticity matrix Λ |
Lambda_SE |
Matrix of standard errors of Lambda |
B |
Estimated structural impact matrix B, i.e. unique decomposition of the covariance matrix of reduced form residuals |
B_SE |
Standard errors of matrix B |
n |
Number of observations |
Fish |
Observed Fisher information matrix |
Lik |
Function value of likelihood |
wald_statistic |
Results of pairwise Wald tests |
iteration |
Number of GLS estimations |
method |
Method applied for identification |
SB |
Structural break (number of observations) |
A_hat |
Estimated VAR parameter via GLS |
type |
Type of the VAR model, e.g. 'const' |
SBcharacter |
Structural break (date; if provided in function arguments) |
restrictions |
Number of specified restrictions |
restriction_matrix |
Specified restriction matrix |
y |
Data matrix |
p |
Number of lags |
K |
Dimension of the VAR |
VAR |
Estimated input VAR object |
Rigobon, R., 2003. Identification through Heteroskedasticity. The Review of Economics and Statistics, 85, 777-792.
Herwartz, H. & Ploedt, M., 2016. Simulation Evidence on Theory-based and Statistical Identification under Volatility Breaks Oxford Bulletin of Economics and Statistics, 78, 94-112.
#' # data contains quartlery observations from 1965Q1 to 2008Q2
# assumed structural break in 1979Q3
# x = output gap
# pi = inflation
# i = interest rates
set.seed(23211)
v1 <- vars::VAR(USA, lag.max = 10, ic = "AIC" )
x1 <- id.cv(v1, SB = 59)
summary(x1)
# switching columns according to sign patter
x1$B <- x1$B[,c(3,2,1)]
x1$B[,3] <- x1$B[,3]*(-1)
# Impulse response analysis
i1 <- irf(x1, n.ahead = 30)
plot(i1, scales = 'free_y')
# Restrictions
# Assuming that the interest rate doesn't influence the output gap on impact
restMat <- matrix(rep(NA, 9), ncol = 3)
restMat[1,3] <- 0
x2 <- id.cv(v1, SB = 59, restriction_matrix = restMat)
summary(x2)
# In alternative Form
restMat <- diag(rep(1,9))
restMat[7,7]= 0
x2 <- id.cv(v1, SB = 59, restriction_matrix = restMat)
summary(x2)
#Structural brake via Dates
# given that time series vector with dates is available
dateVector = seq(as.Date("1965/1/1"), as.Date("2008/7/1"), "quarter")
x3 <- id.cv(v1, SB = "1979-07-01", format = "%Y-%m-%d", dateVector = dateVector)
summary(x3)
# or pass sequence arguments directly
x4 <- id.cv(v1, SB = "1979-07-01", format = "%Y-%m-%d", start = "1965-01-01", end = "2008-07-01",
frequency = "quarter")
summary(x4)
# or provide ts date format (For quarterly, monthly, weekly and daily frequencies only)
x5 <- id.cv(v1, SB = c(1979, 3))
summary(x5)
#-----# Example with three covariance regimes
x6 <- id.cv(v1, SB = 59, SB2 = 110)
summary(x6)Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.