Description des données

Dans cette étude, nous utiliserons différents modèles GARCH paramétriques pour modéliser la volatilité des rendements du bitcoin. Les données utilisées sont le cours de clôture du Bitcoin car il réflète toutes les activités du Bitcoin pour chaque jour de bourse. Le cours de clôture journalier historique du bitcoin a été extrait du 07/11/2018 au 24/03/23 http://finance.yahoo.com.

Notre jeu de données contient 6 variables:
Open (Prix d’ouverture):Il s’agit du prix auquel le Bitcoin a commencé la journée de négociation.

Prix de clôture (Close) : Il représente le prix du Bitcoin à la fin de la journée de négociation.

Prix le plus élevé (High) : Ce chiffre montre le prix le plus élevé atteint par le Bitcoin au cours de la journée.

Prix le plus bas (Low) : C’est le prix le plus bas atteint par le Bitcoin au cours de la journée.

Volume de négociation (Volume) : Cette valeur indique la quantité d’échanges de Bitcoin effectués au cours de la journée. Plus le volume est élevé, plus il y a de liquidité sur le marché.

Etant donné que nous voulons prédire la volatilité des rendements, nous allons créer dans notre dataset une nouvelle colonne contenant les rendements de notre série.

Chargement des bibliothèques

library(dplyr)
library(tseries)
library(e1071) 
library(forecast)
library(rugarch)
#Chargement des données
bitcoin_data <- read.csv("C:\\Users\\Hp\\OneDrive\\Documents\\BTC-USD.csv")

# Étape 2 : Extraction des 1600 premières observations de la colonne "Close"
close_vector <- head(bitcoin_data$Close, 1600)

# Étape 3 : Création de la série temporelle
start_date <- as.Date("2018-11-07")  # Date de début
frequency <- 365  # Fréquence quotidienne

Prix_de_clôture <- ts(close_vector, start = 2018, frequency = 365)


# Calcul du rendement journalier
bitcoin_data <- bitcoin_data %>% 
  mutate(rendement = Close / lag(Close))

rendement_test = head(bitcoin_data$rendement, 1600)

# Afficher les premières lignes pour vérification
head(bitcoin_data)
##         Date    Open    High     Low   Close Adj.Close     Volume rendement
## 1 2018-11-07 6468.50 6552.16 6468.31 6530.14   6530.14 4941260000        NA
## 2 2018-11-08 6522.27 6536.92 6438.53 6453.72   6453.72 4665260000 0.9882974
## 3 2018-11-09 6442.60 6456.46 6373.37 6385.62   6385.62 4346820000 0.9894479
## 4 2018-11-10 6386.13 6437.28 6385.31 6409.22   6409.22 3705320000 1.0036958
## 5 2018-11-11 6413.63 6423.25 6350.17 6411.27   6411.27 3939060000 1.0003198
## 6 2018-11-12 6411.76 6434.21 6360.47 6371.27   6371.27 4295770000 0.9937610
rendement_test= ts(rendement_test, start = 2018, frequency = 365)

Graphique des séries temporelles du prix de clôture et du rendement journalier du bitcoin

En supposant que \(P_t\) et \(P_{t-1}\) représentent respectivement le prix du jour en cours et le prix du jour précedent de Bitcoin, nous avons obtenu la série de rendement \((R_t)\) comme suit:

\[ R_t = \dfrac{P_t}{P_{t-1}} \]

Statistiques descriptives de la série de rendements Bitcoin

summary(rendement_test)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  0.6283  0.9854  1.0009  1.0016  1.0177  1.1875       1
rendement_test= na.omit(rendement_test)
skewness(rendement_test, na.rm = TRUE)
## [1] -0.3918655
kurtosis(rendement_test, na.rm = TRUE)
## [1] 8.627542
sd(rendement_test, na.rm = TRUE)
## [1] 0.03749489
result_test <- jarque.bera.test(rendement_test)
result_test
## 
##  Jarque Bera Test
## 
## data:  rendement_test
## X-squared = 5016.9, df = 2, p-value < 2.2e-16

Le tableau suivant regroupe les différentes statistiques obtenues

Moyenne Min Max Sd Skew Kurt JB
1.0009 0.6283 1.1875 0.03749 -0.39186 8.6275 5016.9

Nous avons également effectué le test de normalité Jarque-Bera dont la statistique est calculée comme suit

\[JB = T. \left( \dfrac{skew^2}{6}+ \dfrac{(kurt -3)^2}{24}\right)\] où T est la taille de l’échantillon sont respectivement l’asymétrie et l’aplatissement de l’échantillon. Sous l’hypothèse nulle les données suivent la loi normale, JB est distribuée asymptotiquement en chi carré avec 2 degrés de liberté.

  1. Nous avons obtenu pour le test de Jarque-Bera une p-value \(p<2.2e-16\) . Nous rejettons donc l’hypothèse nulle de normalité des données (rendements).

  2. La valeur négative (-0.39186) de l’asymétrie indique que la série des rendements du bitcoin est négativement asymétrique, ce qui voudra dire que la distribution des séries de rendements Bitcoin est asymétrique vers la gauche.

