[STA2C] : Statistique bivariée : X et Y quantitatives

GEO UNIV’R Tunisie 2024

Auteur·rice

Claude Grasland, Malika Madelin

Date de publication

2024-05-13

1.DONNEES

Nous allons charger ici un fichier de données climatiques sur la Tunisie

Télécharger le jeux de données

Importation des données

# Importe les données
library(readxl)
don<-read_xlsx(path = "data/TUN-CLIMAT/tun_climat.xlsx",
              sheet = "data")
kable(don, caption = "Tableau de données")
Tableau de données
code nom reg_code reg_nom lat lon alt tmin tmax tmoy prec vent rosee
BJ Beja NO Nord-ouest 36.73333 9.183333 159.00 11.45894 24.62033 18.55692 590.000 6.436291 10.881502
BZ Bizerte NE Nord-est 37.24545 9.791453 6.09 13.36735 23.96475 18.73467 639.000 13.080826 13.507263
GB Gabes SE Sud-est 33.87692 10.103333 7.92 15.62121 25.44585 20.64563 192.000 11.564158 12.396331
GF Gafsa SO Sud-ouest 34.42202 8.822503 323.08 13.73596 26.88865 20.42736 163.000 12.759514 7.894512
JE Jendouba NO Nord-ouest 36.48333 8.800000 144.00 12.03502 25.75739 19.17381 458.000 8.187385 11.549468
KR Kairouan CO Centre-ouest 35.66667 10.100000 68.00 15.05704 27.37991 20.88537 303.000 5.826256 10.894726
KS Kasserine CO Centre-ouest 35.16667 8.833333 707.00 11.47720 24.13852 18.46683 340.000 12.853035 8.366253
KB Kebili SO Sud-ouest 33.70000 8.966667 46.00 15.34825 28.66706 22.71979 89.000 14.061362 10.373775
KF Le Kef NO Nord-ouest 36.13333 8.700000 518.00 10.30506 23.19958 17.24170 528.000 8.246948 8.059934
MH Mahdia CE Centre-est 35.50000 11.066667 12.00 16.50674 23.29379 20.16491 290.000 10.854368 14.624500
ME Medenine SE Sud-est 33.35000 10.483333 117.00 16.17117 27.56439 22.57362 159.000 8.743863 11.404804
MS Monastir CE Centre-est 35.66667 10.750000 2.00 15.64783 24.26410 19.76152 322.062 13.888661 13.587094
NB Nabeul NE Nord-est 36.46667 10.700000 78.00 15.70167 23.43309 19.81197 450.000 12.190401 14.033335
SF Sfax CE Centre-est 34.71795 10.690972 25.90 14.88812 25.24082 20.05744 221.000 11.408961 12.427977
SZ Sidi Bou Zid CO Centre-ouest 35.00000 9.483333 355.00 13.03144 26.20685 20.25616 280.000 8.283933 9.461638
SL Siliana NO Nord-ouest 36.06667 9.366667 445.00 11.36109 24.50220 19.02255 389.000 9.242761 9.455365
SS Sousse CE Centre-est 35.70000 10.600000 5.00 15.70000 24.40000 19.90000 310.000 12.500000 13.600000
TA Tataouine SE Sud-est 32.91667 10.450000 215.00 15.90320 27.20100 21.41218 110.000 10.298155 9.182343
TO Tozeur SO Sud-ouest 33.93972 8.110556 87.47 16.83189 28.64269 22.63410 97.000 14.732460 8.697420
TU Tunis NE Nord-est 36.85103 10.227217 6.70 14.26899 24.61744 19.14238 453.000 13.405618 12.626422
ZA Zaghouan NE Nord-est 36.43333 10.083333 156.00 12.43361 25.06573 18.57657 501.000 10.331711 11.907365

Liste des variables

On charge ensuite le fichier des métadonnées:

# Importe les métadonnées
meta<-read_xlsx(path = "data/TUN-CLIMAT/tun_climat.xlsx",
              sheet = "meta")
kable(meta, caption = "Tableau de métadonnées")
Tableau de métadonnées
variable def
code code de la station
nom nom de la station
reg_code code de la région
reg_nom nom de la region
gouv_nom nom du gouvernorat
lat Latitude
lon Longitude
alt Altitude (en mètres)
tmin Moyenne de Tmin
tmax Moyenne de Tmax
tmoy Moyenne de Tmoy
prec Moyenne de précipitations totales
vent Moyenne de vent km/h
rose Moyenne de point de rosée

1.2 Choix des deux variables à analyser

On suppose qu’on ne s’intéresse qu’aux variables latitude (lat) et précipitations (prec) que l’on va renommer espectivement X (variable explicative) et Y (variable à expliquer)

