diff --git a/preprocessor b/preprocessor index 81d4fd5d83c08da2403a8faf3d2a006d3ab4bb1e..ebd9954d33fbeba970dc3ebb249a03c15b317141 160000 --- a/preprocessor +++ b/preprocessor @@ -1 +1 @@ -Subproject commit 81d4fd5d83c08da2403a8faf3d2a006d3ab4bb1e +Subproject commit ebd9954d33fbeba970dc3ebb249a03c15b317141 diff --git a/tests/occbin/filter/NKM.mod b/tests/occbin/filter/NKM.mod index 112e73a76b993c90389225d3128cd944ddcbb530..cdf257f017fd3a5edea5af0ae8048b443dade6fe 100644 --- a/tests/occbin/filter/NKM.mod +++ b/tests/occbin/filter/NKM.mod @@ -77,9 +77,6 @@ parameters phiy // Output responsiveness nu // Investment adjustment cost sigups // Utilization - - // Switching parameters - zlb ; @@ -108,7 +105,6 @@ sigs = 0.005; // Standard deviation sigi = 0.002; // Standard deviation phipi = 2.0; // Inflation responsiveness phiy = 0.5; // Output responsiveness -zlb = 0 ; // ZLB dummy inomlb = 1 ; // Inom LB // ---------------- Model -----------------------------------------------// @@ -179,8 +175,10 @@ model; [name = 'Notional Interest Rate (9)'] inomnot = inomnot(-1)^rhoi*(inombar*pigap^phipi*yg^phiy)^(1-rhoi)*exp(mp); - [name = 'Nominal Interest Rate (10)'] - inom = (inomnot*(1-zlb)+zlb*inomlb); + [name = 'Nominal Interest Rate (10)', bind='zlb'] + inom = inomlb; + [name = 'Nominal Interest Rate (10)', relax='zlb'] + inom = inomnot; [name = 'Inverse MUC (11)'] lam = c-h*c(-1)/g; diff --git a/tests/occbin/filter/NKM_0_std_shocks.mod b/tests/occbin/filter/NKM_0_std_shocks.mod index c45e4c8e966def819d327aec82467d03c22157b1..4a592c84d48a2f56423f0d4ee32cecc25945d07b 100644 --- a/tests/occbin/filter/NKM_0_std_shocks.mod +++ b/tests/occbin/filter/NKM_0_std_shocks.mod @@ -79,9 +79,6 @@ parameters phiy // Output responsiveness nu // Investment adjustment cost sigups // Utilization - - // Switching parameters - zlb ; @@ -110,7 +107,6 @@ sigs = 0.005; // Standard deviation sigi = 0.002; // Standard deviation phipi = 2.0; // Inflation responsiveness phiy = 0.5; // Output responsiveness -zlb = 0 ; // ZLB dummy inomlb = 1 ; // Inom LB // ---------------- Model -----------------------------------------------// @@ -181,8 +177,10 @@ model; [name = 'Notional Interest Rate (9)'] inomnot = inomnot(-1)^rhoi*(inombar*pigap^phipi*yg^phiy)^(1-rhoi)*exp(mp); - [name = 'Nominal Interest Rate (10)'] - inom = (inomnot*(1-zlb)+zlb*inomlb); + [name = 'Nominal Interest Rate (10)', bind='zlb'] + inom = inomlb; + [name = 'Nominal Interest Rate (10)', relax='zlb'] + inom = inomnot; [name = 'Inverse MUC (11)'] lam = c-h*c(-1)/g; diff --git a/tests/occbin/model_borrcon/borrcon.mod b/tests/occbin/model_borrcon/borrcon.mod index fae3420967797a4360d1b849cb6531fc7e24d676..78661e16fb63b99c5ea0c1e3d12cfdf8156be530 100644 --- a/tests/occbin/model_borrcon/borrcon.mod +++ b/tests/occbin/model_borrcon/borrcon.mod @@ -12,12 +12,15 @@ var b ${b}$ (long_name='borrowing') ; varexo u $u$; -parameters RHO ${\rho}$, BETA ${\beta}$, M $M$, R $R$, SIGMA ${\sigma}$, GAMMAC $\gamma_c$, relax_borrcon ; +parameters RHO ${\rho}$, BETA ${\beta}$, M $M$, R $R$, SIGMA ${\sigma}$, GAMMAC $\gamma_c$; model; ec = c(1); c = y + b - R*b(-1) ; -(1-relax_borrcon)*(b - M*y) + relax_borrcon*lb = 0; +[name = 'borrowing', bind='borrcon'] +lb = 0; +[name = 'borrowing', relax='borrcon'] +b = M*y; lb = 1/c^GAMMAC - BETA*R/c(+1)^GAMMAC ; log(y) = RHO*log(y(-1)) + u ; c_hat = log(c) - log(steady_state(c)); @@ -26,8 +29,8 @@ y_hat = log(y) - log(steady_state(y)); end; occbin_constraints; - name 'relax_borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y; error_bind abs(lb+STEADY_STATE(lb)); error_relax abs(b-M*y); -%name 'relax_borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y; + name 'borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y; error_bind abs(lb+STEADY_STATE(lb)); error_relax abs(b-M*y); +%name 'borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y; end; steady_state_model; @@ -44,7 +47,6 @@ RHO = 0.9; SIGMA = 0.05; M = 1; GAMMAC = 1; -relax_borrcon = 0; shocks; var u; stderr SIGMA; diff --git a/tests/occbin/model_borrcon/borrcon_0_std_shocks.mod b/tests/occbin/model_borrcon/borrcon_0_std_shocks.mod index c0e3b2ee486567fdad292dc053f82d00b870e7dc..b79a18d6b0c4ba858e962d0cedc3cb274b9bb5cc 100644 --- a/tests/occbin/model_borrcon/borrcon_0_std_shocks.mod +++ b/tests/occbin/model_borrcon/borrcon_0_std_shocks.mod @@ -13,12 +13,15 @@ var b ${b}$ (long_name='borrowing') varexo junk1 u junk2 ; -parameters RHO ${\rho}$, BETA ${\beta}$, M $M$, R $R$, SIGMA ${\sigma}$, GAMMAC $\gamma_c$, relax_borrcon ; +parameters RHO ${\rho}$, BETA ${\beta}$, M $M$, R $R$, SIGMA ${\sigma}$, GAMMAC $\gamma_c$; model; ec = c(1); c = y + b - R*b(-1) ; -(1-relax_borrcon)*(b - M*y) + relax_borrcon*lb = 0; +[name = 'borrowing', bind='borrcon'] +lb = 0; +[name = 'borrowing', relax='borrcon'] +b = M*y; lb = 1/c^GAMMAC - BETA*R/c(+1)^GAMMAC +junk1 + junk2; log(y) = RHO*log(y(-1)) + u ; c_hat = log(c) - log(steady_state(c)); @@ -27,7 +30,7 @@ y_hat = log(y) - log(steady_state(y)); end; occbin_constraints; -name 'relax_borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y; error_bind abs(lb+STEADY_STATE(lb)); error_relax abs(b-M*y); +name 'borrcon'; bind lb<-STEADY_STATE(lb); relax b>M*y; error_bind abs(lb+STEADY_STATE(lb)); error_relax abs(b-M*y); end; steady_state_model; @@ -44,7 +47,6 @@ RHO = 0.9; SIGMA = 0.05; M = 1; GAMMAC = 1; -relax_borrcon = 0; shocks; var u; stderr SIGMA; diff --git a/tests/occbin/model_irrcap_twoconstraints/dynrbc.mod b/tests/occbin/model_irrcap_twoconstraints/dynrbc.mod index 0249f337ef42238689b688c23b70e16af98ec834..1d2397ab5425254571fad1b4dea5b5351a64c107 100644 --- a/tests/occbin/model_irrcap_twoconstraints/dynrbc.mod +++ b/tests/occbin/model_irrcap_twoconstraints/dynrbc.mod @@ -8,7 +8,7 @@ varexo erra; // parameters -parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI, PSINEG, INEG, IRR; +parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI; model; @@ -20,20 +20,33 @@ model; ///////////////////////////////////////////////////////////////// // 1. --exp(c)^(-GAMMAC)*(1+2*INEG*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1))) -+ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*INEG*PSI*(exp(k(1))/exp(k)-1)* +[name='Euler', bind = 'INEG'] +-exp(c)^(-GAMMAC)*(1+2*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1))) ++ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*PSI*(exp(k(1))/exp(k)-1)* (-exp(k(1))/exp(k)^2)+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= -lambdak+BETA*(1-DELTAK)*lambdak(1); +[name='Euler', relax = 'INEG'] +-exp(c)^(-GAMMAC) + BETA*exp(c(1))^(-GAMMAC)*(1-DELTAK+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= + -lambdak+BETA*(1-DELTAK)*lambdak(1); + // 2. -exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+ -INEG*PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA); +[name='Budget constraint',bind = 'INEG'] +exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA); + +[name='Budget constraint',relax = 'INEG'] +exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))=exp(a)*exp(k(-1))^(ALPHA); // 3. exp(i) = exp(k)-(1-DELTAK)*exp(k(-1)); // 4. -lambdak*(1-IRR) + IRR*(i - log(PHI*ziss)) = 0; +[name='investment',bind='IRR,INEG'] +(i - log(PHI*ziss)) = 0; +[name='investment',relax='IRR'] +lambdak=0; +[name='investment',bind='IRR',relax='INEG'] +(i - log(PHI*ziss)) = 0; // 5. a = RHOA*a(-1)+erra; diff --git a/tests/occbin/model_irrcap_twoconstraints/dynrbc_0_std_shocks.mod b/tests/occbin/model_irrcap_twoconstraints/dynrbc_0_std_shocks.mod index 6e68912674ab1a529f63e27864b2279ad69f6664..5d850eddfb70fd85639928bf61cca898685733dd 100644 --- a/tests/occbin/model_irrcap_twoconstraints/dynrbc_0_std_shocks.mod +++ b/tests/occbin/model_irrcap_twoconstraints/dynrbc_0_std_shocks.mod @@ -8,7 +8,7 @@ varexo junk1 erra junk2; // parameters -parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI, PSINEG, INEG, IRR; +parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI; model; @@ -20,20 +20,33 @@ model; ///////////////////////////////////////////////////////////////// // 1. --exp(c)^(-GAMMAC)*(1+2*INEG*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1))) -+ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*INEG*PSI*(exp(k(1))/exp(k)-1)* +[name='Euler', bind = 'INEG'] +-exp(c)^(-GAMMAC)*(1+2*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1))) ++ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*PSI*(exp(k(1))/exp(k)-1)* (-exp(k(1))/exp(k)^2)+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= -lambdak+BETA*(1-DELTAK)*lambdak(1); +[name='Euler', relax = 'INEG'] +-exp(c)^(-GAMMAC) + BETA*exp(c(1))^(-GAMMAC)*(1-DELTAK+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= + -lambdak+BETA*(1-DELTAK)*lambdak(1); + // 2. -exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+ -INEG*PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA) + junk1 + junk2; +[name='Budget constraint',bind = 'INEG'] +exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA) + junk1 + junk2; + +[name='Budget constraint',relax = 'INEG'] +exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))=exp(a)*exp(k(-1))^(ALPHA) + junk1 + junk2; // 3. exp(i) = exp(k)-(1-DELTAK)*exp(k(-1)); // 4. -lambdak*(1-IRR) + IRR*(i - log(PHI*ziss)) = 0; +[name='investment',bind='IRR,INEG'] +(i - log(PHI*ziss)) = 0; +[name='investment',relax='IRR'] +lambdak=0; +[name='investment',bind='IRR',relax='INEG'] +(i - log(PHI*ziss)) = 0; // 5. a = RHOA*a(-1)+erra; @@ -61,4 +74,4 @@ end if max(max(abs(oo_.Smoother.SteadyState-orig_results.oo_.Smoother.SteadyState)))>1e-10 error('SmoothedShocks do not match') -end \ No newline at end of file +end diff --git a/tests/occbin/model_irrcap_twoconstraints/dynrbc_common.inc b/tests/occbin/model_irrcap_twoconstraints/dynrbc_common.inc index 41fb6b6d9115eb56eedcfdedf0235cd30276bde7..3379aebe5f8fafc1b191e593f03d2af75417d873 100644 --- a/tests/occbin/model_irrcap_twoconstraints/dynrbc_common.inc +++ b/tests/occbin/model_irrcap_twoconstraints/dynrbc_common.inc @@ -18,8 +18,6 @@ GAMMAC=2; RHOA = 0.9; PHI = 0.975; PSI = 5; % adjustment cost for capital if investment is negative -INEG = 0; -IRR = 0; shocks; var erra; stderr 0.015; diff --git a/tests/occbin/model_irrcap_twoconstraints/dynrbc_token_xfail.mod b/tests/occbin/model_irrcap_twoconstraints/dynrbc_token_xfail.mod index 484b3831cab1750c87caab4414813ad477a41a05..4d4fbb1f087bfdb20c1fe5ee908523c8a992d602 100644 --- a/tests/occbin/model_irrcap_twoconstraints/dynrbc_token_xfail.mod +++ b/tests/occbin/model_irrcap_twoconstraints/dynrbc_token_xfail.mod @@ -7,9 +7,9 @@ varexo erra; // parameters -parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI, PSINEG, INEG, IRR; +parameters ALPHA, DELTAK, BETA, GAMMAC, RHOA, PHI, PSI, PSINEG; -model(occbin); +model; # zkss = ((1/BETA-1+DELTAK)/ALPHA)^(1/(ALPHA-1)); # zcss = -DELTAK*zkss + zkss^ALPHA; @@ -19,28 +19,33 @@ model(occbin); ///////////////////////////////////////////////////////////////// // 1. --exp(c)^(-GAMMAC)*(1+2*INEG*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1))) -+ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*INEG*PSI*(exp(k(1))/exp(k)-1)* +[name='Euler', bind = 'INEG'] +-exp(c)^(-GAMMAC)*(1+2*PSI*(exp(k)/exp(k(-1))-1)/exp(k(-1))) ++ BETA*exp(c(1))^(-GAMMAC)*((1-DELTAK)-2*PSI*(exp(k(1))/exp(k)-1)* (-exp(k(1))/exp(k)^2)+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= -lambdak+BETA*(1-DELTAK)*lambdak(1); +[name='Euler', relax = 'INEG'] +-exp(c)^(-GAMMAC) + BETA*exp(c(1))^(-GAMMAC)*(1-DELTAK+ALPHA*exp(a(1))*exp(k)^(ALPHA-1))= + -lambdak+BETA*(1-DELTAK)*lambdak(1); + // 2. -exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+ -INEG*PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA); +[name='Budget constraint',bind = 'INEG'] +exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))+PSI*(exp(k)/exp(k(-1))-1)^2=exp(a)*exp(k(-1))^(ALPHA); + +[name='Budget constraint',relax = 'INEG'] +exp(c)+exp(k)-(1-DELTAK)*exp(k(-1))=exp(a)*exp(k(-1))^(ALPHA); // 3. -[pswitch = 'INEG', -// bind = 'exp(i+i_ss)<-0.000001', -// relax = 'exp(i+i_ss)>-0.000001' ] - bind = 'i<-b', - relax = 'i>-0.000001' ] exp(i) = exp(k)-(1-DELTAK)*exp(k(-1)); // 4. -[pswitch = 'IRR', - bind = 'i<PHI-1', - relax = 'lambdak<0' ] -lambdak*(1-IRR) + IRR*(i - log(PHI*ziss)) = 0; +[name='investment',bind='IRR,INEG'] +(i - log(PHI*ziss)) = 0; +[name='investment',relax='IRR'] +lambdak=0; +[name='investment',bind='IRR',relax='INEG'] +(i - log(PHI*ziss)) = 0; // 5. a = RHOA*a(-1)+erra; @@ -48,6 +53,11 @@ a = RHOA*a(-1)+erra; end; +occbin_constraints; +name 'IRR'; bind i<PHI-1; relax lambdak<0; +name 'INEG'; bind i<-b; relax i>-0.000001; // Failure here because b does not exist +end; + steady_state_model; kss = ((1/BETA-1+DELTAK)/ALPHA)^(1/(ALPHA-1)); css = -DELTAK*kss +kss^ALPHA; @@ -68,8 +78,6 @@ GAMMAC=2; RHOA = 0.9; PHI = 0.975; PSI = 5; % adjustment cost for capital if investment is negative -INEG = 0; -IRR = 0; shocks; var erra; stderr 0.015;