% Final version of the basic model with observables 
 
% Variables 
 
var c cm cn ct cx dmm dxp dz dzt gn gt h hn hx ibx im it ive ivn ivnd  
    ix ixd kbn kbx lambd li m mcn mcw mcx mun mux p pm pms pmtil pn pntil  
    pt px pxs pxstil pxtil q r rer rf rkn rkx rpm rpms rpn rpt rpx
    sm sn sx sxp taud tot uo ut vn vx w xo xs xt y yo yt zo zt Util Welf
	an ax etam etan etax etaxp g mv mz mf pf rs yw kw ivw rkw vw
    gw bs lis taus ws hs mcs etaw sf ptilf xwt xwo cw qs lambdw;
varexo zxepsh znepsh gepsh mvsh mzsh pmsh exsh ensh emsh expsh 
       gfsh epsh rssh etawsh;
 
 
parameters BETTA DELTA THETA SIG TO1 RHORW APW AYW ALFAW ZETAW RHOETAW KW 
RHOGW F1W F2W QSIW EPS1 EPS2 EPS3 EPS4 TAUS LYW GW KKF FCF VMW GAMW OMW
AP AY ALFAN ALFAM ALFAXP RHOZN RHOZX BR MVSS MZSS
RHOG RHOMV RHOMZ QSI PHI DZSS DZTSS EP F1 F2 OMG OM GAM T1 T2 TK K1 K2 VM FCX RHOR
FCN FCM FCXP GSS TAUD IBY YHW YH MFSS EPSOSS PFSS RSS ETW PMSS LY
PSS GAMB PHIW CHIW EPM TOTSS THOM THOXP THOX THON
ZETAN ZETAM ZETAXP RERSS KM KN KX KXP GY P1 P2 nbeta;

BETTA = 1.001^-0.25;
DELTA=0.025;
THETA=0.3;
SIG = 2;
TO1 = 0.3;
P1 = 0.5;
P2 = 0.5;
nbeta = BETTA;
RHORW = 0;
APW = 2;
AYW = 0;
ALFAW = 0.5;
ZETAW = 5;
RHOETAW = 0.5;
KW = 0.5;
RHOGW = 0.5;
F1W = 0.1579;
F2W = 0.0;
QSIW = 0.9207;
EPS1 = 0.0036;
EPS2 = 0.7499;
EPS3 = 0.0048;
EPS4 = -0.0064;
RHOR = 0;
AP = 3.5;
AY = 0;
F1 = 0.1579;
F2 = 0;
RHOZN = 0.95;
RHOZX = 0.95;
RHOG = 0.5;
RHOPO = 0.995;
RHOMZ = 0.05;
RHOMV = 0.448382;
THON = 0.95;
THOX = 0.95;
THOM = 0.95;
THOXP = 0.95;
CHIW = 0.66;
KN = 0.5;
KX = 0.5;
KM = 0.5;
KXP = 0.5;
K1 = 0.001;
K2 = 0.001;
ALFAN = 0.850040;
ALFAM = 0.933512;
ALFAXP = 0.311846;
EP = 1.463574;
EPM = 0.760817;
ETW = 0.828253;
GAMP = 1.123218;
PHI = 3.021136;
PHIW = 1.311203;
QSI = 0.920762;
TK = 4.677343;
XTAM = 1.412925;
XTAN = 2.556953;
XTAXP = 2.992823;

GAMB = 1 + GAMP;
ZETAM = XTAM + 1;
ZETAN = XTAN + 1;
ZETAXP = XTAXP + 1;

  
model; 

log(exp(r)) = log(BR)*(1-RHOR) + RHOR*log(exp(r(-1)))  + AP*(1-RHOR)*log(exp(p)/PSS) + AY*(1-RHOR)*log(exp(y)/YH);
exp(taud) - TAUD = F1*log(exp(li)/exp(y)/LY) + F2*log(exp(y)/YH); 

exp(w) * (1 - exp(taud)) * (1-exp(h)) = GAM * (exp(c)-QSI*exp(c(-1))/exp(dzt)) * (exp(mcw)*(1 + VM*(exp(r) - 1)/exp(r)));  
exp(m) = VM * exp(c); 
exp(lambd) * exp(q) = BETTA * exp(lambd(+1)) * (exp(dzt(+1))^(-SIG))/exp(p(+1));