L’aplatissement est égale à 8.6275 , une valeur supérieure à 3 nous indiquant que la distribution des rendements Bitcoin est leptokurtique.

Histogramme et qqplot de la série des rendements

hist(rendement_test, main = "Histogramme des rendements", xlab = "rendement")

qqnorm(rendement_test)
qqline(rendement_test)

Test ARCH

L’application du modèle GARCH exige la présence de variance conditionnelle. Nous allons donc effectuer différents tests pour prouver l’applicabilité du modèle GARCH sur nos rendements. Ces différents tests regroupent la présence d’effets de stationnarité et d’ hétéroscédasticité conditionnel auto-regressif (ARCH).

Test de Ljung box

ljung_box_test <- Box.test(rendement_test, type = "Ljung-Box")
ljung_box_test
## 
##  Box-Ljung test
## 
## data:  rendement_test
## X-squared = 3.845, df = 1, p-value = 0.0499

Ce test est utilisé pour tester la présence d’effets ARCH dans les données . L’hypothèse nulle d’absence d’autocorrélation sera rejetée au niveau de signification 5%. Ce qui voudra dire qu’il existe une dépendance dans la série de rendements du Bitcoin. Les résultats de ce test nous permettent déjà de conclure que l’effet ARCH de la volatilité est très présent dans la série de rendement.

Test Augmented Dickey Fuller(ADF)

adf.test(rendement_test)
## Warning in adf.test(rendement_test): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  rendement_test
## Dickey-Fuller = -11.212, Lag order = 11, p-value = 0.01
## alternative hypothesis: stationary

Il est utilisé pour tester la stationnarité . La p-value obtenue à l’issue de ce test est \(p=0.01 < 0.05\) . On rejette donc l’hypothèse nulle de non stationnarité. Par conséquent il n’est pas nécessaire de différentier les séries de rendement.

Avec la fonction checkresiduals de la bibliothèque forecast nous allons vérifier graphiquement les résultats de nos tests précédents

checkresiduals(rendement_test)

## 
##  Ljung-Box test
## 
## data:  Residuals
## Q* = 307.1, df = 320, p-value = 0.6881
## 
## Model df: 0.   Total lags used: 320

Il ressort des différents graphiques que les résidus issus des rendements du Bitcoin ont une distribution non normale, sont stationnaires et présentent des autocorrélation.

Au vu de ces résultats on peut donc utiliser les modèles GARCH pour modéliser les données des séries des rendements du bitcoin.

Estimation avec les modèles GARCH

Les statistiques descriptives des données indiquent qu’un modèle approprié de volatilité des rendements Bitcoin devrait tenir compte de sa nature variable dans le temps et de l’écart par rapport à la normalité dans la distribution des rendements Bitcoin. Toutes les estimations et les calculs sont effectués dans R Statistical Environment (R, 2008) en utilisant le package R “rugarch” développé par et Ghalanos (2013) le package R “KernSmooth” développé par Wand et Ripley (2007). Les modèles paramétriques GARCH sont estimés avec la méthode du quasi-maximum de vraisemblance de Bollerslev et Wooldridge (1992) qui donne des erreurs-types robustes.

Modèle GARCH

Le modèle GARCH (Generalized Autoregressive Conditional Heteroskedasticity) est une méthode couramment utilisée pour modéliser la volatilité des séries chronologiques financières. Il a été introduit par Tim Bollerslev en 1986. L’idée centrale derrière le modèle GARCH est de capturer l’hétéroscédasticité conditionnelle, c’est-à-dire la variation conditionnelle de la volatilité dans le temps.

La formule générale du modèle GARCH est la suivante :

\[ \sigma_t^2 = \omega + \alpha_1 \varepsilon_{t-1}^2 + \beta_1 \sigma_{t-1}^2 \]

où :

- \( \sigma_t^2 \) est la variance conditionnelle de la période \( t \).

- \( \omega \) est la constante.

- \( \alpha_1 \) est le coefficient associé à la volatilité au carré à la période précédente (\( \varepsilon_{t-1}^2 \)).

- \( \beta_1 \) est le coefficient associé à la variance conditionnelle à la période précédente (\( \sigma_{t-1}^2 \)).

Dans cette formule, \( \varepsilon_{t-1}^2 \) représente l’erreur au carré à la période précédente, qui est la différence entre la valeur observée à la période précédente et la valeur attendue à la période précédente. Ainsi, le modèle GARCH prend en compte les erreurs passées pour estimer la volatilité future.

Le terme \( \omega \) est souvent appelé terme constant ou drift, et il représente la moyenne de la variance conditionnelle. Les termes \( \alpha_1 \) et \( \beta_1 \) sont les paramètres du modèle qui sont estimés à partir des données.

