Dans le cadre de ce tutoriel, nous utiliserons le dataframe hdv2003 du package questionr. Celui-ci est issu de l’enquête “Histoire de Vie” de l’INSEE. Vous pouvez télécharger ces données en cliquant sur ce lien.

Prérequis de ce tutoriel

Installer le package questionr

install.packages("questionr", dep=TRUE)

Appeler la librairie questionr

    library(questionr)

Puisque le dataframe est inclus dans le package, nous n’avons pas besoin d’utiliser la commande read.csv2 pour charger le dataframe dans une variable (data <- read.csv2("votre_dataframe.csv")). Au lieu de cela, nous appellerons le dataframe hdv2003 dans RStudio comme suit :

Importer le dataframe

Celui-ci apparait maintenant dans votre fenêtre Environnement.

Cette enquête regroupe des informations sur 2000 individus et sur une vingtaine de variables. Regardons un peu la nature de celles-ci en utilisant la commande str() et leurs noms avec names():

    names(hdv2003)
##  [1] "id"            "age"           "sexe"          "nivetud"      
##  [5] "poids"         "occup"         "qualif"        "freres.soeurs"
##  [9] "clso"          "relig"         "trav.imp"      "trav.satisf"  
## [13] "hard.rock"     "lecture.bd"    "peche.chasse"  "cuisine"      
## [17] "bricol"        "cinema"        "sport"         "heures.tv"
    str(hdv2003)
## 'data.frame':    2000 obs. of  20 variables:
##  $ id           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ age          : int  28 23 59 34 71 35 60 47 20 28 ...
##  $ sexe         : Factor w/ 2 levels "Homme","Femme": 2 2 1 1 2 2 2 1 2 1 ...
##  $ nivetud      : Factor w/ 8 levels "N'a jamais fait d'etudes",..: 8 NA 3 8 3 6 3 6 NA 7 ...
##  $ poids        : num  2634 9738 3994 5732 4329 ...
##  $ occup        : Factor w/ 7 levels "Exerce une profession",..: 1 3 1 1 4 1 6 1 3 1 ...
##  $ qualif       : Factor w/ 7 levels "Ouvrier specialise",..: 6 NA 3 3 6 6 2 2 NA 7 ...
##  $ freres.soeurs: int  8 2 2 1 0 5 1 5 4 2 ...
##  $ clso         : Factor w/ 3 levels "Oui","Non","Ne sait pas": 1 1 2 2 1 2 1 2 1 2 ...
##  $ relig        : Factor w/ 6 levels "Pratiquant regulier",..: 4 4 4 3 1 4 3 4 3 2 ...
##  $ trav.imp     : Factor w/ 4 levels "Le plus important",..: 4 NA 2 3 NA 1 NA 4 NA 3 ...
##  $ trav.satisf  : Factor w/ 3 levels "Satisfaction",..: 2 NA 3 1 NA 3 NA 2 NA 1 ...
##  $ hard.rock    : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
##  $ lecture.bd   : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
##  $ peche.chasse : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 2 2 1 1 ...
##  $ cuisine      : Factor w/ 2 levels "Non","Oui": 2 1 1 2 1 1 2 2 1 1 ...
##  $ bricol       : Factor w/ 2 levels "Non","Oui": 1 1 1 2 1 1 1 2 1 1 ...
##  $ cinema       : Factor w/ 2 levels "Non","Oui": 1 2 1 2 1 2 1 1 2 2 ...
##  $ sport        : Factor w/ 2 levels "Non","Oui": 1 2 2 2 1 2 1 1 1 2 ...
##  $ heures.tv    : num  0 1 0 2 3 2 2.9 1 2 2 ...

Variable : Description

Nous avons ici un mélange de variables qualitatives et quantitatives qui nous serviront à illustrer plusieurs grands classiques en terme d’outils statistiques.

L’âge, le poids, le nombre de frères et soeurs ainsi que le nombre d'heures passées devant la télévision sont numériques (num dans RStudio) sous la forme de facteurs, ou sous la forme d’un nombre entier (int).

