From e4c803d0db09bb0a78d1593330db18a89a23aab6 Mon Sep 17 00:00:00 2001
From: Michel Juillard <michel.juillard@mjui.fr>
Date: Mon, 21 Nov 2011 12:39:02 +0100
Subject: [PATCH] fixed issues with estimation of non-stationary models. Option
 lik_init=2 is contradictory with diffuse_filter or unit_root_variables
 declaration. Models with non-stationary variables, but only stationary
 observed variables need diffuse_filter option and make a useless call to
 kalman_filter_d (this seems better than trying to distinguish these rare
 cases)

---
 matlab/dynare_estimation_init.m            |  7 ++++++-
 matlab/kalman/likelihood/kalman_filter_d.m |  1 +
 tests/arima/mod1c.mod                      |  1 -
 tests/arima/mod2a.mod                      |  3 +--
 tests/arima/mod2b.mod                      |  3 +--
 tests/arima/mod3a.mod                      | 24 ----------------------
 6 files changed, 9 insertions(+), 30 deletions(-)
 delete mode 100644 tests/arima/mod3a.mod

diff --git a/matlab/dynare_estimation_init.m b/matlab/dynare_estimation_init.m
index 8cab9c472..ca98d735f 100644
--- a/matlab/dynare_estimation_init.m
+++ b/matlab/dynare_estimation_init.m
@@ -69,7 +69,12 @@ end
 % Set options_.lik_init equal to 3 if diffuse filter is used or
 % kalman_algo refers to a diffuse filter algorithm.
 if (options_.diffuse_filter==1) || (options_.kalman_algo > 2)
-    options_.lik_init = 3;
+    if options_.lik_init == 2
+        error(['options diffuse_filter, lik_init and/or kalman_algo have ' ...
+               'contradictory settings'])
+    else
+        options_.lik_init = 3;
+    end
 end
 
 % If options_.lik_init == 1
diff --git a/matlab/kalman/likelihood/kalman_filter_d.m b/matlab/kalman/likelihood/kalman_filter_d.m
index 1bb56e635..a39856c1a 100644
--- a/matlab/kalman/likelihood/kalman_filter_d.m
+++ b/matlab/kalman/likelihood/kalman_filter_d.m
@@ -58,6 +58,7 @@ t    = start;              % Initialization of the time index.
 dlik = zeros(smpl,1);      % Initialization of the vector gathering the densities.
 dLIK = Inf;                % Default value of the log likelihood.
 oldK = Inf;
+s    = 0;
 
 while rank(Pinf,kalman_tol) && (t<=last)
     s = t-start+1;
diff --git a/tests/arima/mod1c.mod b/tests/arima/mod1c.mod
index a670c6766..3b7e21fde 100644
--- a/tests/arima/mod1c.mod
+++ b/tests/arima/mod1c.mod
@@ -23,5 +23,4 @@ stderr y,INV_GAMMA_PDF,0.01,inf;
 end;
 
 varobs x y;
-unit_root_vars x y;
 estimation(datafile=data1,nobs=1000,mh_replic=2000,lik_init=2,mh_jscale=1.2);
\ No newline at end of file
diff --git a/tests/arima/mod2a.mod b/tests/arima/mod2a.mod
index a0ceed658..305f4f2bd 100644
--- a/tests/arima/mod2a.mod
+++ b/tests/arima/mod2a.mod
@@ -29,5 +29,4 @@ end;
 
 varobs dx dy;
 
-unit_root_vars x y;
-estimation(datafile=data2,nobs=100,mh_replic=0,lik_init=2);
+estimation(datafile=data2,nobs=100,mh_replic=0,diffuse_filter);
diff --git a/tests/arima/mod2b.mod b/tests/arima/mod2b.mod
index 1fd7a0ba2..ffe3e5362 100644
--- a/tests/arima/mod2b.mod
+++ b/tests/arima/mod2b.mod
@@ -29,5 +29,4 @@ end;
 
 varobs x y;
 
-unit_root_vars x y;
-estimation(datafile=data2,nobs=100,mh_replic=0,lik_init=2);
+estimation(datafile=data2,nobs=100,mh_replic=0,diffuse_filter);
diff --git a/tests/arima/mod3a.mod b/tests/arima/mod3a.mod
deleted file mode 100644
index cfa20775d..000000000
--- a/tests/arima/mod3a.mod
+++ /dev/null
@@ -1,24 +0,0 @@
-var dx dy;
-varexo e_x e_y;
-
-parameters rho_x rho_y;
-
-rho_x = 0.5;
-rho_y = -0.3;
-
-model;
-dx = rho_x*dx(-1)+e_x;
-dy = rho_y*dy(-1)+e_y;
-end;
-
-estimated_params;
-rho_x,NORMAL_PDF,0.5,0.1;
-rho_y,NORMAL_PDF,-0.3,0.1;
-stderr e_x,INV_GAMMA_PDF,0.01,inf;
-stderr e_y,INV_GAMMA_PDF,0.01,inf;
-end;
-
-varobs dx dy;
-check;
-estimation(datafile=data1,nobs=1000,mh_replic=0,load_mh_file);
-stab_map_;
\ No newline at end of file
-- 
GitLab