// Endogenous variables
var   qU,piU,  rkU,RXU,RkXU,kbarU, hU,lambdazU, cU, iU,  sU, wU, uU,mbU,mU, yU, 
       lambdafU,epsilU,gU, muzstarU, muzU,zetaiU,xU,zetacU, tauoU, vU,lambdawU,muupU, deltakU,
       p_obs,c_year, i_year, m_obs,y_obs;  
// Exogenous variables
varexo   e_lambdafU, e_epsilU,  e_gU,  e_muzU, e_zetaiU, e_xU , e_zetacU,  e_vU,e_lambdawU,e_muupU, e_deltakU;  

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//% DECLARATION OF THE  PARAMETERS. 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////            
parameters   sigmaqUU,  betaUU,  bUU,alphaUU, psikUU, psilUU, psiLXUU ,sigmaLXUU,deltaUU,   //calibrated paras
            lambdafUU,etagUU, muzstarUU,muzUU,zetaiUU, xUU,epsilUU,zetacUU,upsilUU,vUU,lambdawUU,  tauoUU,e_tauoU , muupUU,deltakUU,         //SS for shock vars       
            rho1_lambdafU,rho1_epsilU, rho1_gU, rho1_muzstarU,  rho1_zetaiU, rho1_xU, rho1_zetacU, rho1_tauoU, rho1_vU,rho1_lambdawU,rho1_muupU,rho1_deltakU,
            qUU, uUU,piUU, RXUU, RkXUU,rkUU, sUU, wUU,kbarUU,cUU, iUU, hUU,lambdazUU,  mbUU,mUU, gUU, yUU, Lk,ik,A ,D,   //SS for endo vars ,to be calculated 
            xipUU,xiwUU,iotamuUU,iota1UU,iotaw2UU, sigmaIXUU,  sigmaaUU,                //to be estimated     ;//dsge_prior_weight; 
            rho1_yU,rho1_piU, muzc, muzi, muzm;
////////////////////////////////////////////////////////////////////////////////////////////
//Calibrated parameters
muzc=0.997028271987673; 

muzi=1.00336723318421;  

muzm=1.00770346507684;  

sigmaqUU= 4.4;
betaUU        =   1.03^(-0.25); 
bUU           =   0.7;
alphaUU       =   0.4;
psilUU        =   1;
psikUU        =   psilUU;
sigmaLXUU      =   1;
deltaUU       =   0.025;

piUU=1.01262308116165;
////////////////////////////////////////////////////////////////////////////////////////////
//Steady-state values for shock  variables 
lambdafUU= 1.2;
etagUU= 0.2;
muzstarUU=1.02401708612374;
upsilUU   =  1.00312041284968;
muupUU=1;
muzUU=muzstarUU/(upsilUU^(alphaUU/(1-alphaUU)));
zetaiUU=1; 
xUU=muzstarUU*piUU;  
epsilUU=1;
lambdawUU     =   1.05;
tauoUU=1;
zetacUU=1;
deltakUU=1;

