Statistiques Appliquées aux Géosciences

DEUST 1 Géosciences – Travaux Dirigés n°3 (Correction)

Statistiques Univariées et Bivariées

Contenu :

Ce sujet de TD est un condensé des deux premiers TD (analyse univariée et bi-variée). Vous allez devoir réaliser tout ce que vous avez vu durant les précédentes séances.

Pré-requis pour la séance :

  • La compréhension totale des TD1 et TD2.

Quelques opérations utiles sur R :

a = 2
b = 4

a + b # addition
a - b # soustraction
a * b # multiplication
a / b # division
a**2 # élévation au carré

c = c(1,2,3,4,5,6) # création d'une liste de valeur

sum(c) # somme d'une liste, fonctionne aussi pour sum(data$colonne)
sum(c - a) # somme d'une liste où l'on a soustrait une valeur (a)
           # à tous les éléments de c
a * c # multiplie chaque élement de c par a

Présentation du jeu de données

Pour cette séance, vous allez travailler sur les données météorologiques de Météo-France Nouvelle-Calédonie, à deux périodes différentes : Janvier 2024 et Juillet 2024.

poste lat lon aaaamm alt pre tem hum sea
BELEP AEROD. -19.71983 163.6610 202401 88 110.9 28.3 79 1339
BELEP AEROD. -19.71983 163.6610 202407 88 57.4 22.3 76 1339
BOURAKE -21.94250 165.9998 202401 53 73.0 29.1 71 440
BOURAKE -21.94250 165.9998 202407 53 53.6 21.4 76 440
POE -21.60800 165.3998 202401 6 56.7 27.5 74 596

Avec :

  • poste : Le nom de la station installée
  • lat : La latitude de la station installée
  • lon : La longitude de la station météorologique
  • aaaamm : Le mois et l’année de mesure (Janvier 2024 et Juillet 2024 sont au format 202401 et 202407, respectivement)
  • alt : L’altitude à laquelle la station est installée (en mm)
  • pre : Le cumul de précipitations mensuelles mesuré (en mm) durant la période aaaamm
  • tem : La température moyenne mesurée (en °C) durant la période aaaamm
  • hum : L’humidité moyenne mesurée (en %) durant la période aaaamm
  • sea : La distance de la station par rapport à la mer (en m)

Pour chacune de ces deux périodes, 20 stations ont mesuré les variables météorologiques énoncées.

Chargement du jeu de données (uniquement pour la version R)

Jusqu’à présent, les données que vous avez utilisées en TD étaient déjà disponibles dans le logiciel R. Pour ce TD, vous allez travailler sur des données externes (comme si vous aviez récolté ces données durant vos prélèvements terrain). Veuillez donc suivre ces étapes pour charger des données externes. Pour charger le jeu de données externes qui est un fichier Excel (xlsx), vous devrez installer une librairie (une extension) sur R.

Dans la console R, tapez ces deux commandes :

install.packages("readxl") # pour installer la librairie
library("readxl") # pour la rendre utilisable dans votre session

Lorsque vous taperez install.packages("readxl") dans la console, vous aurez ce premier message :
message n°1

Cliquez sur Oui.

Puis, vous aurez ce second message :
message n°2

Cliquez sur Oui également.

Enfin, vous aurez un message de type “Secure CRAN mirrors”. Cliquez sur 0-Cloud [https] (tout en haut de la liste) puis sur OK. La package va s’installer. Cela devrait prendre moins de 2min.

Une fois l’installation terminée, vous pouvez taper library("readxl") dans la console.

Analyse univariée

1.1. Chargement des données

1.1.1. Chargez les données en utilisant la commande suivante :

meteo = read_excel("chemin/vers/meteo.xlsx") 
# la fonction read_excel est contenu dans 
# la librairie readxl que vous venez d'installer

chemin/vers/meteo.xlsx est le chemin d’accès menant vers le dossier où est situé le fichier de données que vous avez téléchargées, le chemin devrait être de la forme C:/Users/rgovan/Téléchargements/meteo.xlsx.

Si vous n’avez pas encore téléchargé les données, cliquez ici.

Sur Windows, vous pouvez récupérer le chemin du fichier en maintenant la touche Maj du clavier, puis en faisant un clique-droit sur le fichier meteo.xlsx dans votre Explorateur Windows. Vous devrez avoir l’option Copier en tant que chemin d'accès. Cliquez dessus, puis vous pourrez faire un clique-droit Coller dans votre fonction read_excel(). Assurez-vous que le chemin d’accès dans la fonction est bien entres guillemets.

