Prédiction de la volatilité d’une entreprise côté à la BRVM : cas de la BOA Bénin

PLAN

Liste des abreviations

Introdution

CHAPITRE 1 : Revue de litterature

1-1 Revue empirique sur la prediction de la volatilité

CHAPITRE 2 : Méthodologie et choix du modèle

2-1- Presentation des modèles

2-2- Données

2-3- Test statistique

CHAPITRE 3 : Resultats et discussions

3-1- Chargement des packages et des données

3-2- Traitement et Exploration du jeu de donnée

3-3- Analyse de la serie temporelle

3-4- Evaluation des modèles

Liste des abréviations

INTRODUCTION

La prévision des mouvements des marchés financiers est une quête cruciale pour les investisseurs et les acteurs du domaine financier. L’analyse des prix des actions, en particulier, est essentielle pour évaluer la volatilité, anticiper les tendances et prendre des décisions éclairées. Dans cet esprit, cette étude se concentre sur la prédiction de la volatilité des prix des actions de la Banque de l’Afrique de l’Ouest pour le Bénin (BOA Bénin), une entreprise cotée à la Bourse Régionale des Valeurs Mobilières (BRVM).

La volatilité des prix des actions représente la mesure des variations et des risques associés aux prix des actions d’une entreprise. Comprendre et modéliser cette volatilité peut apporter une clarté essentielle dans la prise de décision pour les investisseurs et les analystes financiers.

Pour atteindre cet objectif, cette analyse s’appuie sur des outils statistiques et des modèles financiers. Le processus débute par l’acquisition des données historiques des prix de clôture des actions de la BOA Bénin, pour ensuite effectuer une série de tests et d’analyses visant à comprendre la nature de cette série temporelle. Des tests de stationnarité, des modèles ARIMA (Auto-Regressive Integrated Moving Average), et des analyses de résidus permettent de modéliser les fluctuations des prix.

De plus, cette étude exploite des modèles de volatilité conditionnelle tels que GARCH (Generalized Autoregressive Conditional Heteroskedasticity) et ses extensions, tels que TGARCH (Threshold GARCH) et EGARCH (Exponential GARCH), pour prédire la volatilité future des prix des actions. Ces modèles fournissent des informations précieuses sur la dynamique de la volatilité, la tendance des rendements futurs et les éventuels risques associés.

L’objectif final est de fournir une analyse approfondie, des prévisions robustes et des perspectives sur la volatilité des prix des actions de la BOA Bénin, permettant ainsi aux investisseurs et aux décideurs de mieux appréhender les mouvements futurs du marché financier et de prendre des décisions plus informées.

CHAPITRE 1 : Revue de litterature

Revue empirique sur la prediction de la volatilité

CHAPITRE 2 : Méthodologie et choix du modèle

2-1- Presentation des modèles

Modèle ARIMA

Le modèle ARIMA (Autoregressive Integrated Moving Average) permet de prédire une série temporelle en intégrant l’autocorrélation et la moyenne mobile.

La formulation générale est :

\[\begin{equation*} X_{t} = c + \phi_{1}X_{t-1} + ... + \phi_{p}X_{t-p} + \theta_{1}\varepsilon_{t-1} + ... + \theta_{q}\varepsilon_{t-q} \end{equation*}\]

Où :

  • \(X_{t}\) représente la variable à l’instant \(t\)

  • \(c\) est la constante

  • Les termes \(\phi_{1}X_{t-1},...,\phi_{p}X_{t-p}\) captent l’autocorrélation via les valeurs passées d’ordre \(p\)

  • Les termes \(\theta_{1}\varepsilon_{t-1},...,\theta_{q}\varepsilon_{t-q}\) modélisent la moyenne mobile via les erreurs passées d’ordre \(q\)

  • Les \(\varepsilon_{t}\) sont les erreurs ou résidus à chaque période

  • \(p\) définit l’ordre autorégressif, \(q\) l’ordre moyenne mobile

  • Ce modèle ARIMA (autoregressif integrated moving average) permet de prédire une série temporelle en intégrant ses dépendances linéaires internes.

Modèle ARCH

Proposé par Engle en 1982, le modèle ARCH prend en compte l’hétéroscédasticité.

La formulation est :

\[\begin{equation*} \sigma_{t}^{2} = \alpha_{0} + \alpha_{1}\varepsilon_{t-1}^{2} + ... + \alpha_{q}\varepsilon_{t-q}^{2} \end{equation*}\]

Où :

  • \(\sigma_{t}^{2}\) représente la variance conditionnelle à l’instant \(t\)

  • \(\alpha_{0}\) est la constante non conditionnelle

  • \(\alpha_{1}\varepsilon_{t-1}^{2}\) correspond au terme ARCH d’ordre 1, capturant l’impact des erreurs passées

  • De même, \(\alpha_{q}\varepsilon_{t-q}^{2}\) est le terme ARCH d’ordre \(q\)

  • Les \(\alpha_{i}\) mesurent l’influence du passé sur la variance conditionnelle

  • \(q\) définit l’ordre du processus ARCH

Ce modèle ARCH, proposé par Engle en 1982, fut le premier à prendre en compte l’hétéroscédasticité conditionnelle en faisant dépendre explicitement la variance du passé via les carrés des erreurs.

Il s’agit du modèle de base sur lequel les extensions GARCH se sont appuyées pour encore plus de flexibilité.

Modèle GARCH

Généralisation du modèle ARCH par Bollerslev en 1986.

La formulation est :

\[\begin{equation*} \sigma_{t}^{2} = \alpha_{0} + \alpha_{1}\varepsilon_{t-1}^{2}/\sigma_{t-1}^{2} + ... + \alpha_{q}\varepsilon_{t-q}^{2}/\sigma_{t-q}^{2} + \beta_{1}\sigma_{t-1}^{2} + ... + \beta_{p}\sigma_{t-p}^{2} \end{equation*}\]

