Projet Parte 1: Régression linéaire

Nature des Processus

donnees_italy <-data_schularick %>%
  filter(country == "Italy") %>%
  filter(year >= 1960)%>%
  select(year, xrusd, cpi) %>%
  mutate(cpi_growth = c(NA, diff(log(cpi)))*100)%>%
  mutate(xrusd_growth = c(NA, diff(log(xrusd)))*100)%>%
  na.omit()
  
donnees_italy
data_conso <- donnees_italy %>%
  select(year, cpi_growth)

ggplot(data_conso, aes(x=year, y=cpi_growth))+
  geom_line(lwd=1)+
  theme_bw()

On remarque que ni la moyenne, ni la variance ne sont constante dans le temps. On peut émettre l’hypothèse qu’il s’agit peut être d’un processus non stationnaire. D’un point de vue de sa dynamique, la série est très lisse dans le temps

d_i <- donnees_italy %>%
  select(year, xrusd_growth)

ggplot(d_i, aes(x=year, y=xrusd_growth))+
  geom_line(lwd=1)+
  theme_bw()

Pour ce qui en est de la croissance du taux de change avec l’USD, il semblerait que la moyenne est constante dans le temps et est proche de 0 tandis que la variance semble convergé dans le tend.En dehors de celà, on peut observer la forte volatilité de la série, donc des taux changes de la monnaie italiennes avec l’USD.

ggplot(donnees_italy, aes(x=year, y=cpi_growth))+
  geom_line(lwd=1)+
  geom_line(aes(y=xrusd_growth), col="red", lwd=1)+
  labs(y="Prix et taux de change en croissance")+
  theme_bw()

Il est difficile de discerné une tendance générale entre les séries dans le temps sur ce graphique. Peut être un effet de long terme ou retardé dans le temps.

Relation entre inflation et taux de change à l’USD

ggplot(donnees_italy, aes(x=xrusd_growth, y=cpi_growth))+
  geom_point()+
  geom_smooth(method="lm")+
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'

Il semble y avoir une relation positive entre le taux d’inflation et le taux de change avec le dollars.

reg <- feols(cpi_growth ~ xrusd_growth, donnees_italy)
etable(reg)

On confirme les données fournis précédemment, il y a un impact positif et significatif d’une dépréciation de la monnaie vis à vis du dollars sur les prix à la consommation. D’après les coefficient pour une augmentation de l’indice des prix à la consommation d’une unité (un point de pourcentage en l’occurence), le taux d’inflation tend à augmenter de 0.1580 unités (donc 0.16 points de pourcentages).

Mais pour caractériser cette relation il faut vérifier qu’elle ne soit pas biaisée.

Vérification de leurs stationnarités

Autocorrélation respective

reg <- feols(cpi_growth ~ lag(cpi_growth,1), donnees_italy)
etable(reg)
## Warning: The VCOV matrix is not positive semi-definite and was 'fixed' (see
## ?vcov).

On remarque que le résultat de la régression de notre croissance des prix à la consommation est égal à 1, par conséquent les prix à la consommation de la période précédente explique parfaitement les prix à la consommation de la période actuelle, ainsi la série dépend potentiellement du temps ce qui pourrait signaler que la série n’est pas stationnaire, confirmant les données fournis par le précédent graphique.

reg <- feols( xrusd_growth ~ lag(xrusd_growth,1), donnees_italy)
etable(reg)
## Warning: The VCOV matrix is not positive semi-definite and was 'fixed' (see
## ?vcov).

Même chose pour la croissance du taux de change. Le coefficient différent de 0 démontre que la série dépend peut être du temps du temps et que par conséquent elle n’est pas stationnaire mais qu’il y a précense d’autocorrélation.

Inflation

Test de Dickey-Fuller sur la tendance