Après avoir lancé read_excel(), vous pouvez taper head(meteo)pour vérifier que les données ont bien été chargées.


1.2. Séparation des données par période

1.2.1. Créez deux variables meteo01et meteo07 pour filtrer les données météorologiques selon la période de mesure.
Sur R, pour filtrer un tableau selon une colonne (ici, aaaamm), tapez la commande suivante :

meteo01 = meteo[meteo$aaaamm == 202401, ]
# data[cond1, cond2] permet de filtrer les lignes selon la condition cond1 
#                                     et les colonnes selon la condition cond2
# la syntaxe `a == b` permet de vérifier que `a` et `b` sont identiques.

# elle est complètement différente de `a = b` qui (sur R) est la syntaxe 
# pour affecter `b` à la variable `a` que vous créez.
poste lat lon aaaamm alt pre tem hum sea
BELEP AEROD. -19.71983 163.6610 202401 88 110.9 28.3 79 1339
BOURAKE -21.94250 165.9998 202401 53 73.0 29.1 71 440
POE -21.60800 165.3998 202401 6 56.7 27.5 74 596
NAKUTAKOIN -22.17117 166.4355 202401 3 78.3 27.9 72 35
HOUAILOU P -21.27833 165.6280 202401 11 235.7 26.9 83 290
MOUE -22.58983 167.4522 202401 95 48.9 26.3 83 3027

1.2.2. Faites de même pour l’autre période.


1.3. Statistiques descriptives

1.3.1. Calculer les minimum, moyenne, médiane, maximum et variance des précipitations pour chaque période.

summary(meteo01$pre)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   24.40   68.92  105.25  131.47  165.65  331.80
summary(meteo07$pre)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.80   56.98   97.25  134.05  225.07  419.20

On observe qu’en Janvier 2024 (qui est la saison dite chaude et pluvieuse), les précipitations mesurées ont été largement supérieures aux précipitations en Juillet 2024 (qui est la saison dite froide et sèche).

1.3.2. Faites de même sur l’humidité et la température.

summary(meteo01$hum)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   70.00   73.75   77.50   77.60   82.00   87.00
summary(meteo07$hum)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   73.00   74.75   76.00   77.10   78.25   85.00
summary(meteo01$tem)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   25.10   26.52   27.65   27.41   28.23   29.10
summary(meteo07$tem)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   19.00   20.48   20.90   20.98   21.52   22.60

Ces statistiques descriptives confirment bien notre observation sur les précipitations où les deux saisons ont bien été mesurées.

1.4. Visualisation

1.4.1. Pour mieux visualiser la différence entre les deux saisons, affichez les boxplots de températures dans un même graphique.

Pour afficher deux boxplots dans un même graphique, vous pouvez taper (et adapter) la commande suivante :

boxplot(boxplot1, boxplot2,
        main="Distribution de températures en Janvier et Juillet 2024",
        names=c("nom du boxplot1", "nom du boxplot2"),
        )

Bien évidemment, vous remplacerez boxplot1 et boxplot2 par les données correspondantes.

boxplot(meteo01$tem, meteo07$tem,
        main="Distribution de températures en Janvier et Juillet 2024",
        names=c("Janvier", "Juillet"),
        ylab="Température (°C)"
        )


Analyse bi-variée

2.1. Covariance

2.1.1. Toutes périodes confondues, y a-t-il des variables indépendantes ? Justifiez.

cov(meteo[, -c(1,2,3,4)])
##              alt          pre          tem         hum         sea
## alt   5408.80769   3976.42308   -43.676282  180.628205  121585.923
## pre   3976.42308   9387.14759   -64.047795  302.498974  155559.052
## tem    -43.67628    -64.04779    11.605378   -2.440128   -1437.439
## hum    180.62821    302.49897    -2.440128   18.387179    6985.882
## sea 121585.92308 155559.05231 -1437.438718 6985.882051 8407978.349

Il n’y a aucune variable indépendante puisque toutes les covariances sont différentes de 0. Rappel : Si Cov\((X,Y) \neq 0\), alors \(X\) et \(Y\) ne sont pas indépendants.

2.2. Corrélation

2.2.1. Toutes périodes confondues, y a-t-il des variables fortement corrélées ?

cor(meteo[, -c(1,2,3,4)])

Nous observons une forte corrélation entre les précipitations et l’humidité, peu importe la saison puisque la corrélation est de 73%.

2.3. Régression linéaire

2.3.1. Toutes périodes confondues, déterminez l’équation de la droite expliquant l’humidité en fonction des précipitations.