psiLXUU        =   1;  
vUU=0.035;
//////////////////////////////////////////////////////////////////////////////////////////
//Steady-state values of endogenous variables 
qUU=1;  
uUU=1;
RXUU=piUU*muzstarUU/betaUU-1; 
RkXUU=RXUU;
rkUU=(RXUU+1)*upsilUU*qUU/piUU - (1-deltaUU)*qUU;
sUU = 1/lambdafUU;
wUU=((alphaUU^alphaUU)*((1-alphaUU)^(1-alphaUU))*sUU/rkUU^alphaUU/(1+psilUU*RXUU))^(1/(1-alphaUU));
Lk= (rkUU*(1+psilUU*RXUU)/(sUU*alphaUU))^(1/(1-alphaUU))/(upsilUU*muzstarUU);
ik=1-(1-deltaUU)/(upsilUU*muzstarUU);
A = (1-etagUU)*sUU*((upsilUU*muzstarUU)^(-alphaUU))*Lk^(1-alphaUU)-ik;   
D=(1/A)*((muzstarUU-bUU*betaUU)/(muzstarUU-bUU))*wUU/lambdawUU/psiLXUU/Lk^sigmaLXUU;
kbarUU=D^(1/(1+sigmaLXUU)) ;
cUU=A*kbarUU;   
iUU=ik*kbarUU;
hUU=Lk*kbarUU;
lambdazUU=(1/cUU)*(muzstarUU-bUU*betaUU)/(muzstarUU-bUU);
yUU=sUU*(1/(upsilUU*muzstarUU))^alphaUU*Lk^(1-alphaUU)*kbarUU;
gUU=etagUU*yUU;
mUU=0.374572128137281;
mbUU=(psilUU*wUU*hUU+psikUU*rkUU*kbarUU/upsilUU/muzstarUU)*piUU*muzstarUU/(1-mUU);
vUU=lambdazUU*RXUU*(mbUU*mUU/muzstarUU/piUU)^sigmaqUU;
//////////////////////////////////////////////////////////////////////////////////////////
//Parameters to be estimated  
xipUU=0.1;
xiwUU=0.1;
iotamuUU=0.2;
iota1UU=0.1;
iotaw2UU=0.2;
sigmaIXUU=0.1;
sigmaaUU= 0.1;
     
rho1_epsilU=0.6; 
rho1_gU=0.9813;
rho1_muzstarU=0.8315;
rho1_zetaiU=0.9799;
rho1_lambdafU=0.9799;
rho1_zetacU=0.5;
rho1_vU=0.5;
rho1_muupU=0.5;
rho1_lambdawU=0.5;
rho1_tauoU=0.5; 
rho1_deltakU=0.5;