Les autres variables, sont quant à elles, des variables qualitatives ordonnées (appelées factor)

Manipulation du dataframe

On supprime la variable id qui corresponds à l’identifiant des personnes interviewées suivant le numéro de ligne. Elle a beau être identifiée comme numérique, elle est en réalité qualitative, et n’apporte ici aucun renseignement si ce n’est le nombre d’observations totale. Voici 3 manières de supprimer une variable :

    # Option 1 
    hdv2003.bis <- hdv2003[,-1] # efface variable id (colonne 1)
    # Option 2
    hdv2003$id <- NULL  # ATTENTION, cette instruction modifie de manière permanente votre dataframe d'origine
    # Option 3
    hdv2003.ter <- subset(hdv2003, select = c(age, sexe, nivetud, poids, occup, qualif,freres.soeurs, clso, 
    relig, trav.imp, trav.satisf, hard.rock, lecture.bd, peche.chasse, cuisine, bricol,cinema, sport, heures.tv ))

La troisième méthode, avec la fonction subset() est plus rapide car il n’est pas utile de préfixer les variables du nom du dataframe (ici hdv2003).Dans notre cas de figure, on choisit la première proposition (plus rapide à écrire et qui crée une variable provisoire) : hdv2003.bis <- hdv2003[,-1]

L’analyse univariée

Que ce soit pour une variable qualitative ou numérique, je vous conseille de commencer avec la fonction summary(), qui donne les effectifs des variables qualitatives et, pour les variables numériques, des indicateurs de centralité et de dispersion comme la moyenne et les quartiles.

    summary(hdv2003.bis)
##       age           sexe     
##  Min.   :18.00   Homme: 899  
##  1st Qu.:35.00   Femme:1101  
##  Median :48.00               
##  Mean   :48.16               
##  3rd Qu.:60.00               
##  Max.   :97.00               
##                              
##                                                  nivetud   
##  Enseignement technique ou professionnel court       :463  
##  Enseignement superieur y compris technique superieur:441  
##  Derniere annee d'etudes primaires                   :341  
##  1er cycle                                           :204  
##  2eme cycle                                          :183  
##  (Other)                                             :256  
##  NA's                                                :112  
##      poids                            occup     
##  Min.   :   78.08   Exerce une profession:1049  
##  1st Qu.: 2221.82   Chomeur              : 134  
##  Median : 4631.19   Etudiant, eleve      :  94  
##  Mean   : 5535.61   Retraite             : 392  
##  3rd Qu.: 7626.53   Retire des affaires  :  77  
##  Max.   :31092.14   Au foyer             : 171  
##                     Autre inactif        :  83  
##                       qualif    freres.soeurs             clso     
##  Employe                 :594   Min.   : 0.000   Oui        : 936  
##  Ouvrier qualifie        :292   1st Qu.: 1.000   Non        :1037  
##  Cadre                   :260   Median : 2.000   Ne sait pas:  27  
##  Ouvrier specialise      :203   Mean   : 3.283                     
##  Profession intermediaire:160   3rd Qu.: 5.000                     
##  (Other)                 :144   Max.   :22.000                     
##  NA's                    :347                                      
##                          relig                             trav.imp  
##  Pratiquant regulier        :266   Le plus important           : 29  
##  Pratiquant occasionnel     :442   Aussi important que le reste:259  
##  Appartenance sans pratique :760   Moins important que le reste:708  
##  Ni croyance ni appartenance:399   Peu important               : 52  
##  Rejet                      : 93   NA's                        :952  
##  NSP ou NVPR                : 40                                     
##                                                                      
##          trav.satisf  hard.rock  lecture.bd peche.chasse cuisine   
##  Satisfaction  :480   Non:1986   Non:1953   Non:1776     Non:1119  
##  Insatisfaction:117   Oui:  14   Oui:  47   Oui: 224     Oui: 881  
##  Equilibre     :451                                                
##  NA's          :952                                                
##                                                                    
##                                                                    
##                                                                    
##  bricol     cinema     sport        heures.tv     
##  Non:1147   Non:1174   Non:1277   Min.   : 0.000  
##  Oui: 853   Oui: 826   Oui: 723   1st Qu.: 1.000  
##                                   Median : 2.000  
##                                   Mean   : 2.247  
##                                   3rd Qu.: 3.000  
##                                   Max.   :12.000  
##                                   NA's   :5

