Commit fdda3c3a authored by Alicia Culot's avatar Alicia Culot

upload du code en version finale

parent 72f9c479
---
title: "Votre titre"
author: "Votre nom"
date: "La date du jour"
output: html_document
title: ' Sujet 1 : Concentration de CO2 dans l''atmosphère depuis 1958'
author: "Alicia CULOT"
date: "2025-10-15"
output:
word_document: default
html_document: default
pdf_document: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## Quelques explications
Ceci est un document R markdown que vous pouvez aisément exporter au format HTML, PDF, et MS Word. Pour plus de détails sur R Markdown consultez <http://rmarkdown.rstudio.com>.
# Préparation des données
## Chargement du package ggplot2
```{r}
library(ggplot2)
```
## Chargement URL
Chargement des données hebdomadaires de mesures de CO2 à la station d'observation de Mauna Loa.
Date de téléchargement: 15 Octobre 2025
```{r}
data_url = "https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/weekly/weekly_in_situ_co2_mlo.csv"
```
## Téléchargement des données
### Sélection des données d'intérêt
Le code suivant permet de sauter les métadonnées et d'extraire seulement les dates (première colonne) et les concentrations en CO2 (ppm; deuxième colonne):
```{r}
data_raw <- read.csv(
data_url,
skip = 44,
header = FALSE,
sep = ",",
stringsAsFactors = FALSE,
na.strings = c("-99.99", "-1", "NA", "")
)
```
### Création dataframe
Les noms sont ajoutés aux colonnes:
```{r}
data <- data_raw[, 1:2]
names(data) <- c("Date", "CO2")
```
### Conversion
Lorsque vous cliquerez sur le bouton **Knit** ce document sera compilé afin de ré-exécuter le code R et d'inclure les résultats dans un document final. Comme nous vous l'avons montré dans la vidéo, on inclue du code R de la façon suivante:
Modification du format: yyyy-mm-dd pour les dates et numérique pour les concentrations en CO2
```{r cars}
summary(cars)
```{r}
data$Date <- as.Date(trimws(data$Date), format = "%Y-%m-%d")
data$CO2 <- as.numeric(data$CO2)
```
Et on peut aussi aisément inclure des figures. Par exemple:
```{r pressure, echo=FALSE}
plot(pressure)
### Affichage et vérifications des données
```{r}
str(data)
head(data)
```
# Graphique
## Création du graphique de l'oscillation hebdomadaire de la concentration de CO₂ à Mauna Loa
```{r}
ggplot(data, aes(x = Date, y = CO2)) +
geom_line(color = "blue") +
labs(
title = "Oscillation hebdomadaire de la concentration de CO2 à Mauna Loa à partir de 1958",
x = "Date",
y = "Concentration CO2 (ppm)"
) +
theme_minimal()
```
Le graphe montre une séparation de deux phénomènes:
* **Oscillation périodique**: les variations rapides et régulières de CO₂ dues aux saisons, visibles comme les « dents de scie » sur la courbe.
* **Tendance lente**: l’augmentation générale du CO₂ au fil des années, plus régulière et progressive.
## Séparation des deux phénomènes
Séparer les deux phénomènes permettra de:
* caractériser la période et l’amplitude de l’oscillation annuelle
* modéliser correctement la tendance à long terme
* faire des prévisions futures.
### Conversion de la série en série temporelle hebdomadaire
Une fréquence = 52 semaines
```{r}
co2_ts <- ts(data$CO2, start = c(1958, 12), frequency = 52)
```
Vous remarquerez le paramètre `echo = FALSE` qui indique que le code ne doit pas apparaître dans la version finale du document. Nous vous recommandons dans le cadre de ce MOOC de ne pas utiliser ce paramètre car l'objectif est que vos analyses de données soient parfaitement transparentes pour être reproductibles.
Comme les résultats ne sont pas stockés dans les fichiers Rmd, pour faciliter la relecture de vos analyses par d'autres personnes, vous aurez donc intérêt à générer un HTML ou un PDF et à le commiter.
### Décomposition de série temporelle
Utilisation de la fonction stl() pour séparer l'oscillation périodique de la tendance lente:
```{r}
co2_stl <- stl(co2_ts, s.window = "periodic")
plot(co2_stl, main = "Décomposition de la série tempotelle", col = "dark blue")
title(ylab = "Composantes")
```
Les trois composantes: la tendance lente (*trend*), l'oscillation saisonnière (*seasonal*) et les résidus (*remainder*) vont permettre de caractériser l'oscillation et modéliser la tendance.
### Extraction des 3 composantes
```{r}
co2_trend <- co2_stl$time.series[, "trend"]
co2_seasonal <- co2_stl$time.series[, "seasonal"]
co2_remainder <- co2_stl$time.series[, "remainder"]
```
### Caractérisation de l'oscillation périodique
**Amplitude** : différence max - min de la saisonnalité:
```{r}
amplitude <- max(co2_seasonal) - min(co2_seasonal)
cat("Amplitude de l'oscillation annuelle (ppm) :", round(amplitude,2), "\n")
```
### Proposition de modèle simple de la contribution lente
Le modèle linéaire simple est proposé:
$$
CO2 = a + bT
$$
Avec $CO2$ = concentration en CO2 (ppm) et $T$ = temps (semaines)
#### Mise en place du modèle:
```{r}
time <- time(co2_ts)
trend_model <- lm(co2_trend ~ time)
```
#### Estimation des paramètres:
```{r}
summary(trend_model)
```
**Intercept(a)** = Valeur théorique de CO2 au quand T = 0
**pente b** = 1.673 ppm/semaine
**p-value** < 2.2e-16 : très significatif
**Multiple R-squared** = 98.04% de la variance de la tendance est expliquée par ce modèle linéaire.
### Extrapolation jusqu'en 2026
Le code suivant permet de faire une extrapolation du modèle linéaire de tendance jusqu'en 2026:
```{r}
time_future <- seq(start(co2_ts)[1], 2026, by = 1/52) # Vecteur de temps allant du début de ta série (1958) jusqu’à 2026, avec un pas de 1/52
trend_pred <- predict(trend_model, newdata = data.frame(time = time_future)) # Utilise le modèle linéaire pour prédire la concentration de CO2 à chaque valeur de time_future.
trend_pred_ts <- ts(trend_pred, start = start(co2_ts), frequency = 52) # Convertit ces valeurs extrapolées en une série temporelle complète (ts) compatible avec la série d’origine
```
Cela crée une série temporelle exploitable pour les graphiques ou l’analyse et de tracer la tendance extrapolée:
```{r}
plot(co2_ts, col = "darkblue", main = "Modèle linéaire de la concentration en CO2 en fonction du temps")
lines(trend_pred_ts, col = "red", lwd = 2)
```
### Exemple d'extrapolation
Par exemple, si l'on souhaite estimer la concentration (ppm) à une semaine donnée, on peut réaliser ce code en changant le mois:
```{r}
time_feb2026 <- 2026.08
CO2_feb2026 <- predict(trend_model, newdata = data.frame(time = time_feb2026))
cat("Estimation de la concentration en CO2 en février 2026 (ppm) :", CO2_feb2026, "\n")
```
Maintenant, à vous de jouer! Vous pouvez effacer toutes ces informations et les remplacer par votre document computationnel.
Il est donc possible, avec ce modèle linéaire simple, de pouvoir estimer les concentrations futures.
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment