Truncated normal distribution for shocks

Dear all,

I was wondering if it is possible to specify a shock in dynare that has a truncated normal distribution?

Say, a normal distribution with \mu and \sigma but the shock only takes positive value?
I.e., \epsilon = |X| where X \in N(\mu,\sigma)


Hi, We only have the normal distribution when we simulate models. Obviously you can apply a non linear function on the exogenous variables (in the model block) that truncates the realizations… But doing perturbation (with stoch_simul command) you would loose the restrictions implied by this function. It would only work with the extended path approach (extended_path command) which does not rely on local approximations. An alternative is to directly use one of the internal routines used by stoch_simul: simult_.m which allows to simulate the model with an arbitrary sequence of shocks. Note however that the reduced form solution of the model is computed under the assumption that the exogenous variables are zero mean (which is not the case with a truncated Gaussian).


Thank you for your reply. Just trying to see if I got it correct:

  1. Truncation by function does not help because the perturbation performs locally
  2. simult_.m can perform such a task, but the decision rules of the simulation are derived as if the shocks were not truncated.

So the only hope is extended_path?Thanks!


But note that the problem is only when the mean is non zero. After all, you might have a truncated distribution with zero mean… The problem with the non zero mean, is that it will shift the mean of the endogenous variables (or at least some of them), so if you linearise around the deterministic steady state (computed by dynare under the assumption that the expectations of the exogenous variables are zero) you are approximating the model around the wrong point (and this will most likely affect the reduced form parameters). A possible workaround would be to provide the steady state in a steady_state block, with the nocheck option so that dynare does not check that the steady state you provide is correct (obviously there is a risk here), artificially adding constants for the non zero mean shocks. Dynare would then compute the correct reduced form, that could be used with the simult_ routine.


Let me add that @stepan-a’s point is only valid at first order. At second order where certainty equivalence does not hold anymore you would additionally rely on wrong distributional assumptions to compute the uncertainty correction.
Also Drawing from non-normal distributions(uniform)in simulation is potentially relevant.