Interprétation d’une variable quantitative

Evidemment, il existe aussi une fonction pour chaque paramètre :

Les indicateurs de centralité

median(hdv2003.bis$age) # médiane
## [1] 48
mean(hdv2003.bis$age) # moyenne
## [1] 48.157

Les indicateurs de dispersion

quantile(hdv2003.bis$age) # quantiles
##   0%  25%  50%  75% 100% 
##   18   35   48   60   97
sd(hdv2003.bis$age) # écart-type
## [1] 16.94181
var(hdv2003.bis$age) # variance
## [1] 287.0249

Représentation graphique d’une variable quantitative

Pour représenter une variable numérique, on réalise communément un histogramme.On en crée ici deux :

Le premier, sans modifier le nombre de classes et en indiquant les effectifs de celles-ci :

hist(hdv2003.bis$age, col = "purple", border = "white",
         main = paste("Ages des", nrow(hdv2003.bis), "interviewés"),
         xlab = "âge[années]", ylab = "Effectifs", 
         ylim = c(0, 250),
         xlim = c(0,100),
         labels = TRUE)

Le second indique les fréquences relatives grâce à l’argument proba = TRUE qui nous permet de rajouter une ligne de densité. Observez que nous avons aussi changé le nombre de classes avec l’option nclass=x:

hist(hdv2003.bis$age, nclass=8,
         col = "purple", border = "white",
         main = paste("Ages des", nrow(hdv2003.bis), "interviewés") ,
         xlab = "âges[années]", ylab = "Densité",
         ylim = c(0,0.025),
         xlim = c(0,100),
         proba = TRUE)
    lines(density(hdv2003.bis$age, na.rm = TRUE), lwd = 2, col = "orange" )


Interprétation d’une variable qualitative

