From a statistical point of view, DSGE models are unobserved components models: only a few variables are observed. Filtering or smoothing provide estimate of the unobserved variables given the observations.
The model is put in state space form
\[\begin{align*} y^o_t &= M s_t + N\epsilon_t\\ s_t &= Ts_{t-1} + R\eta_t \end{align*}\]
where $y^o_t$ represents observed variable at period t
. The coefficient matrices of the transition equation, T
and R
are provided by the solution of the linear(-isze) rational expectation model. $\epsilon_t$ are possible measurement errors and $\eta_t$ the structural shocks. Most often matrix M
is a selection matrix.
Filtering provides estimates conditional only on past observations:
\[\mathbb{E}(y^{no}_t|Y^o_{t-1})\]
where $y^{no}_t$ are unobserved variables at period t
and $Y^o_{t-1}$ represent the set observations until period t-1
included.
Smoothing provides estimates of unobserved variables conditional on the entire sample of observations:
\[\mathbb{E}(y^{no}_t|Y^o_T)\]
where $Y^o_T$ represents the all observations in the sample.
Dynare command
varobs
Observed variables are declared with the varobs
command
Command: varobs VARIABLE_NAME...;
This command lists the name of observed endogenous variables for the estimation procedure. These variables must be available in the data file (see estimation_cmd <estim-comm>
).
Alternatively, this command is also used in conjunction with the partial_information
option of stoch_simul
, for declaring the set of observed variables when solving the model under partial information.
Only one instance of varobs
is allowed in a model file. If one needs to declare observed variables in a loop, the macro processor can be used as shown in the second example below.
Example
varobs C y rr;
observation_trends
It is possible to declare a deterministic linear trend that is removed for the computations and added back in the results
Block: observation_trends ;
This block specifies linear trends for observed variables as functions of model parameters. In case the loglinear
option is used, this corresponds to a linear trend in the logged observables, i.e. an exponential trend in the level of the observables.
Each line inside of the block should be of the form:
VARIABLE_NAME(EXPRESSION);
In most cases, variables shouldn't be centered when observation_trends
is used.
Example
observation_trends;
Y (eta);
P (mu/eta);
end;
calib_smoother
This command triggers the computation of the filter and smoother for calibrated models
Command: calib_smoother [VARIABLE_NAME]...;
Command: calib_smoother (OPTIONS...)[VARIABLE_NAME]...;
This command computes the smoothed variables (and possible the filtered variables) on a calibrated model.
A datafile must be provided, and the observable variables declared with varobs
. The smoother is based on a first-order approximation of the model.
By default, the command computes the smoothed variables and shocks and stores the results in oo_.SmoothedVariables
and oo_.SmoothedShocks
. It also fills oo_.UpdatedVariables
.
Options
datafile = FILENAME
: file containing the observation in CSV format.filtered_vars
: triggers the computation of filtered variables.first_obs = INTEGER
: first observationdiffuse_filter = INTEGER
: use a diffuse filter for nonstationary models.
Julia functions
Dynare.calibsmoother!
— Functioncalibsmoother!(; context::Context=context,
datafile::String = "",
data::AxisArrayTable = AxisArrayTable(Matrix{Float64}(undef, 0, 0), Undated[], Symbol[]),
first_obs::PeriodSinceEpoch = Undated(typemin(Int)),
last_obs::PeriodSinceEpoch = Undated(typemin(Int)),
nobs::Int = 0
)
Compute the smoothed values of the variables for an estimated model
#Keyword arguments
periods::Integer
: number of forecasted periods [required]datafile::String
: file with the observations for the smootherdata::AxisArrayTable
: AxisArrayTable containing observed variables (can't be used at the same time asdatafile
)first_obs::PeriodSinceEpoch
: first period used by smoother (default: first observation in the dataset)last_obs::PeriodSinceEpoch
: last period used by smoother (default: last observation in the dataset)nobs::Int
: number of observations (default: entire dataset)