Où :

  • \(\sigma_{t}^{2}\) est la variance conditionnelle à l’instant \(t\)

  • \(\alpha_{0}\) est la composante constante

  • \(\alpha_{1}\varepsilon_{t-1}^{2}/\sigma_{t-1}^{2}\) correspond à l’impact des erreurs passées

  • \(\beta_{1}\sigma_{t-1}^{2}\) représente la persistance de la volatilité

  • \(q\) est l’ordre ARCH, \(p\) l’ordre GARCH

  • Les erreurs et variances passées sont pondérées par les variances Conditionnelles correspondantes

Contrairement au modèle ARCH où la variance est constante, le modèle GARCH généralisé fait dépendre la variance à la fois des erreurs et des variances passées. Cela lui confère une plus grande flexibilité dans la modélisation de l’hétéroscédasticité conditionnelle.

Modèle EGARCH

Développé par Nelson en 1991, le modèle EGARCH prend en compte l’effet de levier de manière non linéaire.

La formulation est :

\[\begin{equation*} \log(\sigma_{t}^{2}) = \alpha_{0} + \alpha_{1}|z_{t-1}| + \gamma z_{t-1} \end{equation*}\]

Où :

  • \(\sigma_{t}^{2}\) est la variance conditionnelle à l’instant \(t\)

  • \(\alpha_{0}\) est la composante constante

  • \(\alpha_{1}|z_{t-1}|\) capture l’impact des chocs, qu’ils soient positifs ou négatifs

  • \(z_{t-1} = \varepsilon_{t-1}/\sigma_{t-1}\) est le terme d’erreur standardisé à l’instant \(t-1\)

  • Le paramètre \(\gamma\) mesure spécifiquement l’effet de levier, i.e. l’impact différencié des chocs négatifs

Contrairement au modèle GARCH classique, le modèle EGARCH modélise de manière non linéaire l’influence des chocs sur la variance conditionnelle via l’utilisation du logarithme et de la valeur absolue. Cela permet de mieux rendre compte de l’asymétrie engendrée par l’effet de levier.

Modèle TGARCH

Développé par Zakoian en 1994, le modèle TGARCH modélise explicitement l’asymétrie avec un indice binaire sur le signe des erreurs.

La formulation est :

\[\begin{equation*} \sigma_{t}^{2} = \alpha_{0} + \alpha_{1}\varepsilon_{t-1}^{2} + \gamma_{1}\varepsilon_{t-1}I_{t-1} + \beta\sigma_{t-1}^{2} \end{equation*}\]

Où:

  • \(\sigma_{t}^{2}\) est la variance conditionnelle à l’instant \(t\)

  • \(\alpha_{0}\) est la variance non conditionnelle

  • \(\alpha_{1}\varepsilon_{t-1}^{2}\) représente l’impact des erreurs passées au carré

  • \(\gamma_{1}\varepsilon_{t-1}I_{t-1}\) capture l’effet asymétrique via l’indice binaire \(I_{t-1}\)

  • \(I_{t-1}=1\) si \(\varepsilon_{t-1}<0\), \(I_{t-1}=0\) sinon

  • \(\beta\sigma_{t-1}^{2}\) mesure la persistance de la volatilité

  • \(\varepsilon_{t-1}\) est le terme d’erreur à l’instant \(t-1\)

Le modèle TGARCH modélise explicitement l’asymétrie en distinguant l’impact des chocs positifs et négatifs sur la variance conditionnelle. Il permet ainsi de capturer avec plus de flexibilité l’effet de levier financier.

2-2- DONNÉES

Les données utilisées dans le cadre de ce travail, sont celles du cours de bourse de la BOAB côté à la BRVM. Nous avons effectué ce travail avec un échantillon. Il couvre la période allant du 05 janvier 2015 au 30 décembre 2022 soit sept années d’observations qui sont toutes des cotations journalières à la fermeture des marchés et provenant de la base de données de SICA FINANCE. Par ailleurs, le marché de la BRVM ne fonctionne que les jours ouvrables, les cotations boursières n’existent pas les samedis, les dimanches et les jours fériés.

2-3- Test statistique

Les tests statistiques permettent de vérifier les caractéristiques de notre série financière afin de mieux les analyser et par conséquent, éviter toutes erreurs de diagnostics et de régressions fallacieuses . Dans le cadre de ce travail , les test statistiques qui seront utilisés sont :

  • Le test ADF (Dickey-Fuller augmenté) permet de vérifier la stationnarité d’une série temporelle via le test de racine unitaire. Il détermine si la série doit être différenciée avant la modélisation.
  • Le test de White évalue l’hypothèse nulle d’homoscédasticité des résidus contre l’hypothèse alternative d’hétéroscédasticité. Il teste si la variance des résidus est constante.
  • Le test de Jarque-Bera évalue si la distribution des résidus suit une loi normale ou non. Il teste l’hypothèse nulle de normalité.
  • Le kurtosis et le skewness mesurent respectivement l’aplatissement et l’asymétrie de la distribution des résidus.
  • Le test de Ljung-Box vérifie l’hypothèse nulle d’indépendance des résidus contre l’hypothèse alternative d’autocorrélation.
  • Le test de BP (Breusch-Pagan) teste la présence d’effet ARCH dans les résidus, c’est-à-dire leur hétéroscédasticité conditionnelle.
  • Les mesures RMSE, MAE servent à évaluer la qualité de prévision des modèles en comparant rendements réels et simulés.

CHAPITRE 3 : Resultats et discussions

3-1- Chargement des packages et des données