rho1_xU=0.8136;  
rho1_piU=1.5;
rho1_yU=0.5;
e_tauoU=0;
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// % DECLARATION OF THE  MODEL:
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
model;
#bw=(sigmaLXUU*lambdawUU-(1-lambdawUU))/(1-xiwUU*betaUU)/(1-xiwUU);
//  #1 price equation
(piU-piUU)/piUU-(1-iota1UU)*(piU(-1)-piUU)/piUU=betaUU*((piU(+1)-piUU)/piUU-(1-iota1UU)*(piU-piUU)/piUU)+(1-betaUU*xipUU)*(1-xipUU)*((lambdafU-lambdafUU)/lambdafUU+(sU-sUU)/sUU)/xipUU;
((1-alphaUU)^(alphaUU-1)*alphaUU^(-alphaUU))*((rkU*(1+psikUU*RXU))^alphaUU)*((wU*(1+psilUU*RXU))^(1-alphaUU))/epsilU-sU;
// marginal cost, 2
rkU*(1+psikUU*RXU)/(alphaUU*epsilU*((upsilUU*muzstarU*hU/(uU*kbarU(-1)))^(1-alphaUU)))-sU;
//another measure of marginal cost   3 
kbarU-(1-deltaUU)*(kbarU(-1)/(muzstarU*upsilUU))-(1-sigmaIXUU/2*(zetaiU*iU*muzstarU*upsilUU/iU(-1)-muzstarUU*upsilUU)^2)*iU;
//    capital evolution equation,4
zetacU*lambdazU*qU*( 1-sigmaIXUU/2*(zetaiU*iU*muzstarU*upsilUU/iU(-1)-muzstarUU*upsilUU)^2-sigmaIXUU*(zetaiU*iU*muzstarU*upsilUU/iU(-1)-muzstarUU*upsilUU)*zetaiU*iU*upsilUU*muzstarU/iU(-1) )
-zetacU*(lambdazU/muupU)+
betaUU*zetacU(+1)*lambdazU(+1)*qU(+1)*sigmaIXUU/(muzstarU(+1)*upsilUU)* (zetaiU(+1)*iU(+1)*muzstarU(+1)*upsilUU/iU(+1)-muzstarUU*upsilUU)*zetaiU(+1)*(iU(+1)*muzstarU(+1)*upsilUU/iU)^2;
//F.O.C for investment by capital producers ,5 
rkU - tauoU*rkUU*exp(sigmaaUU*(uU-1));   
// entrepreneurs' FOC for capital utilization,  6 
((uU*rkU-tauoU*( rkUU*(exp(sigmaaUU*(uU-1))-1)/sigmaaUU ))+(1-deltaUU)*qU)*piU/upsilUU/qU(-1)  -1-RkXU ;
//definition of after tax rate of return on capital,(18),       7
zetacU*lambdazU-muzstarU*zetacU/(cU*muzstarU-bUU*cU(-1))+bUU*betaUU*zetacU(+1)/(cU(+1)*muzstarU(+1)-bUU*cU);
//efficiency condition associated with household consumption c decision,11
-zetacU*lambdazU+betaUU*zetacU(+1)*lambdazU(+1)*(1+RXU(+1))/(piU(+1)*muzstarU(+1));
-zetacU*lambdazU+betaUU*zetacU(+1)*lambdazU(+1)*(1+RkXU(+1))/(piU(+1)*muzstarU(+1))*deltakU;    
// efficiency condition associated with household M_b and capital accumulation decision          #9
vU*(mbU(-1)*mU/muzstarU/piU)^(-sigmaqUU) - lambdazU*RXU;   
//efficiency condition associated with household cash M decision,10
//#13 wage equation
bw*xiwUU*(wU(-1)-wUU)/wUU+
(-bw*(1+xiwUU*xiwUU*betaUU)+sigmaLXUU*lambdawUU)*(wU-wUU)/wUU+
bw* xiwUU*betaUU*(wU(+1)-wUU)/wUU+  
bw* xiwUU*iotaw2UU*(piU(-1)-piUU)/piUU-
bw *xiwUU*(1+betaUU*iotaw2UU)*(piU-piUU)/piUU+
bw* xiwUU*betaUU*(piU(+1)-piUU)/piUU-
sigmaLXUU*(1-lambdawUU)*(hU-hUU)/hUU+
(1-lambdawUU)*(lambdazU-lambdazUU)/lambdazUU+  
bw*xiwUU*(iotamuUU-1)*(muzstarU-muzstarUU)/muzstarUU-
bw*xiwUU*(iotamuUU-1)*betaUU*(muzstarU(+1)-muzstarUU)/muzstarUU-
(1-lambdawUU)*(lambdawU-lambdawUU)/lambdawUU;
yU -gU-cU-iU/muupU-tauoU*( rkUU*(exp(sigmaaUU*(uU-1))-1)/sigmaaUU )*kbarU(-1)/(muzstarU*upsilUU);
//resource constraint,14
yU=epsilU*(uU*kbarU(-1)/(muzstarU*upsilUU))^alphaUU* hU^(1-alphaUU)*sU;
// #15 GDP
 mbU=mbU(-1)*xU/(piU*muzstarU);
// law of motion of the money base,16    
(mbU(-1)/(piU*muzstarU))*(1-mU)=psilUU*wU*hU+psikUU*rkU*kbarU(-1)*uU/(muzstarU*upsilUU);
//(44) credit market clearing condition   #17
////////////////////////////////////////////////////////////////////////////////////////////////
// Shock Equations
// Equations take the form: x = x_ *(1+e_x) + rho_x*(x(-1) - x_),
// where x_ is steady-state value, and e_x is iid shock with stderror std_x
lambdafU = lambdafUU* ( 1 + e_lambdafU) + rho1_lambdafU * ( lambdafU(-1) - lambdafUU );  
epsilU = epsilUU* ( 1 + e_epsilU) + rho1_epsilU * ( epsilU(-1) - epsilUU );  
gU = gUU* ( 1 + e_gU) + rho1_gU * ( gU(-1) - gUU );

