Welfare evaluation

Dear all,

I’d like to do welfare analysis in my paper. As well documented by Kim and Kim (03), one has to approximate the model up to at least second order if one wants to calculate welfare. I know Dynare can do second order approximation and it has “Ramsey” command to deal with this issue. But the problem in my case is that my model is relatively big, and it’s very hard for Dynare to find ss and solve the model and Ramsey problem.

So, I’ve done first order approximation by hand (using model (linear) command) when I do simulations. But when it comes to welfare evaluation, I have to do second order approximation.

My approach for welfare calculation is the following:

1, I approximate the model up to second order by hand. I add many quadratic and cross terms in the code. Then, I get the variances of some endogenous variables, which are useful to calculate welfare.

2, I maximize the utility and approximate utility function up to second order as well. Besides some parameters, SS values of some variables, the only unknowns are the variance of some endogenous variables, i.e. consumption and employment. The variances can be obtained from the first step when we solve the model.

3, I plug in numbers to calculate the welfare.

What do you think of my approach, correct?

I really appreciate if anyone could offer some comments.

Many thanks in advance.


A full second order approximation will yield correct results. Your approach may be correct, but this is hard to judge from your rudimentary description (particularly step 2)

In general, this manual approach is very prone to errors. I don’t see the advantage compared to Dynare’s Ramsey command. For manual linearization, you already need to compute the steady state. Why can you not provide this analytical steady state to Dynare for use in the Ramsey command?

Dear Johannes,

Many thanks for your reply, I really appreciate your help.

I know Ramsey command would yield correct results (as you told me during RES). But, in practice, whenever I enter the model in non-linear form, it is very hard for Dynare to find SS and solve the model. You’re right. I do need to provide SS when I choose to approximate the model by hand (first order or second order). For obtaining SS, I’ve used an external Matlab file (fsolve function). The problem is that when I used Ramsey command (for which I provided SS calculated by Matlab), the SS still can’t be found and model still can’t be solved. Maybe, my SS is not accurate enough, or Dynare is using different solver to get SS, which conflicts my SS, my model is big, etc.

Therefore, I end up with doing second order approximation by hand. I have to add many quadratic terms and cross terms.

For the second step, I meant I approximate the utility function by hand up to second order. Please see the attached file. In the end, I end up with an expression in which the only unknowns are the variances of some endogenous variables.

In order to get the variances, I approximate the whole model up to second order. I solve the model and get the variances.

Thanks again for your reply.

second order approximation_Utility.pdf (50.7 KB)

Let stop you right there. There is one and one steady state only. What you seem to suggest is that you failed in computing the steady state analytically and decided now to continue working with a wrong steady state when linearizing the equations yourself. This is not the way to go. Sit down with pencil and paper and get the steady state straight. Then use the Ramsey command.

Remark: your attached document is very fuzzy on why you move from conditional to unconditional welfare and you assume that you start at the steady state for evaluation of the welfare.

Dear Johannes,

Thanks again for your reply. I think you’re right. At the moment, I’ll also try to use Ramsey command to calculate welfare.


Dear Johannes and others,

I have also been working with welfare evaluations lately. Do I understand correctly that oo_.planner_objective_value computed by ramsey_policy gives the value of the objective function conditional on the steady state of the model, i.e. it is a conditional welfare measure? Is the computation of the objective value affected if I run a stochastic simulation of the model and compute empirical moments (by setting periods>0 in ramsey_policy)?

Is there any documentation on how exactly Dynare computes the planner objective value?

Best, Aino

There has been an update to the manual, see github.com/DynareTeam/dynare/commit/e67524e99038fea3e2c4263f18e5d05264d4921f

Dear all,

I’m a working with a policy rule in a DSGE model and I’m trying to find the coefficient which maximizes welfare. I wonder if could just use the welfare measure which has been discussed in the Dynare forum:

Welfare = Util + beta*Welfare(+1),

where Util is the period utility function of the household, and run a second-order approximation of the model, i.e., use the command stoch_simul(order=2), and then compare the mean of the variable “Welfare” for different values of the policy rule coefficient? And I wonder if the rule which maximizes welfare would be the same as the solution to a (constrained-efficient) Ramsey program?

Thank you in advance for your help!

Best, Johanna

Yes, this would be a numerical way of solving the Ramsey problem (apart from the fact that the Ramsey optimal policy is usually fully state contingent while user-defined policy rule often assume the reaction to only a subset of states more like the optimal simple rule approach)

Thank you very much for your answer!

This leads me to the next question: Actually, I am working with a two-country model and I’m interested in comparing the coefficients I get for a Nash setup (non-coordinated policies) to the coeffients I get if policy makers coordinate, i.e. jointly chose the coefficients to maximize the equally weighted lifetime utilities of home and foreign households.

So, I guess, I can again numerically find the solution for the coordinated case, by just finding the coefficient (equal coefficients for both countries because I’m working with symmetric countries) which maximize joint welfare defined as

jointWelfare = (0.5Util_H + 0.5Util_F) + beta*jointWelfare(+1),

by again running the second-order approximation of the model and comparing the means I get for the variable “jointWelfare”.

But I’m afraid there is no way I can find the solution for the Nash case by this approach, where each government maximizes the domestic agent lifetime utility for any potential policy coefficient chosen by the other country? And as I understand it, the reason for this is - as you put it - that the user-defined policy rule assumes the reaction to only a subset of states, so in my case the subset of states where the two governments chose the same policy coefficient. Did I understand this correctly.

And does someone maybe have some experience with using Dynare (or other code) to find the optimal policy (optimal simple rule in my case) in the two-country case for the Nash setup and the coordinated setup?

It seems we are miscommunicating. If you restrict the policies to simple rules, both should be doable. The hard part is doing full Ramsey manually as the optimal policy would have a coefficient in front of every state variable.
The cooperative case should be straightforward as you describe it: maximizing joint welfare. The hard thing is the Nash problem as now every country maximizes its own welfare taking the foreign policy as given. Here you are looking for the intersection of the best responses. As this is only a fixed point, you might be able to solve for such a fixed point. But in this case, you might need two loops that iteratively search for the fixed point. If we are talking about symmetric countries, this should considerably simplify because you are maximizing domestic welfare over the domestic policy rule subject to the other country running the same policy.

Thank you again for your prompt reply!
I also thought of doing it the way you proposed, but what kept me from doing it this way, is the fact that the mean I get for jointWelfare is equal to the mean I get for national welfare for either country. So I thought the coefficients I would get for cooperation and Nash would be the same. But I didn’t try it yet.

Hi everyone,

To obtain a welfare measure in my model, I added the equation WELF = Util + beta*WELF(+1) in the model block and WELF as a new variable. Now, in the model I have two policies, each governed by a parameter. I simulated the model at 2nd order over a loop that changes the parameters across some ranges. Then what I do is to plot the mean of WELF stored by dynare in corrispondence of each policy parameter (surface plot). My questions are:

  1. By doing so, am I computing conditional or unconditonal welfare? My believe is that I compute conditional welfare but I would like a confirmation.
  2. For this measure of welfare I obtain negative values. Is this what one should expect? If so, should I consider as “optimal” policy that one in which the parameters deliver the lower negative welfare?

Thank you very much for your help.