mod = lm(hum~pre, data=meteo)
summary(mod)
## 
## Call:
## lm(formula = hum ~ pre, data = meteo)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.2814 -1.9836 -0.3341  2.3161  8.3524 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 73.071835   0.805313  90.737  < 2e-16 ***
## pre          0.032225   0.004921   6.548 1.01e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.978 on 38 degrees of freedom
## Multiple R-squared:  0.5302, Adjusted R-squared:  0.5178 
## F-statistic: 42.88 on 1 and 38 DF,  p-value: 1.012e-07

2.3.2. Donnez l’équation de la droite estimé. Interprétez.

La droite expliquant l’humidité en fonction des précipitations est donnée par l’équation suivante : \(y=0.032225x + 73.071835\)
Avec une pente positive de 0.032225, l’équation nous montre que lorsque les précipitations augmentent de 1 mm, l’humidité augmente de 0.032225 point.

2.3.3. Calculez via R, les termes \(a\) et \(b\), sans utiliser la sortie de la fonction lm().

Rappel : Pour un ensemble de données sous la forme de \(n\) paires \((x_i, y_i)\), \(y_i\) est la variable à expliquer en fonction de \(x_i\), la variable explicative. Par la méthode des moindres carrés ordinaire, la droite ajustée est de la forme : \(y = ax + b\), où \(a\) est la pente de la droite et \(b\) est l’ordonnée à l’origine (intercept).
Ainsi, la pente et l’ordonnée sont respectivement définies par :

\(\qquad\qquad a = \frac{\text{Cov}(X,Y)}{\sigma^2_X}\qquad\) avec \(\sigma^2_X\) la variance de \(X\)

\(\qquad\qquad b = \bar{Y} - \frac{\text{Cov}(X,Y)}{\sigma^2_X}\bar{X}\quad\) avec \(\bar{X}\) et \(\bar{Y}\), la moyenne observée des variables \(X\) et \(Y\), respectivement.

a = cov(meteo$pre, meteo$hum) / var(meteo$pre)
b = mean(meteo$hum) - mean(meteo$pre)*a

cat(a, b)
## 0.0322248 73.07184

2.3.4. Calculez via R, le coefficient de détermination \(R^2\), sans utiliser la sortie de la fonction lm().

Rappel : Le coefficient de détermination est défini par :

\(\qquad\qquad R^2 = 1 - \frac{\sum\limits_{i=1}^{n} (y_i - \hat{y_i})^2}{\sum\limits_{i=1}^{n} (y_i - \bar{y})^2}\qquad\) avec

  • \(y_i\) la valeur observée au point \(x_i\) (la valeur que l’on retrouve dans le jeu de données au point \(x_i\)) ;
  • \(\hat{y_i}\) la valeur estimée au point \(x_i\) (la valeur déterminée par l’équation de la droite au point \(x_i\)) ;
  • \(\bar{y}\) la moyenne observée de la variable \(y\).

Pour vous aider, vous pouvez calculer chaque élément de l’équation séparément, puis les rassembler à la fin.
Par exemple en créant une variable numerateur pour calculer \(\sum (y_i - \hat{y_i})^2\), puis une variable denominateur pour calculer \(\sum (y_i - \bar{y})^2\).

# on calcule toutes les valeurs estimées selon les précipitations observées
ychap = a*meteo$pre + b

# on calcule le numérateur
numerateur = sum( (meteo$hum - ychap)**2 )

# on calcule le dénominateur
denominateur = sum( (meteo$hum - mean(meteo$hum))**2 )

# on calcule le coefficient de détermination
r2 = 1 - (numerateur / denominateur)

print(r2)
## [1] 0.5301503

2.3.5. L’équation est-elle parfaitement ajustée ? Que pouvez-vous en conclure ?

L’équation n’est pas parfaitement ajustée puisque son coefficient de détermination \(R^2\) est de 53%, avec un coefficient ajustée de 52%. Cela peut être en raison de deux causes :
- Il n’y a pas assez de mesures permettant de prouver que les précipitations causent une hausse de l’humidité.
- À elle seule, la précipitation n’est pas la seule cause d’une hausse de l’humidité.

2.3.6. Affichez dans un graphique, l’humidité en fonction des précipitations. Intégrez sur le graphique, la droite estimée par la régression linéaire.

Indication : Utilisez la fonction plot(x, y)x est votre série de valeurs en abscisses et y est votre série de valeurs en ordonnées (en fonction de x). Pour afficher la droite, utilisez la fonction abline(model)model est votre régression ajustée sur les données.

plot(meteo$pre, meteo$hum, main="Humidité en fonction des précitpitations",
     xlab="Précipitations", ylab="Humidité")
abline(mod, col="red")