## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 5 ) ## ----simulate----------------------------------------------------------------- set.seed(42) true_rho <- 0.8 true_sd <- 1.0 n <- 200 z <- numeric(n) for (i in 2:n) z[i] <- true_rho * z[i - 1] + true_sd * rnorm(1) dat <- data.frame(y = z) ## ----specify------------------------------------------------------------------ library(dsge) m <- dsge_model( obs(y ~ z), state(z ~ rho * z), start = list(rho = 0.5) ) print(m) ## ----solve-------------------------------------------------------------------- sol <- solve_dsge(m, params = c(rho = 0.8)) print(sol) ## ----estimate----------------------------------------------------------------- fit <- estimate(m, data = dat) summary(fit) ## ----postest------------------------------------------------------------------ # Policy matrix (maps states to controls) policy_matrix(fit, se = FALSE) # Transition matrix (state dynamics) transition_matrix(fit, se = FALSE) # Stability check stability(fit) ## ----irf, fig.height=3-------------------------------------------------------- irfs <- irf(fit, periods = 20, se = FALSE) plot(irfs) ## ----forecast, fig.height=3--------------------------------------------------- fc <- forecast(fit, horizon = 12) plot(fc) ## ----nk-model----------------------------------------------------------------- nk <- dsge_model( obs(p ~ beta * lead(p) + kappa * x), unobs(x ~ lead(x) - (r - lead(p) - g)), obs(r ~ psi * p + u), state(u ~ rhou * u), state(g ~ rhog * g), fixed = list(beta = 0.96), start = list(kappa = 0.1, psi = 1.5, rhou = 0.7, rhog = 0.9) ) print(nk) ## ----nk-sim-est--------------------------------------------------------------- # Solve at true parameters to get state-space form true_params <- c(beta = 0.96, kappa = 0.085, psi = 1.94, rhou = 0.70, rhog = 0.95) true_sd <- c(u = 2.3, g = 0.57) sol <- solve_dsge(nk, params = true_params, shock_sd = true_sd) # Simulate data set.seed(123) n <- 200 states <- matrix(0, n, 2) colnames(states) <- c("u", "g") for (t in 2:n) { states[t, "u"] <- 0.70 * states[t - 1, "u"] + 2.3 * rnorm(1) states[t, "g"] <- 0.95 * states[t - 1, "g"] + 0.57 * rnorm(1) } Z <- sol$D %*% sol$G obs_data <- states %*% t(Z) colnames(obs_data) <- c("p", "r") nk_dat <- as.data.frame(obs_data) # Estimate nk_fit <- estimate(nk, data = nk_dat, start = list(kappa = 0.1, psi = 1.5, rhou = 0.7, rhog = 0.9), control = list(maxit = 500)) summary(nk_fit) ## ----nk-irf, fig.height=5----------------------------------------------------- nk_irfs <- irf(nk_fit, periods = 20) plot(nk_irfs) ## ----nk-forecast, fig.height=4------------------------------------------------ nk_fc <- forecast(nk_fit, horizon = 12) plot(nk_fc) ## ----rbc-model---------------------------------------------------------------- rbc <- dsgenl_model( "1/C = beta / C(+1) * (alpha * exp(Z) * K^(alpha-1) + 1 - delta)", "K(+1) = exp(Z) * K^alpha - C + (1 - delta) * K", "Z(+1) = rho * Z", observed = "C", endo_state = "K", exo_state = "Z", fixed = list(alpha = 0.33, beta = 0.99, delta = 0.025), start = list(rho = 0.9), ss_guess = c(C = 2, K = 30, Z = 0) ) print(rbc) ## ----rbc-ss------------------------------------------------------------------- params <- c(alpha = 0.33, beta = 0.99, delta = 0.025, rho = 0.9) ss <- steady_state(rbc, params = params) print(ss) ## ----rbc-solve---------------------------------------------------------------- sol <- solve_dsge(rbc, params = params, shock_sd = c(Z = 0.01)) print(sol) stability(sol) ## ----rbc-irf, fig.height=3---------------------------------------------------- rbc_irfs <- irf(sol, periods = 40, se = FALSE) plot(rbc_irfs) ## ----bayes-priors, eval=FALSE------------------------------------------------- # my_priors <- list( # beta = prior("beta", shape1 = 95, shape2 = 5), # kappa = prior("beta", shape1 = 30, shape2 = 70), # psi = prior("gamma", shape = 20, rate = 13.3), # rhou = prior("beta", shape1 = 70, shape2 = 20), # rhog = prior("beta", shape1 = 70, shape2 = 20) # # shock SDs default to inv_gamma(0.01, 0.01) # ) ## ----bayes-estimate, eval=FALSE----------------------------------------------- # fit_bayes <- bayes_dsge(nk, data = nk_dat, priors = my_priors, # chains = 2, iter = 10000, warmup = 5000, # seed = 42) # # summary(fit_bayes) # posterior table with ESS, R-hat, MCSE ## ----bayes-diag, eval=FALSE--------------------------------------------------- # # MCMC diagnostics # plot(fit_bayes, type = "trace") # trace plots (all chains) # plot(fit_bayes, type = "density") # posterior density + prior overlay # plot(fit_bayes, type = "prior_posterior") # dedicated prior-vs-posterior comparison # plot(fit_bayes, type = "running_mean") # cumulative mean convergence # plot(fit_bayes, type = "acf") # autocorrelation diagnostics # plot(fit_bayes, type = "pairs") # pairwise scatter + correlations # plot(fit_bayes, type = "all") # combined trace + density panel # # # Parameter selection (works with all types above) # plot(fit_bayes, type = "trace", pars = c("kappa", "psi")) # plot(fit_bayes, type = "density", pars = "rhou") # # # Posterior IRFs with credible bands # plot(fit_bayes, type = "irf", periods = 12, n_draws = 500) # # Or equivalently: # bayes_irfs <- irf(fit_bayes, periods = 12, n_draws = 500) # plot(bayes_irfs)