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 tempoorelle

3-4- Evaluation des modèles

Liste des abréviations

BRVM :

BOAB :

ADF : Dickey-Fuller augmentée

AR: Autoregressiv

ARMA: Autoregressive moving average

ARCH: Autoregressive Conditional Heteroskedasticity

EGARCH: Exponential GARCH

EGARCH: Exponential Generalized AutorégRessive Conditional heteroscedasticity.

GARCH: Generalized autoregressive conditional heteroscedasticity

MA: Moving Average.

TGARCH: Threshold Generalized autoregressive conditional heteroscedasticity

TARCH: Threshold Autoregressive Conditional Heteroskedasticity

U: coefficient d’inégalité de Theil

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é

Nelson (1991), Rabemananjara et Zakoian (1993) ont démontré que l’hypothèse de non linéarité reste fondamentale dans le processus de prédiction de la volatilité de certaines séries financières. Ils supposent une évolution asymétrique de la variance et non symétrique comme le présume les modèles de prédictions ARCH et GARCH de Engle. R (1982) et de Bollerslev (1986). Les changements observés ces dernières années dans les marchés financiers laissent croire que ces modèles ont des capacités insuffisantes à prédire les variables présentant des phénomènes d’asymétries. Cappiello et al (2006) et Elizabeth (2012) attribuent ces changements aux événements nouveaux que sont la mondialisation des marchés avec des chocs économiques divers responsables des fortes amplitudes de variations et des phénomènes d’asymétries. Chikhi et al (2012) démontrent que les modèles de prédictions SEMIFARMA (Semi-parametric fractional autoregressive Moving Average) sont plus efficaces que les modèles EGARCH dans la prédiction de la volatilité des indices boursiers à mémoires très longues comme dans le cas du Dow Jones. En plus des phénomènes d’asymétries, ils démontrent que les modèles de prédiction SEMIFARMA considèrent également les phénomènes de persistance des chocs de volatilité dues aux chocs informationnels. Alejandro et al (2019) vont combiner plusieurs modèles pour prédire la volatilité des rendements des taux de changes EUR/USD, la spécificité de leurs modèles est qu’ils peuvent capter les composantes non linéaires à court et à long terme d’une série financière. Ce qui les rendent encore plus performant que les modèles de prédictions autorégressifs GARCH et EGARCH. À l’aide des modèles EGARCH à plusieurs variables Badrinath et Prakash (2014) étudient la prédiction de la volatilité dans les marchés financiers de changes monétaires en inde. Ils trouvent que l’existence des phénomènes d’asymétries dans ces marchés est due aux faibles assimilations des informations et aux phénomènes de contagions de la volatilité. Cependant, Hagen et Yu (2001) vont utiliser des techniques différentes de séries chronologiques univariées et celles de la volatilité implicite des prix des options pour prédire la volatilité sur les marchés financiers allemand. Ils concluent que ces modèles de prédictions sont sensibles aux mesures d’erreurs ainsi qu’aux différents horizons de prévisibilité. Pour prédire la volatilité quotidienne du rendement des actions négociées de la NYSE (New York Stock Exchange) Brooks (1998) étudie plusieurs modèles statistiques de prédiction et admet que l’augmentation des modèles de volatilité avec des mesures de volumes retardés améliorent très peu la prévision des performances des marchés. Dans une étude sur la prévision de la volatilité financière, Martens et Jason (2002) constatent que les modèles de prévisions GARCH ne contiennent pas assez d’informations par rapport à ceux des prévisions à volatilité implicites. Kat et al (1994) admettent que le modèle EGARCH (1,1) est plus performant pour la prédiction de la volatilité des indices boursiers. Alors que, le modèle GARCH (1,1) est plutôt meilleur pour la prédiction de la volatilité des devises.

L’exactitude de l’horizon de prévisibilité de la volatilité reste un dilemme dans la mesure où Poon et Granger (2003), Li et Zakamulin (2019) trouvent que l’horizon de prévisibilité de la volatilité semble plus court que long. Alors que, Green et Figlewski (1999), Alford et Boatsman (1995), Cao et Tsay (1992) et Figlewski (1997) semblent démontrer par leurs différents travaux que la volatilité peut être prévisible sur des horizons à long terme (30 à 60 mois). West et Cho (1995) concluent que sur un horizon d’une semaine, les modèles de prédictions GARCH semblent légèrement plus précis que les modèles de prédictions homoscédastiques et les modèles non paramétriques univariés dans la prédiction de la variance conditionnelle de la volatilité des marchés. De même, Brailsford et Faff (1996) testent plusieurs modèles différents de prédiction de la volatilité et admettent que le modèle GARCH est plus performant dans la prédiction de la variabilité de la volatilité sur un horizon à court terme (1mois). Cependant, Boudoukh et Richardson (1997) trouvent que le modèle GARCH est moins performant dans une prédiction à long terme (6mois). Les résultats ci-dessus semblent se confirmés par les travaux de Laplante et al (1998) qui étudient la prédiction de la volatilité de l’indice TSE-300 sur des horizons temporels à longs termes c’est à dire d’un, trois, six et douze mois. Il ressort de leurs travaux que le modèle de prédiction GARCH (1,1) semble meilleur pour la prédiction de la volatilité de l’indice TSE-300 sur des horizons à courts termes (1mois). D’autre part, ils démontrent que cette prédiction est différente en présence d’autres modèles. Farés (2008) démontre que le modèle de prédiction EWMA (moyenne mobile exponentielle pondérée) est plus efficace que le modèle de prédiction GARCH (1,1) dans la prédiction de la volatilité de l’indice S&P500 sur un horizon temporel à long terme.