exp(lambd) * (1 + VM*(exp(r) - 1)/exp(r)) = (exp(c)-QSI*exp(c(-1))/exp(dzt))^(-SIG) * (1 - exp(h))^(GAM*(1 - SIG)); 
exp(lambd)*exp(vx) = BETTA*exp(lambd(+1))*(exp(dzt(+1))^(-SIG))*(exp(rkx(+1))*(1-exp(taud(+1)))*exp(mux(+1)) + exp(vx(+1))*(1 - DELTA) - (T1*(exp(mux(+1))-1) + 0.5*T2*(exp(mux(+1))-1)^2))/exp(mv(+1)); 
exp(lambd) = exp(lambd)*exp(vx)*(1-(0.5*PHI*((exp(ixd)*exp(dz))/exp(ixd(-1))-DZSS)^2)-(exp(ixd)*exp(dz)/exp(ixd(-1)))*PHI*((exp(ixd)*exp(dz))/exp(ixd(-1))-DZSS)) + BETTA*exp(lambd(+1))*exp(vx(+1))*(exp(dzt(+1))^(-SIG))*((exp(ixd(+1))*exp(dz(+1))/exp(ixd))^2)*PHI*(exp(ixd(+1))*exp(dz(+1))/exp(ixd)-DZSS)/exp(mv(+1)); 
exp(lambd)*exp(vn) = BETTA*exp(lambd(+1))*(exp(dzt(+1))^(-SIG))*(exp(rkn(+1))*exp(mun(+1))*(1-exp(taud(+1))) + exp(vn(+1))*(1 - DELTA) - (T1*(exp(mun(+1))-1) + 0.5*T2*(exp(mun(+1))-1)^2))/exp(mv(+1)); 
exp(lambd) = exp(lambd)*exp(vn)*(1-(0.5*PHI*((exp(ivnd)*exp(dz))/exp(ivnd(-1))-DZSS)^2)-((exp(ivnd)*exp(dz))/exp(ivnd(-1)))*PHI*((exp(ivnd)*exp(dz))/exp(ivnd(-1))-DZSS)) + BETTA*exp(lambd(+1))*exp(vn(+1))*(exp(dzt(+1))^(-SIG))*((exp(ivnd(+1))*exp(dz(+1))/exp(ivnd))^2)*PHI*(exp(ivnd(+1))*exp(dz(+1))/exp(ivnd)-DZSS)/exp(mv(+1)); 
exp(kbx) = exp(ixd)*(1-(0.5*PHI*((exp(ixd)*exp(dz)/exp(ixd(-1)))-DZSS)^2)) + (1 - DELTA)*exp(kbx(-1))/exp(dz); 
exp(kbn) = exp(ivnd)*(1-(0.5*PHI*((exp(ivnd)*exp(dz)/exp(ivnd(-1)))-DZSS)^2)) + (1 - DELTA)*exp(kbn(-1))/exp(dz); 
T2*(exp(mun)-1) + T1 = (1 - exp(taud))*exp(rkn); 
T2*(exp(mux)-1) + T1 = (1 - exp(taud))*exp(rkx); 
exp(r) = exp(rf) * (exp(rer(+1))/exp(rer)) * (exp(p(+1))/exp(pf(+1))); 
(((GAMB-1)/GAMB)-1/exp(mcw))*GAMB*exp(h)*(1-exp(taud))=-(PHIW/(exp(p)^(CHIW-1)))*((exp(w)*exp(dzt))/exp(w(-1)))*((exp(w)*exp(dzt))/(exp(w(-1))*(exp(p)^(CHIW-1)))-(DZTSS)/(PSS^(CHIW-1)))+BETTA*PHIW*exp(lambd(+1))*(exp(dzt(+1))^-SIG)*(((exp(w(+1))*exp(dzt(+1)))/exp(w))^2)*((exp(w(+1))*exp(dzt(+1)))/(exp(w)*(exp(p(+1))^(CHIW-1)))-(DZTSS)/(PSS^(CHIW-1)))/(exp(lambd)*(exp(p)^(CHIW-1))); 
exp(c) = ((exp(cn)^((EP-1)/EP))*((1-OMG)^(1/EP)) + (exp(ct)^((EP-1)/EP))*(OMG^(1/EP)))^(EP/(EP-1)); 

