//*************************************************************************************************
//                 Simulation du modèle stationnarisé sans friction financière : MSSF
//*************************************************************************************************





//-------------------------------------------------------------------------
// Partie 1: Déclaration des variables endogènes
//-------------------------------------------------------------------------

var

Slambda              % 01- L'utilité marginale de consommation                                   % Slambda = lambda*a %
 
SC                   % 02- La consommation du ménage représentatif                               % SC = C/a %

SR                   % 03- Le taux d'intérêt réel brut                                           % SR = R %

SL                   % 04- L'offre de travail du ménage représentatif                            % SL = L %

SWh                  % 05- Le salaire horaire versé au ménage représentatif                      % SWh = Wh/a %

SP                   % 06- Le niveau général de prix                                             % SP = P %

SI                   % 07- L'investissement                                                      % SI = I/a %

SRh                  % 08- La rente brute de location du capital physique                        % SRh = Rh %

SU                   % 09- Le taux variable d'utilisation du capital physique                    % SU = U % 

SK                   % 10- Le capital physique                                                   % SK = K/a %

Sq                   % 11- Le prix unitaire du capital physique                                  % Sq = q %

A1                   % 12- Variable auxiliaire utilisée pour la résolution de SWstar             % A1 = S1*(1/a)^(elasw-1) % 

A2                   % 13- Variable auxiliaire utilisée pour la résolution de SWstar             % A2 = S2*(1/a)^elasw %

A3                   % 14- Variable auxiliaire utilisée pour la résolution de SPstar             % A3 = S3 %

A4                   % 15- Variable auxiliaire utilisée pour la résolution de SPstar             % A4 = S4 %

SW                   % 16- L'indicateur du salaire aggrégé                                       % SW = W/a %

SWstar               % 17- Le salaire choisi par les " labour unions" optimisateurs              % SWstar = Wstar/a %

SMw                  % 18- Le markup brut de salaire                                             % SMw = Mw %

SY                   % 19- L'indice composite du bien final                                      % SY = Y/a %

SMp                  % 20- Le markup brut de prix                                                % SMp = Mp %

Sfi                  % 21- Le coût marginal réel associé à la production de biens intermediaires % Sfi = fi %

SPstar               % 22- Le prix choisi par les "Retailers" optimisateurs                      % SPstar = Pstar/a %

SRn                  % 23- Le taux d'intérêt nominal brut                                        % SRn = Rn %

Spi                  % 24- Le taux d'inflation brut                                              % Spi = pi %

lSuw                 % 25- Le log du choc du markup de salaire                                   % Suw = uw %

lSup                 % 26- Le log du choc du markup de prix                                      % Sup = up %

lSa                  % 27- Le log du choc technologique                                          % Sa = a %

GY                   % 28- Le choc de dépenses publiques                                         % GY = G/Y %

lSx                  % 29- Le log du choc d'efficience maginale d'investement                    % Sx = x %


;


//-------------------------------------------------------------------------
// Partie 2: Déclaration des variables exogenes
//-------------------------------------------------------------------------

varexo

x_shk                  % 01- L'innovation associée au choc d'efficience marginale d'investement

uw_shk                 % 02- L'innovation associée au choc du markup de salaire

up_shk                 % 03- L'innovation associée au choc du markup de prix

a_shk                  % 04- L'innovation associée au choc technologique

r_shk                  % 05- L'innovation associée au choc de politique monétaire

g_shk                  % 06- L'innovation associée au choc de dépenses publiques

;





//-------------------------------------------------------------------------
// Partie 3: Déclaration de paramètres
//-------------------------------------------------------------------------

parameters

h

bet

phi

xi

delta

zeta

phi1

phi2

elasw

indexw

probaw

indexp

elas

probap

alfa

rhouw

rhoup

gam

rhoi

rhopi

rhoy

rhog

gyshare

rhox

rhoa

%n

;



//-------------------------------------------------------------------------
// Partie 4: Calibration de paramètres
//-------------------------------------------------------------------------

h= 0.593;                   % 01- Le degré de formation d'habitudes externes en consommation

bet = 0.99;                 % 02- Le facteur d'escompte 

phi = 0.222 ;               % 03- L'inverse de l'élasticité-Frisch de l'offre de travail du ménage représentatif

