Model Design

ModelConstructors.jl is an object-oriented approach to working with mathematical models. This approach takes advantage of Julia's type system, multiple dispatch, package-handling mechanism, and other features. A single model object 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 most minimal model only needs to have parameters, but a generic model may have one or more of the following objects:

  • Parameters: Have values, bounds, fixed-or-not status, priors, and regime switching. An instance of the AbstractParameter type houses all information about a given parameter in a single data structure. See The AbstractParameter Type.
  • Settings: Provide a general way to choose settings that affect how a model is manipulated. See The Setting Type.
  • Observables and Pseudo-Observables: Mapping of names to indices, as well as information necessary for transformations. See The Observable and PseudoObservable Types.

These are enough to define a generic model. Everything else is essentially a function of these basics. For example, estimating a model requires two more steps: defining likelihood function and selecting an estimation routine. See Estimating CAPM for an example estimation using SMC.