exp(cn) = (1-OMG) * exp(c) * (exp(rpn)^(-EP)); 
exp(ct) = OMG * exp(c) * (exp(rpt)^(-EP)); 
(exp(ct)^((EPM-1)/EPM)) = (exp(cx)^((EPM-1)/EPM))*((1-OM)^(1/EPM)) + (exp(cm)^((EPM-1)/EPM))*(OM^(1/EPM)); 
exp(cx) = (1-OM) * exp(ct) * (exp(rpx)^(-EPM)); 
exp(cm) = OM * exp(ct) * (exp(rpm)^(-EPM)); 
exp(ivn) = (1-OMG) * (exp(ive)) * (exp(rpn))^(-EP); 
exp(it) = OMG * (exp(ive))* (exp(rpt))^(-EP); 
exp(ix) = (1-OM) * (exp(it)) * (exp(rpx))^(-EPM); 
exp(im) = OM * (exp(it)) * (exp(rpm))^(-EPM); 
exp(w) = exp(rpn) * exp(an) * exp(mcn) * (1-THETA) * (exp(mun)*exp(kbn(-1))/(exp(hn)*exp(dz)))^THETA; 

exp(rkn) = exp(rpn) * exp(an) * exp(mcn) * THETA * (exp(mun)*exp(kbn(-1))/(exp(hn)*exp(dz)))^(THETA-1); 
exp(w) = exp(rpx) * exp(rpt) * exp(ax) * exp(mcx) * (1-THETA) * (exp(mux)*exp(kbx(-1))/(exp(hx)*exp(dz)))^THETA; 
exp(rkx) = exp(rpx) * exp(rpt) * exp(ax) * exp(mcx) * THETA * (exp(mux)*exp(kbx(-1))/(exp(hx)*exp(dz)))^(THETA-1); 
exp(zt) = (exp(pxtil)^(-exp(etax))) * (exp(cx) + exp(gt) + exp(ix)/(exp(rpx)*exp(rpt)) + exp(dxp)) * (exp(etax)-1)/exp(etax) + ALFAN * exp(q) * exp(zt(+1)) * exp(dzt(+1)) * (exp(pxtil)/exp(pxtil(+1)))^(-exp(etax)) * (((exp(px)^KX)/(exp(px(+1))^(exp(etax)/(exp(etax)-1))))^(1-exp(etax))); 
exp(zo) = (exp(pxtil)^(-1-exp(etax))) * (exp(cx) + exp(gt) + exp(ix)/(exp(rpx)*exp(rpt)) + exp(dxp)) * exp(mcx) + ALFAN * exp(q) * exp(zo(+1)) * exp(dzt(+1)) * (((exp(px)^KX)/(exp(px(+1))^((exp(etax)+1)/exp(etax))))^(-exp(etax))) * (exp(pxtil)/exp(pxtil(+1)))^(-1-exp(etax)); 
exp(zo) = exp(zt); 
1 = (1-ALFAN) * (exp(pxtil)^(1-exp(etax))) + ALFAN * (exp(px)^(exp(etax)-1)); 
exp(xt) = (exp(pntil)^(-exp(etan))) * (exp(cn) + exp(gn) + exp(ivn)/exp(rpn)) * (exp(etan)-1)/exp(etan) + ALFAN * exp(q) * exp(xt(+1)) * exp(dzt(+1)) * (exp(pntil)/exp(pntil(+1)))^(-exp(etan)) * (((exp(pn)^KN)/(exp(pn(+1))^(exp(etan)/(exp(etan)-1))))^(1-exp(etan))); 
exp(xo) = (exp(pntil)^(-1-exp(etan))) * (exp(cn) + exp(gn) + exp(ivn)/exp(rpn)) * exp(mcn) + ALFAN * exp(q) * exp(xo(+1)) * exp(dzt(+1)) * (((exp(pn)^KN)/(exp(pn(+1))^((exp(etan)+1)/exp(etan))))^(-exp(etan))) * (exp(pntil)/exp(pntil(+1)))^(-1-exp(etan)); 
exp(xo) = exp(xt); 