Le modèle GARCH est souvent étendu pour inclure plus de termes, par exemple en utilisant des ordres plus élevés (GARCH(p, q)), pour mieux capturer la complexité de la structure de volatilité. Ces modèles sont largement utilisés dans la modélisation financière et l’analyse des séries chronologiques financières.

Specification du modèle GARCH(1,1)

garch_spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
                         mean.model = list(armaOrder = c(0, 0)))

# Adaptation du modèle aux données 
garch_fit <- ugarchfit(spec = garch_spec, data = rendement_test)

# Affichage d'un résumé du modèle ajusté
show(garch_fit)
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : sGARCH(1,1)
## Mean Model   : ARFIMA(0,0,0)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error   t value Pr(>|t|)
## mu      1.002142    0.000880 1138.5154    0e+00
## omega   0.000120    0.000027    4.4646    8e-06
## alpha1  0.077363    0.016825    4.5981    4e-06
## beta1   0.840111    0.029097   28.8731    0e+00
## 
## Robust Standard Errors:
##         Estimate  Std. Error   t value Pr(>|t|)
## mu      1.002142    0.000897 1117.2551 0.000000
## omega   0.000120    0.000048    2.5202 0.011727
## alpha1  0.077363    0.031221    2.4779 0.013216
## beta1   0.840111    0.045872   18.3141 0.000000
## 
## LogLikelihood : 3031.533 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -3.7868
## Bayes        -3.7733
## Shibata      -3.7868
## Hannan-Quinn -3.7818
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.07858  0.7792
## Lag[2*(p+q)+(p+q)-1][2]   0.54551  0.6726
## Lag[4*(p+q)+(p+q)-1][5]   2.37938  0.5319
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.02159  0.8832
## Lag[2*(p+q)+(p+q)-1][5]   1.56675  0.7235
## Lag[4*(p+q)+(p+q)-1][9]   2.80953  0.7900
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.8247 0.500 2.000  0.3638
## ARCH Lag[5]    2.6377 1.440 1.667  0.3468
## ARCH Lag[7]    3.3186 2.315 1.543  0.4555
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  0.8177
## Individual Statistics:              
## mu     0.21949
## omega  0.13507
## alpha1 0.08536
## beta1  0.13857
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.07 1.24 1.6
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias          0.49604 0.6199    
## Negative Sign Bias 0.02478 0.9802    
## Positive Sign Bias 0.58591 0.5580    
## Joint Effect       1.52053 0.6775    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     223.0    8.615e-37
## 2    30     247.4    1.600e-36
## 3    40     259.1    2.716e-34
## 4    50     300.3    8.232e-38
## 
## 
## Elapsed time : 0.264796

Modèle TGARCH

Le modèle TGARCH (Threshold GARCH) est une extension du modèle GARCH qui introduit la notion de seuil dans la modélisation de la volatilité. Le modèle TGARCH permet à la volatilité de varier en fonction de certains seuils ou conditions spécifiques. La formule générale du modèle TGARCH inclut une fonction de seuil qui conditionne la volatilité en fonction de la réalisation d’un certain événement. Voici la formule générale du modèle TGARCH :

\[ \sigma_t^2 = \omega + \alpha_1 \varepsilon_{t-1}^2 + \beta_1 \sigma_{t-1}^2 + \gamma_1 I_{t-1} \varepsilon_{t-1}^2 + \delta_1 I_{t-1} \sigma_{t-1}^2 \]

où :

- \( \sigma_t^2 \) est la variance conditionnelle de la période \( t \).

- \( \omega \) est la constante.

- \( \alpha_1 \) est le coefficient associé à la volatilité au carré à la période précédente (\( \varepsilon_{t-1}^2 \)).

- \( \beta_1 \) est le coefficient associé à la variance conditionnelle à la période précédente (\( \sigma_{t-1}^2 \)).

- \( \gamma_1 \) est le coefficient associé à l’interaction entre l’erreur au carré à la période précédente et une variable indicatrice (\( I_{t-1} \)) qui prend la valeur de 1 si une condition seuil est satisfaite à la période précédente, et 0 sinon.

- \( \delta_1 \) est le coefficient associé à l’interaction entre la variance conditionnelle à la période précédente et la variable indicatrice.

La variable indicatrice \( I_{t-1} \) est définie en fonction de la réalisation d’un événement seuil spécifique à la période \( t-1 \). Cette fonction de seuil permet au modèle de réagir de manière différente en fonction des conditions du marché, capturant ainsi des changements brusques de volatilité.

Comme pour le modèle GARCH, les coefficients \( \omega, \alpha_1, \beta_1, \gamma_1, \) et \( \delta_1 \) sont estimés à partir des données. Le modèle TGARCH offre une flexibilité supplémentaire pour capturer des modèles de volatilité plus complexes qui peuvent varier en fonction de certains événements ou conditions du marché.

Spécification du modèle TGARCH(1,1)

