Nothing
## ----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)
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.