1 = (1-ALFAN) * (exp(pntil)^(1-exp(etan))) + ALFAN * (exp(pn)^(exp(etan)-1)); 
exp(yt) = (exp(pmtil)^(-exp(etam))) * (exp(cm) + exp(im)/(exp(rpm)*exp(rpt))) * (exp(etam)-1)/exp(etam) + ALFAM * exp(q) * exp(yt(+1)) * exp(dzt(+1)) * (exp(pmtil)/exp(pmtil(+1)))^(-exp(etam)) * (((exp(pm)^KM)/(exp(pm(+1))^(exp(etam)/(exp(etam)-1))))^(1-exp(etam))); 
exp(yo) = (exp(pmtil)^(-1-exp(etam))) * (exp(cm) + exp(im)/(exp(rpm)*exp(rpt))) * exp(rer) * exp(rpms)/(exp(rpm)*exp(rpt)) + ALFAM * exp(q) * exp(yo(+1)) * exp(dzt(+1)) * (((exp(pm)^KM)/(exp(pm(+1))^((exp(etam)+1)/exp(etam))))^(-exp(etam))) * (exp(pmtil)/exp(pmtil(+1)))^(-1-exp(etam)); 
exp(yo) = exp(yt); 
1 = (1-ALFAM) * (exp(pmtil)^(1-exp(etam))) + ALFAM * (exp(pm)^(exp(etam)-1)); 
exp(ut) = (exp(pxstil)^(-exp(etaxp))) * exp(xs) * (exp(etaxp)-1)/exp(etaxp) + ALFAXP * exp(q) * exp(ut(+1)) * exp(dzt(+1)) * (exp(pxstil)/exp(pxstil(+1)))^(-exp(etaxp)) * (((exp(pxs)^KXP)/(exp(pxs(+1))^(exp(etaxp)/(exp(etaxp)-1))))^(1-exp(etaxp))); 
exp(uo) = (exp(pxstil)^(-1-exp(etaxp))) * exp(xs) * (exp(rpx)*exp(rpt)) / (exp(rer)*exp(tot)*exp(rpms)) + ALFAXP * exp(q) * exp(uo(+1)) * exp(dzt(+1)) * (((exp(pxs)^KXP)/(exp(pxs(+1))^((exp(etaxp)+1)/exp(etaxp))))^(-exp(etaxp))) * (exp(pxstil)/exp(pxstil(+1)))^(-1-exp(etaxp)); 
exp(uo) = exp(ut); 
1 = (1-ALFAXP) * (exp(pxstil)^(1-exp(etaxp))) + ALFAXP * (exp(pxs)^(exp(etaxp)-1)); 
exp(q) = (1/exp(r)); 

log(exp(rf)) = log(exp(rs)) + K2* log((exp(rer)*exp(ibx)/exp(y))/(RERSS*IBY)); 
exp(xs) = OMW*((exp(tot)*exp(rpms))^-ETW)*exp(cw); 
exp(rpx)*exp(rpt)*exp(xs) - exp(rpm)*exp(rpt)*exp(dmm) = exp(rer)*(exp(rf(-1))*exp(ibx(-1))/exp(dzt) - exp(pf)*exp(ibx)); 
exp(sx) = (1-ALFAN) * (exp(pxtil)^(-exp(etax))) + ALFAN * (exp(px)^exp(etax)) * exp(sx(-1)); 

(exp(cx) + exp(gt) + exp(ix)/(exp(rpx)*exp(rpt)) + exp(dxp))*exp(sx) = exp(ax) * (exp(hx)^(1-THETA)) * ((exp(mux)*exp(kbx(-1))/exp(dz))^THETA) - FCX; 
exp(sn) = (1-ALFAN) * (exp(pntil)^(-exp(etan))) + ALFAN * (exp(pn)^exp(etan)) * exp(sn(-1)); 
(exp(cn) + exp(gn) + exp(ivn)/exp(rpn))*exp(sn) = exp(an) * (exp(hn)^(1-THETA)) * ((exp(mun)*exp(kbn(-1))/exp(dz))^THETA) - FCN; 
exp(sm) = (1-ALFAM) * (exp(pmtil)^(-exp(etam))) + ALFAM * (exp(pm)^exp(etam)) * exp(sm(-1)); 
(exp(cm) + exp(im)/(exp(rpm)*exp(rpt)))*exp(sm) = exp(dmm) - FCM; 
exp(sxp) = (1-ALFAXP) * (exp(pxstil)^(-exp(etaxp))) + ALFAXP * (exp(pxs)^exp(etaxp)) * exp(sxp(-1)); 
exp(xs)*exp(sxp) = exp(dxp) - FCXP; 
exp(h) = exp(hn) + exp(hx); 
exp(ive) - (T1*(exp(mux)-1) + 0.5*T2*(exp(mux)-1)^2)*exp(kbx(-1))/exp(dz) - (T1*(exp(mun)-1) + 0.5*T2*(exp(mun)-1)^2)*exp(kbn(-1))/exp(dz) = exp(ixd) + exp(ivnd); 
exp(y) = exp(c) + exp(ive) + exp(g) + exp(rpx)*exp(rpt)*exp(xs) - exp(rpm)*exp(rpt)*(exp(dmm)); 

