Add TP1 of time series

This commit is contained in:
2026-02-09 11:36:24 +01:00
parent 9a42e5b310
commit 746f4fbc78
2 changed files with 338 additions and 0 deletions

View 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 à `t2`.
# 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 à `t2` et `t4`. 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_{tk}`. 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_tY_{t1}`, 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")
```

View 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
1 x
2 -29 2226905371166
3 213 582166211104
4 -34 8814306205024
5 289 36404010689
6 28 975388590768
7 174 576580794099
8 43 2714526214243
9 259 316235256461
10 54 8890675826746
11 214 730580642182
12 109 689058422542
13 257 892161820572
14 11 8379709729098
15 136 865005641125
16 108 746545907155
17 255 353319549238
18 62 0904868450527
19 315 591810534265
20 115 161059754904
21 309 695066060875
22 132 048868580411
23 331 506815036553
24 102 62824916826
25 206 132415206831
26 143 491287394736
27 316 79356302355
28 119 110224664734
29 260 862380805036
30 118 192497244569
31 370 897078009985
32 226 033977576452
33 361 26061363285
34 194 283580577968
35 380 909747970855
36 123 64702215857
37 380 850271835016
38 191 185502314483
39 417 434330164441
40 285 101268599194
41 478 158787422877
42 241 873820187321
43 447 731915993175
44 305 748168770237
45 509 433159933683
46 258 062215272524
47 468 225242151894
48 333 129098106841
49 564 826646225771
50 332 482689392489
51 594 055386322711
52 382 005294018353
53 543 798680337462
54 403 955984571221
55 543 13184519596
56 484 151185085052
57 724 619994925293
58 420 538926176675
59 600 193268684174
60 494 585981372121
61 673 247269805959
62 614 180888025239
63 706 437999863342
64 557 386968122539
65 739 000107939033
66 515 33633955588
67 777 039614975717
68 492 652068555448
69 871 677743078144
70 621 762666910595
71 938 630583518108
72 669 875476444983
73 826 902678453909
74 709 436317674453
75 848 895118417787
76 649 818329988045
77 944 172311775873
78 724 735406339078
79 964 455267581581
80 785 817066207583
81 970 523952690596
82 789 666563359075
83 1029 64106924381
84 913 80434982866
85 997 421659978512
86 922 197309381421
87 1128 24751856068
88 984 054991863818
89 1135 19080381829
90 988 600940495814
91 1203 35493953861
92 982 973998450418
93 1290 79339029916
94 1108 92013078475
95 1306 61068247575
96 1171 84167272704
97 1341 52432127827
98 1071 0703895771
99 1327 73672928816
100 1116 86936925508
101 1376 32996817803