library(tseries) # Pour l'analyse des séries temporelles
library(dplyr) # Pour le data wrangling et les opérations sur les données
library(forecast) # Pour la forecast et les modèles de prévision
library(e1071) # Pour calculer le kurtosis et le skewness des données
library(TSA) # Pour l'analyse des séries temporelles stationnaires et non stationnaires
library(nonlinearTseries) # Pour les modèles non-linéaires de séries temporelles
library(lmtest) # Pour les tests statistiques comme le test de White
library(zoo) # Pour le traitement des données de séries chronologiques
library(rugarch) # Pour les modèles ARCH/GARCH de volatilité conditionnelle
library(fGarch) # Pour les modéles TGARCH et EGARCH
library(ggplot2) # Pour la visualisation des données
library(FinTS) #La librairie FinTS (Financial Time Series) contient des fonction utiles pour l'analyse des séries financières comme la volatilité implicite/historique
library(sandwich) # La librairie sandwich contient des fonctions pour estimer des variances et écart-types robustes, utilisés notamment pour la spécification de modèles GARCH

3-2- Traitement et Exploration du jeu de donnée

# Chargement des données à partir du fichier CSV
Data <- read.csv("C:/Users/VICTUS/Downloads/data.csv")

# Sélection des données de l'entreprise "BOAB"
Entreprise <- "BOAB"

# New base de données
Data_BOAB <- subset(Data, Data$Ticker == Entreprise)

# Renommage des colonnes pour plus de clarté
names(Data_BOAB) <- c("Date", "Open", "High", "Low", "Close", "Volume", "Entreprise")
Data_BOAB <- subset(Data_BOAB, select = -Entreprise)

# Vérification des valeurs manquantes dans les données
sum(is.na(Data_BOAB))
## [1] 0
# Vérification du type de données
str(Data_BOAB)
## 'data.frame':    1919 obs. of  6 variables:
##  $ Date  : chr  "2015-01-05" "2015-01-06" "2015-01-07" "2015-01-08" ...
##  $ Open  : num  4100 4100 4125 4100 4105 ...
##  $ High  : num  4100 4100 4125 4100 4110 ...
##  $ Low   : num  4100 4100 4000 4100 4105 ...
##  $ Close : num  4100 4100 4100 4100 4110 ...
##  $ Volume: num  800 80 85920 380 240 ...
# Conversion de la colonne Date en classe de date
Data_BOAB$Date <- as.Date(Data_BOAB$Date)
class(Data_BOAB$Date)
## [1] "Date"

3-3- Analyse de la serie temporelle

Tracé de l’évolution des prix de clôture au fil du temps

# Tracé de l'évolution des prix de clôture au fil du temps
plot(Data_BOAB$Date, Data_BOAB$Close, type = "l", col = "blue", xlab = "Date", ylab = "Prix", main = "Serie Temporelle")

D’après le graphique, il s’agit d’une série temporelle représentant l’évolution de prix (Prix) au fil du temps (Date), de l’année 2016 à l’année 2022.

On remarque une hausse des prix au debut de l’année 2016 suivie d’une baisse jusqu’en 2019 .Puis le prix le prix range jusqu’a debut 2022 où il entame une nouvelle hausse.

Notons aussi l’absence de saisonnalité dû au faites que les données sont journalières

Test de Dickey-Fuller augmenté (ADF) pour la stationnarité des prix de clôture

# Test de Dickey-Fuller augmenté (ADF) pour la stationnarité des prix de clôture
adf_result <- adf.test(Data_BOAB$Close)
# Hypothèses du test de Dickey-Fuller augmenté (ADF) :
# - Hypothèse nulle (H0) : La série temporelle possède une racine unitaire, ce qui indique qu'elle n'est pas stationnaire.
# - Hypothèse alternative (H1) : La série temporelle ne possède pas de racine unitaire, ce qui suggère la stationnarité de la série.
print(adf_result)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  Data_BOAB$Close
## Dickey-Fuller = -2.0349, Lag order = 12, p-value = 0.5635
## alternative hypothesis: stationary

Le test de Dickey-Fuller augmenté (ADF) a été effectué sur la série temporelle \(DataBOAB\) $ \(Close\), avec un ordre de retard (lag order) de 12.

  • La statistique de test (Dickey-Fuller) est égale à \(-2.0349\).

  • La p-value associée est de \(0.5635\).

  • L’hypothèse nulle \(\mathbf{H}_{0}\) du test est que la série possède une racine unitaire, ce qui indique qu’elle n’est pas stationnaire.

  • L’hypothèse alternative \(\mathbf{H}_{1}\) est que la série est stationnaire.

  • Comme la p-value est supérieure au seuil de signification de 5%, on ne peut pas rejeter l’hypothèse nulle de non stationnarité.

Donc selon ce test ADF, la série temporelle \(DataBOAB\) $ \(Close\) ne semble pas être stationnaire en niveau, suggérant qu’elle peut nécessiter une différenciation avant d’être modélisée avec un modèle ARIMA.

Différenciation de la série temporelle/Tracé de la série temporelle différenciée/Test de Dickey-Fuller augmenté (ADF) de le série temporelle différenciée

# Différenciation de la série temporelle des prix de clôture
diff_data <- diff(Data_BOAB$Close)

# Tracé de la série temporelle différenciée des prix de clôture
plot(Data_BOAB$Date[-1], diff_data, type = "l", col = "red", xlab = "Date", ylab = "Différence de Prix", main = "Série Temporelle Différenciée")

D’après ce graphique, il s’agit de la représentation de la série temporelle des prix (Prix) après une étape de différenciation.

cette série temporelle différenciée permet de lisser la tendance en éliminant la composante relative à la tendance et en rendant la série possiblement stationnaire

On remarque que la moyenne est constante , puis il y a des périodes de fortes volatilités suivient de faibles volatilités