tgarch_spec <- ugarchspec(variance.model = list(model = "fGARCH", submodel = "TGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(0, 0)))

tgarch_fit <- ugarchfit(spec = tgarch_spec, data = rendement_test)

# Affichage d'un résumé du modèle ajusté
show(tgarch_fit)
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : fGARCH(1,1)
## fGARCH Sub-Model : TGARCH
## Mean Model   : ARFIMA(0,0,0)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error   t value Pr(>|t|)
## mu      1.001381    0.000890 1125.3678  0.0e+00
## omega   0.003814    0.000819    4.6546  3.0e-06
## alpha1  0.096597    0.016696    5.7856  0.0e+00
## beta1   0.830730    0.029550   28.1126  0.0e+00
## eta11   0.406372    0.097178    4.1817  2.9e-05
## 
## Robust Standard Errors:
##         Estimate  Std. Error   t value Pr(>|t|)
## mu      1.001381    0.000962 1040.9479 0.000000
## omega   0.003814    0.001424    2.6789 0.007385
## alpha1  0.096597    0.027187    3.5530 0.000381
## beta1   0.830730    0.045568   18.2303 0.000000
## eta11   0.406372    0.252239    1.6111 0.107166
## 
## LogLikelihood : 3039.645 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -3.7957
## Bayes        -3.7789
## Shibata      -3.7957
## Hannan-Quinn -3.7894
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.06862  0.7934
## Lag[2*(p+q)+(p+q)-1][2]   0.72929  0.5950
## Lag[4*(p+q)+(p+q)-1][5]   2.60566  0.4838
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                   0.005613  0.9403
## Lag[2*(p+q)+(p+q)-1][5]  1.200715  0.8128
## Lag[4*(p+q)+(p+q)-1][9]  2.737841  0.8013
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.6583 0.500 2.000  0.4172
## ARCH Lag[5]    2.1169 1.440 1.667  0.4460
## ARCH Lag[7]    3.3752 2.315 1.543  0.4456
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  1.0388
## Individual Statistics:             
## mu     0.2832
## omega  0.2542
## alpha1 0.1921
## beta1  0.2451
## eta11  0.0947
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.28 1.47 1.88
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                     t-value   prob sig
## Sign Bias          0.004425 0.9965    
## Negative Sign Bias 0.084156 0.9329    
## Positive Sign Bias 0.492070 0.6227    
## Joint Effect       0.323811 0.9555    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     221.3    1.913e-36
## 2    30     237.7    1.227e-34
## 3    40     266.8    9.867e-36
## 4    50     265.8    1.499e-31
## 
## 
## Elapsed time : 0.549051

Interprétation

D’après les résultats du modèle GARCH(1,1) spécifié avec une distribution normale et une sous-modélisation TGARCH, voici quelques points clés à noter :

Paramètres optimaux

- \(\mu\) (terme de moyenne) : L’estimation est de 1.001381 avec une erreur standard de 0.000890, ce qui suggère que la moyenne des rendements est d’environ 1.001381.

- \(\omega\) (terme de variance constante) : L’estimation est de 0.003814 avec une erreur standard de 0.000819, indiquant que la composante constante de la variance est d’environ 0.003814.

- \(\alpha_1\) (coefficient de l’ARCH) : L’estimation est de 0.096597 avec une erreur standard de 0.016696, suggérant une ARCH relativement faible.

- \(\beta_1\) (coefficient GARCH) : L’estimation est de 0.830730 avec une erreur standard de 0.029550, indiquant un effet GARCH plus prononcé. Les erreurs standard robustes sont légèrement plus élevées.

- \(\eta_{11}\) (paramètre du modèle TGARCH) : L’estimation est de 0.406372 avec une erreur standard de 0.097178. Les erreurs standard robustes sont plus élevées, mais il n’est pas possible de conclure si ce coefficient est significatif.

Tests de Diagnostic :

- Les tests de Ljung-Box sur les résidus standardisés ne montrent pas de preuves de corrélation sérielle significative pour les délais 1, 2, et 4. Cela suggère que les résidus standardisés semblent être indépendants.

- Les tests de Ljung-Box sur les carrés des résidus standardisés indiquent également l’absence de corrélation sérielle significative pour les délais 1, 5 et 9.

- Les tests de l’ARCH ne montrent pas de signes significatifs d’autocorrélation conditionnelle.

- Le test de stabilité de Nyblom suggère que les coefficients du modèle semblent stables.

- Le test de signes ne montre pas de biais significatif dans les résidus standardisés.

Globalement, les estimations des coefficients du modèle semblent relativement stables, bien que les erreurs standard robustes soient légèrement plus élevées que les erreurs standard classiques pour certains coefficients. Les tests de diagnostic suggèrent que le modèle semble bien capturer les caractéristiques de la série temporelle. Cependant, il est toujours important de considérer d’autres modèles et de vérifier la validité des hypothèses sous-jacentes au modèle GARCH.

Modèle EGARCH

Le modèle EGARCH (Exponential GARCH) est une autre extension du modèle GARCH qui permet de modéliser la volatilité des séries chronologiques financières. La principale différence réside dans la façon dont l’EGARCH capture l’asymétrie dans la réponse de la volatilité aux chocs positifs et négatifs. Contrairement au modèle GARCH, l’EGARCH permet aux chocs positifs et négatifs d’avoir un impact différent sur la volatilité conditionnelle.

La formule générale du modèle EGARCH est la suivante :

\[ \log(\sigma_t^2) = \omega + \sum_{i=1}^{q}\alpha_i|z_{t-i}| + \sum_{j=1}^{p}\beta_j\log(\sigma_{t-j}^2) \]

où :

- \( \sigma_t^2 \) est la variance conditionnelle de la période \( t \).

- \( \omega \) est la constante.

- \( \alpha_i \) sont les coefficients associés aux chocs \( z_{t-i} \) (résidus standardisés) des périodes précédentes, et \( |z_{t-i}| \) représente la valeur absolue de ces chocs.

- \( \beta_j \) sont les coefficients associés aux log-transformées des variances conditionnelles des périodes précédentes (\( \log(\sigma_{t-j}^2) \)).

L’EGARCH permet de capturer l’asymétrie dans la réponse de la volatilité aux chocs. Si \( \alpha_i \) est significativement différent de zéro, cela indique que les chocs positifs ont un impact différent sur la volatilité que les chocs négatifs. En d’autres termes, une augmentation de la volatilité due à un choc positif peut être différente de celle due à un choc négatif de même magnitude.

Comme pour le modèle GARCH, les coefficients \( \omega, \alpha_i, \) et \( \beta_j \) sont estimés à partir des données. L’EGARCH est souvent utilisé pour modéliser les données financières en raison de sa capacité à capturer l’asymétrie dans la volatilité conditionnelle.

Spécification du modèle EGARCH(1,1)

# Spécification du modèle EGARCH(1,1) avec ugarchspec
egarch_spec <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1)),
                          mean.model = list(armaOrder = c(0, 0)))