log(exp(ax)) = RHOZX*log(exp(ax(-1))) + zxepsh; 
log(exp(an)) = RHOZN*log(exp(an(-1))) + znepsh; 
exp(mv) = MVSS*(1-RHOMV) + RHOMV*exp(mv(-1)) + mvsh; 
exp(mz) = MZSS*(1-RHOMZ) + RHOMZ*exp(mz(-1)) + mzsh; 
exp(dz) = exp(mz)*(exp(mv)^(1/(1-THETA))); 
exp(dzt) = exp(mz)*(exp(mv)^(THETA/(1-THETA))); 
exp(etan) = ZETAN*(1-THON) + THON*exp(etan(-1)) + ensh; 
exp(etam) = ZETAM*(1-THOM) + THOM*exp(etam(-1)) + emsh; 
exp(etax) = ZETAN*(1-THOX) + THOX*exp(etax(-1)) + exsh; 
exp(etaxp) = ZETAXP*(1-THOXP) + THOXP*exp(etaxp(-1)) + expsh; 

exp(rpn) = exp(rpn(-1))*exp(pn)/exp(p); 
exp(rpt) = exp(rpt(-1))*exp(pt)/exp(p); 
exp(rpm) = exp(rpm(-1))*exp(pm)/exp(pt); 
exp(rpx) = exp(rpx(-1))*exp(px)/exp(pt); 
exp(rpms) = exp(rpms(-1))*exp(pms)/exp(pf); 
exp(tot) = exp(tot(-1))*exp(pxs)/exp(pms); 
exp(g) = (1-RHOG)*GSS + RHOG*exp(g(-1)) + gepsh; 
exp(gt) = OMG * exp(g) * (exp(rpt))^(-EP); 
exp(gn) = (1-OMG) * exp(g) * (exp(rpn))^(-EP); 
exp(li) = exp(r)*exp(li(-1))/(exp(p)*exp(dzt)) + exp(r)*(exp(g) - exp(taud)*exp(y)) - (exp(r)-1)*exp(m);