# Test de Dickey-Fuller augmenté (ADF) pour la stationnarité des prix de clôture différenciés
adf_result_diff <- adf.test(diff_data)
# Hypothèses du test de Dickey-Fuller augmenté (ADF) sur les données différenciées :
# - Hypothèse nulle (H0) : La série temporelle différenciée possède une racine unitaire, ce qui indique qu'elle n'est pas stationnaire.
# - Hypothèse alternative (H1) : La série temporelle différenciée ne possède pas de racine unitaire, ce qui suggère la stationnarité de la série différenciée.
print(adf_result_diff)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_data
## Dickey-Fuller = -14.527, Lag order = 12, p-value = 0.01
## alternative hypothesis: stationary
  • Le test de Dickey-Fuller augmenté (ADF) a été effectué sur la série temporelle différenciée, nommée \(diffdata\) dans le code R.

  • L’ordre de retard (lag order) utilisé est de \(12\).

  • La statistique de Dickey-Fuller est égale à \(-14.527\).

  • La p-value associée est très faible, égale à \(0.01\).

  • L’hypothèse nulle \(\mathbf{H}_{0}\) du test est que la série contient une racine unitaire et n’est pas stationnaire.

  • L’hypothèse alternative \(\mathbf{H}_{1}\) est que la série est stationnaire.

  • Comme la p-value est bien inférieure au seuil de 5%, on peut rejeter l’hypothèse nulle.

Donc, d’après ce test ADF effectué sur la série différenciée, on peut conclure qu’elle est maintenant stationnaire.

Cela valide l’étape de différenciation et permet de poursuivre la modélisation ARIMA sur une série stationnaire.

Modélisation ARIMA

# Modélisation ARIMA automatique avec la série temporelle différenciée
auto_arima_model <- auto.arima(Data_BOAB$Close)
print(auto_arima_model)
## Series: Data_BOAB$Close 
## ARIMA(1,1,2) 
## 
## Coefficients:
##          ar1      ma1     ma2
##       0.4852  -0.4108  0.1469
## s.e.  0.0991   0.0997  0.0260
## 
## sigma^2 = 23871:  log likelihood = -12387.18
## AIC=24782.35   AICc=24782.37   BIC=24804.59

Le modèle a été estimé sur la série temporelle \(DataBOAB\) $ \(Close\) préalablement différenciée une fois (d’où le (1,1) dans ARIMA(1,1,2)).

Les coefficients estimés sont :

  • \(\hat{a}_{1}\) = 0.4852 : terme autorégressif d’ordre 1

  • \(\hat{m}_{1}\) = -0.4108 : terme moyenne mobile d’ordre 1

  • \(\hat{m}_{2}\) = 0.1469 : terme moyenne mobile d’ordre 2

  • Les écart-types des coefficients sont également présentés (\(s.e.\)).

  • La variance résiduelle du modèle (\(\sigma^2\)) est de 23871.

  • La vraisemblance du modèle (\(\log likelihood\)) est de \(-12387,18\).

Les critères d’information AIC, AICc et BIC sont reportés et pourront servir à la sélection de modèle.

On peut donc conclure que le modèle ARIMA(1,1,2) s’ajuste correctement aux données différenciées de la série \(DataBOAB\) $ \(Close\).

# Récupération des coefficients et écart-types
coefs <- auto_arima_model$coef   
se <- auto_arima_model$var.coef
# Calcul des statistiques t
tstat <- coefs/se 
# Affichage des statistiques t
print(tstat)
##            ar1      ma1       ma2
## ar1   49.43400 -50.4396 -350.0794
## ma1   42.70708 -41.3387 -346.5484
## ma2 -105.95899 123.8816  216.6019
# Nombre de degrés de liberté  
df <- length(coefs)    
# Valeur critique de Student
crit <- qt(p=0.05/2, df=df)
cat("Valeur critique (bilatérale 5%) : ", crit, "\n")
## Valeur critique (bilatérale 5%) :  -3.182446

D’après les résultats obtenus:

  • Pour le terme AR(1), \(tstat = 49.43400\) qui est très supérieur à la valeur critique de \(-2.776445\) en valeur absolue. Le coefficient AR(1) est donc significatif.

  • Pour le terme MA(1), \(tstat = -41.3387\) qui est également très supérieur à la valeur critique. Le coefficient MA(1) est significatif.

  • Pour le terme MA(2), \(tstat = 216.6019\) qui est très grand devant la valeur critique. Le coefficient MA(2) est significatif.

En conclusion, on peut affirmer que les termes \(\mathrm{AR}(1)\), \(\mathrm{MA}(1)\) et \(\mathrm{MA}(2)\) sont statistiquement significatifs dans ce modèle \(\mathrm{ARIMA}(1,0,2)\).

Test d’hétéroscédasticité de White

# Récupération des résidus du modèle ARIMA
residuals_arima <- residuals(auto_arima_model)

# Test d'hétéroscédasticité de White
white_test = white.test(residuals_arima)

# Affichage des résultats du test de White
cat("Test d'hétéroscédasticité de White\n")
## Test d'hétéroscédasticité de White
print(white_test)
## 
##  White Neural Network Test
## 
## data:  residuals_arima
## X-squared = 19.966, df = 2, p-value = 4.618e-05
# Interprétation du test de White
#Hypothèses du test de White 
#- H0 : Les résidus sont homoscédastiques (variance constante).
#- H1 : Les résidus sont hétéroscédastiques (variance non constante).

On constate que la \(p-value= 1.157e-05\) est très faible quasiment nulle .

Donc on rejete l’hypothèse homoscédasticité des residus ( variance constante).

Puis on conclut que , les résidus sont hétéroscédastiques (variance non constante).

ce qui avait déjà été remarqué au niveau de notre série temporelle différenciée par des periodes de faibles volatilités suivient de fortes volatilités

Test de normalité des résidus (Jarque-Bera)

# Test de normalité des résidus (Jarque-Bera)
jarque_bera_test <- jarque.bera.test(residuals_arima)

# Affichage des résultats du test de Jarque-Bera
cat("Test de normalité des résidus (Jarque-Bera)\n")
## Test de normalité des résidus (Jarque-Bera)
print(jarque_bera_test)
## 
##  Jarque Bera Test
## 
## data:  residuals_arima
## X-squared = 10524, df = 2, p-value < 2.2e-16
# Interprétation du test de Jarque-Bera
#Hypothèses du test de Jarque-Bera :
#- H0 : Les résidus suivent une distribution normale.
#- H1 : Les résidus ne suivent pas une distribution normale.

