Chapitre 5 Les différents types de variables
5.1 Introduction
Chacune des notions étudiées par le chercheur porte le nom de variable. C’est logique, puisque les données recueillies vont varier d’une unité statistique à une autre. On distingue quatre types de variables séparées en deux grandes catégories : les variables qualitatives et les variables quantitatives.
5.1.1 Mise en place
Dans ce chapitre, nous introduirons les différents types de variables et les façons avec lesquelles nous pouvons les utiliser en langage R
. Nous utiliserons la librairie tidyverse
et en particulier l’extension forcats
pour travailler avec des variables qualitatives. Puisque l’extension forcats
fait partie du tidyverse
de base, nous avons simplement à charger tidyverse
.
library(tidyverse)
5.2 Les variables qualitatives
Une variable qualitative est une variable dont les résultats possibles sont des mots. Les différents mots que peuvent prendre une telle variable sont appelées des modalités. Il existe deux types de variables qualitatives.
5.2.1 Les variables qualitatives à échelle nominale
On observe ce type de variable lorsqu’il n’y a pas d’ordre croissant naturel dans les modalités de la variable. Par exemple, la variable couleur des cheveux est à échelle nominale. L’ordre “blonds, bruns, roux, noirs, autre” est un ordre aussi valable que “bruns, noirs, roux, blonds, autre”.
Imaginons que vous vouliez créer une variable qui indique le mois de l’année:
x1 <- c("Déc", "Avr", "Jan", "Mar")
L’approche précédente pose deux problèmes:
Il n’y a que douze mois possibles et rien ne vous empêche de vous tromper dans votre entrée de modalités:
x2 <- c("Déc", "Avr", "Jam", "Mar")
Les modalités ne seront pas affichées dans un ordre logique
# La commande "sort" permet de trier les données sort(x1) #> [1] "Avr" "Déc" "Jan" "Mar"
Nous pouvons résoudre ce problèmes en utilisant un facteur (factor en R
). Pour créer un facteur, vous devez créer en premier lieu une liste avec toutes les modalités possibles placées dans l’ordre qui vous convient (levels en R
):
niveaux_mois <- c(
"Jan", "Fév", "Mar", "Avr", "Mai", "Jun",
"Jui", "Aoû", "Sep", "Oct", "Nov", "Déc"
)
Vous pouvez maintenant créer un facteur:
y1 <- factor(x1, levels = niveaux_mois)
y1
#> [1] Déc Avr Jan Mar
#> Levels: Jan Fév Mar Avr Mai Jun Jui Aoû Sep Oct Nov Déc
sort(y1)
#> [1] Jan Mar Avr Déc
#> Levels: Jan Fév Mar Avr Mai Jun Jui Aoû Sep Oct Nov Déc
Si certaines modalités ne sont pas dans votre liste de levels, elles seront converties en NA:
y2 <- factor(x2, levels = niveaux_mois)
y2
#> [1] Déc Avr <NA> Mar
#> Levels: Jan Fév Mar Avr Mai Jun Jui Aoû Sep Oct Nov Déc
Si vous n’utilisez pas vos levels, vos modalités seront affichées en ordre alphabétique:
factor(x1)
#> [1] Déc Avr Jan Mar
#> Levels: Avr Déc Jan Mar
Le fait qu’il y ait un ordre dans les modalités n’est pas suffisant pour dire qu’une variable qualitative n’est pas nominale. Dans l’exemple précédent, bien que les mois de l’année soient toujours énumérés dans un certain ordre, il serait faux de dire que Janvier < Février par exemple.
Nous pourrions créer une variable qui contient la couleur des cheveux sans indiquer de levels. De cette façon, les données seront triées en ordre alphabétique:
x3 <- c("blonds", "bruns", "roux", "noirs", "autre")
sort(x3)
#> [1] "autre" "blonds" "bruns" "noirs" "roux"
Nous allons maintenant utiliser de vraies données provenant du General Social Survey, qui est un sondage produit par une organisation de recherche indépendante NORC à l’Université de Chicago. Le sondage original comporte des milliers de questions, la base de donnéee forcats::gss_cat
n’en contient que quelques unes. Pour en savoir plus sur la base de données gss_cat
, consultez Wickham (2018).
gss_cat
#> # A tibble: 21,483 x 9
#> year marital age race rincome partyid relig denom tvhours
#> <int> <fct> <int> <fct> <fct> <fct> <fct> <fct> <int>
#> 1 2000 Never married 26 White $8000 t… Ind,near… Prote… South… 12
#> 2 2000 Divorced 48 White $8000 t… Not str … Prote… Bapti… NA
#> 3 2000 Widowed 67 White Not app… Independ… Prote… No de… 2
#> 4 2000 Never married 39 White Not app… Ind,near… Ortho… Not a… 4
#> 5 2000 Divorced 25 White Not app… Not str … None Not a… 1
#> 6 2000 Married 25 White $20000 … Strong d… Prote… South… NA
#> # ... with 2.148e+04 more rows
Pour visualiser les levels d’une variable facilement, nous pouvons utiliser la fonction levels
qui retourne tous les levels différents rencontrés pour cette variable. Voici par exemple les levels pour les variables race
et marital
levels(gss_cat$race)
#> [1] "Other" "Black" "White" "Not applicable"
levels(gss_cat$marital)
#> [1] "No answer" "Never married" "Separated" "Divorced"
#> [5] "Widowed" "Married"
5.2.2 Les variables qualitatives à échelle ordinale
On observe ce type de variable lorsqu’il existe un ordre croissant dans les modalités de la variable. Par exemple, la variable degré de satisfaction est à échelle ordinale. Il est possible de classer les modalités en ordre décroissant en écrivant : Très satisfait > Satisfait > Insatisfait > Très insatisfait.
Pour créer une variable qualitative à échelle ordinale en R
, nous pouvons utiliser la même technique vue à la section 5.2.1. Nous pouvons donc avoir:
z <- c("Satisfait", "Très insatisfait", "Insatisfait", "Très insatisfait", "Insatisfait")
niveaux_satisfaction <- c("Très insatisfait", "Insatisfait", "Satisfait", "Très satisfait")
z1 <- factor(z, levels = niveaux_satisfaction)
sort(z1)
#> [1] Très insatisfait Très insatisfait Insatisfait Insatisfait
#> [5] Satisfait
#> Levels: Très insatisfait Insatisfait Satisfait Très satisfait
Il est aussi possible d’utiliser des facteurs ordonnés. Nous devons utiliser encore la commande factor
en ajoutant l’option ordered=TRUE
. Par example:
z2 <- factor(z, levels = niveaux_satisfaction, ordered = TRUE)
sort(z2)
#> [1] Très insatisfait Très insatisfait Insatisfait Insatisfait
#> [5] Satisfait
#> 4 Levels: Très insatisfait < Insatisfait < ... < Très satisfait
Remarquons que dans la liste Levels, R
ajoute les symboles <
pour indiquer que la variable possède un ordre. Il n’est pas nécessaire de travailler avec des facteurs ordonnés.
Nous remarquons que dans la base de données forcats::gss_cat
, la variable rincome
représente une variable qualitative à échelle ordinale:
levels(gss_cat$rincome)
#> [1] "No answer" "Don't know" "Refused" "$25000 or more"
#> [5] "$20000 - 24999" "$15000 - 19999" "$10000 - 14999" "$8000 to 9999"
#> [9] "$7000 to 7999" "$6000 to 6999" "$5000 to 5999" "$4000 to 4999"
#> [13] "$3000 to 3999" "$1000 to 2999" "Lt $1000" "Not applicable"
Si nous laissons de côté les modalités No answer, Don’t know et Refused, le reste des modalités peut être placé en ordre. En effet, la modalité $4000 to 4999 est plus petite que la modalité $5000 to 5999 et ainsi de suite.
Bien que les modalités de la variable précédente soient composées de nombres, le fait que nous ayons affaire à des intervalles indique que nous avons en fait une variable qualitative à échelle ordinale.
Les modalités sont placées en ordre décroissant, si nous voulions avoir les modalités en ordre croissant, nous pourrions faire ceci:
a <- factor(gss_cat$rincome,
levels=c("Lt $1000", "$1000 to 2999", "$3000 to 3999", "$4000 to 4999",
"$5000 to 5999", "$6000 to 6999", "$7000 to 7999", "$8000 to 9999",
"$10000 - 14999", "$15000 - 19999", "$20000 - 24999", "$25000 or more",
"No answer", "Refused", "Not applicable", "Don't know"))
levels(a)
#> [1] "Lt $1000" "$1000 to 2999" "$3000 to 3999" "$4000 to 4999"
#> [5] "$5000 to 5999" "$6000 to 6999" "$7000 to 7999" "$8000 to 9999"
#> [9] "$10000 - 14999" "$15000 - 19999" "$20000 - 24999" "$25000 or more"
#> [13] "No answer" "Refused" "Not applicable" "Don't know"
5.3 Les variables quantitatives
Une variable quantitative est une variable dont les résultats possibles sont des nombres. Les différents nombres que peuvent prendre une telle variable sont appelées des valeurs.
5.3.1 Mise en place
Dans cette section, nous utiliserons la librairie nycflights13
(voir Wickham (2017a)) qui contient cinq bases de données portant sur tous les vols aériens ayant quittés la ville de New-York en 2013.
library(nycflights13)
Les cinq base de données sont les suivantes:
airlines
airports
flights
planes
weather
Pour en savoir plus sur une base de données particulière, par exemple airlines
vous pouvez utilisez la commande ?airlines
.
5.3.2 Les variables quantitatives discrètes
On observe ce type de variable lorsque les valeurs sont énumérables, c’est-à-dire lorsqu’il n’existe pas de valeur possible entre deux valeurs consécutives. Par exemple, la variable nombre de cours suivis pendant cette session est une variable quantitative discrète. Les valeurs de ces variables peuvent être : 3, 4, 5, 6, 7,… Il est impossible de suivre 4,6 cours durant une session.
La base de données planes
contient certaines variables quantitatives discrètes.
planes
#> # A tibble: 3,322 x 9
#> tailnum year type manufacturer model engines seats speed engine
#> <chr> <int> <chr> <chr> <chr> <int> <int> <int> <chr>
#> 1 N10156 2004 Fixed win… EMBRAER EMB-1… 2 55 NA Turbo…
#> 2 N102UW 1998 Fixed win… AIRBUS INDUS… A320-… 2 182 NA Turbo…
#> 3 N103US 1999 Fixed win… AIRBUS INDUS… A320-… 2 182 NA Turbo…
#> 4 N104UW 1999 Fixed win… AIRBUS INDUS… A320-… 2 182 NA Turbo…
#> 5 N10575 2002 Fixed win… EMBRAER EMB-1… 2 55 NA Turbo…
#> 6 N105UW 1999 Fixed win… AIRBUS INDUS… A320-… 2 182 NA Turbo…
#> # ... with 3,316 more rows
Pour être en mesure de connaître toutes les valeurs différentes que peut prendre une variable, nous allons utiliser la commande unique
. Si nous nous intéressons à la variable engines
(qui dénombre le nombre de moteurs de l’avion):
unique(planes$engines)
#> [1] 2 1 4 3
Les avions peuvent donc avoir 1, 2, 3 ou 4 moteurs.
La variable seats
(qui dénombre le nombre de sièges de l’avion):
unique(planes$seats)
#> [1] 55 182 149 330 178 95 290 199 20 140 2 8 400 260 255 191 375
#> [18] 145 22 14 6 80 189 7 4 377 102 10 11 269 200 222 172 379
#> [35] 5 147 100 16 275 292 139 9 450 179 128 300 142 12
Dans la sortie R
les valeurs ne sont pas en ordre croissant mais elles le seront lorsque nous les représenterons sous forme de tableau ou de graphique.
Bien que la variable
seats
possède plusieurs valeurs (elle en possède 48), cela ne signifie pas qu’elle soit une variable quantitative continue, comme nous le verrons à la section 5.3.3.
5.3.3 Les variables quantitatives continues
On observe ce type de variable lorsqu’il existe une infinité de valeurs entre deux autres. Par exemple, la variable masse d’un étudiant (en lbs) est une variable quantitative continue. Entre 130 et 131 lbs, il existe une infinité de valeurs telles que 130,54 lbs.
Dans la base de données weather
de l’extension nycflights13
, nous allons observer la variable temp
, qui représente la température en degrés Farenheit pour toutes les heures de chaques jours de l’année 2013.
weather
#> # A tibble: 26,130 x 15
#> origin year month day hour temp dewp humid wind_dir wind_speed
#> <chr> <dbl> <dbl> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 EWR 2013. 1. 1 0 37.0 21.9 54.0 230. 10.4
#> 2 EWR 2013. 1. 1 1 37.0 21.9 54.0 230. 13.8
#> 3 EWR 2013. 1. 1 2 37.9 21.9 52.1 230. 12.7
#> 4 EWR 2013. 1. 1 3 37.9 23.0 54.5 230. 13.8
#> 5 EWR 2013. 1. 1 4 37.9 24.1 57.0 240. 15.0
#> 6 EWR 2013. 1. 1 6 39.0 26.1 59.4 270. 10.4
#> # ... with 2.612e+04 more rows, and 5 more variables: wind_gust <dbl>,
#> # precip <dbl>, pressure <dbl>, visib <dbl>, time_hour <dttm>
Si nous utilisons la commande unique
sur cette variable, nous obtenons la sortie suivante:
unique(weather$temp)
#> [1] 37.0 37.9 39.0 39.9 41.0 39.2 36.0 34.0 33.1 32.0 30.0
#> [12] 28.9 28.0 27.0 26.1 25.0 24.1 30.9 35.1 42.1 43.0 44.1
#> [23] 33.8 35.6 37.4 46.0 46.9 48.0 45.0 48.9 50.0 46.4 44.6
#> [34] 42.8 48.2 51.1 51.8 52.0 55.9 57.9 57.0 55.0 53.1 54.0
#> [45] 23.0 21.0 19.9 19.4 21.9 19.0 18.0 17.1 16.0 15.1 14.0
#> [56] 12.9 12.0 10.9 21.2 17.6 30.2 64.0 64.4 59.0 57.2 60.8
#> [67] 62.1 62.6 24.8 26.6 28.4 41.9 45.7 41.2 38.8 34.2 34.9
#> [78] 32.4 36.5 53.6 60.1 63.0 64.9 66.0 70.0 71.1 68.0 66.9
#> [89] 73.9 77.0 80.1 82.0 82.9 84.0 81.0 79.0 73.0 69.1 61.0
#> [100] 55.4 72.0 66.2 73.4 75.2 75.9 78.1 69.8 75.0 86.0 88.0
#> [111] 87.1 84.9 78.8 80.6 82.4 71.6 89.1 91.0 91.9 93.0 91.4
#> [122] 90.0 93.9 89.6 95.0 87.8 84.2 97.0 96.1 98.1 100.0 99.0
#> [133] 93.2 NA 50.7 47.1 50.5 49.1 47.3 51.3 45.3 13.1 82.6
#> [144] 84.7 83.7 81.1 54.5 53.4 50.2 48.4 43.2 40.6 42.3 43.9
#> [155] 47.8 52.5 55.6 54.1 54.9 50.9 51.4 49.5 46.6 47.5 49.8
#> [166] 50.4 52.7 56.5 58.1 57.6 51.6 60.4 60.3 59.2 55.8
Puisque nous avons 175 températures différentes et que nous avons affaire à une variable quantitative continue, il est souvent avantageux de placer ces données dans des classes. Nous verrons comment faire au chapitre 11.
Bibliographie
Wickham, Hadley. 2018. Forcats: Tools for Working with Categorical Variables (Factors). https://CRAN.R-project.org/package=forcats.
Wickham, Hadley. 2017a. Nycflights13: Flights That Departed Nyc in 2013. https://CRAN.R-project.org/package=nycflights13.