summary(ur.df(donnees_italy$cpi_growth, type="trend"))
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression trend 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.6297 -1.0433 -0.1317  0.7028  6.8140 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  1.81840    0.84430   2.154   0.0357 *
## z.lag.1     -0.14683    0.06213  -2.363   0.0217 *
## tt          -0.03455    0.01842  -1.876   0.0661 .
## z.diff.lag   0.16481    0.13082   1.260   0.2131  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.988 on 54 degrees of freedom
## Multiple R-squared:  0.1151, Adjusted R-squared:  0.06599 
## F-statistic: 2.342 on 3 and 54 DF,  p-value: 0.08334
## 
## 
## Value of test-statistic is: -2.3634 2.0708 3.0751 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau3 -4.04 -3.45 -3.15
## phi2  6.50  4.88  4.16
## phi3  8.73  6.49  5.47

On repère ici un trend significatif à 10 % mais pas à 5% ce qui parait insuffisant pour qualifier avec une significativité suffisante la stationnarité de la série. On cherche donc s’il existe une constante significative dans la série.

Test de Dickey-Fuller sur la constante

summary(ur.df(donnees_italy$cpi_growth, type="drift"))
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.7990 -1.0108 -0.3512  0.6455  7.1373 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)  0.42102    0.40647   1.036    0.305
## z.lag.1     -0.08592    0.05417  -1.586    0.118
## z.diff.lag   0.16545    0.13378   1.237    0.221
## 
## Residual standard error: 2.033 on 55 degrees of freedom
## Multiple R-squared:  0.05748,    Adjusted R-squared:  0.02321 
## F-statistic: 1.677 on 2 and 55 DF,  p-value: 0.1963
## 
## 
## Value of test-statistic is: -1.5861 1.2876 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.51 -2.89 -2.58
## phi1  6.70  4.71  3.86

Aucun drift n’est détcté dans ce test, donc aucune constante, on vérifie à présent l’autocorrélation de la série.

Test de Dickey-Fuller sur l’autocorrélation

summary(ur.df(donnees_italy$cpi_growth, type="none"))
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression none 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.0401 -0.6835 -0.0937  0.7227  7.2500 
## 
## Coefficients:
##            Estimate Std. Error t value Pr(>|t|)
## z.lag.1    -0.04362    0.03561  -1.225    0.226
## z.diff.lag  0.14135    0.13183   1.072    0.288
## 
## Residual standard error: 2.035 on 56 degrees of freedom
## Multiple R-squared:  0.0402, Adjusted R-squared:  0.005922 
## F-statistic: 1.173 on 2 and 56 DF,  p-value: 0.317
## 
## 
## Value of test-statistic is: -1.2249 
## 
## Critical values for test statistics: 
##      1pct  5pct 10pct
## tau1 -2.6 -1.95 -1.61

Aucune racine unitaire n’est detecté par le test de Dickey-Fuller sans constante, l’autocorrélation significative, et puisque la série n’a pas de trend ni de drift, elle est donc par définition un DS. Elle n’est pas stationnaire, ce qui confirme nos premières hypothèses. Pour la stationarisé, il faut donc la passer en différence.

Différence de l’inflation

Passage en différence

donnees_italy <- donnees_italy %>%
  mutate(dcpi_growth= c(NA, diff(cpi_growth)))%>%
  na.omit()
ggplot(donnees_italy, aes(x=year, y=dcpi_growth))+
  geom_line()+
  labs(title="Croissance du CPI en différence première")+
  theme_bw()

Il semblerait que à présent la série est stationnaire, mais il vaut mieux vérifier.

Test de stationnarité de la série en différence

summary(ur.df(donnees_italy$dcpi_growth, type="none"))
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression none 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.7782 -1.0821 -0.2130  0.3655  6.8307 
## 
## Coefficients:
##            Estimate Std. Error t value Pr(>|t|)    
## z.lag.1     -1.0636     0.1715  -6.202 7.57e-08 ***
## z.diff.lag   0.1898     0.1290   1.471    0.147    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.993 on 55 degrees of freedom
## Multiple R-squared:  0.4807, Adjusted R-squared:  0.4618 
## F-statistic: 25.45 on 2 and 55 DF,  p-value: 1.496e-08
## 
## 
## Value of test-statistic is: -6.2024 
## 
## Critical values for test statistics: 
##      1pct  5pct 10pct
## tau1 -2.6 -1.95 -1.61

Une fois passer en différence la série ne présente plus de racine unitaire, ce qui veut dire qu’elle est à présent stationnaire en niveau et ne dépend plus du temps.Elle est intégré d’ordre 1: I(1).