Le test de Jarque-Bera permet de tester si la distribution des résidus suit une loi normale. La statistique du test suit une loi du \(\chi^2\) à 2 degrés de liberté sous l’hypothèse de normalité.

Ici, la p-value très faible (\(\ 2.2e-16\)) indique que l’hypothèse de normalité est rejetée de manière hautement significative. La valeur élevée de la statistique du test (\(10524\)) montre un très fort décalage par rapport à la loi normale.

On peut donc conclure que la distribution des résidus ne suit pas une loi normale au vu de ce test

La non-normalité des résidus peut donc indiquer :

  • Des modèles de volatilité conditionnelle non capturés par le modèle.

  • Des queues épaisses dans la distribution, c’est-à-dire une probabilité plus élevée d’événements extrêmes par rapport à ce que la distribution normale prévoit. Ces événements extrêmes peuvent être associés à des pics de volatilité.

kurtosis des résidus/l’asymétrie (skewness) des résidus

# Calcul du kurtosis des résidus
kurtosis_residus <- kurtosis(residuals_arima)
cat("Kurtosis des résidus :", kurtosis_residus, "\n")
## Kurtosis des résidus : 11.42661
# Calcul de l'asymétrie (skewness) des résidus
skewness_residus <- skewness(residuals_arima)
cat("Asymétrie (skewness) des résidus :", skewness_residus, "\n")
## Asymétrie (skewness) des résidus : -0.5113017
  • La kurtosis des résidus est de 11.42661. Cette valeur très élevée indique une distribution des résidus avec des queues épaisses par rapport à la loi normale qui a une kurtosis de 3.

  • Une forte kurtosis traduit la présence d’événements extrêmes plus fréquents que dans une loi normale. Cela confirme les conclusions du test de Jarque-Bera sur la non-normalité de la distribution.

  • L’asymétrie (skewness) des résidus est de -0.5113017. Cette valeur proche de 0 indique une distribution assez symétrique, sans biais négatif ou positif marqué.

Bien que l’asymétrie soit faible, la distribution n’est tout de même pas normale comme le montre la très forte kurtosis.

Test d’autocorrélation des résidus avec le test Ljung-Box/ACF

# Test d'autocorrélation des résidus avec le test Ljung-Box
ljung_box_test <- Box.test(residuals_arima, lag = 10, type = "Ljung-Box")
print(ljung_box_test)
## 
##  Box-Ljung test
## 
## data:  residuals_arima
## X-squared = 33.319, df = 10, p-value = 0.0002407
# Interprétation du test de BDS
#Test d'indépendance BDS
#Hypothèses du test BDS :
#- H0 : Les résidus sont indépendants.
#- H1 : Les résidus ne sont pas indépendants.

Le test de Box-Ljung est un test statistique utilisé pour vérifier l’indépendance des résidus d’un modèle ARIMA.

Dans le résultat du test présenté ici :

  • “residuals_arima” correspond aux résidus du modèle ARIMA estimé.

  • La statistique de test “X-squared” suit une loi du \(\chi^2\) à 10 degrés de liberté, soit la valeur observée ici est 33.319

  • Le nombre de degrés de liberté “df” est égal au nombre de retard pris en compte dans le test, ici 10 retards.

  • La p-value très faible, p-value = 0.0002407, indique que l’hypothèse nulle d’indépendance des résidus est rejetée au seuil de significativité de 5%.

Donc en conclusion, le test de Box-Ljung nous indique que les résidus du modèle ARIMA ne sont pas indépendants, ils présentent de l’autocorrélation. Cela signifie que le modèle ARIMA estimé ne capture pas parfaitement la dynamique des données.

# Test d'autocorrélation des résidus
acf(residuals(auto_arima_model))

Le graphique présente l’autocorrélogramme des résidus d’un modèle ARIMA (1, 0, 2) estimé sur une série temporelle (auto_arima_model).

L’autocorrélogramme permet de visualiser les coefficients d’autocorrélation des résidus pour différents décalages temporels, appelés “lags”.

Ici, on observe que tous les coefficients ne se situent pas à l’intérieur de l’intervalle de confiance représenté par les lignes pointillées rouges. Cela signifie qu’aucun que certains coefficients sont significativement différent de zéro.

On peut donc conclure que les résidus du modèle ARIMA présentent d’autocorrélation significative pour les lags testés, allant de 1 à 30.

Cela indique que le modèle n’a pas correctement capturé la structure temporelle des données et que l’hypothèse d’indépendance des résidus semble être remise en cause.

Test d’indépendance de BDS

Le test de BDS (Brock, Dechert, Scheinkman) est un test de non-linéarité qui vise à détecter des dépendances non linéaires dans une série temporelle. Voici les principales hypothèses du test de BDS :

Hypothèse Nulle (H0) : Indépendance Linéaire

  • Énoncé : Les observations de la série temporelle sont indépendantes linéairement.

  • Implication : Si l’hypothèse nulle est vraie, cela signifie que les observations de la série temporelle sont indépendantes et ne présentent pas de dépendance non linéaire.

Hypothèse Alternative (H1) : Dépendance Non Linéaire

  • Énoncé : Les observations de la série temporelle présentent une dépendance non linéaire.

  • Implication : Rejeter l’hypothèse nulle en faveur de l’hypothèse alternative suggère la présence de dépendance non linéaire dans la série temporelle.