don<-don[,c("code","nom","lat","tmoy")]
colnames(don)<-c("code","nom","X","Y")
kable(head(don))
code nom X Y
BJ Beja 36.73333 18.55692
BZ Bizerte 37.24545 18.73467
GB Gabes 33.87692 20.64563
GF Gafsa 34.42202 20.42736
JE Jendouba 36.48333 19.17381
KR Kairouan 35.66667 20.88537

1.3 On est malin …

Pour pouvoir produire des graphiques en français ou en arabes, on stocke dans des variables le titre, la source et le nom des deux indicateurs.

# Pour la version française
titre <- "Température et latitude en Tunisie"
nomX <- "Latitude"
nomY <- "Température moyenne"

2. EXPLORATION VISUELLE

2.1 Visualisation avec plot(X,Y)

La manière la plus simple d’analyser la relation entre X et Y est d’utiliser un simple plot

plot(don$X,don$Y)

2.1 Visualisation avec plot(X,Y)

La fonction plot() comporte de nombreux paramètres permettant d’améliorer le graphique et de l’habiller. Voici un exemple d’habillage

plot(don$X,don$Y,
     main = titre,   # titre
     cex.main = 1,      # police du titre
     cex.sub = 0.6,     # police du sous-titre
     xlab = nomX,    # nom de l'axe X
     xlim = c(32.7,37.5),   # intervalle de l'axe X
     ylab = nomY,    # nom de l'axe Y
    ylim = c(17,24),    # intervalle de l'axe Y
     cex.axis = 0.8,    # police des gradations d'axes
     cex.lab = 0.8,     # police des noms d'axes
     cex = 0.6,         # taille des symboles
     col = "blue")       # couleur des symboles

2.2 Identification des points avec text(…)

On peut ajouter au graphique généré par plot(X,Y) une couche de labels avec text(X,Y,Code). On précise la position avec pos =, la taille de police avex cex = et la couleur avec col =.

plot(don$X,don$Y,
     main = titre,   # titre
     cex.main = 1,      # police du titre
     cex.sub = 0.6,     # police du sous-titre
     xlab = nomX,    # nom de l'axe X
     xlim = c(32.7,37.5),   # intervalle de l'axe X
     ylab = nomY,    # nom de l'axe Y
    ylim = c(17,24),    # intervalle de l'axe Y
     cex.axis = 0.8,    # police des gradations d'axes
     cex.lab = 0.8,     # police des noms d'axes
     cex = 0.6,         # taille des symboles
     col = "blue")       # couleur des symboles
text(x = don$X,
     y = don$Y,
     label = don$code,
     cex = 0.7,
     pos=3,
     col = "blue")

2.3 Ajout de lignes horizontales ou verticales avec abline(…)

On peut rajouter à un graphique des lignes horizontales ou verticales avec abline en précisant leur position avec h= ou v=, leur épaisseur avec lwd = , leur style avec lty= et leur couleur avec col=

plot(don$X,don$Y,
     main = titre,   # titre
     cex.main = 1,      # police du titre
     cex.sub = 0.6,     # police du sous-titre
     xlab = nomX,    # nom de l'axe X
     xlim = c(32.7,37.5),   # intervalle de l'axe X
     ylab = nomY,    # nom de l'axe Y
    ylim = c(17,24),    # intervalle de l'axe Y
     cex.axis = 0.8,    # police des gradations d'axes
     cex.lab = 0.8,     # police des noms d'axes
     cex = 0.6,         # taille des symboles
     col = "blue")       # couleur des symboles


# Ajout d'une ligne horizontale  correspondant à la moyenne de Y
abline(h=mean(don$Y),col="red",lwd = 1, lty = 2)
# Ajout d'une ligne verticlae  correspondant à la moyenne de X
abline(v=mean(don$X),col="red",lwd = 1, lty = 2)

text(x = don$X,
     y = don$Y,
     label = don$code,
     cex = 0.7,
     pos=3,
     col = "blue")

La fonction abline() peut servir aussi à tracer la droite de régression Y=aX+b produite par la fonction lm() sur laquelle nous reviendrons plus tard.

2.4 Au delà de R-Base …

Il existe des packages spécialisés permettant de faire des graphiques plus sophistiqués. Mais on les apprendra ultérieuement. Juste un exemple :

library(car)
scatterplot(don$X,don$Y)

3. RAPPELS SUR LA CORRELATION

