Chapitre 10 Les variables quantitatives discrètes

10.1 Mise en place

library(tidyverse)
library(questionr)
library(nycflights13)
library(knitr)

10.2 Tableau de fréquences

Une fois les données d’un sondage recueillies, il est plus aisé d’analyser ces données si elles sont classées dans un tableau.

Le tableau de fréquences que nous utiliserons est le suivant :

Titre
Nom de la variable Nombre d’unités statistiques Pourcentage d’unités statistiques (%) Pourcentage cumulé
(Valeurs) (Fréquences absolues) (Fréquences relatives) (Fréquences relatives cumulées)
Total n 100%

Le pourcentage cumulé permet de déterminer le pourcentage des répondants qui ont indiqué la valeur correspondante, ou une plus petite. Il sert à donner une meilleure vue d’ensemble.

Si pour la valeur \(x_i\) de la variable \(A\) la pourcentage cumulé est de \(b\) %, ceci signifie que \(b\) % des valeurs de la variable \(A\) sont plus petites ou égales à \(x_i\).

La commande freq prend comme argument la variable dont vous voulez produire le tableau de fréquences. Pour obtenir une sortie adéquate, il faut ajouter trois options à la commande:

  • cum = TRUE; permet d’afficher les pourcentages cumulés
  • valid = FALSE; permet de ne pas afficher les données manquantes
  • total = TRUE; permet d’afficher le total

Dans la base de données nycflights13::planes, nous allons afficher la variable engines. Dans la commande ci-dessous, nous enregistrons le tableau de fréquences dans la variable tab_engines. Nous l’affichons ensuite à l’aide de la commande kable.

tab_engines <- freq(planes$engines,
                cum = TRUE,
                valid = FALSE,
                total = TRUE)
kable(tab_engines)
n % %cum
1 27 0.8 0.8
2 3288 99.0 99.8
3 3 0.1 99.9
4 4 0.1 100.0
Total 3322 100.0 100.0

Nous remarquons que le pourcentage cumulé pour les avions possédant 3 moteurs est 99.9%. Quelle est la signification de ce pourcentage? Ceci signifie que 99.9% des avions possèdent 3 moteurs ou moins.

Nous allons maintenant produire le tableau de fréquences de la variable tvhours de la base de données gss_cat. Cette variable correspond au nombre d’heures de télévision écoutées par jour (pour avoir cette information, vous pouvez utiliser la commande ?forcats::gss_cat). Nous avons:

tab_tvhours <- freq(gss_cat$tvhours,
                    cum = TRUE,
                    valid = FALSE,
                    total = TRUE)
kable(tab_tvhours)
n % %cum
0 675 3.1 3.1
1 2345 10.9 14.1
2 3040 14.2 28.2
3 1959 9.1 37.3
4 1408 6.6 43.9
5 695 3.2 47.1
6 478 2.2 49.3
7 119 0.6 49.9
8 262 1.2 51.1
9 19 0.1 51.2
10 122 0.6 51.8
11 9 0.0 51.8
12 96 0.4 52.3
13 9 0.0 52.3
14 24 0.1 52.4
15 17 0.1 52.5
16 10 0.0 52.5
17 2 0.0 52.5
18 7 0.0 52.6
20 14 0.1 52.6
21 2 0.0 52.7
22 2 0.0 52.7
23 1 0.0 52.7
24 22 0.1 52.8
NA 10146 47.2 100.0
Total 21483 100.0 100.0

Répondez aux questions suivantes:

  1. Quel est le pourcentage des répondants qui écoutent la télévision 3 heures par jour? 9.1 %
  2. Quel est le pourcentage des répondants qui écoutent la télévision 14 heures par jour? 0.1 %
  3. Peut-on croire le résultat pour le pourcentage de gens qui écoutent la télévision 24 heures par jour?
  4. Quelle est la signification du pourcentage cumulé pour 6 heures? Nous avons que 49.3 % des répondants écoutent la télévision 6 heures ou moins par jour.
  5. Quelle est la signification du pourcentage cumulé pour 7 heures? Nous avons que 49.9 % des répondants écoutent la télévision 7 heures ou moins par jour. C’est-à-dire qu’environ la moitié des gens écoutent la télévision 7 heures ou moins par jour.