result_bds = bds.test(Data_BOAB$Close)
print(result_bds)
## 
##   BDS Test 
## 
## data:  Data_BOAB$Close 
## 
## Embedding dimension =  2 3 
## 
## Epsilon for close points =  1095.375 2190.751 3286.126 4381.501 
## 
## Standard Normal = 
##       [ 1095.3753 ] [ 2190.7505 ] [ 3286.1258 ] [ 4381.5011 ]
## [ 2 ]      287.2371       163.278      106.7108      101.4486
## [ 3 ]      505.6143       207.360      111.9509      100.2717
## 
## p-value = 
##       [ 1095.3753 ] [ 2190.7505 ] [ 3286.1258 ] [ 4381.5011 ]
## [ 2 ]             0             0             0             0
## [ 3 ]             0             0             0             0
  • Nous observons que toutes les p-values associées à la statistique du test d’indépendance BDS sont égales à zéro (p = 0,00) donc inférieures au seuil critique 5%. Par conséquent, nous rejetons l’hypothèse nulle H0 :Indépendance Linéaire

  • À cet effet, nous pouvons donc accepter l’hypothèse de non-linéarité de notre série et confirmer ainsi l’inefficacité du processus linéaire ARMA dans la prédiction de la volatilité

Test de la volatilité

arch_test_result <- ArchTest(residuals_arima)
print(arch_test_result)
## 
##  ARCH LM-test; Null hypothesis: no ARCH effects
## 
## data:  residuals_arima
## Chi-squared = 562.13, df = 12, p-value < 2.2e-16

Le test ARCH LM (Lagrange Multiplier) permet de tester la présence d’hétéroscédasticité conditionnelle (effets ARCH) dans les résidus d’un modèle estimé.

Ici, l’hypothèse nulle est l’absence d’effets ARCH dans les résidus du modèle ARIMA.

La très petite p-value conduit à rejeter l’hypothèse nulle au profit de l’hypothèse alternative d’existence d’effets ARCH.

Cela signifie que la variance des résidus n’est pas constante et dépend de la réalisation passée des erreurs. Le modèle ARIMA ne capture pas correctement l’hétéroscédasticité conditionnelle présente dans les données. Un modèle ARCH/GARCH pourrait être plus approprié.

Diagnostics du modèle ARIMA

D’après les différents tests diagnostics effectués sur les résidus du modèle ARIMA (test de Jarque-Bera, autocorrélogramme, test de Box-Ljung, test ARCH-LM), on peut tirer les conclusions suivantes :

  • La distribution des résidus ne suit pas une loi normale, elle présente des queues épaisses traduisant une probabilité plus élevée d’événements extrêmes.

  • Les résidus présentent de l’autocorrélation significative, montrant que le modèle ARIMA n’a pas capturé correctement la dynamique temporelle des données.

  • L’hypothèse d’indépendance des résidus est rejetée par le test de Box-Ljung.

  • Le test ARCH-LM met en évidence la présence d’effets ARCH, c’est-à-dire une hétéroscédasticité conditionnelle où la variance dépend des valeurs passées.

Ces résultats diagnostics indiquent les limites du modèle ARIMA à capturer toute la structure des données, notamment l’hétéroscédasticité conditionnelle. Un modèle ARCH/GARCH serait plus approprié car il permet de modéliser explicitement la volatilité conditionnelle et sa dynamique au cours du temps en tenant compte des effets d’autarcie (clusters de volatilité).

On peut donc conclure qu’un modèle ARCH/GARCH constitue une piste pertinente pour affiner la modélisation et la prévision de cette série temporelle présentant une volatilité variable dans le temps.

Modélisation GARCH et ses extensions

rendement = diff(log(Data_BOAB$Close))
length(rendement)
## [1] 1918
length(Data_BOAB$Date)
## [1] 1919
plot(Data_BOAB$Date[-1], rendement, type = "l", xlab = "Date", ylab = "Rendement", main = "Serie temporelle du rendement ")

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

# Adapter le modèle aux données (assurez-vous que 'rendement' est votre série temporelle de rendements)
garch_fit <- ugarchfit(spec = garch_spec, data = rendement)

# 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      0.000177    0.000430  0.41236  0.68008
## omega   0.000038    0.000007  5.23862  0.00000
## alpha1  0.153957    0.020686  7.44246  0.00000
## beta1   0.784732    0.026717 29.37251  0.00000
## 
## Robust Standard Errors:
##         Estimate  Std. Error  t value Pr(>|t|)
## mu      0.000177    0.000377  0.47031 0.638130
## omega   0.000038    0.000022  1.76942 0.076824
## alpha1  0.153957    0.037925  4.05947 0.000049
## beta1   0.784732    0.071567 10.96500 0.000000
## 
## LogLikelihood : 4673.373 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -4.8690
## Bayes        -4.8574
## Shibata      -4.8690
## Hannan-Quinn -4.8647
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                      2.677 0.10181
## Lag[2*(p+q)+(p+q)-1][2]     4.933 0.04239
## Lag[4*(p+q)+(p+q)-1][5]     8.492 0.02221
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic  p-value
## Lag[1]                      7.051 0.007923
## Lag[2*(p+q)+(p+q)-1][5]     8.892 0.017628
## Lag[4*(p+q)+(p+q)-1][9]    10.292 0.043412
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.9988 0.500 2.000  0.3176
## ARCH Lag[5]    2.5596 1.440 1.667  0.3603
## ARCH Lag[7]    3.2327 2.315 1.543  0.4707
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  0.8153
## Individual Statistics:              
## mu     0.19021
## omega  0.08408
## alpha1 0.21093
## beta1  0.14436
## 
## 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.6871 0.49208    
## Negative Sign Bias  0.4018 0.68789    
## Positive Sign Bias  1.6315 0.10295    
## Joint Effect        7.4567 0.05868   *
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20      4398            0
## 2    30      6410            0
## 3    40      7873            0
## 4    50      9423            0
## 
## 
## Elapsed time : 0.207108
  • Le modèle conditionnel retenu est un sGARCH(1,1) avec une moyenne spécifiée par un ARFIMA(0,0,0). La distribution des résidus est normale.

  • Les estimateurs du sGARCH sont tous significatifs, en particulier \(\alpha_1\) et \(\beta_1\) qui déterminent la dynamique conditionnelle.

  • Les tests robustes sur les résidus standardisés et au carré ne révèlent pas d’autocorrélation ou d’hétéroscédasticité résiduelle.

  • Les critères d’information indiquent une bonne adéquation du modèle aux données.

  • Le test de Nyblom valide la stabilité paramétrique dans le temps.

  • Le test ARCH ne détecte pas d’effet de levier ou de signe anormal.

  • Le test de Pearson rejette l’adéquation de la distribution mais c’est courant pour de grands échantillons.