Taux de change

Test de Dickey-Fuller sur la tendance

summary(ur.df(donnees_italy$xrusd_growth, type="trend"))
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression trend 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -18.650  -6.062  -2.627   5.826  22.082 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.39881    2.89093   1.176   0.2450    
## z.lag.1     -0.90080    0.15951  -5.647 6.55e-07 ***
## tt          -0.06510    0.08351  -0.780   0.4391    
## z.diff.lag   0.25899    0.13355   1.939   0.0578 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 10.33 on 53 degrees of freedom
## Multiple R-squared:  0.3987, Adjusted R-squared:  0.3647 
## F-statistic: 11.71 on 3 and 53 DF,  p-value: 5.347e-06
## 
## 
## Value of test-statistic is: -5.6473 10.6596 15.9832 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau3 -4.04 -3.45 -3.15
## phi2  6.50  4.88  4.16
## phi3  8.73  6.49  5.47

Le test de Dickey-Fuller avec trend ne met pas ici en évidence un trend significatif, on cherche alors la présence d’une constante

Test de Dickey-Fuller sur la constante

summary(ur.df(donnees_italy$xrusd_growth, type="drift"))
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression drift 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -19.587  -5.965  -1.362   5.451  23.078 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.4258     1.3921   1.024   0.3103    
## z.lag.1      -0.8896     0.1583  -5.620 6.87e-07 ***
## z.diff.lag    0.2537     0.1329   1.909   0.0615 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 10.29 on 54 degrees of freedom
## Multiple R-squared:  0.3918, Adjusted R-squared:  0.3693 
## F-statistic: 17.39 on 2 and 54 DF,  p-value: 1.477e-06
## 
## 
## Value of test-statistic is: -5.6203 15.8004 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau2 -3.51 -2.89 -2.58
## phi1  6.70  4.71  3.86

Le test de Dickey-Fuller ne détecte aucun drift.On vérifie ensuite l’autocorrélation de la série.

Test de Dickey-Fuller sur l’autocorrélation

summary(ur.df(donnees_italy$xrusd_growth, type="none"))
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression none 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -18.2789  -4.5381   0.0583   7.0367  24.3125 
## 
## Coefficients:
##            Estimate Std. Error t value Pr(>|t|)    
## z.lag.1     -0.8569     0.1551  -5.525 9.29e-07 ***
## z.diff.lag   0.2377     0.1320   1.800   0.0773 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 10.3 on 55 degrees of freedom
## Multiple R-squared:  0.3801, Adjusted R-squared:  0.3575 
## F-statistic: 16.86 on 2 and 55 DF,  p-value: 1.947e-06
## 
## 
## Value of test-statistic is: -5.5249 
## 
## Critical values for test statistics: 
##      1pct  5pct 10pct
## tau1 -2.6 -1.95 -1.61

Le test de Dickey-Fuller ne détecte aucune autocorrélation significative dans la série puisque sa t-stat est inférieur aux taux critiques. Par définition la série est donc stationnaire en niveaux. Cela confirme les premières que nous avons pu faire avec les graphiques.

Régression linéaire univariée MCO

regression <- feols(dcpi_growth ~ xrusd_growth, data=donnees_italy)
etable(regression)

On voit ici que le coefficient associé à la variation du taux de change avec le dollars américain n’est pas significatif. Lorsque le taux de change se déprécie, le prix des importants augmente mais trop faiblement pour expliqué de manière significative l’inflation. En Italie, l’inflation importé n’explique pas vraiment l’inflation du pays, qui est dû à d’autres facteurs que la dépréciation ou l’appréciation de sa monnaie vis à vis du dollars. Pour confirmer celà, on peut analyser les résidus. On peut toutefois annoter que les variables sont intégrés d’ordre différent ( I(1) pour l’inflation, et I(0) pour le taux de change)

Analyse des résidus

fitted_val <- regression$fitted.values
residuals <- regression$residuals

donnees_italy_2 <- donnees_italy %>%
  cbind(fitted_val)%>%
  cbind(residuals)