Dans une analyse de la capacité prédictive de la volatilité, Bronka (2001) approuve que la volatilité implicite semble plus efficace que la volatilité historique dans la prédiction de la volatilité future (anticipée). Il trouve que les données historiques constituent des informations passées sans réel impact sur les fluctuations avenirs. Black et Scholes (1973), Racicot et Théoret (2005) démontrent que la volatilité historique peut être supposée comme étant un bon estimateur de la volatilité future (anticipée). Cependant, Ross (1989) admet qu’une meilleure prédiction des volatilités futures doit considérer en plus des données historiques, les phénomènes aléatoires liés à la volatilité. Canina et Figlewski (1993) affirment que le modèle de volatilité implicite reste un mauvais modèle pour la prédiction de la volatilité future dans le cas des options de l’indice S&P 100. Cette affirmation semble se confirmer avec les travaux de Bentes (2015) qui obtient dans une prévision hors échantillon, des bons résultats avec le modèle de prédiction GARCH qu’avec le modèle de volatilité implicite. Toutefois, Corrado et al (2005) estiment que les index de volatilité implicite du CBOE (Chicago Board Options Exchange) sont meilleurs que la volatilité historique pour la prédiction des indices boursiers tels que : Nasdaq 100, Standard and Poor’s 100 et 500. Pour prédire la volatilité future à la fois, sur le marché de gré à gré et sur les marchés boursiers de Hong Kong, Yu et al (2010) approuvent que le modèle de volatilité implicite semble plus pertinent que le modèle de volatilité historique ainsi que le modèle GARCH. Daloz (1973) s’accorde avec le modèle de la marche du hasard de Bachelier (1900), pour conclure que : « si les cours contiennent tout le prévisible les fluctuations ultérieures relèvent exclusivement d’imprévisible c’est-à-dire du hasard ».

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 et Theil 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

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 tempoorelle

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 \(diff_data\) dans le code R.

L’ordre de retard () 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
# 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

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 <- lm(residuals_arima^2 ~ residuals_arima)
white_test_summary <- summary(white_test)

# 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_summary)
## 
## Call:
## lm(formula = residuals_arima^2 ~ residuals_arima)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
##  -25377  -24238  -22868  -14450 2008698 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     23873.00    1974.04  12.093  < 2e-16 ***
## residuals_arima   -77.57      12.79  -6.065 1.59e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 86470 on 1917 degrees of freedom
## Multiple R-squared:  0.01883,    Adjusted R-squared:  0.01831 
## F-statistic: 36.78 on 1 and 1917 DF,  p-value: 1.587e-09
# 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.587e-09\) 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 = 1, type = "Ljung-Box")
print(ljung_box_test)
## 
##  Box-Ljung test
## 
## data:  residuals_arima
## X-squared = 0.0029228, df = 1, p-value = 0.9569
# 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 permet de tester l’hypothèse d’indépendance des résidus. La statistique du test suit une loi du \(\chi^2\) à k degrés de liberté (ici k=1 lag testé).

Ici, la très grande p-value (0.9569) indique qu’on ne peut pas rejeter l’hypothèse d’indépendance des résidus. La faible valeur de la statistique du test (0.0029228) conforte cette conclusion.

On peut donc conclure que les résidus ne semblent pas présenter d’autocorrélation significative sur le 1 lag. L’hypothèse d’indépendance, nécessaire pour de nombreuses méthodes statistiques, n’est pas remise en cause par ce test.

En résumé, le test de Box-Ljung valide l’hypothèse d’indépendance des résidus

# 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’hétéroscédasticité conditionnelle (Breusch-Pagan)

# Modèle de régression des résidus sur leur carré
regression_model <- lm(residuals_arima^2 ~ residuals_arima)

# Test de Breusch-Pagan sur le modèle de régression
bp_test_ <- bptest(regression_model)
print(bp_test_)
## 
##  studentized Breusch-Pagan test
## 
## data:  regression_model
## BP = 67.225, df = 1, p-value = 2.422e-16

Le test de Breusch-Pagan studentisé est une version améliorée du test de Breusch-Pagan classique. La statistique de test BP suit une loi de Fisher sous\(H0\)d’homoscédasticité.

Ici, la très petite p-value (\(2.422e-16\)) indique que l’on rejette très clairement \(H0\). On conclut avec un très haut niveau de confiance que les résidus présentent de l’hétéroscédasticité conditionnelle.

Le modèle de régression ne respecte donc pas les hypothèses d’homoscédasticité nécessaires à son application standard. Les estimateurs des moindres carrés ordinaires ne sont plus efficaces.

Il est alors nécessaire de corriger le problème d’hétéroscédasticité, par exemple en appliquant une régression avec variances hétéroscédastiques robustes.

Le modèle ARIMA estimé présente trois problèmes majeurs :

La distribution des résidus n’est pas normale selon le test de normalité. Cela remet en cause l’inférence statistique utilisant la loi normale.

L’autocorrélogramme des résidus montre une autocorrélation significative, indiquant une mauvaise spécification du modèle ARIMA.

Le test d’hétéroscédasticité de Breusch-Pagan rejette l’hypothèse d’homoscédasticité, révélant de l’hétéroscédasticité conditionnelle.

Ces diagnostics négatifs indiquent clairement que le modèle ARIMA spécifié ne convient pas aux données. Ses résultats ne peuvent donc être interprétés de manière fiable.

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.1991899
  • 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.6341321

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.1970692

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 d’évaluation.