xi = 7.354 ;                % 04- Les coûts d'ajustement en investissement

delta = 0.025;              % 05- Le taux de dépréciation du capital physique

zeta = 0.730 ;              % 06- L'élasticité d'utilisation du capital physique

elasw = 6 ;                 % 07- L'élasticité de substitution dans le marché du travail

indexw = 0.493 ;            % 08- Le degré d'indexation de salaire

probaw = 0.678;             % 09- La probabilité( à la Calvo) qu'un "Labour union"  n'ajuste pas son salaire

indexp= 0.156;              % 10- Le degré d'indexation de prix

elas = 6      ;             % 11- L'élasticité de substitution dans le marché de biens

probap = 0.743 ;            % 12- La probabilité(Calvo) qu'un " retailer" n'ajuste pas son prix

alfa = 0.3 ;                % 13- La part du capital physique dans la production

gam = 1.002 ;                % 14- Le taux de croissance de la productivité de travail (calibration provisoire)

%gam = 1 ;                % 14- Le taux de croissance de la productivité de travail (calibration provisoire)

rhoi = 0.905 ;              % 15- Paramètre de lissage de la règle de Taylor

rhopi = 1.708 ;             % 16- Paramètre de Règle de Taylor-inflation

rhoy = - 0.015 ;            % 17- Paramètre de Règle de Taylor-production

gyshare = 0.200 ;           % 18- La persistence du choc de dépenses publiques (calibration provisoire)

rhox = 0.988 ;              % 19- La persistence du choc d'efficience marginale d'investissement

rhouw = 0.652 ;             % 20- La persistence du choc du markup de salaire

rhoup = 0.931 ;             % 21- La persistence du choc du markup de prix

rhog = 0.969 ;              % 22- La persistence du choc de dépenses publiques

rhoa = 0.973 ;              % 23- La persistence du choc technologique

%n=850 ;


//-------------------------------------------------------------------------
// Le calcul analytique de l'état stationaire  en fonction des paramètres du modèle
//-------------------------------------------------------------------------

lSatemp = 0

lSxtemp = 0 ;

lSuptemp = 0 ;

lSuwtemp = 0 ;

SMptemp = elas/(elas -1) ;

SMwtemp = elasw/(elasw -1);

SRtemp = gam/bet ;

SRntemp = SRtemp ;

Spitemp = 1 ;

SPtemp = 1 ;

SPstartemp = 1 ;

Sfitemp = 1/SMptemp ;

SUtemp = 1 ;

Sqtemp = 1;

SRhtemp = ((gam/bet) - (1-delta))*Sqtemp ;

SWtemp = (Sfitemp/((SRhtemp^alfa)*(alfa^(-alfa))*((1-alfa)^(alfa - 1))))^(1/(1-alfa)) ;

SWstartemp = (((1- (probaw/(gam^(1-elasw))))/(1 - probaw))^(1/(1-elasw)))*SWtemp ;

SWhtemp = ((1-bet*probaw*(gam^elasw))/(1 - bet*probaw*(gam^(elasw-1))))*(SWstartemp/SMwtemp) ;

GYtemp = gyshare ;

SYL = SWtemp/(Sfitemp*(1-alfa)) ;

SKL = SYL^(1/alfa) ;

SCL = (1- GYtemp)*SYL - (gam -1 + delta)*SKL ;

SlambdaL = 1/((1 - (h/gam))*SCL) ;

SLtemp = (SWhtemp*SlambdaL)^(1/(1+phi)) ;

Slambdatemp = SlambdaL/SLtemp ;

SCtemp = SCL*SLtemp ;

SYtemp = SYL*SLtemp ;

SKtemp = SKL*SLtemp ;

SItemp = (gam - 1 + delta)*SKtemp ;

A1temp = Slambdatemp*SLtemp*(SWtemp^elasw)/(1 - bet*probaw*(gam^(elasw - 1)));

A2temp = Slambdatemp*SLtemp*SWhtemp*SMwtemp*(SWtemp^elasw)/(1 - bet*probaw*(gam^elasw)) ;

A3temp = (SYtemp*Slambdatemp/(1-bet*probap)) ;

A4temp = A3temp ;

