Statistiques Appliquées aux Géosciences

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

Statistiques Descriptives et Introduction à R

Objectifs de la séance :

  • Introduction à l’environnement R et RStudio ;
  • Découverte et exploration des données géoscientifiques ;
  • Calcul des statistiques descriptives ;
  • Visualisation des données avec des graphiques simples.

Pré-requis pour la séance :

  • Installation de R et RStudio ;
  • Aucune connaissance préalable en programmation requise.

Commandes importances :

  • Commentaire : #. Cette commande vous permettra notamment (comme son nom l’indique) d’ajouter des commentaires à vos codes pour mieux comprendre vos scripts, mais aussi d’ignorer une ligne de codes sans la supprimer.
  • Création/Affectation de variables : nom <- 10 ou nom = 10
  • Afficher des résultats : print()
# ceci est un commentaire
# b <- 3 # cette ligne est commentée car elle n'est pas utile pour la suite du script

a = 2 # on associe la valeur 2 à la variable `a`

print(a) # on affiche la valeur associée à la variable `a`
## [1] 2

Si vous utilisez votre ordinateur personnel, utilisez RStudio. Si vous utilisez un ordinateur de la salle informatique, via horizon, utilisez R (R/R 4.3.3 dans le menu démarrer).

1. Introduction à R et RStudio

1.1. Dans un nouveau fichier .R, créez une variable représentant la profondeur moyenne d’un séisme. Pour l’instant, on considèrera que la profondeur moyenne est de 500. Affichez la variable après l’avoir créée.

profondeur_moyenne = 500
print(profondeur_moyenne)
## [1] 500

2. Jeu de données synthétiques

Dans R, il existe plusieurs jeux de données synthétiques afin d’implémenter et tester les méthodes statistiques. Pour cette séance, vous - étudiants en Géosciences - allez utiliser le jeu de données quakes contenant des informations sur les séismes près des îles Fidji (latitude, longitude, profondeur, magnitude). En voici un aperçu :

lat long depth mag stations
-20.42 181.62 562 4.8 41
-20.62 181.03 650 4.2 15
-26.00 184.10 42 5.4 43

2.1. Pour charger les données quakes, utilisez la commande data() dans votre fichier .R.

La commande data() ne fonctionne que pour charger les jeux de données synthétiques fournies par R ! Nous verrons dans une prochaine séance, comment charger des données externes.

Sur RStudio, pour lancer une ligne de code dans la console à partir de votre fichier, vous pouvez taper Ctrl+Entrée (command+Entrée sur macOS). Vous verrez les données quakes dans votre environnement (en haut à droite de la fenêtre généralement). Si vous utilisez R directement, le raccourci clavier est Ctrl+R.

Le jeu de données chargé est de type data.frame. Pour visualiser ce type de données, vous pouvez utiliser la commande View().

Le jeu de données quakes contient 1000 enregistrements de séismes. Chaque observation contient la latitude (lat), la longitude (long), la profondeur en km (depth), la magnitude sur l’échelle de Richter (mag) et le nombre de stations ayant enregistré le séisme (stations).

2.2. Affichez dans la console, un aperçu du jeu de données (un data.frame sur R) via la commande head().

head(quakes)
##      lat   long depth mag stations
## 1 -20.42 181.62   562 4.8       41
## 2 -20.62 181.03   650 4.2       15
## 3 -26.00 184.10    42 5.4       43
## 4 -17.97 181.66   626 4.1       19
## 5 -20.42 181.96   649 4.0       11
## 6 -19.68 184.31   195 4.0       12

2.3. Affichez dans la console, un résumé statistique des données via la commande summary().

summary(quakes)
##       lat              long           depth            mag      
##  Min.   :-38.59   Min.   :165.7   Min.   : 40.0   Min.   :4.00  
##  1st Qu.:-23.47   1st Qu.:179.6   1st Qu.: 99.0   1st Qu.:4.30  
##  Median :-20.30   Median :181.4   Median :247.0   Median :4.60  
##  Mean   :-20.64   Mean   :179.5   Mean   :311.4   Mean   :4.62  
##  3rd Qu.:-17.64   3rd Qu.:183.2   3rd Qu.:543.0   3rd Qu.:4.90  
##  Max.   :-10.72   Max.   :188.1   Max.   :680.0   Max.   :6.40  
##     stations     
##  Min.   : 10.00  
##  1st Qu.: 18.00  
##  Median : 27.00  
##  Mean   : 33.42  
##  3rd Qu.: 42.00  
##  Max.   :132.00

2.4. À partir de cela, saurez-vous identifier la profondeur minimale, maximale et moyenne ? Identifiez également la magnitude moyenne.

La profondeur minimale est de 40 km, la profondeur maximale est de 680 km, et la magnitude moyenne est de 4.62.

3. Statistiques descriptives approfondies

Sur R, il est possible de calculer (rapidement) les différentes mesures de tendance, telles que la moyenne mean(), la médiane median(), l’écart-type sd(), la variance var()et les différents quartiles quantile().

De plus, pour récupérer toutes les valeurs d’une colonne d’un jeu de données, il suffit de taper la commande table$colonne.

3.1. Calculer la moyenne et l’écart-type des profondeurs des séismes.

cat("mean of depth:", mean(quakes$depth))
## mean of depth: 311.371
cat("standard deviation of depth:", sd(quakes$depth))
## standard deviation of depth: 215.5355

La profondeur moyenne est de 311.37 km, et son écart-type est de 215.54 km.

3.2. Calculer la médiane et la variance de la magnitude.

median(quakes$mag)
## [1] 4.6
var(quakes$mag)
## [1] 0.1622261