3.1 relation linéaire/monotone/complexe

  • il existe une relation linéaire entre deux variables quantitatives X et Y si l’on peut prédire leurs valeurs respectives par les fonctions Y = a1.X + b1 et X = a2.X = b2

  • il existe une relation monotone entre deux variables quantitatives X et Y si l’on peut prédire les valeurs Y en fonction de celle de X far une fonction Y=f(X) qui est strictement croissante ou strictement décroissante.

  • il existe une relation complexe entre deux variables quantitatives X et Y si l’on peut prédire les valeurs Y en fonction de celle de X par une fonction Y=f(X) qui comporte au moins un point minimum ou maximum de changement de pente (annulation de la dérivée première)

3.1 relation linéaire/monotone/complexe

3.2 relation positive/négative/nulle

  • Une relation linéaire ou monotone est positive si à un accroissement de X correspond un accroissement de Y

  • Une relation linéaire ou monotone est négative si à un accroissement de X correspond une diminution de Y

  • une relation est nulle si une variation de X n’entraine pas de variation de Y

3.2 relation positive/négative/nulle

3.3 : relation forte/faible/nulle

  • Une relation linéaire est forte si une valeur de X permet de prédire la valeur de Y avec une faible marge d’erreur.

  • Une relation linéaire ou monotone est faible si une valeur de X permet de prédire la valeur de Y avec une forte marge d’erreur.

  • une relation linéaire est nulle si une valeur de X ne permet aucunement de prédire la valeur de Y

3.3 : relation forte/faible/nulle

3.4 : relation significative/non siginificative

  • Une relation linéaire est significative si l’effectif permettant de la mettre en évidence est suffisamment grand pour qu’on puisse exclure qu’elle soit l’effet du hasard.

  • Une relation linéaire ou monotone est non significative si l’effectif permettant de la mettre en évidence n’est pas suffisamment grand pour qu’on puisse exclure qu’elle soit l’effet du hasard.

  • On considère traditionnellement qu’une relation est significative s’il y a moins de 5% de chances qu’elle soit l’effet du hasard (p-value < 0.05).

3.4 : relation significative/non siginificative

4. ANALYSE DE CORRELATION DANS R

4.1 Sens de la relation

  • La fonction cor() permet de mesurer le coefficient de corrélation de deux variable X et Y.
  • Elle permet de détecter les relations linéaires en choisissant le paramètre (par défaut) method = pearson
  • Elle permet de détecter les relations non linéaires en choisissant le paramètre method = spearman qui mesure l’existence d’une relation monotone entre les rangs de X et Y

4.1 Sens de la relation

  • La syntaxe de la fonction cor() est très simple et permet de calculer trois types de corrélation. La méthode par défaut est pearson c’est-à-dire le coefficient de corrélation linéaire
cor(don$X,don$Y)
[1] -0.7966527
cor(don$X,don$Y, method = "spearman")
[1] -0.7779221

4.2 forme de la relation

4.2 forme de la relation

4.3 Intensité de la relation

Pour calculer l’intensité d’une relation, on calcule le carré du coefficient de corrélation appelé coefficient de détermination et noté r2 et souvent exprimé en %. Il permet de connaître le pouvoir explicatif du modèle de régression Y = aX+b

r2 <- 100*cor(don$X,don$Y)**2
r2
[1] 63.46554

4.3 Intensité de la relation

4.4. significativité de la relation

  • la fonction cor() permet de savoir si une relation est forte ou faible, positive ou négative, linéaire ou non linéaire. Mais cor() ne permet pas de savoir si une relation est significative ou pas.

  • En effet une relation peut être forte mais non significative si elle a été calculée sur un échantillon trop petit.

  • il faut donc effectuer un test pour obtenir une probabilité de rejet de l’hypothèse H0 d’absence de relation entre X et Y.

  • p-value > 0.10 : relation non significative

  • 0.10 > p-value > 0.05 : relation presque significative

  • p-value < 0.05 : relation significative

  • p-value < 0.01 : relation très significative

3.4 significativité de la relation

  • A gauche : une relation forte mais non significative
  • A droite : une relation faible mais très significative

4.4. significativité de la relation

  • C’est la fonction cor.test() qui permet de tester la significativité d’une relation en fournissant un intervalle de confiance du coefficient de corrélation et une probabilité de rejet de H0 appelée p-value.
cor.test(don$Y,don$X)

    Pearson's product-moment correlation

data:  don$Y and don$X
t = -5.7451, df = 19, p-value = 1.549e-05
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.9140080 -0.5562694
sample estimates:
       cor 
-0.7966527 

3.5 Conclusion

Alors qu’en est-il pour la relation température moyenne / altitude ?

Cette relation est :

  • négative : \(r_{X,Y} < 0\)
  • linéaire : \(r_{X,Y} \approx \rho_{X,Y}\)
  • forte : \(r^2 = 79\%\)
  • très signifcative : \(p_{value} < 0.001\)