ggplot(donnees_italy_2, aes(x=year, y=dcpi_growth))+
  geom_line(lwd=1)+
  geom_line(aes(y=fitted_val), color="red", lty=2, lwd=1)+ 
  theme_bw()

On peut voir que notre modèle, bien qu’il utilise des variables correctement stationnarisées, ne représente par correctement la dynamique de la série. Etant donné que les valeurs ajustés que le modèle a une courbe plate (proche de 0) et ne suit pas du tout les fluctuations de dcpi_growth. Cela suggère que l’effet de xrusd_growth sur dcpi_growth est faible. Donc les variations d’appréciations de la monnaie officielle de l’Italie vis à vis du dollars influe peu sur la croissance des prix, donc l’inflation. La variation du taux de change n’expliqe pas l’inflation italienne. Confirmant notre résultats précédents. Par conséquent, il reste un grand nombre de résidus inexpliqué par la variable taux de change USD sur l’inflation. On peut également voir que les résidus change drastiquement durant les années 80-90, indiquant une potentielle hétéroscédasticité.

Analyse de l’Homoscedasticité

require(lmtest)
## Le chargement a nécessité le package : lmtest
## Warning: le package 'lmtest' a été compilé avec la version R 4.5.2
## Le chargement a nécessité le package : zoo
## 
## Attachement du package : 'zoo'
## Les objets suivants sont masqués depuis 'package:base':
## 
##     as.Date, as.Date.numeric
bptest(dcpi_growth ~ xrusd_growth, data=donnees_italy)
## 
##  studentized Breusch-Pagan test
## 
## data:  dcpi_growth ~ xrusd_growth
## BP = 0.98709, df = 1, p-value = 0.3205

La p-value n’est pas significative, donc pas de preuve d’hétéroscédasticités contrairement à se qu’on pouvait penser avant. La variance des erreurs peut têtre considérés comme constante, on ne peut pas rejeter l’hypothèse que les résidus de la régression sont homoscédastique.

Normalités des résidus

ggplot(donnees_italy_2, aes(residuals))+geom_density(fill="grey60", bounds=c(-Inf, Inf))+theme_bw()

Les résidus sont bien distribués autour de zéro, et la moyenne est très proche de zéro.

shapiro.test(donnees_italy_2$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  donnees_italy_2$residuals
## W = 0.90588, p-value = 0.0002449

Toute fois le test de Shapiro vient contredire la normalité de distribution des résidus.

Indépendance des résidus

Box.test(donnees_italy_2$residuals, lag = 10, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  donnees_italy_2$residuals
## X-squared = 11.257, df = 10, p-value = 0.3379

Selon le test d’indépendance de Box-Ljung, la p-value est supérieur 0.1, elle n’est donc pas significative. On en déduis que les résidus sont indépendants dans le temps et ne sont pas issus des résidus passés.

Overfitting

reg_colin <- feols(dcpi_growth ~ xrusd + lag(dcpi_growth), data= donnees_italy)
etable(reg_colin)
## Warning: The VCOV matrix is not positive semi-definite and was 'fixed' (see
## ?vcov).
fitted_val_colin <- reg_colin$fitted.values
residuals_colin <- reg_colin$residuals

donnees_italy_3 <- donnees_italy %>%
  cbind(fitted_val_colin)%>%
  cbind(residuals_colin)
ggplot(donnees_italy_3, aes(x=year, y=dcpi_growth))+
  geom_line(lwd=1)+
  geom_line(aes(y=fitted_val_colin), color="red", lty=2, lwd=1)+ 
  theme_bw()

Ici, on pouvait essayer d’ajouter une variable pour expliquer notre variable. Mias en réalité il y a un problème de collinéarité car xrusd_growth n’explique pas quasi pas la variable et pas de manière significative, de telle sorte que lag(dcpi_growth) explique tout et cela crée de la collinéarité parfaite dans le modèle. Donc pas d’intérêt à l’utiliser.

Conclusion

Comme la démontré dans les années 1980 Mussa, la hausse de la volatilité des taux de change n’a eu quasiment aucun impact sur l’inflation italienne. La dépréciation de la monnaie n’a pas crée une hausse des prix des importation ni une baisse de manière signification. L’inflation importé ne permet pas d’expliquer l’inflation de l’Italie.