mirror of
https://github.com/ArthurDanjou/ArtStudies.git
synced 2026-02-13 12:07:35 +01:00
Add TP1 of time series
This commit is contained in:
237
M2/Séries temporelles/TD1.Rmd
Normal file
237
M2/Séries temporelles/TD1.Rmd
Normal file
@@ -0,0 +1,237 @@
|
||||
# Import des données
|
||||
|
||||
```{r}
|
||||
library(tseries)
|
||||
|
||||
data = read.csv2('./data/TD1.csv')
|
||||
data_series = ts(data)
|
||||
```
|
||||
|
||||
# Graphique
|
||||
|
||||
```{r}
|
||||
plot(
|
||||
data_series,
|
||||
main = "Exemple de série temporelle",
|
||||
ylab = "Valeurs",
|
||||
xlab = "Temps",
|
||||
col = "blue",
|
||||
type = "o"
|
||||
)
|
||||
|
||||
acf(data, main = "Fonction d'Autocorrélation (ACF)")
|
||||
```
|
||||
|
||||
## 1. Analyse de la série temporelle (Time Plot)
|
||||
|
||||
- Tendance : Il y a une tendance linéaire croissante extrêmement claire et forte sur toute la période (de `t=0` à `t=100`). La moyenne de la série augmente de façon constante, ce qui confirme une non-stationnarité pure.
|
||||
|
||||
- Saisonnalité : Nous observons des oscillations très régulières en forme de "dents de scie". La répétition systématique de ces motifs indique une composante saisonnière forte.
|
||||
|
||||
- Variabilité : L'amplitude des oscillations semble ici rester constante par rapport à la tendance (modèle additif).
|
||||
|
||||
## 2. Analyse de la Fonction d'Autocorrélation (ACF)
|
||||
|
||||
- Profil de Non-Stationnarité : Nous observons une décroissance très lente et linéaire des pics. Même au lag 20, la corrélation reste très élevée (environ `0.4`), bien au-dessus de la zone de significativité bleue. C'est la signature typique d'une série avec une tendance non traitée.
|
||||
|
||||
- Saisonnalité de période 2 : les retards pairs (2,4,6...) sont systématiquement plus élevés que les retards impairs (1,3,5...).
|
||||
|
||||
- Le pic au lag 2 est particulièrement fort, presque au même niveau que le lag 1.
|
||||
- Cela confirme que la valeur à l'instant `t` est très fortement corrélée à la valeur à `t−2`.
|
||||
|
||||
# Lag plot
|
||||
|
||||
```{r}
|
||||
lag.plot(
|
||||
data_series,
|
||||
lags = 4,
|
||||
do.lines = FALSE,
|
||||
main = "Lag-Plot"
|
||||
)
|
||||
```
|
||||
|
||||
## 1. Analyse par retard (Lag)
|
||||
|
||||
- Lag 2 et Lag 4 (Forte corrélation positive) : Les nuages de points pour les retards pairs sont extrêmement resserrés autour de la première bissectrice (la ligne pointillée). Cela signifie que la valeur à l'instant `t` est presque parfaitement prédite par la valeur à `t−2` et `t−4`. Cela confirme la saisonnalité de péridoe `2`.
|
||||
|
||||
- Lag 1 et Lag 3 (Dispersion organisée) : Pour les retards impairs, nous observons deux "nuages" ou une dispersion plus large. Cela traduit l'oscillation "haut-bas" : une valeur haute est suivie d'une valeur basse, créant cet écart par rapport à la ligne d'identité.
|
||||
|
||||
## 2. Relation avec la tendance
|
||||
|
||||
L'alignement global de tous les lags le long d'une diagonale ascendante confirme la tendance déterministe. Même avec le "bruit" saisonnier, la valeur globale `Y_t` augmente proportionnellement à `Y_{t−k}`. C'est ce qui expliquait la p-value de `0.581` à l'ADF : la série ne revient jamais vers une moyenne centrale, elle "s'échappe" vers le haut.
|
||||
|
||||
# Saisonnalité
|
||||
|
||||
```{r}
|
||||
kpss_test_result <- kpss.test(data_series)
|
||||
print(kpss_test_result)
|
||||
|
||||
adf_test_result <- adf.test(data_series)
|
||||
print(adf_test_result)
|
||||
```
|
||||
|
||||
## 1. Analyse du test ADF (Augmented Dickey-Fuller)
|
||||
|
||||
- Hypothèse nulle (`H0`) : La série est non stationnaire.
|
||||
|
||||
- Résultat : La p-value est de `0.581`.
|
||||
|
||||
- Interprétation : Étant donné que la p-value est très supérieure au seuil classique de `0.05`, nous conservons `H0`. La série est donc considérée comme non stationnaire par l'ADF.
|
||||
|
||||
## 2. Analyse du test KPSS
|
||||
|
||||
- Hypothèse nulle (`H0`) : La série est stationnaire.
|
||||
|
||||
- Résultat : La statistique de test est très élevée (`2.0282`) et la p-value est de `0.01`.
|
||||
|
||||
- Interprétation : La p-value est inférieure à `0.05`, nous rejetons donc l'hypothèse de stationnarité. Le test KPSS confirme que la série n'est pas stationnaire.
|
||||
|
||||
## Conclusion croisée
|
||||
|
||||
| Test | Hypothèse Nulle (`H0`) | Résultat | Conclusion statistique |
|
||||
|------------------|------------------|------------------|------------------|
|
||||
| ADF | Non stationnaire | Non rejetée (`p=0.58`) | La série n'est pas stationnaire |
|
||||
| KPS | Stationnaire | Rejetée (`p=0.01`) | La série n'est pas stationnaire. |
|
||||
|
||||
# Correction de la saisonnalité
|
||||
|
||||
## Lag 1
|
||||
|
||||
```{r}
|
||||
serie_diff = diff(data_series)
|
||||
plot(serie_diff, type = "l")
|
||||
acf(serie_diff, main = "ACF de la série différenciée lag 1")
|
||||
```
|
||||
|
||||
### Pourquoi la différenciation d=1 a "échoué" ?
|
||||
|
||||
Le graphique ACF de la série différenciée montre des pics à `-0.9` (lag 1) et `+0.85` (lag 2). Le Lag-Plot explique pourquoi : en faisant `Y_t−Y_{t−1}`, la pente est supprimée, mais l'oscillation `S=2` est transformée en une alternance de signes massive.
|
||||
|
||||
**Verdict final** : Pour modéliser proprement cette série, nous ne pouvons pas nous contenter d'un modèle ARIMA classique. Nous devons utiliser la différence saisonnière : diff(data_series, lag = 2).
|
||||
|
||||
## Lag 2
|
||||
|
||||
```{r}
|
||||
serie_diff_2 <- diff(data_series, lag = 2)
|
||||
plot(serie_diff_2, type = "l")
|
||||
acf(serie_diff_2, main = "ACF de la série différenciée lag 2")
|
||||
```
|
||||
|
||||
### 1. Disparition de la non-stationnarité
|
||||
|
||||
- Observation : Contrairement aux ACF précédentes qui affichaient des pics massifs et persistants, celle-ci chute immédiatement vers zéro dès le premier retard.
|
||||
|
||||
- Conclusion : La série résultante est désormais stationnaire. La moyenne et la variance sont stabilisées.
|
||||
|
||||
### 2. Élimination de la structure saisonnière `S=2`
|
||||
|
||||
- Observation : L'alternance parfaite "haut-bas" (pics à `+0.8`/`-0.9`) que nous voyions après la différenciation classique (`diff(x)`) a totalement disparu.
|
||||
|
||||
- Interprétation : En appliquant `diff(x, lag = 2)`, nous avons retiré à chaque point sa valeur correspondante au cycle précédent. Cela a "neutralisé" l'oscillation déterministe de période 2.
|
||||
|
||||
### 3. Identification des résidus (Bruit Blanc ?)
|
||||
|
||||
- Pic au Lag 2 : Nous observons un pic négatif significatif au lag 2. Cela suggère qu'il reste une petite dépendance de type `MA(1)` saisonnier ou `MA(2)`.
|
||||
|
||||
- Reste du graphique : Pour tous les autres retards, les pics sont situés à l'intérieur des bandes de confiance bleues.
|
||||
|
||||
- Conclusion : La série est maintenant très proche d'un bruit blanc. Les résidus sont quasi-indépendants, ce qui est l'objectif ultime avant de valider un modèle de prévision.
|
||||
|
||||
## Moyenne
|
||||
|
||||
```{r}
|
||||
t.max = length(data_series)
|
||||
serie_moy = ts((data_series[1:(t.max - 1)] + data_series[2:t.max]) / 2)
|
||||
plot(serie_moy, type = "l")
|
||||
acf(serie_moy, main = "ACF de la série moyenne")
|
||||
```
|
||||
|
||||
### 1. Analyse de la série temporelle (serie_moy)
|
||||
|
||||
- Lissage de la saisonnalité : L'effet le plus frappant est la disparition presque totale des dents de scie (l'oscillation "haut-bas" de période 2). En moyennant deux points consécutifs, nous avons annulé les variations saisonnières de court terme pour ne laisser apparaître que la composante de tendance.
|
||||
|
||||
- Allure de la tendance : La série montre une croissance qui n'est pas strictement linéaire mais légèrement curviligne (quadratique). On observe une accélération de la pente à mesure que le temps progresse.
|
||||
|
||||
- Stationnarité : La série n'est toujours pas stationnaire. La moyenne augmente de façon continue avec le temps (environ de 100 à 1100).
|
||||
|
||||
### 2. Analyse de l'ACF de la série moyenne
|
||||
|
||||
- Disparition de l'alternance : On ne voit plus l'oscillation caractéristique (pics positifs/négatifs) tous les deux lags. Cela prouve mathématiquement que la saisonnalité de période 2 a été filtrée avec succès par la moyenne mobile.
|
||||
|
||||
- Profil de "Trend" pur : L'ACF décroît de manière très lente, régulière et presque linéaire. C'est la signature typique d'une série dont la seule source de non-stationnarité restante est la tendance.
|
||||
|
||||
- Persistance : Même au lag 15, l'autocorrélation reste très élevée (\>0.5). Cela confirme que la série a une "mémoire" longue induite par sa dérive déterministe.
|
||||
|
||||
## Synthèse des corrections
|
||||
|
||||
| Caractéristique | Série Brute | Différenciation Lag 1 (`diff(x)`) | Différenciation Lag 2 (`diff(x, 2)`) | Série Moyenne (`serie_moy`) |
|
||||
|:--------------|:--------------|:--------------|:--------------|:--------------|
|
||||
| **Allure Visuelle** | Tendance ascendante forte + oscillations en "dents de scie". | Moyenne stabilisée mais oscillations "haut-bas" amplifiées. | Série stationnaire, ressemble à un bruit blanc avec peu de structure. | Courbe lisse montrant la tendance (sans les oscillations). |
|
||||
| **Stationnarité** | **Non** (moyenne mobile dans le temps). | **Partielle** (moyenne stable mais forte dépendance cyclique). | **Oui** (la plus proche de la stationnarité complète). | **Non** (la tendance est toujours présente). |
|
||||
| **Profil ACF** | Décroissance linéaire très lente. | Alternance parfaite de pics positifs/négatifs ($S=2$). | Chute immédiate vers 0 après le lag 2. | Décroissance lisse et très lente. |
|
||||
| **Saisonnalité** | Présente (période 2) mais masquée par la tendance. | **Exacerbée** : l'alternance devient la structure dominante. | **Éliminée** : le cycle de période 2 est neutralisé. | **Filtrée** : les variations de court terme sont lissées. |
|
||||
| **Usage Typique** | Observation initiale des données. | Suppression d'une tendance linéaire simple. | Traitement d'une tendance + saisonnalité de période 2. | Isolation de la tendance pour une régression polynomiale. |
|
||||
|
||||
# Régression polynomiale
|
||||
|
||||
```{r}
|
||||
n <- length(data_series)
|
||||
time <- 1:n
|
||||
|
||||
data_deseas <- (data_series[2:n] + data_series[1:(n - 1)]) / 2
|
||||
time_deseas <- time[2:n]
|
||||
|
||||
model_poly <- lm(data_deseas ~ time_deseas + I(time_deseas^2))
|
||||
|
||||
summary(model_poly)
|
||||
|
||||
plot(
|
||||
time,
|
||||
data_series,
|
||||
type = "l",
|
||||
col = "gray",
|
||||
lty = 2,
|
||||
main = "Ajustement Polynomial (deg 2) sur Série Dé-saisonnalisée",
|
||||
xlab = "Temps",
|
||||
ylab = "Valeurs"
|
||||
)
|
||||
lines(time_deseas, data_deseas, col = "blue", lwd = 1)
|
||||
lines(time_deseas, fitted(model_poly), col = "red", lwd = 2)
|
||||
|
||||
legend(
|
||||
"topleft",
|
||||
legend = c("Série Brute", "Série Dé-saisonnalisée", "Régression Poly (d=2)"),
|
||||
col = c("gray", "blue", "red"),
|
||||
lty = c(2, 1, 1),
|
||||
lwd = c(1, 1, 2)
|
||||
)
|
||||
```
|
||||
|
||||
## Interprétation
|
||||
|
||||
- Superposition visuelle : La courbe rouge (prédiction) doit épouser parfaitement la ligne bleue (série dé-saisonnalisée). Si la courbe rouge passe par le "centre" des oscillations de la série brute (grise), cela confirme que le degré 2 est suffisant pour capturer la dynamique de long terme.
|
||||
|
||||
- Analyse des résidus : Après cet ajustement, les résidus de la régression ne doivent plus contenir de tendance. Cependant, ils contiendront encore la saisonnalité de période 2 si nous les calculons par rapport à la série brute.
|
||||
|
||||
- Significativité : Dans le `summary(model_poly)`, nous vérifions que le coefficient lié à `I(time_deseas^2)` possède une p-value très faible (`<0.05`).
|
||||
|
||||
# Résidus
|
||||
|
||||
```{r}
|
||||
residus <- residuals(model_poly)
|
||||
|
||||
par(mfrow = c(2, 1))
|
||||
plot(
|
||||
time_deseas,
|
||||
residus,
|
||||
type = "l",
|
||||
col = "darkgreen",
|
||||
main = "Série des résidus (après régression poly)",
|
||||
xlab = "Temps",
|
||||
ylab = "Résidus"
|
||||
)
|
||||
abline(h = 0, col = "red", lty = 2)
|
||||
|
||||
acf(residus, main = "ACF des résidus")
|
||||
```
|
||||
|
||||
101
M2/Séries temporelles/data/TD1.csv
Normal file
101
M2/Séries temporelles/data/TD1.csv
Normal file
@@ -0,0 +1,101 @@
|
||||
"x"
|
||||
-29,2226905371166
|
||||
213,582166211104
|
||||
-34,8814306205024
|
||||
289,36404010689
|
||||
28,975388590768
|
||||
174,576580794099
|
||||
43,2714526214243
|
||||
259,316235256461
|
||||
54,8890675826746
|
||||
214,730580642182
|
||||
109,689058422542
|
||||
257,892161820572
|
||||
11,8379709729098
|
||||
136,865005641125
|
||||
108,746545907155
|
||||
255,353319549238
|
||||
62,0904868450527
|
||||
315,591810534265
|
||||
115,161059754904
|
||||
309,695066060875
|
||||
132,048868580411
|
||||
331,506815036553
|
||||
102,62824916826
|
||||
206,132415206831
|
||||
143,491287394736
|
||||
316,79356302355
|
||||
119,110224664734
|
||||
260,862380805036
|
||||
118,192497244569
|
||||
370,897078009985
|
||||
226,033977576452
|
||||
361,26061363285
|
||||
194,283580577968
|
||||
380,909747970855
|
||||
123,64702215857
|
||||
380,850271835016
|
||||
191,185502314483
|
||||
417,434330164441
|
||||
285,101268599194
|
||||
478,158787422877
|
||||
241,873820187321
|
||||
447,731915993175
|
||||
305,748168770237
|
||||
509,433159933683
|
||||
258,062215272524
|
||||
468,225242151894
|
||||
333,129098106841
|
||||
564,826646225771
|
||||
332,482689392489
|
||||
594,055386322711
|
||||
382,005294018353
|
||||
543,798680337462
|
||||
403,955984571221
|
||||
543,13184519596
|
||||
484,151185085052
|
||||
724,619994925293
|
||||
420,538926176675
|
||||
600,193268684174
|
||||
494,585981372121
|
||||
673,247269805959
|
||||
614,180888025239
|
||||
706,437999863342
|
||||
557,386968122539
|
||||
739,000107939033
|
||||
515,33633955588
|
||||
777,039614975717
|
||||
492,652068555448
|
||||
871,677743078144
|
||||
621,762666910595
|
||||
938,630583518108
|
||||
669,875476444983
|
||||
826,902678453909
|
||||
709,436317674453
|
||||
848,895118417787
|
||||
649,818329988045
|
||||
944,172311775873
|
||||
724,735406339078
|
||||
964,455267581581
|
||||
785,817066207583
|
||||
970,523952690596
|
||||
789,666563359075
|
||||
1029,64106924381
|
||||
913,80434982866
|
||||
997,421659978512
|
||||
922,197309381421
|
||||
1128,24751856068
|
||||
984,054991863818
|
||||
1135,19080381829
|
||||
988,600940495814
|
||||
1203,35493953861
|
||||
982,973998450418
|
||||
1290,79339029916
|
||||
1108,92013078475
|
||||
1306,61068247575
|
||||
1171,84167272704
|
||||
1341,52432127827
|
||||
1071,0703895771
|
||||
1327,73672928816
|
||||
1116,86936925508
|
||||
1376,32996817803
|
||||
|
Reference in New Issue
Block a user