egarch_fit <- ugarchfit(spec = egarch_spec, data = rendement_test)

# Affichage d'un résumé du modèle ajusté
show(egarch_fit)
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : eGARCH(1,1)
## Mean Model   : ARFIMA(0,0,0)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error   t value Pr(>|t|)
## mu      1.001385    0.000998 1003.5424 0.000000
## omega  -0.647136    0.167830   -3.8559 0.000115
## alpha1 -0.066682    0.019988   -3.3362 0.000849
## beta1   0.899340    0.025707   34.9843 0.000000
## gamma1  0.173479    0.030607    5.6680 0.000000
## 
## Robust Standard Errors:
##         Estimate  Std. Error  t value Pr(>|t|)
## mu      1.001385    0.001433 698.6420 0.000000
## omega  -0.647136    0.355931  -1.8181 0.069042
## alpha1 -0.066682    0.046437  -1.4360 0.151008
## beta1   0.899340    0.054444  16.5186 0.000000
## gamma1  0.173479    0.055050   3.1513 0.001625
## 
## LogLikelihood : 3040.573 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -3.7968
## Bayes        -3.7800
## Shibata      -3.7969
## Hannan-Quinn -3.7906
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                     0.1210   0.728
## Lag[2*(p+q)+(p+q)-1][2]    0.7141   0.601
## Lag[4*(p+q)+(p+q)-1][5]    2.4805   0.510
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.01122  0.9156
## Lag[2*(p+q)+(p+q)-1][5]   1.19882  0.8133
## Lag[4*(p+q)+(p+q)-1][9]   2.56603  0.8279
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.6939 0.500 2.000  0.4048
## ARCH Lag[5]    2.0800 1.440 1.667  0.4538
## ARCH Lag[7]    3.1356 2.315 1.543  0.4883
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  1.0273
## Individual Statistics:              
## mu     0.28369
## omega  0.24864
## alpha1 0.08566
## beta1  0.24737
## gamma1 0.14365
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.28 1.47 1.88
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias          0.01892 0.9849    
## Negative Sign Bias 0.12339 0.9018    
## Positive Sign Bias 0.47042 0.6381    
## Joint Effect       0.30734 0.9586    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     221.7    1.608e-36
## 2    30     240.9    2.928e-35
## 3    40     265.4    1.844e-35
## 4    50     266.6    1.072e-31
## 
## 
## Elapsed time : 0.2435629

Interprétation

Ces résultats sont liés à un modèle GARCH(1,1) spécifié avec une distribution normale et une forme E-GARCH. Voici les points saillants :

Paramètres Optimaux :

- \( \mu \) (terme de moyenne) : L’estimation est de 1.001385 avec une erreur standard de 0.000998, ce qui suggère que la moyenne des rendements est d’environ 1.001385. Les erreurs standard robustes sont également plus élevées.

- \( \omega \) (terme de variance constante) : L’estimation est de -0.647136 avec une erreur standard de 0.167830, indiquant une variance constante négative. Cependant, l’erreur standard robuste suggère un écart-type encore plus élevé pour cette estimation.

