// Dynare code for price bubble DSGE model with monetary policy
// Master thesis model 
// Simon B. Kristiansen, 09.2013


//The preamble will be structured as follows:
//1: VAR - endogenous variables used in the model
//2: varexo - exogeneous shock variables
//3: Parameters - exogeneous values used in the model
//4: Model - specifying the model 


// Declaration of endogenous variable

// Endogeneous variables
Var 
Y_hat, C_hat, I_hat, K_hat, L, lambda_hat, R, q, p_w, p_I, b_hat, epsilon_star,
m, w_hat, w_sim, w_star, F_w, K_w, pi, p_sim, p_star, F_p, K_p, PI_sim_w,
PI_sim_p, z, mu, zeta, lambda_p, lambda_w, epsilon_mp, g, theta;

// Declaration of exogeneous variables (shocks), there are a total of eight

Varexo
ez,               //Total factor productivity (TFP) shock
emu,              //Marginal efficiency of investment (MEI) shock
ezeta,            //Preference shock
elambda_p,        //Price mark-up shock
elambda_w,        //Wage mark-up shock
eepsilon_mp,      //Monetary policy shock
eg,               //Government spending shock
etheta;          //Sentiment shock



// Exogeneous parameters

parameters
h, beta, nu, xi_w, xi_p, delta_e, eta, delta, 
p_theta, alpha, kappa, S_dm, rho_R, phi_pi, phi_y, phi, gamma_p, gamma_w,
rho_z, rho_mu, rho_p, rho_w, rho_zeta, rho_mp, rho_g, rho_theta, 
sigma_z, sigma_mu, sigma_p, sigma_w, sigma_zeta, sigma_mp, sigma_g, sigma_theta,
lambda_w_ss, lambda_p_ss, eta_g_ss, z_ss,
Y_hat_ss, C_hat_ss, I_hat_ss, K_hat_ss, L_ss, lambda_hat_ss, R_ss, q_ss, p_w_ss,
p_I_ss, b_hat_ss, epsilon_star_ss, m_ss, w_hat_ss, w_sim_ss, w_star_ss, F_w_ss,
K_w_ss, pi_ss, p_sim_ss, p_star_ss, F_p_ss, K_p_ss, omega_ss, epsilon_star_ss_eta,
psi i_w i_p omega;


// Setting of numerical values for parameters

z_ss=0.040;         //Steady state TFP growth rate (used for tech. shock AR distribution)
h=0.50;              //Consumption habit
beta=0.9975;         //Preference discount rate
//lambda_w_ss=1.15;    //Wage markup (used in lambda_w MA distribution)      
//lambda_p_ss=1.15;    //Price markup (used in lambda_p MA distribution)
lambda_w_ss=0.99;
lambda_p_ss=0.99;
nu=1.00;             //Inverse Frisch elasticity
xi_w=0.75;           //Calvo wages (the probability of HH not being able to change wage for a given period)
xi_p=0.75;           //Calvo prices (the probability of firms not being able to change price for a given period)
delta_e=0.01;        //Exit rate of firms
delta=0.025;         //Capital depreciation rate
p_theta=1;           //Is equal to zero because all firms have to choose investment level prior to production
alpha=0.36;          //Capital income share
kappa=0.15;          //Credit friction, recovery rate
S_dm=2.00;           //Investment adjusted costs
rho_R=0.50;          //Taylor rule smoothing
phi_pi=1.70;         //Taylor rule, inflation
phi_y=0.20;          //Taylor rule, output growth
phi=0.20;            //Parameter of start up capital
gamma_p=0.50;        //Price markup (used in lambda_p MA distribution)
gamma_w=0.50;        //Wage markup (used in lambda_w MA distribution)
eta_g_ss=0.20;       //Government spending shock (used in g MA distribution)
epsilon_star_ss_eta=0.25;   //Fraction of firms investing in SS
L_ss=1;              //Constant employment level in SS
pi_ss=1.005;          //Quarterly inflation
i_w=0.50;            //Wage indexation
i_p=0.50;            //Price indexation
theta_ss=1;          //Relative size of old bubble to new bubble (from MWX paper)
omega_ss=1;         //NOT USED
omega=1;            //NOT USED
rho_z=0.40;         //TFP shock mean
rho_mu=0.60;        //MEI shock mean
rho_p=060;          //Price mark-up shock mean
rho_w=0.60;         //Wage mark-up shock mean
rho_zeta=0.60;      //Preference shock mean
rho_mp=0.40;        //Monetary policy shock mean
rho_g=0.60;         //Government spending shock mean
rho_theta=0.60;     //Sentiment shock mean
sigma_z=0.005;      //TFP shock standard deviation
sigma_mu=0.005;     //MEI shock standard deviation
sigma_p=0.001;      //Price mark-up shock standard deviation
sigma_w=0.001;      //Wage mark-up shock standard deviation
sigma_zeta=0.005;   //Preference shock standard deviation
sigma_mp=0.001;     //Monetary policy shock standard deviation
sigma_g=0.005;      //Government spending shock standard deviation
sigma_theta=0.005;  //Sentiment shock standard deviation


 