En conclusion, ce modèle GARCH(1,1) semble capturer correctement la dynamique conditionnelle de la volatilité des rendements étudiés.

# Spécification du modèle TGARCH(1,1) avec ugarchspec
tgarch_spec <- ugarchspec(variance.model = list(model = "fGARCH", submodel = "TGARCH", garchOrder = c(1, 1)), mean.model = list(armaOrder = c(0, 0)))

# Adapter le modèle aux données (assurez-vous que 'rendement' est votre série temporelle de rendements)
tgarch_fit <- ugarchfit(spec = tgarch_spec, data = rendement)

# 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      0.000625    0.000446   1.4005 0.161369
## omega   0.003014    0.000590   5.1088 0.000000
## alpha1  0.169635    0.020086   8.4453 0.000000
## beta1   0.761738    0.035644  21.3707 0.000000
## eta11  -0.258298    0.068314  -3.7810 0.000156
## 
## Robust Standard Errors:
##         Estimate  Std. Error  t value Pr(>|t|)
## mu      0.000625    0.000525   1.1897 0.234169
## omega   0.003014    0.001768   1.7043 0.088327
## alpha1  0.169635    0.043344   3.9137 0.000091
## beta1   0.761738    0.103976   7.3261 0.000000
## eta11  -0.258298    0.105100  -2.4576 0.013986
## 
## LogLikelihood : 4659.762 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -4.8538
## Bayes        -4.8393
## Shibata      -4.8538
## Hannan-Quinn -4.8484
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                      1.521 0.21749
## Lag[2*(p+q)+(p+q)-1][2]     4.330 0.06149
## Lag[4*(p+q)+(p+q)-1][5]     7.887 0.03143
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                      5.938 0.01482
## Lag[2*(p+q)+(p+q)-1][5]     6.691 0.06158
## Lag[4*(p+q)+(p+q)-1][9]    10.393 0.04128
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.6011 0.500 2.000  0.4382
## ARCH Lag[5]    1.3414 1.440 1.667  0.6350
## ARCH Lag[7]    5.0693 2.315 1.543  0.2176
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  1.5483
## Individual Statistics:              
## mu     0.09956
## omega  0.23452
## alpha1 0.49017
## beta1  0.27453
## eta11  0.22431
## 
## 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.03384 0.9730    
## Negative Sign Bias 0.83133 0.4059    
## Positive Sign Bias 1.33155 0.1832    
## Joint Effect       3.19571 0.3624    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20      4177            0
## 2    30      5777            0
## 3    40      7330            0
## 4    50      9153            0
## 
## 
## Elapsed time : 0.597981

Le modèle conditionnel capturé l’asymétrie des impacts négatifs et positifs via le sous-modèle TGARCH.

  • Les estimateurs du modèle sont tous significatifs, notamment l’estimateur \(\eta_{11}\) qui caractérise l’effet de levier asymétrique.

  • Les diagnostics sur les résidus ne révèlent pas de problème d’autocorrélation ou d’hétéroscédasticité résiduelle.

  • Les critères d’information confirment la qualité d’ajustement du modèle aux données.

  • Le test de Nyblom valide la stabilité temporelle des paramètres.

  • Le test ARCH n’indique pas de terme ARCH résiduel significatif.

  • Le test de Pearson rejette la normalité mais c’est attendu pour de grands échantillons.

Ce modèle fGARCH(1,1)- semble donc décrire de manière robuste la dynamique conditionnelle de volatilité, en capturant spécifiquement l’effet de levier asymétrique

# 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)))

# Adapter le modèle aux données (assurez-vous que 'rendement' est votre série temporelle de rendements)
egarch_fit <- ugarchfit(spec = egarch_spec, data = rendement)

# 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      0.000420    0.000432  0.97335 0.330380
## omega  -1.124248    0.164655 -6.82789 0.000000
## alpha1  0.070742    0.019383  3.64967 0.000263
## beta1   0.844697    0.021874 38.61564 0.000000
## gamma1  0.356135    0.033280 10.70105 0.000000
## 
## Robust Standard Errors:
##         Estimate  Std. Error  t value Pr(>|t|)
## mu      0.000420    0.000501  0.83925 0.401328
## omega  -1.124248    0.448331 -2.50763 0.012154
## alpha1  0.070742    0.028699  2.46496 0.013703
## beta1   0.844697    0.059108 14.29086 0.000000
## gamma1  0.356135    0.056212  6.33556 0.000000
## 
## LogLikelihood : 4670.827 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -4.8653
## Bayes        -4.8508
## Shibata      -4.8653
## Hannan-Quinn -4.8600
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                      1.303 0.25370
## Lag[2*(p+q)+(p+q)-1][2]     4.155 0.06849
## Lag[4*(p+q)+(p+q)-1][5]     7.912 0.03098
## d.o.f=0
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                      1.774  0.1829
## Lag[2*(p+q)+(p+q)-1][5]     3.196  0.3725
## Lag[4*(p+q)+(p+q)-1][9]     6.203  0.2755
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]    0.7154 0.500 2.000  0.3976
## ARCH Lag[5]    1.5259 1.440 1.667  0.5855
## ARCH Lag[7]    4.2399 2.315 1.543  0.3133
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  1.1182
## Individual Statistics:              
## mu     0.06562
## omega  0.27361
## alpha1 0.10654
## beta1  0.25201
## gamma1 0.13386
## 
## 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.5973 0.5503    
## Negative Sign Bias  0.5568 0.5777    
## Positive Sign Bias  0.2339 0.8151    
## Joint Effect        1.0134 0.7980    
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20      4287            0
## 2    30      6103            0
## 3    40      7559            0
## 4    50      9240            0
## 
## 
## Elapsed time : 0.239532