exp(gw) = GW*(1-RHOGW) + RHOGW*exp(gw(-1)) + gfsh;
exp(etaw) = (1-RHOETAW)*ZETAW + RHOETAW*exp(etaw(-1)) + etawsh;
exp(taus) - TAUS = F1W*log(exp(lis)/exp(yw)/LYW) + F2W*log(exp(yw)/YHW);
exp(lis) = exp(rs)*exp(lis(-1))/(exp(pf)*exp(dzt)) + exp(rs)*(exp(gw) - exp(taus)*exp(yw)) - (exp(rs)-1)*exp(mf);
exp(lis) = exp(mf) + exp(rs(-1))*(exp(bs) + exp(ibx));
log(exp(rs)/RSS) = RHORW*log(exp(rs(-1))/RSS) + APW*(1-RHORW)*log(exp(pf)/PFSS) + AYW*(1-RHORW)*log(exp(yw)/YHW) + rssh;
exp(ws) = exp(mcs) * (1-THETA) * (exp(kw(-1))/(exp(hs)*exp(dz)))^THETA; 
1 = (1-ALFAW) * (exp(ptilf)^(1-exp(etaw))) + ALFAW * (exp(pf)^(exp(etaw)-1)); 
exp(sf) = (1-ALFAW) * (exp(ptilf)^(-exp(etaw))) + ALFAW * (exp(pf)^exp(etaw)) * exp(sf(-1));
exp(xwt) = (exp(ptilf)^(-exp(etaw))) * (exp(cw) + exp(ivw) + exp(gw) + exp(cm) + exp(im)) * (exp(etaw)-1)/exp(etaw) + ALFAW * exp(qs) * exp(xwt(+1)) * exp(dzt(+1)) * (exp(ptilf)/exp(ptilf(+1)))^(-exp(etaw)) * (((exp(pf)^KW)/(exp(pf(+1))^(exp(etaw)/(exp(etaw)-1))))^(1-exp(etaw))); 
exp(xwo) = (exp(ptilf)^(-1-exp(etaw))) * (exp(cw) + exp(ivw) + exp(gw) + exp(cm) + exp(im)) * exp(mcs) + ALFAW * exp(qs) * exp(xwo(+1)) * exp(dzt(+1)) * (((exp(pf)^KW)/(exp(pf(+1))^((exp(etaw)+1)/exp(etaw))))^(-exp(etaw))) * (exp(ptilf)/exp(ptilf(+1)))^(-1-exp(etaw)); 
exp(xwo) = exp(xwt);
exp(sf)*exp(yw) = ((exp(kw(-1))/exp(dz))^THETA)*(exp(hs)^(1-THETA)) - FCF; 
exp(yw) = exp(cw) + exp(gw) + exp(ivw) + exp(cm) + exp(im); 
exp(mf) = VMW * exp(cw);
exp(ws) * (1 - exp(taus))* exp(rs) / (exp(rs) + VMW*(exp(rs) - 1)) = GAMW*(exp(cw)-QSIW*exp(cw(-1))/exp(dzt))/(1-exp(hs)); 
exp(lambdw) * exp(qs) = BETTA * exp(lambdw(+1)) * (exp(dzt(+1))^(-SIG))/exp(pf(+1));
exp(qs) = 1/exp(rs);
exp(lambdw) * (1 + VMW*(exp(rs) - 1)/exp(rs)) = (exp(cw)-QSIW*exp(cw(-1))/exp(dzt))^(-SIG) * (1 - exp(hs))^(GAMW*(1 - SIG)); 
% log(exp(epso)/EPSOSS) = EPS1*log(exp(rs(-1))/RSS) + EPS2*log(exp(epso(-1))/EPSOSS) + EPS3*log(exp(pf(-1))/PFSS) + EPS4*log(exp(yw(-1))/YHW) + epsh;
log(exp(pms)/PMSS)  = P1*log(exp(pf(-1))/PFSS) + TO1*log(exp(tot(-1))/TOTSS) + pmsh;
exp(kw) = exp(ivw)*(1-(0.5*PHI*((exp(ivw)*exp(dz)/exp(ivw(-1)))-DZSS)^2)) + (1 - DELTA)*exp(kw(-1))/exp(dz); 
exp(lambdw)*exp(vw) = BETTA*exp(lambdw(+1))*(exp(dzt(+1))^(-SIG))*(exp(rkw(+1))*(1-exp(taus(+1))) + exp(vw(+1))*(1 - DELTA))/exp(mv(+1)); 
exp(lambdw) = exp(lambdw)*exp(vw)*(1-(0.5*PHI*((exp(ivw)*exp(dz))/exp(ivw(-1))-DZSS)^2)-(exp(ivw)*exp(dz)/exp(ivw(-1)))*PHI*((exp(ivw)*exp(dz))/exp(ivw(-1))-DZSS)) + BETTA*exp(lambdw(+1))*exp(vw(+1))*(exp(dzt(+1))^(-SIG))*((exp(ivw(+1))*exp(dz(+1))/exp(ivw))^2)*PHI*(exp(ivw(+1))*exp(dz(+1))/exp(ivw)-DZSS)/exp(mv(+1)); 
exp(rkw) = exp(mcs) * THETA * (exp(kw(-1))/(exp(hs)*exp(dz)))^(THETA-1); 

Util = (((exp(c) - QSI*exp(c(-1))/exp(dzt))*((1-exp(h))^GAM))^(1-SIG)-1)/(1-SIG);
Welf = Util + nbeta*Welf(+1);  
end; 

shocks;
var gepsh; stderr 1;
end;

 
steady;
check;
stoch_simul(order=1,irf=60);