// Now we define and calculate the relevant steady state relationships


//Households' consumption and saving choice SS
R_ss = pi_ss*z_ss/beta;

//Wage setting problem SS
w_sim_ss=(1/w_hat_ss)*(K_w_ss/F_w_ss)^((1-lambda_w_ss)/(1-(1+nu)*lambda_w_ss));
w_sim_ss=1;
w_star_ss=1;

//Should these be used (determins psi)?
//(lambda_w_ss*psi*L_ss^nu)/w_hat_ss=(z_ss-beta*h)/C_hat_ss*(z_ss-h)

//Price setting problem SS
K_p_ss=F_p_ss*p_sim_ss;
p_sim_ss=1;
p_star_ss=1;
p_w_ss=1/lambda_p_ss;

//Bubbles SS
m_ss=omega*delta_e/(1-(1-delta_e)*theta_ss);
eta=((epsilon_star_ss_eta*(1-delta_e)*beta*theta_ss)/(1-(1-delta_e)*beta*theta_ss))+1;
epsilon_star_ss=((1-delta_e)*beta*theta_ss/(1-(1-delta_e)*theta_ss*beta)*(eta-1))^(1/eta);
q_ss=1/epsilon_star_ss;
//omega_ss=((eta-1)/(eta-1+(1/alpha)));    
w_hat_ss=(((1-delta_e)*(beta/z_ss)*(1-alpha)^((1-alpha)/alpha)*p_w_ss^(1/alpha)*(alpha-((1-alpha)/(eta+(1/alpha)-1))*epsilon_star_ss_eta))/((1-(1-delta_e)*(beta/z_ss)*(1-delta+(kappa/(eta-1))*epsilon_star_ss_eta))*q_ss))^(alpha/(1-alpha));

//Main aggregate variables SS
L_ss=1;
p_I_ss=1;
K_hat_ss=L_ss/(((p_w_ss*(1-alpha))/(w_hat_ss))^(1/alpha)*(1-p_theta+p_theta*(1-1/(alpha*eta+1)*epsilon_star_ss_eta))*1/z_ss);
Y_hat_ss=L_ss*((1-p_theta+p_theta*(1-((1-alpha)/(alpha*eta+1-alpha))*epsilon_star_ss_eta))/((1-p_theta+p_theta*(1-(1/(alpha*eta+1))*epsilon_star_ss_eta))^(1-alpha)))*(K_hat_ss/(z_ss*L_ss))^alpha;
b_hat_ss=K_hat_ss*(((p_I_ss/(1-delta_e+delta_e*phi))+(epsilon_star_ss)^(-eta+1)*(1/z_ss)-(1-delta)*(p_I_ss/z_ss))/((eta/(eta-1))*(epsilon_star_ss)^(-eta+1)))-(kappa*q_ss)/z_ss;
I_hat_ss=((epsilon_star_ss_eta)/p_I_ss)*((kappa*q_ss*K_hat_ss/z_ss)+b_hat_ss)-(p_theta*(1-alpha)^(1/alpha)*(1/w_hat_ss)^((1-alpha)/alpha)*(p_w_ss)^(1/alpha)*(alpha*eta/(alpha*eta+1))+(1-p_theta)*omega)*epsilon_star_ss_eta*K_hat_ss/z_ss*p_I_ss;
C_hat_ss=Y_hat_ss*(1-eta_g_ss)-I_hat_ss;
lambda_hat_ss=(z_ss-beta*h)/(C_hat_ss*(z_ss-h));

psi=(lambda_hat_ss*w_hat_ss)/(lambda_w_ss*L_ss^nu);
F_w_ss=(lambda_hat_ss*L_ss)/((1-lambda_w_ss)*(1-beta*xi_w));
K_w_ss=(lambda_w_ss*psi*L_ss^(1+nu))/((1-lambda_w_ss)*(1-beta*xi_w));
F_p_ss=(lambda_hat_ss*Y_hat_ss)/((1-lambda_p_ss)*(1-beta*xi_p));
K_p_ss=(lambda_hat_ss*Y_hat*p_w_ss*lambda_p_ss)/((1-lambda_p_ss)*(1-beta*xi_p));