- \( \alpha1 \) (coefficient E-GARCH) : L’estimation est de -0.066682 avec une erreur standard de 0.019988, suggérant une valeur négative pour le coefficient. L’erreur standard robuste est également plus élevée.

- \( \beta1 \) (coefficient GARCH) : L’estimation est de 0.899340 avec une erreur standard de 0.025707, indiquant un effet GARCH significatif. Les erreurs standard robustes sont légèrement plus élevées.

- \( \gamma1 \) : L’estimation est de 0.173479 avec une erreur standard de 0.030607, montrant un effet significatif. Les erreurs standard robustes sont plus élevées mais restent significatives.

Tests de Diagnostic :

- Les tests de Ljung-Box sur les résidus standardisés ne montrent pas de preuves de corrélation sérielle significative pour les délais 1, 2, et 4. Cela suggère que les résidus standardisés semblent être indépendants.

- Les tests de Ljung-Box sur les carrés des résidus standardisés indiquent également l’absence de corrélation série significative pour les délais 1, 5 et 9.

- Les tests de l’ARCH ne montrent pas de signes significatifs d’autocorrélation conditionnelle.

- Le test de stabilité de Nyblom suggère que les coefficients du modèle semblent stables.

- Le test de signes ne montre pas de biais significatif dans les résidus standardisés.

Conclusion :

Globalement, ce modèle eGARCH(1,1) semble fournir une bonne adéquation avec les données, avec des paramètres significatifs. Il s’agit d’un modèle asymétrique, indiquant que les chocs positifs et négatifs entraînent différemment la variabilité, et les tests de diagnostic valident en grande partie l’adéquation du modèle aux données confidentielles.

Modèle GJR-GARCH

Le modèle GJR-GARCH (Generalized Jump Robust GARCH) est une autre extension du modèle GARCH qui permet de modéliser la volatilité des séries chronologiques financières. Il a été développé pour mieux capturer l’impact des “sauts” ou des événements extrêmes sur la volatilité conditionnelle. La spécificité du GJR-GARCH est qu’il inclut un terme asymétrique pour représenter l’impact différent des chocs positifs et négatifs.

La formule générale du modèle GJR-GARCH est la suivante :

\[ \sigma_t^2 = \omega + \sum_{i=1}^{q}(\alpha_i + \gamma_i I_{t-i})\varepsilon_{t-i}^2 + \sum_{j=1}^{p}\beta_j\sigma_{t-j}^2 \]

où :

- \( \sigma_t^2 \) est la variance conditionnelle de la période \( t \).

- \( \omega \) est la constante.

- \( \alpha_i \) sont les coefficients associés aux chocs \( \varepsilon_{t-i}^2 \) (résidus standardisés) des périodes précédentes.

- \( \gamma_i \) sont les coefficients associés à l’interaction entre les chocs \( \varepsilon_{t-i}^2 \) et une variable indicatrice \( I_{t-i} \) qui prend la valeur de 1 si \( \varepsilon_{t-i} \) est négatif et 0 sinon. Cela capture l’asymétrie dans la réponse de la volatilité aux chocs.

- \( \beta_j \) sont les coefficients associés aux variances conditionnelles des périodes précédentes (\( \sigma_{t-j}^2 \)).

Comme dans les autres modèles GARCH, les coefficients \( \omega, \alpha_i, \gamma_i, \) et \( \beta_j \) sont estimés à partir des données. Le terme \( I_{t-i} \) permet au modèle de réagir de manière différente en fonction de la direction du choc (positif ou négatif).

Le GJR-GARCH est utilisé lorsque l’on s’attend à ce que les chocs négatifs aient un impact différent sur la volatilité par rapport aux chocs positifs. Cela le rend particulièrement utile pour modéliser les marchés financiers où les événements extrêmes peuvent avoir des conséquences différentes sur la volatilité.

Spécification du modèle GJR-GARCH(1,1)

# Spécifier le modèle GJR-GARCH
spec <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(0, 0)))

# Ajuster le modèle GJR-GARCH
gjr_fit <- ugarchfit(spec, data = rendement_test, solver = "hybrid")