Le modèle conditionnel retenu est un eGARCH(1,1) avec une moyenne spécifiée par un ARFIMA(0,0,0) et une distribution normale des résidus.

  • Les estimateurs du eGARCH sont tous significatifs, notamment le paramètre \(\gamma_1\) captant l’effet de levier.

  • Les diagnostics sur les résidus ne révèlent pas de problèmes d’autocorrélation ou d’hétéroscédasticité résiduelle.

  • Les critères d’information valident la qualité d’ajustement du modèle.

  • Le test de Nyblom montre la stabilité des paramètres dans le temps.

  • Le test ARCH n’indique pas d’effet ARCH résiduel significatif.

  • Le test de Pearson rejette la distribution normale mais c’est attendu pour de grands échantillons.

Ce modèle eGARCH(1,1) semble donc capturer correctement la dynamique conditionnelle de volatilité, y compris l’effet de levier, sur la période étudiée.

1

Graphiques de volatilité/Graphiques des résidus par rapport aux valeurs ajustées (fitted)

# Extraire les valeurs de volatilité estimées du modèle GARCH(1,1)
volatility_garch <- sigma(garch_fit)

# Tracer le graphique de volatilité
plot(volatility_garch, type = "l", col = "blue", xlab = "Temps", 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 = "red", 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 = "red", 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 = "red", xlab = "Temps", ylab = "Résidus", main = "Graphique des Résidus du Modèle EGARCH(1,1)")

Les courbes des résidus issues des 03 modèles candidats estimés ont quasiment une même forme, seules les courbes d’évolution de la volatilité conditionnelle sont différentes pour chaque modèle candidat estimé. Ce phénomène peut s’expliquer par le fait que la série étudiée est asymétrique alors que les modèles postulés sont probablement symétriques pour la plupart.

En effet, lorsque la série réelle présente une asymétrie (par exemple un effet de levier), les modèles symétriques ne sont pas en mesure de capturer parfaitement cette caractéristique. Ils aboutissent donc à des volatilités conditionnelles légèrement différentes, bien que les résidus globaux soient similaires.

Choix d’un ou des modèles pertinents par des critères de selection

  • Modèle GARCH (1,1) :

\(Akaike(AIC): -4.8690\)

\(Bayes(BIC): -4.8574\)

\(Shibata(SIC): -4.8690\)

\(Hannan-Quinn(HQIC): -4.8647\)

  • Modèle EGARCH (1,1) :

\(Akaike(AIC): -4.8653\)

\(Bayes(BIC): -4.8508\)

\(Shibata(SIC): -4.8653\)

\(Hannan-Quinn(HQIC): -4.8600\)

  • Modèle TGARCH (1,1) :

\(Akaike(AIC): -4.8538\)

\(Bayes(BIC): -4.8393\)

\(Shibata(SIC): -4.8538\)

\(Hannan-Quinn(HQIC): -4.8484\)

D’après les valeurs des critères d’information reportées:

  • Le modèle GARCH(1,1) a dans tous les cas des critères plus élevés que les deux autres modèles.

  • Le modèle TGARCH(1,1) a des valeurs de critères plus faible que celles du modèle EGARCH(1,1)

On peut donc en conclure que:

  • Le modèle TGARCH(1,1) a la meilleure qualité d’ajustement aux données selon les critères d’information.

  • Le modèle EGARCH(1,1) a une qualité d’ajustement légèrement inférieure mais reste meilleure que le GARCH(1,1).

  • Le modèle GARCH(1,1), étant le moins performant, n’est pas retenu comme spécification conditionnelle la plus appropriée.

3-4- Evaluation des modèles

Rendements simulés vs réels

# Prédire la volatilité
pred_vola_tgarch <- sigma(tgarch_fit)

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

# Tracer les résultats
plot(simulated_returns_tgarch, typ="l", col="red", ylab="Rendements")
lines(rendement, col="blue")
legend("topright", legend=c("Simulés", "Réels"), 
       col=c("red","blue"), lty=1)
title("Rendements simulés vs réels")

Bien que suivant des tendances similaires à certains moments, les deux courbes diffèrent dans leurs amplitudes de variation, la série simulée présentant des écarts plus importants d’un pas de temps à l’autre.

Mesures d’erreurs

# Mesures d'erreur
rmse_tgarch <- sqrt(mean((simulated_returns_tgarch - rendement)^2))
mae_tgarch <- mean(abs(simulated_returns_tgarch - rendement))

print("Modèle TGARCH ")
## [1] "Modèle TGARCH "
# Afficher les mesures
print(paste("RMSE_tgarch =", rmse_tgarch)) 
## [1] "RMSE_tgarch = 0.032404753174051"
print(paste("MAE_tgarch =", mae_tgarch))
## [1] "MAE_tgarch = 0.0236239590190403"
# Récupération de la volatilité conditionnelle prédite
pred_vola_egarch <- sigma(egarch_fit)

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

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

print("Modèle EGARCH ")
## [1] "Modèle EGARCH "
# Afficher les mesures
print(paste("RMSE_egarch =", rmse_egarch)) 
## [1] "RMSE_egarch = 0.0324456403399826"
print(paste("MAE_egarch =", mae_egarch))
## [1] "MAE_egarch = 0.0235804321280706"

Pour le modèle TGARCH(1,1):

  • La RMSE est de 0.032404753174051

  • Le MAE est de 0.0236239590190403

Pour le modèle EGARCH(1,1):

  • La RMSE est de 0.0324456403399826

  • Le MAE est de 0.0235804321280706

On peut donc en déduire que:

  • Les mesures d’erreur RMSE et MAE sont très proches entre les deux modèles TGARCH(1,1) et EGARCH(1,1).

  • Le TGARCH(1,1) a une RMSE et un MAE légèrement inférieurs, ce qui confirme nos résultats précédents.

  • Cependant, les écarts entre les modèles sont très faibles et les performances quasi équivalentes d’après ces critères de mesure .