Dans un premier temps, on fait un tri à plat des effectifs de la variable “qualification” à l’aide de la fonction table() ou de la fonction summary() vu précédemment (l’avantage est qu’il affiche les valeurs manquantes (N/A) :

    summary(hdv2003.bis$qualif)
##       Ouvrier specialise         Ouvrier qualifie               Technicien 
##                      203                      292                       86 
## Profession intermediaire                    Cadre                  Employe 
##                      160                      260                      594 
##                    Autre                     NA's 
##                       58                      347

Ici on a peu de modalités, mais je vous conseille, si vous en avez un grand nombre, de les classer avec la fonction sort() + decreasing =TRUE pour y voir plus clair ! Grâce à cette fonction on calcule le mode de notre variable :

    sort(table(hdv2003.bis$qualif), decreasing = TRUE) 
## 
##                  Employe         Ouvrier qualifie                    Cadre 
##                      594                      292                      260 
##       Ouvrier specialise Profession intermediaire               Technicien 
##                      203                      160                       86 
##                    Autre 
##                       58

L’option decreasing=TRUE affiche les modalités par ordre décroissant d’effectifs On note que l’on a beaucoup de valeurs manquantes dans ce jeu de données : 347 N/A pour la variable qualification de notre dataframe. De manière décoissante, on obtient les effectifs des employés, des ouvriers qualifiés, suivi des cadres.

Calcul d’un tableau d’effectifs et des fréquences relatives

A partir de la fonction table(), nous pouvons obtenir les fréquences relatives et absolues :

unique(hdv2003.bis$cinema)#la fonction unique renvoit à l'ensemble des modalités de la variable
## [1] Non Oui
## Levels: Non Oui
effectifs <- table(hdv2003.bis$cinema)
sum(effectifs) # nombre totale d'observations
## [1] 2000
effectifs
## 
##  Non  Oui 
## 1174  826

Le tableau des fréquences (en pourcentage) s’obtient en divisant les effectifs par la taille de l’´echantillon

frequence <- effectifs*100/sum(effectifs)
frequence
## 
##  Non  Oui 
## 58.7 41.3

Vous pouvez aussi utiliser la commande prop.table() :

prop.table(effectifs) # fréquences relatives
## 
##   Non   Oui 
## 0.587 0.413
prop.table(effectifs)* 100 # fréquence absolues
## 
##  Non  Oui 
## 58.7 41.3

Pour obtenir les effectifs cumulés, on utilise la fonction cumsum()

effcum <- cumsum(effectifs)
effcum
##  Non  Oui 
## 1174 2000

Représentation graphique d’une variable qualitative

On représente les effectifs en réalisant un diagramme en batons avec la fonction barplot

    barplot(table(hdv2003.bis$occup), 
            horiz = TRUE,las=1, 
            col = "purple", 
            border = "white",
            main ="Effectif par situation professionelle",
            xlab = "Effectifs")


Analyse bivariée : croiser ses données

L’utilisation des tests statistiques, ne peut se faire qu’en vérifiant certaines conditions : cette phase est appelée le diagnostique de régression (le plus souvent ayant trait au fait que la/les variable(s) suivent un loi dite Normale). Si c’est le cas on utilise les tests paramétriques. Si les conditions ne sont pas réunies , on effectue le test non-paramétrique associé.

Avec deux variables qualitatives : le tableau de contingence

Pour faire un tableau de contingence (ou tableau croisé) sous R, on utilise la fonction table() vue précédemment en indiquant les deux variables qui nous intéressent. Croisons les gens qui sont allés au cinéma et ceux qui ont eu lu des bandes dessinées ces douzes derniers mois.

On regarde la répartition des sexe en fonction de leur pratique de sport. modèle :table(var1,var2,deparse.level=2,useNA= «always»)

table(dataframe$var1,dataframe$var2)

table(hdv2003.bis$cinema,hdv2003.bis$lecture.bd,deparse.level = 2, useNA = "always")
##                   hdv2003.bis$lecture.bd
## hdv2003.bis$cinema  Non  Oui <NA>
##               Non  1156   18    0
##               Oui   797   29    0
##               <NA>    0    0    0
# on place le résultat de la fonction table() dans un objet appelé "effectif" pour calculer rapidement la fréquence relative par la suite
effectifs <- table(hdv2003.bis$cinema,hdv2003.bis$lecture.bd,deparse.level = 2, useNA = "always") 
effectifs # on obtient les effectifs
##                   hdv2003.bis$lecture.bd
## hdv2003.bis$cinema  Non  Oui <NA>
##               Non  1156   18    0
##               Oui   797   29    0
##               <NA>    0    0    0
prop.table(effectifs) # fréquences relatives
##                   hdv2003.bis$lecture.bd
## hdv2003.bis$cinema    Non    Oui   <NA>
##               Non  0.5780 0.0090 0.0000
##               Oui  0.3985 0.0145 0.0000
##               <NA> 0.0000 0.0000 0.0000
prop.table(effectifs)* 100 # fréquence absolues (pourcentage)
##                   hdv2003.bis$lecture.bd
## hdv2003.bis$cinema   Non   Oui  <NA>
##               Non  57.80  0.90  0.00
##               Oui  39.85  1.45  0.00
##               <NA>  0.00  0.00  0.00

Les résultats sont ici très contrastés. Nous avons 57,8%, et 39,9% de personnes qui n’ont pas lu cette année, ou été au cinéma.

Notes : vous pouvez remplacer la fonction table() par xtabs(). L’avantage de cette commande est de ne pas avoir à préfixer le nom des variables par le nom du dataframe.

Le test du Khi-2 (ou Chi-2)

Pour tester le lien entre deux variables qualitatives on utilise le test du Khi-2 (test paramétrique), ou, si les conditions du diagnostic de régression ne sont pas remplies, on utilise le test exact de Fisher (test non-paramétrique). Ces deux tests sont pratique pour comparer des pourcentages.

Condition de validité du Khi-2

  • Les valeurs de toutes les cases du tableau des effectifs doivent être supérieur à 5
  • Les pourcentages ne sont pas trop proche de zéro ou de 100%

Existe-t’il un lien entre les variables cinéma et lecture BD ?

chisq.test(hdv2003.bis$cinema ,hdv2003.bis$lecture.bd)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  hdv2003.bis$cinema and hdv2003.bis$lecture.bd
## X-squared = 7.4246, df = 1, p-value = 0.006434

Le résultat de p est 0.006. Il est donc très largement inférieur à 5%. Le hasard ne peut expliquer à lui tout seul la différence qu’il existe entre ces deux variables : la différence est vraiment significative, on a bien un lien potentiel.

bientôt : Ho / H1

Le test exact de Fisher - test non-paramétrique

fisher.test()

Représentation graphique de variables qualitatives à plusieurs modalités

Pour représenter les différents rapports entre les effectifs des modalités de deux variables qualitatives, on crée un schéma en forme de mosaïque avec la fonction mosaicplot. On prend l’exemple ici

mosaicplot(sport  ~ nivetud, data = hdv2003.bis, shade = TRUE,main ="Graphique en mosaïque", las=1)


Avec une variable qualitative et une variable quantitative

Lorsque l’on croise deux variables, qualitative et quantitative, c’est souvent pour exprime la variable quantitative (ici l’âge), en fonction des modalités de la variable qualitative (ic, le fait d’être aller au cinéma).

Tout d’abord il est intéressant de les représenter graphiquements au moyen de boîtes à moustaches côte à côte, pour mieux comparer les dispersions des chaques modalités de la variable qualitative.

boxplot(hdv2003.bis$age ~ hdv2003.bis$cinema,
col = "purple", border = "black",
main = "Cinéma en fonction de l'âge",
ylab = "âges[années]"
)

La “boîte” corresponds à 50% des observations (délimitée par le 1er et 3ème quartile). Les “moustaches”, représentent les limites au delà lequel on trouve des valeurs aberrantes (erreurs de saisie) ou des valeurs extrêmes.

Nous allons nous intéresser au lien qui existe, peut-être, entre l’âge et le fait d’être allé au cinéma . Je vais croiser mes variables, indiquer ma fonction (ici mean), et je rajoute l’option na.rm=TRUE pour ne pas prendre en compte les valeurs manquantes :

tapply(hdv2003.bis$age, hdv2003.bis$cinema, mean, na.rm=TRUE)
##      Non      Oui 
## 54.07666 39.74334

Ceux qui ne sont pas allés au cinéma ces douzes derniers mois ont en moyenne 54 ans, contre 40 ans pour ceux qui y sont allés. La différence de moyenne d’âge est assez importante. La question est maintenant de savoir si cette **différence est vraiment significative ou si elle est le fruit du hasard?*.

  • Que valent ces deux moyennes, en terme de significativité à l’échelle nationale par exemple?
  • Comment passer de notre échantillon à ce qu’on imagine en terme de résultat dans l’ensemble de la population ?

Le test de Student & et le test de Wilcoxon

Pour comparer des moyennes issues d’une variable numérique et catégorielle, on utilise soit le test de Student, soit le test de Wilcoxon.

Conditions de validité T de Student :

  • La distribution de la variable numérique doit suivre une loi normale
  • n>30 (n=le nbr d’observations/sujets) par groupe
  • La variance de notre variable dans chaque groupe soit égale
Vérifions les conditions de validité pour nos variables :

1 / Suivent-elles une loi normale?

hist(hdv2003.bis$age) # oui, cette variable suit une loi normale

On peut être plus précis encore, pour aprécier la distribution en utilisant les fonctions qqnorm() et qqline() :

qqnorm(hdv2003.bis$age) ; qqline(hdv2003.bis$age)

2 / Les variances sont-elles égales? On calcul l’écart-type de l’âge selon que l’on aille ou pas au cinéma. L’écart-type, est plus simple à interpréter que la variance.On utilise la fonction by() selon ce modèle :

by(var.étudié,var.sous.groupe, notre fonction (ici sd), na.rm=TRUE)

by(hdv2003.bis$age,hdv2003.bis$cinema, sd, na.rm=TRUE)
## hdv2003.bis$cinema: Non
## [1] 16.24039
## -------------------------------------------------------- 
## hdv2003.bis$cinema: Oui
## [1] 14.13234
var.test(hdv2003.bis$age ~ hdv2003.bis$cinema) #demander interprétation
## 
##  F test to compare two variances
## 
## data:  hdv2003.bis$age by hdv2003.bis$cinema
## F = 1.3206, num df = 1173, denom df = 825, p-value = 1.858e-05
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  1.163401 1.496893
## sample estimates:
## ratio of variances 
##            1.32058
# c'est le ratio entre les deux variances qui a l'intervalle de confiance
# 95% des ration entre les 2 variances sont compris entre 1.16 - 1.4

Les conditions de validité pour effectuer le test T de Student sont réuni. Passons maintenant à la réalisation du test avec la fonction t.test() :

t.test(age ~ cinema, data=hdv2003.bis, var.equal=TRUE)
## 
##  Two Sample t-test
## 
## data:  age by cinema
## t = 20.488, df = 1998, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  12.96129 15.70535
## sample estimates:
## mean in group Non mean in group Oui 
##          54.07666          39.74334

On rajoute l’argument var.equal=TRUE sinon, par défaut, R va utiliser l’approximation de Welch,qui permet d’avoir un test t même quand les variances sont inégales, mais qui est moins “robuste”.

Le test est très significatif avec un p-value bien inférieure à 5%

Paragraphe sur le petit p-value Comment le lire Quescequ’il ve dire

Le test de Wilcoxon

Si les conditions de validités n’avait pas été respectées, on aurait utiliser le test de Wilcoxon la particularité de ce test est qu’il compare des “rangs” d’individus, et non une moyenne, comme dans le test de Student (ce qui le rend, intrasèquement, moins pratique à interpréter).

wilcox.test(hdv2003.bis$age~hdv2003.bis$cinema, conf.int=TRUE) 
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  hdv2003.bis$age by hdv2003.bis$cinema
## W = 722110, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
## 95 percent confidence interval:
##  13.00003 16.00005
## sample estimates:
## difference in location 
##               14.99996
# Remarque :  l'arg conf.int=TRUE rajoute un intervalle de confiance à notre résultat

Avec deux variables quantitatives

Passons au domaine du petit écran ! On s’intéresse toujours à notre variable âge, mais liée cette fois-ci, à la variable numérique heures.tv.

Réaliser un tableau d’effectifs croisé est illisible sur des variables numériques. On préfère à cela créer un nuage de points à l’aide de la fonction plot():

plot(hdv2003.bis$age,hdv2003.bis$heures.tv, col="cornflowerblue")

Ce diagramme apporte des informations intéressantes, mais il n’y a pas l’air d’avoir 2000 observations.

Pourquoi?
Il a sans doute beaucoup de couples de valeurs similaires qui, une fois superposés, apparaissent comme une seule observation.Pour éviter cela on utilise la fonction jitter() qui décale légèrement les points de façon à faire apparaitre l’ensemble des observations.

plot(jitter(hdv2003.bis$age),jitter(hdv2003.bis$heures.tv), col="cornflowerblue")

# On est bien loin d'une relation linéaire ! 

Interprétation: on observe que le nombre d’heures de télévision en massivement entre 0h et 4h par jour A première vu, il n’y a pas de corrélation entre ces deux variables. Au vue de l’aspect du nuage de points.

Le coefficient de corrélation de Pearson

Deux variables sont dites dépendantes quand la connaissance de l’une donne une indication sur la valeur de l’autre. On parle de «force» de liaison. Pour calculer cette force entre deux variables quantitatives, on utilise la corrélation de Pearson.

Le résultat appelé r, varie entre -1 et 1.

  • Quand r = 0 : les deux variables sont indépendantes SEULEMENT quand les 2 variables suivent une loi Normale
  • Quand r = -1 ou 1 : la force de la liaison est si importante que connaître une variable donne exactement la valeur de l’autre variable. On dit qu’elles sont mutuellement déterminées à travers une relation linéaire du type : Y=ax+b.

Attention il y a une différence entre causalité et liaison Ce n’est pas parcequ’il y a une liaison statistique entre deux variables qu’il y a forcément un lien de causalité.

Condition de validité du coefficient de Pearson

  • Au moins l’une des variables quantitative doit suivre une loi normale (on a vu précédemment que c’est le cas de l’âge).

On calcul le coefficient de corrélation de Pearson avec la fonction cor() cor.test() :

cor(hdv2003.bis$age, hdv2003.bis$heures.tv, use = "complete.obs")
## [1] 0.1776249
cor.test(hdv2003.bis$age, hdv2003.bis$heures.tv)
## 
##  Pearson's product-moment correlation
## 
## data:  hdv2003.bis$age and hdv2003.bis$heures.tv
## t = 8.0578, df = 1993, p-value = 1.324e-15
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.1347898 0.2197974
## sample estimates:
##       cor 
## 0.1776249
# La fonction cor.test() permet d'avoir en même temps l'intervalle de confiance

Comme on pouvait s’en douter d’après le graphique précédent, on observe une très faible corrélation entre ces variables : 0.17.

Le coefficient de corrélation de Spearman

Dans le cas où les variables ne suivent pas une loi normale on utilise le test de nullité de corrélation ou corrélation de Spearman.

cor.test(hdv2003.bis$poids,hdv2003.bis$heures.tv, method="spearman")
## Warning in cor.test.default(hdv2003.bis$poids, hdv2003.bis$heures.tv,
## method = "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  hdv2003.bis$poids and hdv2003.bis$heures.tv
## S = 1388400000, p-value = 0.02821
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##         rho 
## -0.04913082

Nous allons changer de dataframe pour le prochain excercice. Prenons une autre étude rp99 du package questionr. Celui-ci regroupe des informations démographiques et sociologique sur plusieurs villes du Rhône.

Regardons s’il existe une dépendance entre le fait d’être cadre et l’obtention de diplômes supérieur.

cor(rp99$dipl.sup, rp99$cadres)
## [1] 0.8975282

Ah, voilà une corrélation qui se rapproche de 1, ce qui indique une liaison assez forte entre ces deux variables on va plus loin en la représantant avec plot()

plot(rp99$dipl.sup, rp99$cadres, ylab = "Part des cadres", xlab = "Part des diplomês du supérieur")

La régression linéaire

On effectue la régression linéaire avec la commande lm() :

regression.li <- lm(cadres ~ dipl.sup, data = rp99)
summary(regression.li)
## 
## Call:
## lm(formula = cadres ~ dipl.sup, data = rp99)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9.6905 -1.9010 -0.1823  1.4913 17.0866 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.24088    0.32988   3.762 0.000203 ***
## dipl.sup     1.38352    0.03931  35.196  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.281 on 299 degrees of freedom
## Multiple R-squared:  0.8056, Adjusted R-squared:  0.8049 
## F-statistic:  1239 on 1 and 299 DF,  p-value: < 2.2e-16

Pour un rendu plus éloquant on peut rajouter une ligne de régression sur le diagramme à points avec la fonction abline() :

plot(rp99$dipl.sup, rp99$cadres, ylab = "Part des cadres", xlab = "Part des diplomês du supérieur", col="cornflowerblue")
abline(regression.li, col = "deepskyblue4")

Voilà ! c’est terminé pour ce premier tutoriel de découverte sur la manipulation de données avec le logiciel RStudio! Vous savez maintenant faire une première analyse et représentation de vos données pour trouver mettre en évidence les liens et tester les dépendances potentielle de vos variable. Nous avons vu ici une bonne partie des tests paramétriques et non-paramétrique les plus couramment utilisés et effectuer notre première régression linéaire!

……………….