# Afficher un résumé du modèle ajusté
show(gjr_fit)
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : gjrGARCH(1,1)
## Mean Model   : ARFIMA(0,0,0)
## Distribution : norm 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error   t value Pr(>|t|)
## mu      1.001669    0.000874 1146.6908 0.000000
## omega   0.000151    0.000038    3.9794 0.000069
## alpha1  0.038608    0.014395    2.6821 0.007316
## beta1   0.805047    0.038311   21.0133 0.000000
## gamma1  0.110257    0.034178    3.2260 0.001255
## 
## Robust Standard Errors:
##         Estimate  Std. Error   t value Pr(>|t|)
## mu      1.001669    0.000914 1095.9988 0.000000
## omega   0.000151    0.000080    1.8876 0.059079
## alpha1  0.038608    0.029301    1.3176 0.187625
## beta1   0.805047    0.073998   10.8793 0.000000
## gamma1  0.110257    0.083824    1.3154 0.188392
## 
## LogLikelihood : 3041.679 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -3.7982
## Bayes        -3.7814
## Shibata      -3.7982
## Hannan-Quinn -3.7920
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                     0.2704  0.6031
## Lag[2*(p+q)+(p+q)-1][2]    0.8191  0.5608
## Lag[4*(p+q)+(p+q)-1][5]    2.4730  0.5116
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                    0.08696  0.7681
## Lag[2*(p+q)+(p+q)-1][5]   1.78730  0.6695
## Lag[4*(p+q)+(p+q)-1][9]   2.83287  0.7862
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.9474 0.500 2.000  0.3304
## ARCH Lag[5]    2.8940 1.440 1.667  0.3055
## ARCH Lag[7]    3.2746 2.315 1.543  0.4633
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  0.9098
## Individual Statistics:              
## mu     0.26799
## omega  0.22195
## alpha1 0.19012
## beta1  0.21586
## gamma1 0.08464
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          1.28 1.47 1.88
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value   prob sig
## Sign Bias           0.6430 0.5203    
## Negative Sign Bias  0.5171 0.6051    
## Positive Sign Bias  0.1965 0.8443    
## Joint Effect        0.7758 0.8553    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     217.1    1.316e-35
## 2    30     238.2    9.885e-35
## 3    40     265.6    1.656e-35
## 4    50     273.5    6.064e-33
## 
## 
## Elapsed time : 0.503839

Interprétation

Ces résultats montrent les estimations du modèle GJR-GARCH(1,1) pour la série temporelle de rendements. Voici une interprétation des résultats :

### Paramètres Optimaux :

- \( \mu \) (terme de moyenne) : Estimation de 1.001669 avec une erreur standard de 0.000874, indiquant une moyenne des rendements d’environ 1.001669.

- \( \omega \) (terme de variance constante) : L’estimation est de 0.000151 avec une erreur standard de 0.000038. Cela représente la composante constante de la variance.

- \( \alpha1 \) (coefficient de l’ARCH) : Estimation de 0.038608 avec une erreur standard de 0.014395, montrant un effet significatif de la volatilité passée sur la volatilité actuelle.

- \( \beta1 \) (coefficient GARCH) : L’estimation est de 0.805047 avec une erreur standard de 0.038311, indiquant un effet significatif de la variance passée sur la variance actuelle.

- \( \gamma1 \) : Estimation de 0.110257 avec une erreur standard de 0.034178, montrant un effet significatif de la volatilité passée sur la variance actuelle.

### Tests de Diagnostic :

- Les tests de Ljung-Box sur les résidus standardisés ne montrent pas de preuves de corrélation série significative pour les délais 1, 2 et 4.

- Les tests de Ljung-Box sur les carrés des résidus standardisés ne montrent pas de corrélation série significative pour les délais 1, 5 et 9.

- Les tests de l’ARCH ne montrent pas de signes significatifs d’autocorrélation conditionnelle.

- Le test de stabilité de Nyblom indique que les coefficients du modèle semblent stables.

### Signification Statistique :

- Les erreurs standard robustes sont légèrement plus élevées que les erreurs standard classiques, mais dans l’ensemble, les coefficients restent significatifs.

### Graphique de Volatilité :

- Le graphique de volatilité montre comment la volatilité estimée varie au fil du temps.

### Conclusion :

Dans l’ensemble, le modèle GJR-GARCH semble bien ajusté aux données, avec des paramètres significatifs et des diagnostics indiquant une bonne adéquation. La volatilité conditionnelle est modélisée de manière asymétrique, ce qui peut être interprété comme une réaction différente aux chocs positifs et négatifs.

Graphiques de volatilité

# Extraire les valeurs de volatilité estimées du modèle GARCH(1,1)
volatility <- sigma(garch_fit)
# Tracer le graphique de volatilité
plot(volatility, type = "l", col = "blue", xlab = "Année", ylab = "Volatilité", main = "Graphique de Volatilité du Modèle GARCH(1,1)")

# Calculer les résidus du modèle GARCH(1,1)
residuals <- residuals(garch_fit)

# Tracer les résidus par rapport aux valeurs ajustées (fitted)
plot(residuals, type = "l", col = "green", xlab = "Temps", ylab = "Résidus", main = "Graphique des Résidus du Modèle GARCH(1,1)")

# Extraire les valeurs de volatilité estimées du modèle TGARCH(1,1)
volatility_tgarch <- sigma(tgarch_fit)

# Tracer le graphique de volatilité
plot(volatility_tgarch, type = "l", col = "blue", xlab = "Temps", ylab = "Volatilité", main = "Graphique de Volatilité du Modèle TGARCH(1,1)")

# Calculer les résidus du modèle TGARCH(1,1)
residuals0 <- residuals(tgarch_fit)

# Tracer les résidus par rapport aux valeurs ajustées (fitted)
plot(residuals0, type = "l", col = "green", xlab = "Temps", ylab = "Résidus", main = "Graphique des Résidus du Modèle TGARCH(1,1)")