// Model equations
model;

/*
//Households consumption and saving choices
lambda_hat=(zeta*z)/(C_hat*z-h*C_hat(-1))-beta*h*(zeta(+1))/(C_hat(+1)*z(+1)-h*C_hat);
1=beta*(lambda_hat(+1)/lambda_hat)*(R/pi(+1)*z(+1));
//R=lambda_hat*pi(+1)*z(+1)/lambda_hat(+1)*beta;
*/

//Alternativ Households consumption and saving choices (to remove errors/devision by endogenous variable initialized to 0)
lambda_hat*(C_hat*z-h*C_hat(-1)-(C_hat(+1)*z(+1)-h*C_hat)) =(zeta*z*(C_hat(+1)*z(+1)-h*C_hat))-beta*h*(zeta(+1))*(C_hat*z-h*C_hat(-1));
lambda_hat*pi(+1)*z(+1)=beta*R;


//Wage setting problem (26)-(30)
w_sim=((1/w_hat)*(K_w/F_w))^((1-lambda_w_ss)/(1-(1+nu)*lambda_w_ss));
F_w=(lambda_hat*L)/(1-lambda_w)+beta*xi_w*(w_hat/w_hat(+1))^(lambda_w_ss/(1-lambda_w_ss))*(PI_sim_w)^(1/(1-lambda_w_ss))*F_w(+1);
K_w=(lambda_w*zeta*psi*L^(1+nu))/(1-lambda_w)+beta*xi_w*(w_hat/w_hat(+1))^((lambda_w_ss*(1+nu))/(1-lambda_w_ss))*(PI_sim_w)^((lambda_w_ss*(1+nu))/(1-lambda_w_ss))*K_w(+1);
w_sim=((1-xi_w*((w_hat(-1)/w_hat)*PI_sim_w(-1))^(1/(1-lambda_w_ss)))/(1-xi_w))^(1-lambda_w_ss);
w_star=(xi_w*(w_star(-1)*(w_hat(-1)/w_hat)*PI_sim_w(-1))^(lambda_w_ss/(1-lambda_w_ss))+(1-xi_w)*w_sim^(lambda_w_ss/(1-lambda_w_ss)))^((1-lambda_w_ss)/lambda_w_ss);

//Price setting problem of intermediate goods (31)-(35)
//p_sim=K_p/F_p;
K_p=p_sim*F_p;
F_p=(lambda_hat*Y_hat)/(1-lambda_p)+beta*xi_p*PI_sim_p^(1/(1-lambda_p_ss))*F_p(+1);
K_p=(lambda_hat*p_w*Y_hat*lambda_p)/(1-lambda_p)+beta*xi_p*PI_sim_p^(lambda_p_ss/(1-lambda_p_ss))*K_p(+1);
p_sim=((1-xi_p*(PI_sim_p)^(1/(1-lambda_p_ss)))/(1-xi_p))^(1-lambda_p_ss);
p_star=(xi_p*(p_star(-1)*PI_sim_p)^(lambda_p_ss/(1-lambda_p_ss))+(1-xi_p)*p_sim^(lambda_p_ss/(1-lambda_p_ss)))^((1-lambda_p_ss)/lambda_p_ss);

//Bubbles
m=omega*delta_e+(1-delta_e)*theta(-1)*m(-1);
b_hat=(1-delta_e)*beta*(lambda_hat(+1)/lambda_hat)*(m/m(+1))*theta*b_hat(+1)*(1+(1/(eta-1))*(epsilon_star(+1))^(-eta));
epsilon_star=p_I/(q*mu);
q=(1-delta_e)*beta*(lambda_hat(+1)/lambda_hat)*((1/z(+1))*(1-delta+(kappa/(eta-1))*(epsilon_star(+1))^(-eta))*q(+1)-((1-p_theta)*omega/(eta-1))*(epsilon_star(+1))^(-eta)+(alpha*omega/(1-alpha))*(1-((1/alpha-1)*p_theta)/(eta+1/alpha-1)*(epsilon_star(+1))^(-eta)));

//Not a part of the 23 equations, only there to define omega
//omega=(1-alpha)^(1/alpha)*(1/w_hat)^((1-alpha)/alpha)*(p_w)^(1/alpha);

