Statistiques univariées


Avant-propos

Ce cours requiert d’avoir déjà été initié à R : Initiation à R.

La table est disponible sur le dépôt gitlab : Dépôt GitLab.

Préalablement à l’exercice, chargez les packages, puis ouvrez et préparez la table ainsi :

# Chargez les packages
library(readxl)
library(gtools)
library(ggplot2)
library(dplyr)

Attachement du package : 'dplyr'
Les objets suivants sont masqués depuis 'package:stats':

    filter, lag
Les objets suivants sont masqués depuis 'package:base':

    intersect, setdiff, setequal, union
library(car)
Le chargement a nécessité le package : carData

Attachement du package : 'car'
L'objet suivant est masqué depuis 'package:dplyr':

    recode
L'objet suivant est masqué depuis 'package:gtools':

    logit
# Importez la table (disponible ici : https://gitlab.huma-num.fr/tfeuillet/cours/data)
df <- read_excel("data/table_climato.xlsx")

# Discrétisez la variable "ampl" en terciles et renommez les niveaux
df$amplDisc <- quantcut(df$ampl, 3) 
levels(df$amplDisc) <- c("faible","moyenne","forte") 

# Discrétise la variable "jrs_neige" en quartiles et renommez les niveaux
df$neigeDisc <- quantcut(df$jrs_neige, 4) 
levels(df$neigeDisc) <- c("faible","moyenne","forte","très forte") 

 

1 Opérations sur des variables quantitatives

Voilà les fonctions de base en statistiques descriptives univariées :

Fonction Signification
min(x) Minimum
max(x) Maximum
range(x) Étendue
median(x) Médiane
mean(x) Moyenne
var(x) Variance
sd(x) Écart-type
quantile(x) Quantiles
summary(x) Moyenne, min-max et quantiles
psych::describe(x) La totale

Pour le coefficient de variation, il faut faire le calcul manuellement :

cvAlt <- sd(df$alt) / mean(df$alt)
cvAlt
[1] 1.097042

Souvent, on souhaite calculer ces statistiques pour plusieurs colonnes d’un coup. La fonction apply() est alors adaptée :

apply(df[,2:5], MARGIN = 2, FUN = "mean") # Calcul des moyennes pour les colonnes 2 à 5
   precip       alt      temp      ampl 
753.15152 146.48485  11.34545  15.71818 

 

2 Opérations sur des variables quantitatives en fonction de catégories de variables qualitatives

Imaginons que l’on souhaite calculer la moyenne d’une variable selon différents groupes d’une autre variable :

aggregate(df$precip, by=list(df$amplDisc), FUN = "mean")
  Group.1        x
1  faible 824.2500
2 moyenne 689.1667
3   forte 743.6667
psych::describeBy(df$precip, df$amplDisc, digits = 2) # Plus complet

 Descriptive statistics by group 
group: faible
   vars  n   mean     sd median trimmed    mad min  max range skew kurtosis
X1    1 12 824.25 133.05    835   819.8 163.09 634 1059   425 0.15    -1.41
      se
X1 38.41
------------------------------------------------------------ 
group: moyenne
   vars  n   mean   sd median trimmed   mad min max range  skew kurtosis    se
X1    1 12 689.17 60.6    708   690.7 76.35 586 777   191 -0.21    -1.52 17.49
------------------------------------------------------------ 
group: forte
   vars n   mean     sd median trimmed    mad min max range skew kurtosis    se
X1    1 9 743.67 122.62    731  743.67 109.71 588 992   404 0.69    -0.68 40.87

Avec dplyr, qui offre les solutions les plus maniables :

df2 <- df %>% group_by(amplDisc) %>% summarise(alt = mean(alt), 
                                               ppSd = sd(precip), 
                                               distLitt = mean(dist_litt))
df2
# A tibble: 3 × 4
  amplDisc   alt  ppSd distLitt
  <fct>    <dbl> <dbl>    <dbl>
1 faible    67.7 133.      67.8
2 moyenne  127.   60.6    258. 
3 forte    278.  123.     459. 

 

3 Les graphiques univariés

Quel que soit le graphique concerné, on peut toujours le produire via les fonctions de base ou ggplot2.

3.1 Histogrammes

hist(df$temp, col = "darkblue", border = "white", 
     main = "Distribution des températures", xlab = "Temp. en degrés", ylab = "Fréquence")

ggplot(data = df, aes(temp)) + 
  geom_histogram(bins = 7, col = "white", fill = "darkblue")+
  labs(title = "Distribution des températures", x = "Temp. en degrés")

3.2 Boites à moustaches (boxplots)

boxplot(df$temp, col = "grey50", main = "Boxplot des températures")

Avec car::Boxplot() :

par(mfrow = c(1,2)) # syntaxe pour placer 2 figures côte à côte
Boxplot(~ampl, data=df, col = "grey50", main = "Amplitude thermique annuelle")
[1] "7"
Boxplot(~temp, data=df, col = "grey50", main = "Températures")

[1] "16" "18" "26"

 

3.3 Diagramme en violons

ggplot(data = df, aes(y=temp, x=amplDisc)) + 
  geom_violin(fill = "grey40")

3.4 Diagrammes en bâtons

# A appliquer sur la table de comptage (le tableau de contingence)
barplot(table(df$amplDisc), main = "Amplitudes thermiques")