# Extraire les valeurs de volatilité estimées du modèle EGARCH(1,1)
volatility_egarch <- sigma(egarch_fit)

# Tracer le graphique de volatilité
plot(volatility_egarch, type = "l", col = "blue", xlab = "Temps", ylab = "Volatilité", main = "Graphique de Volatilité du Modèle EGARCH(1,1)")

# Calculer les résidus du modèle EGARCH(1,1)
residuals1 <- residuals(egarch_fit)

# Tracer les résidus par rapport aux valeurs ajustées (fitted)
plot(residuals1, type = "l", col = "green", xlab = "Temps", ylab = "Résidus", main = "Graphique des Résidus du Modèle EGARCH(1,1)")

# Extraire les valeurs de volatilité estimées du modèle gjr_fit
volatility_gjr <- sigma(gjr_fit)

# Tracer le graphique de volatilité
plot(volatility_gjr, type = "l", col = "blue", xlab = "Temps", ylab = "Volatilité", main = "Graphique de Volatilité du Modèle gjr_fit")

# Calculer les résidus du modèle gjr(1,1)
residuals11 <- residuals(gjr_fit)

# Tracer les résidus par rapport aux valeurs ajustées (fitted)
plot(residuals11, type = "l", col = "green", xlab = "Temps", ylab = "Résidus", main = "Graphique des Résidus du Modèle gjr(1,1)")

Choix des modèles pertinents par critère de sélection

Critères de sélection
Critère GARCH TGARCH EGARCH GJR-GARCH
AIC
-3.7868
-3.7957
-3.7968
-3.7982
BIC
-3.7733
-3.7789
-3.7800
-3.7814
SIC
-3.7868
-3.7957
-3.7969
-3.7982
HQIC
-3.7818
-3.7894
-3.7906
-3.7920

On constate que:

Evaluation des modèles

# Prédire la volatilité
volatility_gjr <- sigma(gjr_fit)

# Générer les rendements simulés  
set.seed(123)
n <- length(rendement_test)
rendement_simulés <- rnorm(n, mean=0, sd=volatility_gjr) 

# Tracer les résultats
plot(rendement_simulés, typ="l", col="black", ylab="Rendements")

plot(rendement_test, col="blue")
legend("topright", legend=c("Valeurs simulées", "Valeurs réelles"), 
       col=c("black","blue"), lty=1)
title("Rendements simulés vs réels")

Les deux courbes ont des tendances similaires mais ne manquent pas de montrer des différences en ce qui concerne leur amplitude de variation.

Mesures d’erreurs

Premier modèle

# Récupération de la volatilité conditionnelle prédite
volatility_gjr <- sigma(gjr_fit)

# Génération de rendements simulés 
set.seed(123)
n <- length(rendement_test)
simulated_returns_gjr <- rnorm(n, mean = 0, sd =volatility_gjr ) 

rmse_gjr= sqrt(mean((simulated_returns_gjr - rendement_test)^2))
mae_gjr = mean(abs(simulated_returns_gjr - rendement_test))

print("Modèle GJR-GARCH ")
## [1] "Modèle GJR-GARCH "
# Afficher les mesures
print(paste("RMSE_GJR =", rmse_gjr)) 
## [1] "RMSE_GJR = 1.0023503991453"
print(paste("MAE_GJR =", mae_gjr))
## [1] "MAE_GJR = 1.00088975878372"

Second modèle

# Prédire la volatilité
volatility_egarch <- sigma(egarch_fit)

# Générer les rendements simulés  
set.seed(123)
n <- length(rendement_test)
simulated_returns_egarch <- rnorm(n, mean=0, sd=volatility_egarch) 

rmse_egarch = sqrt(mean((simulated_returns_egarch - rendement_test)^2))
mae_egarch = mean(abs(simulated_returns_egarch - rendement_test))

print("Modèle EGARCH ")
## [1] "Modèle EGARCH "
print(paste("RMSE_egarch =", rmse_egarch)) 
## [1] "RMSE_egarch = 1.0022761844383"
print(paste("MAE_egarch =", mae_egarch))
## [1] "MAE_egarch = 1.00083549130048"
Critères des deux modèles sélectionnés
Critères EGARCH GJR-GARCH
RMSE
1.0022761844383
1.0023503991453
MAE
1.00083549130048"
1.00088975878372

Analyse :

  • Sur la base des critères d’information, tous les critères indiquent que l’EGARCH est légèrement meilleur que le GJR-GARCH. Les valeurs plus basses des critères (AIC, BIC, SIC, HQIC) pour l’EGARCH suggèrent un meilleur ajustement du modèle aux données.

  • En ce qui concerne les mesures de performance, les différences entre les deux modèles sont minimes. Les valeurs de RMSE et de MAE sont très proches, indiquant une performance similaire en termes de précision des prédictions.

    En résumé, sur la base de ces résultats, l’EGARCH semble être légèrement préférable au GJR-GARCH en termes de critères d’information, bien que les performances des deux modèles soient assez similaires.