diff --git a/tests/k_order_perturbation/fs2000k++.mod b/tests/k_order_perturbation/fs2000k++.mod new file mode 100644 index 000000000..be261e455 --- /dev/null +++ b/tests/k_order_perturbation/fs2000k++.mod @@ -0,0 +1,57 @@ +var m m_1 P P_1 c e W R k d n l gy_obs gp_obs y dA P2 c2; +varexo e_a e_m; + +parameters alp bet gam mst rho psi del; + +alp = 0.33; +bet = 0.99; +gam = 0.003; +mst = 1.011; +rho = 0.7; +psi = 0.787; +del = 0.02; + +model; +dA = exp(gam+e_a); +log(m) = (1-rho)*log(mst) + rho*log(m_1(-1))+e_m; +-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c2(+1)*P2(+1)*m(+1))=0; +W = l/n; +-(psi/(1-psi))*(c*P/(1-n))+l/n = 0; +R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W; +1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0; +c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1); +P*c = m; +m-1+d = l; +e = exp(e_a); +y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a)); +gy_obs = dA*y/y(-1); +gp_obs = (P/P_1(-1))*m_1(-1)/dA; +P2 = P(+1); +c2 = c(+1); +m_1 = m; +P_1 = P; +end; + +initval; +m = mst; +m_1=mst; +P = 2.25; +P_1 = 2.25; +c = 0.45; +e = 1; +W = 4; +R = 1.02; +k = 6; +d = 0.85; +n = 0.19; +l = 0.86; +y = 0.6; +gy_obs = exp(gam); +gp_obs = exp(-gam); +dA = exp(gam); + P2=P; + c2=c; +end; + +vcov = [0.014, 0;0, 0.005]; + diff --git a/tests/k_order_perturbation/fs2000k2.mod b/tests/k_order_perturbation/fs2000k2.mod new file mode 100644 index 000000000..07eefba8f --- /dev/null +++ b/tests/k_order_perturbation/fs2000k2.mod @@ -0,0 +1,83 @@ +// checks for order = 2 that use_k_order = 0 (fs2000k2a) and use_k_order = 1 (this file) +// give the same results + +var m P c e W R k d n l gy_obs gp_obs y dA ; +varexo e_a e_m; + +parameters alp bet gam mst rho psi del; + +alp = 0.33; +bet = 0.99; +gam = 0.003; +mst = 1.011; +rho = 0.7; +psi = 0.787; +del = 0.02; + +model (use_dll); +dA = exp(gam+e_a); +log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m; +-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0; +W = l/n; +-(psi/(1-psi))*(c*P/(1-n))+l/n = 0; +R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W; +1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0; +c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1); +P*c = m; +m-1+d = l; +e = exp(e_a); +y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a)); +gy_obs = dA*y/y(-1); +gp_obs = (P/P(-1))*m(-1)/dA; +end; + +initval; +m = mst; +P = 2.25; +c = 0.45; +e = 1; +W = 4; +R = 1.02; +k = 6; +d = 0.85; +n = 0.19; +l = 0.86; +y = 0.6; +gy_obs = exp(gam); +gp_obs = exp(-gam); +dA = exp(gam); +end; + +shocks; +var e_a; stderr 0.014; +var e_m; stderr 0.005; +end; + +steady; + +stoch_simul(order=2,use_k_order,periods=1000); + +oo1 = load('fs2000k2a_results','oo_'); + +dr0 = oo1.oo_.dr; +dr = oo_.dr; + +if max(max(abs(dr0.ghx - dr.ghx))) > 1e-12; + disp('error in ghx'); +end; +if max(max(abs(dr0.ghu - dr.ghu))) > 1e-12; + disp('error in ghu'); +end; +if max(max(abs(dr0.ghxx - dr.ghxx))) > 1e-12; + disp('error in ghxx'); +end; +if max(max(abs(dr0.ghuu - dr.ghuu))) > 1e-12; + disp('error in ghuu'); +end; +if max(max(abs(dr0.ghxu - dr.ghxu))) > 1e-12; + disp('error in ghxu'); +end; +if max(max(abs(dr0.ghs2 - dr.ghs2))) > 1e-12; + disp('error in ghs2'); +end; + diff --git a/tests/k_order_perturbation/fs2000k2a.mod b/tests/k_order_perturbation/fs2000k2a.mod new file mode 100644 index 000000000..3451779f6 --- /dev/null +++ b/tests/k_order_perturbation/fs2000k2a.mod @@ -0,0 +1,60 @@ +// checks for order = 2 that use_k_order = 0 (this file) and use_k_order = 1 (fs2000k2) +// give the same results + +var m P c e W R k d n l gy_obs gp_obs y dA ; +varexo e_a e_m; + +parameters alp bet gam mst rho psi del; + +alp = 0.33; +bet = 0.99; +gam = 0.003; +mst = 1.011; +rho = 0.7; +psi = 0.787; +del = 0.02; + +model; +dA = exp(gam+e_a); +log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m; +-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0; +W = l/n; +-(psi/(1-psi))*(c*P/(1-n))+l/n = 0; +R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W; +1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0; +c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1); +P*c = m; +m-1+d = l; +e = exp(e_a); +y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a)); +gy_obs = dA*y/y(-1); +gp_obs = (P/P(-1))*m(-1)/dA; +end; + +initval; +m = mst; +P = 2.25; +c = 0.45; +e = 1; +W = 4; +R = 1.02; +k = 6; +d = 0.85; +n = 0.19; +l = 0.86; +y = 0.6; +gy_obs = exp(gam); +gp_obs = exp(-gam); +dA = exp(gam); +end; + +shocks; +var e_a; stderr 0.014; +var e_m; stderr 0.005; +end; + +steady; + +stoch_simul(order=2); + + diff --git a/tests/k_order_perturbation/fs2000k3.mod b/tests/k_order_perturbation/fs2000k3.mod new file mode 100644 index 000000000..738c8ab0f --- /dev/null +++ b/tests/k_order_perturbation/fs2000k3.mod @@ -0,0 +1,80 @@ +// checks whether second order coefficients are the same with order=2 and order=3 with use_k_order=1 + +var m P c e W R k d n l gy_obs gp_obs y dA ; +varexo e_a e_m; + +parameters alp bet gam mst rho psi del; + +alp = 0.33; +bet = 0.99; +gam = 0.003; +mst = 1.011; +rho = 0.7; +psi = 0.787; +del = 0.02; + +model (use_dll); +dA = exp(gam+e_a); +log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m; +-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0; +W = l/n; +-(psi/(1-psi))*(c*P/(1-n))+l/n = 0; +R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W; +1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0; +c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1); +P*c = m; +m-1+d = l; +e = exp(e_a); +y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a)); +gy_obs = dA*y/y(-1); +gp_obs = (P/P(-1))*m(-1)/dA; +end; + +initval; +m = mst; +P = 2.25; +c = 0.45; +e = 1; +W = 4; +R = 1.02; +k = 6; +d = 0.85; +n = 0.19; +l = 0.86; +y = 0.6; +gy_obs = exp(gam); +gp_obs = exp(-gam); +dA = exp(gam); +end; + +shocks; +var e_a; stderr 0.014; +var e_m; stderr 0.005; +end; + +steady; + +stoch_simul(order=3,periods=1000); + +if ~exist('fs2000k2a_results.mat','file'); + error('fs2000k2a must be run first'); +end; + +oo1 = load('fs2000k2a_results','oo_'); + +dr0 = oo1.oo_.dr; +dr = oo_.dr; + +if max(max(abs(dr0.ghxx - dr.ghxx))) > 1e-12; + disp('error in ghxx'); +end; +if max(max(abs(dr0.ghuu - dr.ghuu))) > 1e-12; + disp('error in ghuu'); +end; +if max(max(abs(dr0.ghxu - dr.ghxu))) > 1e-12; + disp('error in ghxu'); +end; +if max(max(abs(dr0.ghs2 - dr.ghs2))) > 1e-12; + disp('error in ghs2'); +end; + diff --git a/tests/k_order_perturbation/fs2000k_1.mod b/tests/k_order_perturbation/fs2000k_1.mod new file mode 100644 index 000000000..c43f262f2 --- /dev/null +++ b/tests/k_order_perturbation/fs2000k_1.mod @@ -0,0 +1,89 @@ +var m P c e W R k d n l gy_obs gp_obs y dA ; +varexo e_a e_m; + +parameters alp bet gam mst rho psi del; + +alp = 0.33; +bet = 0.99; +gam = 0.003; +mst = 1.011; +rho = 0.7; +psi = 0.787; +del = 0.02; + +model (use_dll); +dA = exp(gam+e_a); +log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m; +-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0; +W = l/n; +-(psi/(1-psi))*(c*P/(1-n))+l/n = 0; +R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W; +1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0; +c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1); +P*c = m; +m-1+d = l; +e = exp(e_a); +y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a)); +gy_obs = dA*y/y(-1); +gp_obs = (P/P(-1))*m(-1)/dA; +end; + +initval; +m = mst; +P = 2.25; +c = 0.45; +e = 1; +W = 4; +R = 1.02; +k = 6; +d = 0.85; +n = 0.19; +l = 0.86; +y = 0.6; +gy_obs = exp(gam); +gp_obs = exp(-gam); +dA = exp(gam); +end; + +shocks; +var e_a; stderr 0.014; +var e_m; stderr 0.005; +end; + +steady; + +stoch_simul(order=2,use_k_order,irf=0); + +if ~exist('fs2000k2_results.mat','file'); + error('fs2000k2 must be run first'); +end; + +oo1 = load('fs2000k2_results','oo_'); + +dr0 = oo1.oo_.dr; +dr = oo_.dr; + +ikr = [15 1:3 16 4:7 12 10 11 13 14]; +ikc = [1 3 4 2]; +ikc2 = [1 3 4 2 9 11 12 10 13 15 16 14 5 7 8 6]; +ikc2u = [1 2 5 6 7 8 3 4]; + +if max(max(abs(dr0.ghx(ikr,ikc) - dr.ghx(1:end-1,:)))) > 1e-12; + disp('error in ghx'); +end; +if max(max(abs(dr0.ghu(ikr,:) - dr.ghu(1:end-1,:)))) > 1e-12; + disp('error in ghu'); +end; +if max(max(abs(dr0.ghxx(ikr,ikc2) - dr.ghxx(1:end-1,:)))) > 1e-12; + disp('error in ghxx'); +end; +if max(max(abs(dr0.ghuu(ikr,:) - dr.ghuu(1:end-1,:)))) > 1e-12; + disp('error in ghuu'); +end; +if max(max(abs(dr0.ghxu(ikr,ikc2u) - dr.ghxu(1:end-1,:)))) > 1e-12; + disp('error in ghxu'); +end; +if max(max(abs(dr0.ghs2(ikr,:) - dr.ghs2(1:end-1,:)))) > 1e-12; + disp('error in ghs2'); +end; + diff --git a/tests/k_order_perturbation/fs2000kb.mod b/tests/k_order_perturbation/fs2000kb.mod new file mode 100644 index 000000000..c1d152b02 --- /dev/null +++ b/tests/k_order_perturbation/fs2000kb.mod @@ -0,0 +1,89 @@ +// checks whether second order coefficients are the same with order=2 and order=3 with use_k_order=1 + +var m m_1 P P_1 c e W R k d n l gy_obs gp_obs y dA AUXv; +varexo e_a e_m; + +parameters alp bet gam mst rho psi del; + +alp = 0.33; +bet = 0.99; +gam = 0.003; +mst = 1.011; +rho = 0.7; +psi = 0.787; +del = 0.02; + +model (use_dll); +dA = exp(gam+e_a); +log(m) = (1-rho)*log(mst) + rho*log(m_1(-1))+e_m; +-P/(c(+1)*P(+1)*m)+AUXv(+1); +W = l/n; +-(psi/(1-psi))*(c*P/(1-n))+l/n = 0; +R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W; +1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0; +c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1); +P*c = m; +m-1+d = l; +e = exp(e_a); +y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a)); +gy_obs = dA*y/y(-1); +gp_obs = (P/P_1(-1))*m_1(-1)/dA; +m_1 = m; +P_1 = P; +AUXv = bet*P*(alp*exp(-alp*(gam+log(e)))*k(-1)^(alp-1)*n^(1-alp)+(1-del)*exp(-(gam+log(e))))/(c(+1)*P(+1)*m); +end; + +initval; +m = mst; +m_1=mst; +P = 2.25; +P_1 = 2.25; +c = 0.45; +e = 1; +W = 4; +R = 1.02; +k = 6; +d = 0.85; +n = 0.19; +l = 0.86; +y = 0.6; +gy_obs = exp(gam); +gp_obs = exp(-gam); +dA = exp(gam); +AUXv = 1; +end; + +shocks; +var e_a; stderr 0.014; +var e_m; stderr 0.005; +end; + +steady; + +stoch_simul(order=2,use_k_order,periods=1000); + +if ~exist('fs2000k2a_results.mat','file'); + error('fs2000k2a must be run first'); +end; + +oo1 = load('fs2000k2a_results','oo_'); + +dr0 = oo1.oo_.dr; +dr = oo_.dr; + +ikr = [2:10 1 13:17]; +ikc2 = [1 3 4 2 9 11 12 10 13 15 16 14 5 7 8 6]; + +if max(max(abs(dr0.ghxx - dr.ghxx(ikr,ikc2)))) > 1e-12; + disp('error in ghxx'); +end; +if max(max(abs(dr0.ghuu - dr.ghuu(ikr,:)))) > 1e-12; + disp('error in ghuu'); +end; +if max(max(abs(dr0.ghxu - dr.ghxu(ikr,[1 2 5:8 3 4])))) > 1e-12; + disp('error in ghxu'); +end; +if max(max(abs(dr0.ghs2 - dr.ghs2(ikr)))) > 1e-12; + disp('error in ghs2'); +end; +