//Main aggregate variables
L=((p_w*(1-alpha))/w_hat)^(1/alpha)*(1-p_theta+p_theta*(1-(1/(alpha*eta+1))*(epsilon_star)^(-eta)))*K_hat/z;
Y_hat=p_star^(lambda_p_ss/(lambda_p_ss-1))*(1-p_theta+p_theta*(1-(1-alpha)/(alpha*eta+1-alpha))*(epsilon_star)^(-eta))/(1-p_theta+p_theta*(1-((1)/(alpha*eta+1))*(epsilon_star)^(-eta)))^(1-alpha)*(K_hat/z)^(alpha)*L^(1-alpha);
I_hat=((epsilon_star)^(-eta)/p_I)*((kappa*q*K_hat/z)+b_hat)-(p_theta*omega*(alpha*eta/(alpha*eta+1))+(1-p_theta)*omega)*(epsilon_star)^(-eta)*(K_hat/z*p_I);
K_hat(+1)=(1-delta_e+delta_e*phi)*((1-delta)*(K_hat/z)+mu*(eta/(eta-1))*(epsilon_star)^(1-eta)*((kappa*q*(K_hat/z)+b_hat)/p_I)-mu*(p_theta*omega*(eta/(eta-1+(1/alpha)))+(1-p_theta)*omega*(eta/(eta-1)))*(epsilon_star)^(-eta+1)*(K_hat/z*p_I));
//Y_hat=C_hat+I_hat+g*Y_hat;
C_hat=(1-g)*Y_hat-I_hat;
p_I=1+(S_dm/2)*(I_hat*z/I_hat(-1)-z)^(2)+S_dm*(I_hat*z/I_hat(-1)-z)*(I_hat*z/I_hat(-1))-beta*(lambda_hat(+1)/lambda_hat)*S_dm*(I_hat(+1)*z(+1)/I_hat-z)*(I_hat(+1)/I_hat)^(2)*z(+1);

//Monetary policy
R=rho_R*R(-1)+(1-rho_R)*(R+phi_pi*pi/pi_ss+phi_y*(Y_hat/Y_hat(-1)*(z/1)*(1/z_ss)))+epsilon_mp;

//Price indexs
PI_sim_w=((pi*z)^(i_w)*(pi_ss*z_ss)^(1-i_w))/(pi(+1)*z(+1));
PI_sim_p=((pi)^(i_p)*(pi_ss)^(1-i_p))/pi(+1);


//8 Shock equations
z=rho_z*z(-1)+ez;
mu=rho_mu*mu(-1)+emu;
zeta=rho_zeta*zeta(-1)+ezeta;
lambda_w=rho_w*lambda_w+elambda_w-gamma_w*elambda_w(-1);
lambda_p=rho_p*lambda_p+elambda_p-gamma_p*elambda_p(-1);
epsilon_mp=rho_mp*epsilon_mp(-1)+eepsilon_mp;
g=rho_g*g(-1)+eg;
theta=rho_theta*theta(-1)+etheta;

end;

// calculation of steady state

resid(1); 
steady;
solve_algo=2;
check;


// End of model block



//---------------------------------------------------------------------------------------------------
/*
//Used to show that shock variables differ from zero and therefore doesn't cause the error message

z-z_ss=rho_z*(z(-1)-z_ss)+ez;
mu-mu(-1)=rho_mu+emu;
zeta-zeta(-1)=rho_zeta+ezeta;
lambda_w-lambda_w_ss=rho_w*(lambda_w-lambda_w_ss)+elambda_w-gamma_w*elambda_w(-1);
(lambda_p-lambda_p_ss)=rho_p*(lambda_p-lambda_p_ss)+elambda_p-gamma_p*elambda_p(-1);
epsilon_mp-epsilon_mp(-1)=rho_mp+eepsilon_mp;
(g-eta_g_ss)=rho_g*(g(-1)-eta_g_ss)+eg;
theta-theta(-1)=rho_theta+etheta;
*/




//options_.pruning=1;

//log(z/z_ss)=rho_z*log(z(-1)/z_ss)+ez;
//log(mu)=rho_mu*log(mu(-1))+emu;
//log(zeta)=rho_zeta*log(zeta(-1))+ezeta;
//log(lambda_w/lambda_w_ss)=rho_w*log(lambda_w/lambda_w_ss)+elambda_w-gamma_w*elambda_w(-1);
//log(lambda_p/lambda_p_ss)=rho_p*log(lambda_p/lambda_p_ss)+elambda_p-gamma_p*elambda_p(-1);
//epsilon_mp
//log(g/eta_g_ss)=rho_g*log(g(-1)/eta_g_ss)+eg;
//log(theta)=rho_theta*log(theta(-1))+etheta;

                     
//http://www.dynare.org/phpBB3/viewtopic.php?f=1&t=2727 parametre værdier