La magnitude médiane est de 4.6, et sa variance est de 0.16.

3.3. Calculer les quantiles de la profondeur des séismes.

quantile(quakes$depth)
##   0%  25%  50%  75% 100% 
##   40   99  247  543  680

Les quartiles des profondeurs sont :

  • 25% (Q1) : 99 km
  • 50% (Q2 / médiane) : 247 km
  • 75% (Q3) : 543 km

3.4. Y’a-t-il une différence entre la moyenne et la médiane pour la profondeur ? Si oui, pourquoi sont-elles différentes ?

La moyenne de 311.37 km est significativement plus élevée que la médiane de 247 km. Cela indique que la distribution des profondeurs n’est pas symétrique, mais asymétrique. En d’autres termes, la moyenne est influencée par des valeurs élevées, ce qui “tire” la moyenne vers des profondeurs plus importantes.

La différence entre la moyenne et la médiane s’explique par la présence de valeurs extrêmes (outliers) dans la distribution des profondeurs. Quelques séismes ont des profondeurs très élevées (par exemple, au-delà de 500 km), ce qui fait monter la moyenne. Cependant, la médiane, qui est la valeur centrale, reste moins sensible à ces valeurs extrêmes.

La moyenne est souvent influencée par les valeurs extrêmes, ce qui en fait un indicateur plus sensible dans les distributions asymétriques. Dans ce cas, quelques séismes très profonds augmentent artificiellement la moyenne.

La médiane est plus robuste et représente mieux la profondeur centrale des séismes. Ici, la médiane indique qu’il y a autant de séismes qui se produisent à des profondeurs inférieures comme supérieures à 247 km.

Pour faire simple, la moyenne se base uniquement sur les valeurs observées, alors que la médiane se base sur les valeurs observées et la quantité de valeurs observées.

4. Visualisations de base

Pour visualiser la distribution des données, on utilise communément les histogrammes hist() et les boxplots boxplot() (ou boîte à moustaches en bon français).

Pour les deux questions suivantes, vous prendrez le soin de modifier le titre main, l’axe des abscisses xlab et l’axe des ordonnées ylab à votre guise pour rendre les graphiques plus lisibles.

4.1. Afficher l’histogramme de magnitude des séismes. Commentez.

hist(quakes$depth, 
     main="Distribution des profondeurs des séismes", 
     xlab="Profondeur (km)", 
     ylab="Occurrences")

L’histogramme montre que la plupart des séismes ont une profondeur inférieure à 400 km, avec quelques séismes plus profonds.

4.2. Afficher le boxplot de profondeur des séismes. Commentez.

boxplot(quakes$mag, 
        main="Boxplot des magnitudes", 
        ylab="Magnitude")

Le boxplot montre une répartition relativement symétrique des magnitudes, avec des valeurs allant de 4 à 6.4.

4.3. Quelle forme de distribution observe-t-on pour la profondeur et la magnitude ? La distribution est-elle symétrique ? Y a-t-il des valeurs aberrantes (outliers) ?

# la commande `par` telle quelle permet d'afficher
# les deux graphiques suivants sur 1 ligne et 2 colonnes
par(mfrow = c(1,2))

boxplot(quakes$depth, 
        main="Boxplot des profondeurs des séismes", 
        ylab="Profondeur (km)")
hist(quakes$depth, 
     main="Distribution des profondeurs des séismes", 
     xlab="Profondeur (km)", 
     ylab="Occurrences")

Le boxplot montre une répartition asymétrique des profondeurs, avec des valeurs plus concentrées vers les profondeurs faibles à modérées. Il y a quelques valeurs plus élevées (profondeurs > 500 km) mais qui ne sont pas considérées comme des outliers compte tenu du boxplot.

# la commande `par` telle quelle permet d'afficher
# les deux graphiques suivants sur 1 ligne et 2 colonnes
par(mfrow = c(1,2))

boxplot(quakes$mag, 
        main="Boxplot des magnitudes", 
        ylab="Magnitude")
hist(quakes$mag, 
     main="Distribution des magnitudes des séismes", 
     xlab="Échelle de Richter", 
     ylab="Occurrences")

L’histogramme montre que la majorité des séismes ont une magnitude comprise entre 4.0 et 5.0. Quelques séismes ont une magnitude plus élevée, avec un maximum à 6.4. De plus, à partir du boxplot, on peut y observer quelques outliers (les points au dessus du boxplot).

5. Interprétation des résultats

5.1. Que pouvez-vous dire de la répartition des profondeurs et des magnitudes sur la base des histogrammes et des boxplots ?

Profondeur : La distribution des profondeurs est légèrement asymétrique, avec une majorité de séismes peu profonds (moins de 400 km), mais quelques séismes très profonds (> 500 km).

Magnitude : La magnitude des séismes est relativement concentrée autour de 4.6, avec une distribution symétrique.

5.2. Quelle différence observez-vous entre la moyenne et la médiane pour les profondeurs et les magnitudes ? Pourquoi ?

La moyenne de la profondeur (311.4 km) est plus élevée que la médiane (247 km), ce qui indique que la distribution est légèrement biaisée vers des profondeurs plus importantes (présence de valeurs extrêmes).

Pour la magnitude, la moyenne (4.62) et la médiane (4.6) sont presque égales, ce qui suggère une distribution symétrique.

Relation entre la profondeur et la magnitude des séismes :

À partir des statistiques descriptives réalisées jusqu’à maintenant, aucune relation n’est clairement visible entre la profondeur et la magnitude. Des analyses supplémentaires telles qu’une corrélation ou un régression pourraient être nécessaires pour confirmer une éventuelle relation.