From befb97da79d3bd5cb5f1d4d5fdb0ee186cbcc3c6 Mon Sep 17 00:00:00 2001 From: Keith O'Hara Date: Wed, 20 Sep 2017 15:23:45 -0400 Subject: [PATCH] more examples --- man/forecast.Rd | 12 +++- man/statespace.Rd | 47 ------------- tests/dsge/gensys/AnSchorfheide.R | 112 ++++++++++++++++++++++++++++++ tests/dsge/gensys/nkm_solve.R | 99 ++++++++++++++++++++++++++ tests/dsge/gensys/rbc_solve.R | 92 ++++++++++++++++++++++++ 5 files changed, 312 insertions(+), 50 deletions(-) delete mode 100644 man/statespace.Rd create mode 100644 tests/dsge/gensys/AnSchorfheide.R create mode 100644 tests/dsge/gensys/nkm_solve.R create mode 100644 tests/dsge/gensys/rbc_solve.R diff --git a/man/forecast.Rd b/man/forecast.Rd index 804864d..8f848f2 100644 --- a/man/forecast.Rd +++ b/man/forecast.Rd @@ -5,9 +5,15 @@ \alias{forecast.bvars} \alias{forecast.bvarw} \alias{forecast.cvar} - -\alias{forecast.DSGEVAR} -\alias{forecast.EDSGE} +\alias{forecast.Rcpp_bvarm} +\alias{forecast.Rcpp_bvars} +\alias{forecast.Rcpp_bvarw} +\alias{forecast.Rcpp_cvar} + +\alias{forecast.Rcpp_dsge_gensys} +\alias{forecast.Rcpp_dsge_uhlig} +\alias{forecast.Rcpp_dsgevar_gensys} +\alias{forecast.Rcpp_dsgevar_uhlig} \title{Forecasting with VAR, DSGE, and DSGE-VAR Models.} diff --git a/man/statespace.Rd b/man/statespace.Rd deleted file mode 100644 index 8c7270e..0000000 --- a/man/statespace.Rd +++ /dev/null @@ -1,47 +0,0 @@ -\name{statespace} - -\alias{statespace} -\alias{statespace.gensys} -\alias{statespace.uhlig} -\alias{statespace.SDSGE} - -\title{DSGE State-Space Format.} - -\description{ - State-space representation of a DSGE model. -} - -\usage{ -statespace(obj) -} - -\arguments{ - \item{obj}{ - An object of type `gensys', `uhlig', or `SDSGE'.} -} - -\details{ -For technical details, see the accompanying vignette. -} - -\value{ -The function constructs a state-space representation for the various DSGE solvers in BMR. -} - -\author{Keith O'Hara} - -\seealso{ - \code{\link{IRF}}, \code{\link{DSGESim}}. -} - -\examples{ -\dontrun{ -mats <- list() -mats$Gamma0 <- Gamma0; mats$Gamma1 <- Gamma1; mats$C <- C; mats$Psi <- Psi; mats$Pi <- Pi -dsgetest <- SDSGE(mats) -ssmats <- statespace(dsgetest) -} -} - -\keyword{statespace} -\concept{statespace} \ No newline at end of file diff --git a/tests/dsge/gensys/AnSchorfheide.R b/tests/dsge/gensys/AnSchorfheide.R new file mode 100644 index 0000000..daa19f0 --- /dev/null +++ b/tests/dsge/gensys/AnSchorfheide.R @@ -0,0 +1,112 @@ +# +# Solve the An-Schorfheide (2007) Model using gensys +# + +rm(list=ls()) +library(BMR) + +# +# Setting parameter values as per An and Schorfheide (2007, Table 2) + +tau <- 2.00 +kappa <- 0.15 +# +psi1 <- 1.50 +psi2 <- 1.00 +# +rhoR <- 0.60 +rhog <- 0.95 +rhoz <- 0.65 +# +rA <- 0.40 +piA <- 4.00 +gammaQ <- 0.50 +# +sigma_r <- sqrt(0.002) +sigma_g <- sqrt(0.008) +sigma_z <- sqrt(0.0045) +# +gamma <- 1 + (gammaQ/100) +beta <- 1/( 1 + (rA/400) ) +pi <- 1 + (piA/400) + +# + +G0_16 <- rhoz/tau +G0_42 <- (1 - rhoR)*psi1 +G0_43 <- (1 - rhoR)*psi2 +# c, pi, y, R, r, g, z c_t+1, pi_t+1, +Gamma0 <- rbind(c( -1, 0, 0, -1/tau, 0, 0, G0_16, 1, 1/tau), + c( 0, -1, kappa, 0, 0, -kappa, 0, 0, beta), + c( 1, 0, -1, 0, 0, 1, 0, 0, 0), + c( 0, -G0_42, -G0_43, 1, -1, G0_43, 0, 0, 0), + c( 0, 0, 0, 0, 1, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 1, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 1, 0, 0), + c( 1, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 1, 0, 0, 0, 0, 0, 0, 0)) + +Gamma1 <- rbind(c( 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, rhoR, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, rhog, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, rhoz, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 1, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 1)) + +# + +C <- matrix(0,9,1) + +Psi <- matrix(0,9,3) +Psi[5,1] <- 1 +Psi[6,2] <- 1 +Psi[7,3] <- 1 + +Pi <- matrix(0,9,2) +Pi[8,1] <- 1 +Pi[9,2] <- 1 + +Sigma <- rbind(c( sigma_r^2, 0, 0), + c( 0, sigma_g^2, 0), + c( 0, 0, sigma_z^2)) + +# + +dsge_obj <- new(gensys) + +dsge_obj$build(Gamma0,Gamma1,C,Psi,Pi) +dsge_obj$solve() + +dsge_obj$G_sol +dsge_obj$impact_sol + +# + +dsge_obj$shocks_cov = Sigma + +dsge_obj$state_space() + +dsge_obj$F_state +dsge_obj$G_state + +# + +var_names <- c("Consumption","Inflation","Output","IntRate","IntRateS","GovSpending","Technology") + +dsge_irf <- IRF(dsge_obj,30,var_names=var_names) +dsge_sim <- dsge_obj$simulate(1000,200) + +# + +y <- gammaQ + 100*(dsgetestsim[,3] + dsgetestsim[,7]) +pi <- piA + 400*dsgetestsim[,2] +R <- piA + rA + 4*gammaQ + 400*dsgetestsim[,4] + +ASData <- cbind(y,pi,R) +#save(ASData,file="ASData.RData") + +# +#END diff --git a/tests/dsge/gensys/nkm_solve.R b/tests/dsge/gensys/nkm_solve.R new file mode 100644 index 0000000..e966fcc --- /dev/null +++ b/tests/dsge/gensys/nkm_solve.R @@ -0,0 +1,99 @@ +# +# Solve the NK model with gensys +# + +rm(list=ls()) +library(BMR) + +# + +alpha <- 0.33 +vartheta <- 6 +beta <- 0.99 +theta <- 0.6667 + +eta <- 1 +phi <- 1 +phi_pi <- 1.5 +phi_y <- 0.5/4 +rho_a <- 0.90 +rho_v <- 0.5 + +BigTheta <- (1-alpha)/(1-alpha+alpha*vartheta) +kappa <- (((1-theta)*(1-beta*theta))/(theta))*BigTheta*((1/eta)+((phi+alpha)/(1-alpha))) +psi <- (eta*(1+phi))/(1-alpha+eta*(phi + alpha)) + +sigma_T <- 1 +sigma_M <- 0.25 + +G0_47 <- (1/eta)*psi*(rho_a - 1) + +#Order: yg, y, pi, rn, i, n, a, v, yg_t+1, pi_t+1 +Gamma0 <- rbind(c( -1, 0, 0, eta, -eta/4, 0, 0, 0, 1, eta/4), + c( kappa, 0, -1/4, 0, 0, 0, 0, 0, 0, beta/4), + c( phi_y, 0,phi_pi/4, 0, -1/4, 0, 0, 1, 0, 0), + c( 0, 0, 0, -1, 0, 0, G0_47, 0, 0, 0), + c( 0, -1, 0, 0, 0, 1-alpha, 1, 0, 0, 0), + c( -1, 1, 0, 0, 0, 0, -psi, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 1, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 1, 0, 0), + c( 1, 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 1, 0, 0, 0, 0, 0, 0, 0)) + +Gamma1 <- rbind(c( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, rho_a, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, rho_v, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 1, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)) + +# + +C <- matrix(0,10,1) + +Psi <- matrix(0,10,2) +Psi[7,1] <- 1 +Psi[8,2] <- 1 + +Pi <- matrix(0,10,2) +Pi[9,1] <- 1 +Pi[10,2] <- 1 + +# + +Sigma <- rbind(c(sigma_T^2, 0), + c( 0, sigma_M^2)) + +# + +dsge_obj <- new(gensys) + +dsge_obj$build(Gamma0,Gamma1,C,Psi,Pi) +dsge_obj$solve() + +dsge_obj$G_sol +dsge_obj$impact_sol + +# + +dsge_obj$shocks_cov = Sigma + +dsge_obj$state_space() + +dsge_obj$F_state +dsge_obj$G_state + +# + +var_names <- c("Output Gap","Output","Inflation","Natural Int", + "Nominal Int","Labour Supply","Technology","MonetaryPolicy") + +dsge_irf <- IRF(dsge_obj,12,var_names=var_names) +dsge_sim <- dsge_obj$simulate(800,200) + +# +#END diff --git a/tests/dsge/gensys/rbc_solve.R b/tests/dsge/gensys/rbc_solve.R new file mode 100644 index 0000000..60e803b --- /dev/null +++ b/tests/dsge/gensys/rbc_solve.R @@ -0,0 +1,92 @@ +# +# Solve a basic RBC model with BMR using gensys +# + +rm(list=ls()) +library(BMR) + +# + +beta <- 0.99 +alpha <- .33 +delta <- .015 +eta <- 1.0 +rho <- 0.95 +sigma_T <- 1 + +RSS <- 1/beta +YKSS <- (RSS + delta - 1)/alpha +IKSS <- delta +IYSS <- ((alpha*delta)/(RSS + delta - 1)) +CYSS <- 1 - IYSS + +# + +Gam62 = alpha*YKSS/(RSS) +Gam63 = alpha*YKSS/(RSS) + +# c_t, y_t, k_t, n_t, r_t, i_t, a_t, c_t+1, r_t+1 +Gamma0 = rbind(c( 1, 0, 0, 0, 0, 0, 0, -1, 1/eta), + c( -CYSS, 1, 0, 0, 0, -IYSS, 0, 0, 0), + c( 0, 1, 0,-1+alpha, 0, 0, -1, 0, 0), + c( 0, 0, 1, 0, 0, -IKSS, 0, 0, 0), + c( -eta, 1, 0, -1, 0, 0, 0, 0, 0), + c( 0, Gam62, 0, 0, -1, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 1, 0, 0), + c( 1, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 1, 0, 0, 0, 0)) + +# [c_t, y_t, k_t, n_t, r_t, i_t, a_t, c_t+1, r_t+1] +Gamma1 = rbind(c( 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, alpha, 0, 0, 0, 0, 0, 0), + c( 0, 0, 1-delta, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 0), + c( 0, 0, Gam63, 0, 0, 0, 0, 0, 0), + c( 0, 0, 0, 0, 0, 0, rho, 0, 0), + c( 0, 0, 0, 0, 0, 0, 0, 1, 0), + c( 0, 0, 0, 0, 0, 0, 0, 0, 1)) + +# + +C = matrix(0,9,1) + +Psi = matrix(0,9,1) +Psi[7,1] = 1 + +Pi = matrix(0,9,2) +Pi[8,1] = 1 +Pi[9,2] = 1 + +# + +Sigma <- matrix(sigma_T^2,1,1) + +# + +dsge_obj <- new(gensys) + +dsge_obj$build(Gamma0,Gamma1,C,Psi,Pi) +dsge_obj$solve() + +dsge_obj$G_sol +dsge_obj$impact_sol + +# + +dsge_obj$shocks_cov = Sigma + +dsge_obj$state_space() + +dsge_obj$F_state +dsge_obj$G_state + +# + +var_names = c("Consumption","Output","Capital","Labour","Interest","Investment","Technology") + +dsge_irf <- IRF(dsge_obj,12,var_names=var_names) +dsge_sim <- dsge_obj$simulate(800,200) + +# +#END