zetaiU = zetaiUU* ( 1 + e_zetaiU) + rho1_zetaiU * ( zetaiU(-1) - zetaiUU );
zetacU = zetacUU* ( 1 + e_zetacU) + rho1_zetacU * ( zetacU(-1) - zetacUU );  
tauoU =tauoUU*(1+e_tauoU) + rho1_tauoU*(tauoU(-1) -tauoUU)  ;
lambdawU = lambdawUU* ( 1 + e_lambdawU) + rho1_lambdawU * ( lambdawU(-1) - lambdawUU );

vU =  vUU* ( 1 + e_vU) + rho1_vU * (  vU(-1) -  vUU );  
muzstarU=muzU*(upsilUU)^(alphaUU/(1-alphaUU));
muupU = muupUU* ( 1 + e_muupU) + rho1_muupU * ( muupU(-1) - muupUU );
muzU = muzUU* ( 1 + e_muzU) + rho1_muzstarU * ( muzU(-1) - muzUU );
deltakU = deltakUU* ( 1 + e_deltakU) + rho1_deltakU * ( deltakU(-1) - deltakUU );
//xU = xUU*(1+e_xU) + rho1_xU*(xU(-1) -xUU)  ;
xU/xUU=(xU(-1)/xUU)^rho1_xU*((piU/piUU)^(-rho1_piU)*((yU/yU(-1)*muzstarU)/muzstarUU)^(-rho1_yU))^(1-rho1_xU)*exp(e_xU);

//Observation Equations 
p_obs/p_obs(-1)=piU;
y_obs/y_obs(-1)=yU/yU(-1)*muzstarU; 
c_year/c_year(-1)/muzc=(cU*muzstarU*muzstarU(-1)*muzstarU(-2)*(muzc)^3+cU(-1)*muzstarU(-1)*muzstarU(-2)*(muzc)^2+cU(-2)*muzstarU(-2)*muzc+cU(-3))
      *muzstarU(-3)*muzc
      /(cU(-1)*muzstarU(-1)*muzstarU(-2)*muzstarU(-3)*(muzc)^3+cU(-2)*muzstarU(-2)*muzstarU(-3)*(muzc)^2+cU(-3)*muzstarU(-3)*muzc+cU(-4)); 
i_year/i_year(-1)/muzi=(iU*muzstarU*muzstarU(-1)*muzstarU(-2)*(muzi)^3/muupU+iU(-1)*muzstarU(-1)*muzstarU(-2)*(muzi)^2/muupU(-1)+iU(-2)*muzstarU(-2)*muzi/muupU(-2)+iU(-3)/muupU(-3))
      *muzstarU(-3)*muzi
      /(iU(-1)*muzstarU(-1)*muzstarU(-2)*muzstarU(-3)*(muzi)^3/muupU(-1)+iU(-2)*muzstarU(-2)*muzstarU(-3)*(muzi)^2/muupU(-2)+iU(-3)*muzstarU(-3)*muzi/muupU(-3)+iU(-4)/muupU(-4));  
m_obs/m_obs(-1)=mbU/mbU(-1)*muzstarU*muzm;
end;
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%% CALCULATING  STEADY STATES
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//State variables  
//Observation Vars ,see steady_state file
//Shock variables
//resid(1); 

steady(nocheck);
//steady(solve_algo=4);
check;
resid(1);
//model_diagnostics;
//model_info;
//return

//%variances of shock variables
shocks; 
var  e_lambdafU =0.01; 
var  e_epsilU =0.01;
var  e_gU =0.01;
var  e_muzU =0.01;
var  e_zetaiU =0.01;
var  e_xU =0.01;
var   e_zetacU=0.01;
//var  e_tauoU=0.01;
var   e_vU=0.01;
var  e_lambdawU=0.01;
var  e_muupU=0.01; 
var  e_deltakU =0.01;
end;

