Welcome to ClientVPS Mirrors

README

dsge

Dynamic Stochastic General Equilibrium Models for R.

Overview

The dsge package provides tools for specifying, solving, and estimating DSGE models by maximum likelihood and Bayesian methods. It supports:

Postestimation tools include policy and transition matrix extraction, stability diagnostics, impulse-response functions with confidence/credible bands, and forecasting with fan charts.

Installation

# Install from source
install.packages("path/to/dsge", repos = NULL, type = "source")

# Or using devtools
devtools::install("path/to/dsge")

Quick Start: Maximum Likelihood

library(dsge)

# Define a simple New Keynesian 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)
)

# Estimate the model
fit <- estimate(nk, data = your_data)
summary(fit)

# Postestimation
policy_matrix(fit)
transition_matrix(fit)
stability(fit)

# Impulse-response functions (with plot)
irfs <- irf(fit, periods = 20)
plot(irfs)

# Forecast (with plot)
fc <- forecast(fit, horizon = 12)
plot(fc)

Bayesian Estimation

Bayesian estimation is available for linear DSGE models via adaptive Random-Walk Metropolis-Hastings (RWMH).

library(dsge)

# Define the model (same syntax as ML)
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),
  start = list(beta = 0.95, kappa = 0.15, psi = 1.5, rhou = 0.7, rhog = 0.9)
)

# Specify priors
my_priors <- list(
  beta  = prior("beta", shape1 = 95, shape2 = 5),
  kappa = prior("beta", shape1 = 30, shape2 = 70),
  psi   = prior("gamma", shape = 184, rate = 122.7),
  rhou  = prior("beta", shape1 = 70, shape2 = 20),
  rhog  = prior("beta", shape1 = 70, shape2 = 20)
  # shock SDs default to inv_gamma(0.01, 0.01)
)

# Run MCMC
fit <- bayes_dsge(nk, data = your_data, priors = my_priors,
                  chains = 2, iter = 10000, warmup = 5000)

# Results
summary(fit)                        # posterior table with ESS, R-hat

# MCMC diagnostics
plot(fit, type = "trace")            # trace plots (all chains)
plot(fit, type = "density")          # posterior density + prior overlay
plot(fit, type = "prior_posterior")   # dedicated prior-vs-posterior
plot(fit, type = "running_mean")     # cumulative mean convergence
plot(fit, type = "acf")              # autocorrelation diagnostics
plot(fit, type = "pairs")            # pairwise scatter + correlations
plot(fit, type = "all")              # combined trace + density panel

# Parameter selection (works with all diagnostic types)
plot(fit, type = "trace", pars = c("kappa", "psi"))

# Posterior IRFs with credible bands
plot(fit, type = "irf", periods = 12)

Supported prior distributions: normal, beta, gamma, uniform, inv_gamma.

Plotting: All plot types support a pars argument for parameter selection (e.g., pars = c("kappa", "psi")). Pagination handles any number of parameters. Forecast plotting is not yet available for Bayesian fits.

Nonlinear DSGE Example

library(dsge)

# Define a nonlinear 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)
)

# Compute steady state
ss <- steady_state(rbc, params = c(alpha = 0.33, beta = 0.99,
                                    delta = 0.025, rho = 0.9))

# Solve (linearize + Klein solver)
sol <- solve_dsge(rbc, params = c(alpha = 0.33, beta = 0.99,
                                   delta = 0.025, rho = 0.9))

# IRFs and postestimation work identically to linear models
irfs <- irf(sol, periods = 40, se = FALSE)
plot(irfs)

Try It Yourself in RStudio

The package ships with self-contained demo scripts. After installing:

library(dsge)

# AR(1) model demo (simplest case)
source(system.file("examples", "demo_ar1.R", package = "dsge"))

# New Keynesian model demo (multivariate)
source(system.file("examples", "demo_nk.R", package = "dsge"))

# Nonlinear RBC model demo (first-order perturbation)
source(system.file("examples", "demo_rbc.R", package = "dsge"))

# Bayesian NK with real FRED data (requires internet; ~10 min)
source(system.file("examples", "bayesian_nk_fred.R", package = "dsge"))

# Bayesian nonlinear NK model (~15-25 min)
source(system.file("examples", "bayesian_nk_nonlinear.R", package = "dsge"))

# Bayesian nonlinear RBC with capital — quick demo (~2.5 min)
source(system.file("examples", "bayesian_rbc_capital_demo.R", package = "dsge"))

What This Package Currently Supports

Included in v0.4.0:

Not yet supported (planned for future releases):

Validation

The package has been validated on:

Key Features

Model Syntax

Variables are declared by their role in the model:

Wrapper Role Example
obs() Observed control variable obs(p ~ beta * lead(p) + kappa * x)
unobs() Unobserved control variable unobs(x ~ lead(x) - r)
state() State variable (with shock) state(u ~ rho * u)
state(, shock = FALSE) Endogenous state (no shock) state(k ~ delta * k, shock = FALSE)

References

License

MIT

Need a high-speed mirror for your open-source project?
Contact our mirror admin team at info@clientvps.com.

This archive is provided as a free public service to the community.
Proudly supported by infrastructure from VPSPulse , RxServers , BuyNumber , UnitVPS , OffshoreName and secure payment technology by ArionPay.