phi1 = SRhtemp    ;          % 23- premier paramètre associé à la fonction du coût d'utilisation du capital physique

phi2 = zeta*phi1      ;      % 24- second paramètre associé à la fonction du coût d'utilisation du capital physique


//-------------------------------------------------------------------------
// Partie 5 : Déclaration du modèle
//-------------------------------------------------------------------------

model ;

SC = (h/gam)*SC(-1) + (1/Slambda) ;

(bet/gam)*SR*Slambda(+1) = Slambda ;

(SL^phi)/Slambda = SWh/SP ;

Sq*Slambda = (bet/gam)*Slambda(+1)*((SRh(+1)*SU(+1)) -(phi1*(SU(+1)-1)+(phi2*0.5)*((SU(+1)-1)^2)) +(1-delta)*Sq(+1)) ;

1= Sq*exp(lSx)*(1 - xi*0.5*(((SI*gam/SI(-1)) - gam)^2) - gam*xi*0.5*((SI*gam/SI(-1)) - gam)*(SI/SI(-1))) + bet*gam*(Slambda(+1)/Slambda)*Sq(+1)*exp(lSx(+1))*xi*0.5*((SI(+1)*gam/SI) - gam)*((SI(+1)/SI)^2) ;

%1 = (Sq*exp(lSx))*(1 - (xi*0.5)*((((SI*gam)/SI(-1)) - gam)^2) - gam*xi*(((SI*gam)/SI(-1)) - gam)*(SI/SI(-1)) + bet*gam*(Slambda(+1)/Slambda)*Sq(+1)*exp(lSx(+1))*xi*(((SI(+1)*gam)/SI) - gam)*((SI(+1)/SI)^2) ;  

SRh = phi1 + phi2*(SU -1) ;

SK(+1) = ((1-delta)/gam)*SK + (exp(lSx)/gam)*(1 - (xi*0.5)*(((gam*SI/SI(-1)) - gam)^2))*SI ;

A1 = ((SW^elasw)*Slambda /SP)*(SP(-1)^((1 - elasw)*indexw))*SL + bet*probaw*(gam^(elasw -1))*A1(+1) ;

A2 = ((SW^elasw)*Slambda/SP)*SWh*(SP(-1)^(-elasw*indexw))*SL*SMw + bet*probaw*(gam^elasw)*A2(+1) ;

SWstar*((1/SP(-1))^indexw)*A1 = A2 ;

SMw = (elasw/(elasw -1))*exp(lSuw) ;

SW^(1-elasw) = (1-probaw)*(SWstar^(1-elasw)) + (probaw/(gam^(1 - elasw)))*((SW(-1)*(Spi(-1)^indexw))^(1-elasw)) ;

A3 = (SY*Slambda)*(((SP(-1)^indexp)/SP)^(1-elas))  +  bet*probap*A3(+1) ;

A4 = (SY*Slambda)*SMp*Sfi*(((SP(-1)^indexp)/SP)^(-elas)) + bet*probap*A4(+1) ;

(SPstar/(SP(-1)^indexp))*A3 = A4 ;

SMp = (elas/(elas -1))*exp(lSup) ;

SP^(1-elas) = (1-probap)*(SPstar^(1-elas)) + probap*((SP(-1)*(Spi(-1)^indexp))^(1-elas)) ;

SY = exp(lSa)*(SL^(1-alfa))*((SU*SK)^alfa );

SW/SP = Sfi*(1-alfa)*(SY/SL) ;

log(SRn/steady_state(SRn)) = rhoi*log(SRn(-1)/steady_state(SRn)) + (1-rhoi)*(rhopi*log(Spi/steady_state(Spi)) + rhoy*log(SY/steady_state(SY)))  + r_shk ;

Spi = SP/SP(-1) ;

(1 - GY)*SY = SC + SI + (phi1*(SU-1) + (phi2*0.5)*((SU-1)^2))*SK ;

SRh = Sfi*alfa*(SY/(SU*SK)) ;

SR = SRn/Spi(+1);

lSx = rhox*lSx(-1) + x_shk ;

lSuw = rhouw*lSuw(-1) + uw_shk ;

lSup = rhoup*lSup(-1) + up_shk ;

lSa = rhoa*lSa(-1) + a_shk ;

log(GY/gyshare) = rhog*log(GY(-1)/gyshare) +g_shk ;

end ;


//---------------------------------------------------------------------
// 6. Des valeurs initiales et l'état stationnaire
//---------------------------------------------------------------------

%resid;

%options_.noprint = 1;

steady;  

%check; 


//-------------------------------------------------------------------------
// Partie 7: Déclaration des chocs (Ici, l'économie subit des chocs instantanément, durant toute la période de simulation)
//-------------------------------------------------------------------------

@# define m=170
@# define poids=1/2
MSFE1 = 0;
MSFE2 = 0;
MSFE3 = 0;
MSFE4 = 0;
MSFE5 = 0;
MSFE6 = 0;
@# for j in 39:m
@# define n= floor(poids*j)
@# define o=2*n
test1=normrnd(0,0.0001,@{n},1);
test2=normrnd(0,0.0001,@{n},1);
test3=normrnd(0,0.0001,@{n},1);
test4=normrnd(0,0.0001,@{n},1);
test5=normrnd(0,0.0001,@{n},1);
test6=normrnd(0,0.0001,@{n},1);


shocks;


var a_shk ;
periods 1:@{n};
values (test1);

var x_shk ;
periods 1:@{n};
values (test2);

var up_shk ;
periods 1:@{n};
values (test3);

var uw_shk ;
periods 1:@{n};
values (test4);

var r_shk ;
periods 1:@{n};
values (test5);

var g_shk ;
periods 1:@{n};
values (test6);


end;


simul(periods=@{o});


%La construction des matrices artificielles Ya et Xa.

% La création de six vecteurs de dimensions (n-2)*1 qui vont recevoir des données simulées.
y1a=ones(@{n}-2,1);
y2a=ones(@{n}-2,1);
y3a=ones(@{n}-2,1);
y4a=ones(@{n}-2,1);
y5a=ones(@{n}-2,1);
y6a=ones(@{n}-2,1);

% La simulation des six variables artificielles pour n-2 périodes

y1a= log(gam)*ones(@{n}-2,1)+ (log(SY(2:@{n}-2+1,1))-log(SY(1:@{n}-2,1)));
y2a=  log(gam)*ones(@{n}-2,1) + (log(SC(2:@{n}-2+1,1))-log(SC(1:@{n}-2,1)));
y3a= log(gam)*ones(@{n}-2,1) + (log(SI(2:@{n}-2+1,1))-log(SI(1:@{n}-2,1)));
y4a= Spi(2:@{n}-2+1,1);
y5a= SRn(2:@{n}-2+1,1) - 1*ones(@{n}-2,1);
y6a=  (log(SL(2:@{n}-2+1,1))-log(SL(1:@{n}-2,1)));


%La construction de la matrice des variables dépendantes artificielles, Ya de dimension (n-2-4)*6
Ya=zeros(@{n}-2-4,6);

Ya(1:@{n}-2-4,1)=y1a(5:@{n}-2,1);
Ya(1:@{n}-2-4,2)=y2a(5:@{n}-2,1);
Ya(1:@{n}-2-4,3)=y3a(5:@{n}-2,1);
Ya(1:@{n}-2-4,4)=y4a(5:@{n}-2,1);
Ya(1:@{n}-2-4,5)=y5a(5:@{n}-2,1);
Ya(1:@{n}-2-4,6)=y6a(5:@{n}-2,1);


%La construction de la matrice des variables explicatives artificielles, Xa de dimension (n-2-4)*25: (25=6*4+1)
Xa=zeros(@{n}-2-4,25);

%La première colonne:
Xa(1:@{n}-2-4,1)=ones(@{n}-2-4,1);

% de la colonne 2 à 7:

Xa(1:@{n}-2-4,2)=y1a(4:@{n}-2-1,1);
Xa(1:@{n}-2-4,3)=y2a(4:@{n}-2-1,1);
Xa(1:@{n}-2-4,4)=y3a(4:@{n}-2-1,1);
Xa(1:@{n}-2-4,5)=y4a(4:@{n}-2-1,1);
Xa(1:@{n}-2-4,6)=y5a(4:@{n}-2-1,1);
Xa(1:@{n}-2-4,7)=y6a(4:@{n}-2-1,1);


% de la colonne 8 à 13:

Xa(1:@{n}-2-4,8)=y1a(3:@{n}-2-2,1);
Xa(1:@{n}-2-4,9)=y2a(3:@{n}-2-2,1);
Xa(1:@{n}-2-4,10)=y3a(3:@{n}-2-2,1);
Xa(1:@{n}-2-4,11)=y4a(3:@{n}-2-2,1);
Xa(1:@{n}-2-4,12)=y5a(3:@{n}-2-2,1);
Xa(1:@{n}-2-4,13)=y6a(3:@{n}-2-2,1);


% de la colonne 14 à 19:

Xa(1:@{n}-2-4,14)=y1a(2:@{n}-2-3,1);
Xa(1:@{n}-2-4,15)=y2a(2:@{n}-2-3,1);
Xa(1:@{n}-2-4,16)=y3a(2:@{n}-2-3,1);
Xa(1:@{n}-2-4,17)=y4a(2:@{n}-2-3,1);
Xa(1:@{n}-2-4,18)=y5a(2:@{n}-2-3,1);
Xa(1:@{n}-2-4,19)=y6a(2:@{n}-2-3,1);


% de la colonne 20 à 25:

Xa(1:@{n}-2-4,20)=y1a(1:@{n}-2-4,1);
Xa(1:@{n}-2-4,21)=y2a(1:@{n}-2-4,1);
Xa(1:@{n}-2-4,22)=y3a(1:@{n}-2-4,1);
Xa(1:@{n}-2-4,23)=y4a(1:@{n}-2-4,1);
Xa(1:@{n}-2-4,24)=y5a(1:@{n}-2-4,1);
Xa(1:@{n}-2-4,25)=y6a(1:@{n}-2-4,1);



% La construction des matrices réelles Y et X.
% Téléchargement de la base de données réelles 

load usdata-dif

% La création de six vecteurs de dimensions (j-2)*1
y1r=ones(@{j}-2,1);
y2r=ones(@{j}-2,1);
y3r=ones(@{j}-2,1);
y4r=ones(@{j}-2,1);
y5r=ones(@{j}-2,1);
y6r=ones(@{j}-2,1);

% Des données réelles pour (j-2) observations
y1r= dlY(1:@{j}-2,1);
y2r= dlC(1:@{j}-2,1);
y3r= dlI(1:@{j}-2,1);
y4r= INFL(1:@{j}-2,1);
y5r= Fed(1:@{j}-2,1);
y6r= dlL(1:@{j}-2,1);


%La construction de la matrice des variables dépendantes réelles, Yr de dimension (j-2-4)*6
Yr=zeros(@{j}-2-4,6);

Yr(1:@{j}-2-4,1)=y1r(5:@{j}-2,1);
Yr(1:@{j}-2-4,2)=y2r(5:@{j}-2,1);
Yr(1:@{j}-2-4,3)=y3r(5:@{j}-2,1);
Yr(1:@{j}-2-4,4)=y4r(5:@{j}-2,1);
Yr(1:@{j}-2-4,5)=y5r(5:@{j}-2,1);
Yr(1:@{j}-2-4,6)=y6r(5:@{j}-2,1);


%La construction de la matrice des variables explicatives réelles, Xr de dimension (j-2-4)*25: (25=6*4+1)
Xr=zeros(@{j}-2-4,25);

%La première colonne
Xr(1:@{j}-2-4,1)=ones(@{j}-2-4,1);

% de la colonne 2 à 7
Xr(1:@{j}-2-4,2)=y1r(4:@{j}-2-1,1);
Xr(1:@{j}-2-4,3)=y2r(4:@{j}-2-1,1);
Xr(1:@{j}-2-4,4)=y3r(4:@{j}-2-1,1);
Xr(1:@{j}-2-4,5)=y4r(4:@{j}-2-1,1);
Xr(1:@{j}-2-4,6)=y5r(4:@{j}-2-1,1);
Xr(1:@{j}-2-4,7)=y6r(4:@{j}-2-1,1);


% de la colonne 8 à 13
Xr(1:@{j}-2-4,8)=y1r(3:@{j}-2-2,1);
Xr(1:@{j}-2-4,9)=y2r(3:@{j}-2-2,1);
Xr(1:@{j}-2-4,10)=y3r(3:@{j}-2-2,1);
Xr(1:@{j}-2-4,11)=y4r(3:@{j}-2-2,1);
Xr(1:@{j}-2-4,12)=y5r(3:@{j}-2-2,1);
Xr(1:@{j}-2-4,13)=y6r(3:@{j}-2-2,1);


% de la colonne 14 à 19
Xr(1:@{j}-2-4,14)=y1r(2:@{j}-2-3,1);
Xr(1:@{j}-2-4,15)=y2r(2:@{j}-2-3,1);
Xr(1:@{j}-2-4,16)=y3r(2:@{j}-2-3,1);
Xr(1:@{j}-2-4,17)=y4r(2:@{j}-2-3,1);
Xr(1:@{j}-2-4,18)=y5r(2:@{j}-2-3,1);
Xr(1:@{j}-2-4,19)=y6r(2:@{j}-2-3,1);


% de la colonne 20 à 25
Xr(1:@{j}-2-4,20)=y1r(1:@{j}-2-4,1);
Xr(1:@{j}-2-4,21)=y2r(1:@{j}-2-4,1);
Xr(1:@{j}-2-4,22)=y3r(1:@{j}-2-4,1);
Xr(1:@{j}-2-4,23)=y4r(1:@{j}-2-4,1);
Xr(1:@{j}-2-4,24)=y5r(1:@{j}-2-4,1);
Xr(1:@{j}-2-4,25)=y6r(1:@{j}-2-4,1);


% La formule ciblée: l'estimateur à postériori.
B=inv(Xr'*Xr+ Xa'*Xa)*(Xr'*Yr+Xa'*Ya);

% La matrice des constants, B0:
B0= B(1,1:6)';

% La matrice des coefficients associés au retard (1), B1:
B1= B(2:7,1:6)';

% La matrice des coefficients associés au retard (2), B2:
B2= B(8:13,1:6)';

% La matrice des coefficients associés au retard (3), B3:
B3= B(14:19,1:6)';

% La matrice des coefficients associés au retard (4), B4:
B4= B(20:25,1:6)';


                  %%% La seconde section: La prévision hors-échantillon %%%

y= zeros(6,@{j});

y(1,1:@{j})=dlY(1:@{j},1)';
y(2,1:@{j})=dlC(1:@{j},1)';
y(3,1:@{j})=dlI(1:@{j},1)';
y(4,1:@{j})=INFL(1:@{j},1)';
y(5,1:@{j})=Fed(1:@{j},1)';
y(6,1:@{j})=dlL(1:@{j},1)';


% Matrice de prévision

F1y= zeros(6,1);

F2y= zeros(6,1);

% Matrice d'erreurs de prévision
Fe=zeros(6,1);



F1y= B0 + B1*y(1:6,@{j}-2) + B2*y(1:6,@{j}-3) + B3*y(1:6,@{j}-4) + B4*y(1:6,@{j}-5);

F2y= B0 + B1*F1y + B2*y(1:6,@{j}-2) + B3*y(1:6,@{j}-3) + B4*y(1:6,@{j}-4);

Fe= y(1:6,@{j})- F2y;


MSFE1= MSFE1 +  Fe(1,1)*Fe(1,1);
MSFE2= MSFE2 +  Fe(2,1)*Fe(2,1);
MSFE3= MSFE3 +  Fe(3,1)*Fe(3,1);
MSFE4= MSFE4 +  Fe(4,1)*Fe(4,1);
MSFE5= MSFE5 +  Fe(5,1)*Fe(5,1);
MSFE6= MSFE6 +  Fe(6,1)*Fe(6,1);

@# endfor


RMSFE1= 1000*sqrt(MSFE1/(@{m}-38));
RMSFE2= 1000*sqrt(MSFE2/(@{m}-38));
RMSFE3= 1000*sqrt(MSFE3/(@{m}-38));
RMSFE4= 1000*sqrt(MSFE4/(@{m}-38));
RMSFE5= 1000*sqrt(MSFE5/(@{m}-38));
RMSFE6= 1000*sqrt(MSFE6/(@{m}-38));
















































































