stoch_simul(order=1,loglinear,nodisplay);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Estimation
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
estimated_params;

xipUU,beta_pdf, 0.5, 0.1; //0.375,0.1
xiwUU,beta_pdf, 0.5, 0.1; //0.375,0.1
iotamuUU,beta_pdf, 0.5,0.15;   //weight on technology growth
iota1UU,beta_pdf, 0.5, 0.15;    //weight on price
iotaw2UU,beta_pdf, 0.5, 0.15;   //weight on wage
sigmaIXUU,normal_pdf,4,1.5;
sigmaaUU,normal_pdf,6,5;

rho1_lambdafU , beta_pdf,0.5, 0.2;
rho1_epsilU,    beta_pdf,0.5, 0.2;
rho1_gU,        beta_pdf,0.5, 0.2;
rho1_muzstarU, beta_pdf, 0.5, 0.2;
rho1_zetaiU, beta_pdf, 0.5, 0.2;
rho1_zetacU, beta_pdf, 0.5, 0.2;
//rho1_tauoU, beta_pdf, 0.5, 0.2;
rho1_vU,beta_pdf, 0.5, 0.2;
rho1_lambdawU,beta_pdf, 0.5, 0.2;
rho1_muupU,beta_pdf, 0.5, 0.2;
rho1_deltakU,beta_pdf, 0.5, 0.2;
rho1_xU,beta_pdf, 0.5, 0.2;
rho1_piU,NORMAL_PDF,0.5, 0.25;
rho1_yU,NORMAL_PDF,0.5, 0.25;

stderr e_lambdafU, inv_gamma_pdf,0.1,2;
stderr e_epsilU, inv_gamma_pdf,0.1,2;
stderr e_gU, inv_gamma_pdf,0.1,2;
stderr e_muzU, inv_gamma_pdf,0.1,2;
stderr e_zetaiU, inv_gamma_pdf,0.1,2;
stderr e_xU, inv_gamma_pdf,0.1,2;   
stderr e_zetacU, inv_gamma_pdf,0.1,2;
//stderr e_tauoU,  inv_gamma_pdf,0.1,2;
stderr e_vU, inv_gamma_pdf,0.1,2;
stderr e_lambdawU, inv_gamma_pdf,0.1,2;
stderr e_muupU, inv_gamma_pdf,0.1,2;
stderr e_deltakU, inv_gamma_pdf,0.1,2;
end;

estimated_params_init(use_calibration);
end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////

varobs  c_year, i_year ,p_obs  ,m_obs ,y_obs  ; 
observation_trends;
c_year (log(muzstarUU)+log(muzc));
i_year (log(muzstarUU)+log(muzi));
p_obs (log(piUU));
m_obs (log(muzstarUU)+log(muzm));
y_obs (log(muzstarUU));
end;
estimation(datafile=datapull1,loglinear,smoother,mode_check, mh_replic=2002,mode_compute=6,diffuse_filter)y_obs, c_year, i_year ,m_obs ,p_obs;




//nograph,
//estimation(datafile=datapull,nobs=192,loglinear,mh_replic=2002, mode_compute=0,mh_nblocks=2,mh_drop=0.45,mh_jscale=0.65, diffuse_filter);
//estimation(datafile=datapull,mode_compute=4,mode_check) ;
//stoch_simul(nocorr,nomoments,noprint) yU,piU,RXU,gy_obs,hU,wU;
//mh_replic=20000,smoother ,mh_nblocks = 2,mode_compute=4,first_obs=5,mh_jscale=0.25,mh_nblocks=1,nograph,nobs=45,forecast=1,bayesian_irf,
//mh_init_scale=0.9,filtered_vars,smoother,conf_sig =.95,
//mh_drop=0.5,options_.gradient_method = 3;load_mh_file,mode_compute=0,forecast=1,shock_decomposition