Nous pouvons produire le tableau de fréquences de la variable seats de la façon suivante:

tab_seats <- freq(planes$seats,
                cum = TRUE,
                valid = FALSE,
                total = TRUE)
kable(tab_seats)
n % %cum
2 16 0.5 0.5
4 5 0.2 0.6
5 2 0.1 0.7
6 3 0.1 0.8
7 2 0.1 0.8
8 5 0.2 1.0
9 1 0.0 1.0
10 1 0.0 1.1
11 2 0.1 1.1
12 1 0.0 1.1
14 1 0.0 1.2
16 1 0.0 1.2
20 80 2.4 3.6
22 2 0.1 3.7
55 390 11.7 15.4
80 83 2.5 17.9
95 123 3.7 21.6
100 102 3.1 24.7
102 1 0.0 24.7
128 1 0.0 24.7
139 8 0.2 25.0
140 411 12.4 37.4
142 158 4.8 42.1
145 57 1.7 43.8
147 3 0.1 43.9
149 452 13.6 57.5
172 81 2.4 60.0
178 283 8.5 68.5
179 134 4.0 72.5
182 159 4.8 77.3
189 73 2.2 79.5
191 87 2.6 82.1
199 43 1.3 83.4
200 256 7.7 91.1
222 13 0.4 91.5
255 16 0.5 92.0
260 4 0.1 92.1
269 1 0.0 92.1
275 25 0.8 92.9
290 6 0.2 93.1
292 16 0.5 93.6
300 17 0.5 94.1
330 114 3.4 97.5
375 1 0.0 97.5
377 14 0.4 98.0
379 55 1.7 99.6
400 12 0.4 100.0
450 1 0.0 100.0
Total 3322 100.0 100.0

Comme nous pouvons le constater, le tableau est très grand car la variable seats possède 48 valeurs différentes. Nous allons donc parfois séparer nos valeurs en classes coomme nous le verrons au chapitre 11.

Important! Au chapitre 5, nous avons étudié les différents types de variables. Parmi les variables quantitatives, nous avons distingué celles qui étaient discrètes de celles qui étaient continues.Bien que cela s’applique toujours, il est important de noter qu’une variable continue (par exemple, l’âge) peut être traitée comme une variable discrète (puisque, de façon générale, les gens donnent un entier pour exprimer leur âge); de même, une variable discrète (par exemple, le revenu) peut être traitée comme une variable continue (puisque les différents revenus sont trop nombreux pour être énumérés).

10.3 Représentation graphique - Le diagramme à bandes

Le graphique utilisé pour représenter une variable quantitative discrète est le diagramme à bâtons.

Ce graphique est construit comme le diagramme à bandes rectangulaires verticales, sauf que les rectangles sont remplacés par des bâtons très minces (généralement une simple ligne). Pour modifier la largeur de vos lignes, vous utilisez l’option width dans la commande geom_bar().

ggplot(data = planes, aes(x = engines))+
  geom_bar(width = 0.1)+
  labs(
    title = "Répartition de 3 322 avions selon le nombre de leurs moteurs",
    x = "Nombre de moteurs",
    y = "Nombre d'unités statistiques"
  )

Vous pouvez produire un diagramme à bâtons horizontaux en utilisant la commande coord_flip().

ggplot(data = gss_cat, aes(x = tvhours))+
  geom_bar(width = 0.1)+
  labs(
    title = "Répartition de 11 137 répondants selon le nombre d'heures de télévision écoutées par jour",
    x = "Nombre d'heures de télévision",
    y = "Nombre d'unités statistiques"
  )+
  coord_flip()
#> Warning: Removed 10146 rows containing non-finite values (stat_count).