Dear all,

 

there seems to be a bug in dsge_simulated_theoretical_variance_decomposition  (present at least since Dynare 4.2.5) that apparently sometimes leads to wrong output results. The critical part is 116-134:

 

        if linea == NumberOfDecompLines

            if posterior

                save([M_.dname '/metropolis/' M_.fname '_PosteriorVarianceDecomposition' int2str(DecompFileNumber) '.mat' ],'Decomposition_array');

            else

                save([M_.dname '/prior/moments/' M_.fname '_PriorVarianceDecomposition' int2str(DecompFileNumber) '.mat' ],'Decomposition_array');

            end

            DecompFileNumber = DecompFileNumber + 1;

            linea = 0;

            test = DecompFileNumber-NumberOfDecompFiles;

            if ~test% Prepare the last round...

                Decomposition_array = zeros(NumberOfLinesInTheLastDecompFile,nvar*nexo);

                NumberOfDecompLines = NumberOfLinesInTheLastDecompFile;

                DecompFileNumber = DecompFileNumber - 1;

            elseif test<0;

                Decomposition_array = zeros(MaXNumberOfDecompLines,nvar*nexo);

            else

                clear('Decomposition_array');

            end

        end

 

 

I don’t understand the purpose of line 128 which is

 

                DecompFileNumber = DecompFileNumber - 1;

 

We decrease the file number by one, but after line 122 increased it by one. As a result, if the model is large and the decomposition_array is split up in several files, the last file name in the save command gets the wrong number. For example, assume NumberOfDecompFiles=2. Now in the second step of the loop, we have DecompFileNumber=2 before entering the if-part. In the if-part DecompFileNumber will be set to 1 again and will be 1 when the save command is reached in the next iteration.

 

As a consequence, the second Decomposition_array is written in file number 1 (and overwrites the previous ones) instead of number 2. I haven’t traced the consequences through the rest of compute_moments_varendo, but it seems as if the erased results are filled up with zeros, biasing the mean of the variance decomposition to 0 (and also affecting other statistics in a subtle way). At least that was how I noticed the mistake when working with Dynare 4.2.5.

 

I think line 128 simply needs to be deleted.

 

Best,

 

Johannes

 

 

 

 

--

Johannes Pfeifer

Haußerstr. 29

72076 Tübingen

Tel.: +49-(0)7071-6396184

Mobil.: +49-(0)170-6936820

Germany