# Model Design

DSGE.jl is an object-oriented approach to solving the New York Fed DSGE model that takes advantage of Julia's type system, multiple dispatch, package-handling mechanism, and other features. A single model object^{[1]} centralizes all information about the model's parameters, states, equilibrium conditions, and settings in a single data structure. The model object also keeps track of file locations for all I/O operations.

The following objects define a model:

**Parameters**: Have values, bounds, fixed-or-not status, priors. An instance of the`AbstractParameter`

type houses all information about a given parameter in a single data structure. See The`AbstractParameter`

Type in the documentation for ModelConstructors.jl.**Model Indices**: Mappings of state, shock, observable, and pseudo-observable names to indices (e.g.`y_t`

-> 1). See Defining Indices.**Observables and PseudoObservables**: Mapping of names to indices, as well as information necessary for transformations. See The`Observable`

and`PseudoObservable`

Types in the documentation for ModelConstructors.jl.**Equilibrium Conditions**: A function that takes parameters and model indices, then returns`Γ0`

,`Γ1`

,`C`

,`Ψ`

, and`Π`

(which fully describe the model in canonical form).**Measurement Equation**: A function mapping states to observables.**Pseudo-Measurement Equation**: A function mapping states to what we call "pseudo-observables", i.e. linear combinations of existing states which are not observed. (Note that this is not strictly required to implement a model, but we often use the pseudo-measurement equation instead of adding new states in order to achieve a more parsimonious model.)

These are enough to define the model structure. *Everything else* is essentially a function of these basics, and we can solve the model and forecast observables via the following chain:

- Parameters + Model Indices + Equilibrium conditions -> Transition matrices in state-space form
- Transition matrices + Data -> Estimated parameter values
- Estimated parameters + Transition matrices + Data -> Forecast

- 1As of v0.7.3, DSGE.jl no longer houses the code for creating a model object. We have created a separate package ModelConstructors.jl, which defines a bare-bones AbstractModel type for a generic model a user might want to estimate. In DSGE.jl, we now define a subtype AbstractDSGEModel that includes additional methods, defaults, etc. that a standard DSGE model would have.