# TD2 - Analyse de séries temporelles ## 1. Import et visualisation ```{r} library(tseries) par(mfrow = c(1, 1)) data(AirPassengers) plot(AirPassengers) ``` ## 2. Saisonnalité ```{r} library(forecast) monthplot(AirPassengers, main = "Graphique par mois (Monthplot)") lag.plot( AirPassengers, lags = 12, do.lines = FALSE, main = "AirPassengers Lag-Plot" ) boxplot( AirPassengers ~ cycle(AirPassengers), main = "Boxplot par mois", xlab = "Mois", ylab = "Nombre de passagers" ) ``` Il y a en effet une saisonnalité dans les données, avec des pics réguliers tous les 12 mois. Cela suggère que les passagers aériens ont tendance à augmenter à certaines périodes de l'année, probablement en raison de vacances ou d'autres facteurs saisonniers. ## 3. Moyenne mobile ```{r} library(zoo) ma <- rollmean(AirPassengers, k = 12, fill = NA) plot( AirPassengers, main = "AirPassengers with Moving Average", ylab = "Number of Passengers" ) lines(ma, col = "red", lwd = 2) legend( "topleft", legend = c("AirPassengers", "Moving Average"), col = c("black", "red"), lwd = 2 ) ``` ## 4. Décomposition ```{r} airpassengers_add <- decompose(AirPassengers, type = "additive") plot(airpassengers_add) airpassengers_mult <- decompose(AirPassengers, type = "multiplicative") plot(airpassengers_mult) ``` Observation : Le modèle multiplicatif est ici plus pertinent car les résidus (le "random") du modèle additif montrent encore une structure liée à l'amplitude de la série, alors qu'ils sont plus stables (homoscédastiques) dans le modèle multiplicatif. ## 5. STL ```{r} dec_stl <- stl(log(AirPassengers), s.window = "periodic") plot(dec_stl) ``` Différences clés : - `decompose()` est rigide (moyennes mobiles simples, saisonnalité fixe). - `stl()` permet de gérer des valeurs aberrantes et d'ajuster la "vitesse" d'évolution de la saisonnalité via le paramètre s.window. ## 6. Différenciation ```{r} trend_diff <- diff(log(AirPassengers)) saison_diff <- diff(log(AirPassengers), lag = 12) final_diff <- diff(trend_diff, lag = 12) plot(trend_diff, main = "Différence tendancielle (Trend)", ylab = "Différence tendancielle") plot(saison_diff, main = "Différence saisonnière (Seasonal)", ylab = "Différence saisonnière") plot(final_diff, main = "Différence finale (Trend + Seasonal)", ylab = "Différence finale") ``` Une différence première ($I−B$) pour retirer la tendance. Une différence saisonnière ($I−B^{12}$) pour retirer la saisonnalité. ```{r} kpss_test_result <- kpss.test(final_diff) print(kpss_test_result) adf_test_result <- adf.test(final_diff) print(adf_test_result) ```