A brief introduction to the vector autoregression

Read Cochrane’s (1994) paper Permanent and Transitory Components of GDP and Stock Prices http://faculty.chicagobooth.edu/john.cochrane/research/papers/Cochrane%20Perm%20and%20Trans%20GNP%20and%20stocks%20(QJE).pdf.

Comprehension question:

  1. What is cointegration? Why should consumption and income be cointegrated? Why should stock prices and dividends be cointegrated?
  2. What is the point of the paper?
  3. What do you make of an increase in stock prices without a corresponding increase in dividends? Is it likely to be permanent or transitory? Why?
  4. What do you make of a drop in GDP that is accompanied by a fall in consumption? Is it likely to be a permanent or transitory shock?
  5. What does Cochrane mean by saying that consumption defines the trend in GDP?

Application question (optional but very fun and useful)

  1. Download the package vars and tsDyn and load these packages. Also, download quarterly GDP and consumption (available in 5206.0 table 2), put the two series in a spreadsheet by themselves and load the data into R.
  2. Your data should contain two columns (no date column), one for GDP, and one for consumption. Create a new dataset that is the natural log of the old data set. newdata <- log(olddata).
  3. Create another new dataset that is differenced. That is newnewdata <- newdata %>% mutate(d.GDP = c(NA, diff(GDP)), d.CONS = c(NA, diff(CONS))) %>% filter(!is.na(d.GDP)) %>% dplyr::select(-GDP, -CONS).
  4. Fit a vector autoregression to the two series using VAR(newnewdata, p = somenumberoflags, type = "const"). You will have to choose a number of lags to include. After fitting the model, use aic(myfittedmodel) which returns the Akaike Information Criterion—a lower number is better. How many lags should you include?
  5. Generate some impulse responses using myirfs <- irf(myfittedmodel). Plot these with plot(myirfs). Interpret the plots.
  6. Now fit a vector error correction model, using vecm1 <- VECM(data= cg2, lag = somenumberoflags, r = 1, include = "const", estim = "ML", beta = 0) (note that you should use the log levels, not the differences as before). Generate irfs again. Is there any substantial difference?
  7. Generate forecasts for GDP and consumption growth over the next year using predict(myfittedmodel, n.ahead = 4). You can plot these predictions.