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