Nothing
## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)
knitr::opts_chunk$set(error = FALSE)
## -----------------------------------------------------------------------------
library(sovereign)
## ---- message = F-------------------------------------------------------------
# pull data from FRED
quantmod::getSymbols.FRED(c('GDPC1','GDPPOT','GDPDEF','FEDFUNDS'), env = globalenv())
## ---- message=F---------------------------------------------------------------
# real output gap and inflation
Y =
purrr::reduce(
list(
data.frame(GDPC1, date = zoo::index(GDPC1)),
data.frame(GDPPOT, date = zoo::index(GDPPOT)),
data.frame(GDPDEF, date = zoo::index(GDPDEF))
),
dplyr::inner_join, by = 'date'
) %>%
dplyr::mutate(
y = 100*((GDPC1-GDPPOT)/GDPPOT),
p = 400*(GDPDEF - dplyr::lag(GDPDEF))/dplyr::lag(GDPDEF)) %>%
dplyr::select(date, y,p)
# federal funds rate
I = data.frame(FEDFUNDS, date = zoo::index(FEDFUNDS)) %>%
dplyr::group_by(y = lubridate::year(date), q = lubridate::quarter(date)) %>%
dplyr::summarize(
date = min(date),
ff = mean(FEDFUNDS, na.rm = T)) %>%
dplyr::ungroup() %>%
dplyr::select(date, ff) %>%
data.frame()
# merge data
Data =
dplyr::inner_join(Y, I, by = 'date') %>%
dplyr::arrange(date) %>%
dplyr::filter(lubridate::year(date) < 2020) %>%
na.omit()
head(Data)
## ---- message = F-------------------------------------------------------------
# pull NBER recessions from FRED
quantmod::getSymbols.FRED(c('USRECQ'), env = globalenv())
# merge recessions into Data
Data.rec = Data %>%
dplyr::left_join(
data.frame(USRECQ, date = zoo::index(USRECQ)),
by = 'date') %>%
dplyr::rename(cycle_position = USRECQ) %>%
dplyr::mutate(cycle_position = dplyr::case_when(cycle_position == 0 ~ 'expansion',
cycle_position == 1 ~ 'recession'))
head(Data.rec)
## ---- message = F-------------------------------------------------------------
# let sovereign determine economic states via k-means clustering
Data.kmeans =
sovereign::regimes(
data = Data,
regime.n = 2,
method = 'kmeans')
head(Data.kmeans)
## ---- message=F, warning=F, fig.show="hold", out.width="50%"------------------
# estimate VAR
var =
sovereign::VAR(
data = Data,
p = 1,
horizon = 10,
freq = 'quarter')
# plot forecasting output, one-period ahead horizon
# plot forecasts
sovereign::plot_forecast(var$forecasts[['H_1']])
# plot residuals
sovereign::plot_error(var$residuals[['H_1']])
## ---- message = F, warning=F, fig.align='center'------------------------------
# estimate IRF
var.irf =
sovereign::var_irf(
var,
bootstrap.num = 10,
CI = c(0.05,0.95))
# plot IRF
sovereign::plot_irf(var.irf)
## ---- message = F, warning=F, fig.align='center'------------------------------
# estimate forecast error variance decomposition
var.fevd =
sovereign::var_fevd(
var,
horizon = 10)
# plot FEVD
sovereign::plot_fevd(var.fevd)
## ---- message = F, warning=F, fig.align='center'------------------------------
# estimate historical decomposition
var.hd = sovereign::var_hd(var)
# plot HD
sovereign::plot_hd(var.hd)
## ---- message=F, warning=F, fig.show="hold", out.width="50%"------------------
# estimate multi-regime VAR
rvar =
sovereign::RVAR(
data = Data.rec,
regime = 'cycle_position',
p = 1,
horizon = 10,
freq = 'quarter')
# plot forecasting output, one-period ahead horizon
# plot forecasts (right panel)
sovereign::plot_forecast(rvar$forecasts[['H_1']])
# plot residuals (left panel)
sovereign::plot_error(rvar$residuals[['H_1']])
## ---- message=F, warning=F, fig.show="hold", out.width="50%"------------------
# estimate IRF
rvar.irf =
sovereign::rvar_irf(
rvar,
horizon = 10,
bootstrap.num = 10,
CI = c(0.05,0.95))
# plot IRF
# regime 1: expansion (right panel)
sovereign::plot_irf(rvar.irf[['regime_expansion']])
# regime 2: recession (left panel)
sovereign::plot_irf(rvar.irf[['regime_recession']])
## ---- message=F, warning=F, fig.show="hold", out.width="50%"------------------
# estimate forecast error variance decomposition
rvar.fevd =
sovereign::rvar_fevd(
rvar,
horizon = 10)
# plot FEVD
# regime 1: expansion (right panel)
sovereign::plot_fevd(rvar.fevd[['regime_expansion']])
# regime 2: recession rates (left panel)
sovereign::plot_fevd(rvar.fevd[['regime_recession']])
## ---- message=F, warning=F----------------------------------------------------
# estimate historical decomposition
rvar.hd = sovereign::rvar_hd(rvar)
# plot hd
sovereign::plot_hd(rvar.hd)
## ---- message=F, warning=F, fig.show="hold", out.width="50%"------------------
# estimate single-regime forecasts
# (one or multiple horizons may be estimated)
lp =
sovereign::LP(
data = Data,
p = 1,
horizon = c(1:10),
freq = 'quarter')
# plot forecasting output, one-quarter ahead horizon
# plot forecasts (right panel)
sovereign::plot_forecast(lp$forecasts[['H_1']])
# plot residuals (left panel)
sovereign::plot_error(lp$residuals[['H_1']])
## ---- message = F, warning=F, fig.align='center'------------------------------
# estimate single-regime IRF
lp.irf = sovereign::lp_irf(lp)
# plot IRF
sovereign::plot_irf(lp.irf)
## ---- message=F, warning=F, fig.show="hold", out.width="50%"------------------
# estimate multi-regime IRF
rlp =
sovereign::RLP(
data = Data.kmeans,
regime = 'regime',
p = 1,
horizon = c(1:10),
freq = 'quarter')
# plot forecasting output, one-quarter ahead horizon
# plot forecasts (right panel)
sovereign::plot_forecast(rlp$forecasts[['H_1']])
# plot residuals (left panel)
sovereign::plot_error(rlp$residuals[['H_1']])
## ---- message=F, warning=F, fig.show="hold", out.width="50%"------------------
# estimate multi-regime IRF
rlp.irf =
sovereign::rlp_irf(rlp)
# plot IRF
# regime 1: km-eans cluster 0 (right panel)
sovereign::plot_irf(rlp.irf[[1]])
# regime 2: k-means cluster 1 (left panel)
sovereign::plot_irf(rlp.irf[[2]])
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.