Commit b93d5091 authored by Emmanuel Guiffart's avatar Emmanuel Guiffart

Netoyage et validation

parent 390c0aa0
--- ---
title: "Sujet 1 : Concentration de CO2 dans l'atmosphère depuis 1958" title: 'Sujet 1 : Concentration de CO2 dans l''atmosphère depuis 1958'
author: "E. Guiffart" author: "E. Guiffart"
date: "1 Juin 2020" date: "1 Juin 2020"
output: html_document output:
pdf_document: default
pdf: default
--- ---
```{r setup, include=FALSE} ```{r setup, include=FALSE}
...@@ -11,7 +13,7 @@ knitr::opts_chunk$set(echo = TRUE) ...@@ -11,7 +13,7 @@ knitr::opts_chunk$set(echo = TRUE)
## Préparation des données ## Préparation des données
Les données de *la concentration du CO2 dans l'atmosphère* sont disponibles sur le site web du [Scripps CO2 Program](https://scrippsco2.ucsd.edu/data/atmospheric_co2/primary_mlo_co2_record.html), un site très intéressant comme on devrait en voir plus souvent de nos jours, sauf qu'il est américain. Mais je parle pas chinois donc j'avais pas trop le choix et je crois qu'en 1958, les chinois avaient autre chose à faire que de parler de CO2. Ils n'ont d'ailleurs toujours eu rien à foutre depuis. Les données de *la concentration du CO2 dans l'atmosphère* sont disponibles sur le site web du [Scripps CO2 Program](https://scrippsco2.ucsd.edu/data/atmospheric_co2/primary_mlo_co2_record.html), un site très intéressant comme on devrait en voir plus souvent de nos jours, sauf qu'il est américain.
Nous les récupérons sous forme d'un fichier en format CSV dont chaque ligne correspond à une semaine de la période demandée. Nous téléchargeons toujours le jeu de données complet, qui commence en 1991 et se termine avec une semaine récente. Nous les récupérons sous forme d'un fichier en format CSV dont chaque ligne correspond à une semaine de la période demandée. Nous téléchargeons toujours le jeu de données complet, qui commence en 1991 et se termine avec une semaine récente.
...@@ -22,7 +24,6 @@ library(timeSeries) ...@@ -22,7 +24,6 @@ library(timeSeries)
library(parsedate) library(parsedate)
if (!file.exists("monthly_in_situ_co2_mlo.csv")) download.file("https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/monthly/monthly_in_situ_co2_mlo.csv", "monthly_in_situ_co2_mlo.csv", method="auto") if (!file.exists("monthly_in_situ_co2_mlo.csv")) download.file("https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/monthly/monthly_in_situ_co2_mlo.csv", "monthly_in_situ_co2_mlo.csv", method="auto")
data_url <- fread(file = "monthly_in_situ_co2_mlo.csv",skip=54, sep=",",strip.white=TRUE, header = FALSE) data_url <- fread(file = "monthly_in_situ_co2_mlo.csv",skip=54, sep=",",strip.white=TRUE, header = FALSE)
...@@ -34,7 +35,7 @@ head(data_url) ...@@ -34,7 +35,7 @@ head(data_url)
tail(data_url) tail(data_url)
``` ```
## Nettyage des données ## Nettoyage des données
Va falloir nettoyer tout ça, notamment le nom des colonnes: Va falloir nettoyer tout ça, notamment le nom des colonnes:
```{r} ```{r}
new_names<-paste0(data_url[1,],data_url[2,],data_url[3,]) new_names<-paste0(data_url[1,],data_url[2,],data_url[3,])
...@@ -43,7 +44,7 @@ data_clean<-data_url[-c(1,2,3),] ...@@ -43,7 +44,7 @@ data_clean<-data_url[-c(1,2,3),]
head(data_clean) head(data_clean)
``` ```
Bon ok c'est un peu mieux, moins confusant c'est déjà ça. Les 2 premières lignes sont suspectes. Voyons s'il ya en a d'autres. POour ça, faisons un petit graph : Bon ok c'est un peu mieux, moins confusant c'est déjà ça. Les 2 premières lignes sont suspectes. Voyons s'il ya en a d'autres. Pour ça, faisons un petit graph :
```{r} ```{r}
plot(data_clean$DateExcel,data_clean$`CO2[ppm]`) plot(data_clean$DateExcel,data_clean$`CO2[ppm]`)
``` ```
...@@ -72,10 +73,10 @@ head(data_clean2) ...@@ -72,10 +73,10 @@ head(data_clean2)
plot(data_clean2$dateStd,data_clean2$`CO2[ppm]`) plot(data_clean2$dateStd,data_clean2$`CO2[ppm]`)
``` ```
On va pouvoir passer aux stats maintenant je pense, sauf si vous en avez déjà marre mais ça serait dommage d'arrêter en si bon chemin. Cette étude est vraiment pleine de suspens... On va pouvoir passer aux stats maintenant. Cette étude est vraiment pleine de suspens...
## Modèle statistique ## Visualisation des oscillations périodiques et tendance
Regardons de plus près l'évolution de la série en focalisant sur des années, par exemple de 1980 à 1985: Regardons de plus près l'évolution de la série en focalisant sur des années, par exemple de 1980 à 1985:
```{r} ```{r}
...@@ -84,7 +85,7 @@ Regardons de plus près l'évolution de la série en focalisant sur des années, ...@@ -84,7 +85,7 @@ Regardons de plus près l'évolution de la série en focalisant sur des années,
plot(data_clean2[Yr>1980 & Yr<1986,]$dateStd,data_clean2[Yr>1980 & Yr<1986,]$`CO2[ppm]`) plot(data_clean2[Yr>1980 & Yr<1986,]$dateStd,data_clean2[Yr>1980 & Yr<1986,]$`CO2[ppm]`)
``` ```
Nous observons bien une saisonalité de période annuelle. On ne va que s'intéresser dans la suite de cette étude aux données brutes c'est à dire le champ "*CO2(pm)*" car je ne sais pas trop à quoi correpond le reste des champs. Pour isoler la partie tendance, nous allons utiliser une technique simple de moyenne mobile. C'est un estimateur non-paramétrique de la tendance, au sens ou nous ne supposons pas de structure a-priori de cette tendance (par ex. linéaire ou polynomiale). On aurait aussi pu utiliser un lisasge par noyaux mais bon. Nous observons bien une saisonalité de période annuelle. On ne va que s'intéresser dans la suite de cette étude aux données brutes c'est à dire le champ "*CO2(pm)*" car je ne sais pas trop à quoi correpond le reste des champs. Pour isoler la partie tendance, nous allons utiliser une technique simple de moyenne mobile. C'est un estimateur non-paramétrique de la tendance, au sens ou nous ne supposons pas de structure a-priori de cette tendance (par ex. linéaire ou polynomiale). On aurait aussi pu utiliser un lissage par noyaux mais bon restons sur des choses basiques.
```{r} ```{r}
...@@ -100,7 +101,10 @@ lines(MA$Yr_date,MA$MA,col='red') ...@@ -100,7 +101,10 @@ lines(MA$Yr_date,MA$MA,col='red')
``` ```
Nous obtenons la tendance de la série corrigée des effets de saisonalité
## Modèle statistique et calibrage de la tendance (contribution lente)
Nous allons construire un modèle simple de la tendance qui servira à prédire le niveau de CO2 dans l'atmosphère pour les années futures.
Faisons une régression sur la tendance. On pourrait enlever les premiers et derniers points car ce ne sont pas des donnés complètes. Faisons une régression sur la tendance. On pourrait enlever les premiers et derniers points car ce ne sont pas des donnés complètes.
```{r} ```{r}
...@@ -117,6 +121,10 @@ plot(MA$Yr,MA$MA,type='l') ...@@ -117,6 +121,10 @@ plot(MA$Yr,MA$MA,type='l')
lines(MA$Yr,predict(reg_lin),col='red') lines(MA$Yr,predict(reg_lin),col='red')
``` ```
Le modèle de régression est donc créé.
## Prédiction / Extrapolation
Il est temps de passser à l'extrapolation: Il est temps de passser à l'extrapolation:
```{r} ```{r}
...@@ -128,17 +136,4 @@ plot(MA$Yr,MA$MA,type='l',xlim=c(1960,2025),ylim=c(310,450)) ...@@ -128,17 +136,4 @@ plot(MA$Yr,MA$MA,type='l',xlim=c(1960,2025),ylim=c(310,450))
lines(seq(2021,2025),pred[,1],col='red') lines(seq(2021,2025),pred[,1],col='red')
``` ```
La courbe en rouge représente les valeurs futures jusqu'à 2025.
Sinon on aurait pu se concentrer sur la distribution des évolutions annuelles
```{r}
evol_ann<-diff(MA$MA)/MA$MA[-length(MA)]
plot(MA$Yr[-1],evol_ann)
plot(MA$Yr[-1],diff(MA$MA))
reg_evol<-lm(evol_ann~MA$Yr[-1])
summary(reg_evol)
plot(reg_evol)
```
\ 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