Re optimal simple rules -- mistake re covariances

There still seems to be a mistake in the osr command in the latest (stable) version of Dynare. (I am using 4.4.2 on a Mac at home, and version 4.4.2 on Windows at work.)

The problem is that when a covariance is added in the welfare or loss function (as in the mod example below), the preprocessing of the mod file into the Mat file yields non-unique elements in obj_var_. This vector is passed to the ors function (the vector is renamed i_var) and then gets passed to the osr1 function which calls osr_obj (passing a reordered i_var vector to ors_obj), which then computes the welfare function by computing variances and covariances using the following two lines of code:

vx = get_variance_of_endogenous_variables(dr,i_var);
loss = weights(:)’*vx(:);

In the example below vx should be 3 by 3, but it ends up being a 4 by 4 matrix, conformable with the 4 by 4 weights matrix.
ans =
1.0000 0 0 1.0000
0.5000 1.0000 1.0000 0.5000
0.5000 1.0000 1.0000 0.5000
1.0000 0 0 1.0000

The weights matrix gets conformably messed up in the call to ors_obj (line 61 of osr1):

The bug can, I believe, be fixed by adding the following at the beginning of the osr function

Though ideally the dynare prepocessing would apply the unique command to obj_var_


% Example Mod file taken from

var y inflation r;
varexo y_ inf_;

parameters delta sigma alpha kappa gammarr gammax0 gammac0 gamma_y_ gamma_inf_;

delta = 0.44;
kappa = 0.18;
alpha = 0.48;
sigma = -0.06;

gammarr = 0;
gammax0 = 0.2;
gammac0 = 1.5;
gamma_y_ = 8;
gamma_inf_ = 3;

y = delta * y(-1) + (1-delta)y(+1)+sigma (r - inflation(+1)) + y_;
inflation = alpha * inflation(-1) + (1-alpha) * inflation(+1) + kappa
y + inf_;
r = gammax0

var y_; stderr 0.63;
var inf_; stderr 0.4;

inflation 1;
y 1;
y, inflation 0.5;

osr_params gammax0 gammac0 gamma_y_ gamma_inf_;
osr y;

Correction: vx should be 2 by 2, not 3 by 3 in the example I provided.

We are going to look into this. But this seems to be no problem, because the objective function is just multiplied by 4, meaning that the minimum stays the same.