Académique Documents
Professionnel Documents
Culture Documents
Les rubriques
S
B Les points clé à retenir sont regroupés
U
en fin de chapitre
$"("&("$Z
&6(&("6("/')&1)+
Cours, exemples, exercices
et problèmes corrigés
)ŧ
ġ
Des mêmes auteurs :
AVANT-PROPOS ix
CONVENTIONS TYPOGRAPHIQUES x
EXERCICES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
SOLUTION DES EXERCICES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
EN RÉSUMÉ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
EXERCICES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
PROBLÈME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
SOLUTION DES EXERCICES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
SOLUTION DU PROBLÈME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
PROBLÈMES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
SOLUTION DES EXERCICES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
SOLUTION DES PROBLÈMES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
INDEX 440
Pour vous, Anaëlle et David, nos deux modèles !
Avant-propos
Chers lecteurs,
Vous tenez entre vos mains le fruit de nos expériences.
Au cours de nos activités d’enseignement, de recherche ou de consultance, nous avons acquis
une connaissance et une maîtrise avancées du langage R. Suite à des demandes de plus en plus
fréquentes et nombreuses, nous avons partagé celles-ci depuis plusieurs années avec des publics
variés : étudiants en Licence ou en Master de biologie, de mathématique ou de statistique,
élèves dans chacune des trois années d’écoles d’ingénieurs, utilisateurs de la statistique lors
de stages donnés dans le cadre d’écoles doctorales et de la formation continue de chercheurs,
enseignants-chercheurs ou de statisticiens.
Ce livre est articulé autour des notions de base des programmes de Licence et Master. Il
possède l’avantage d’offrir simultanément une formation progressive à la statistique et au
langage R en réduisant au strict nécessaire les notions théoriques abordées. Ce n’est pas un
livre-audio mais presque !
Certains d’entre vous se font peut-être une montagne de la statistique mais il suffit d’être bien
chaussé, chaudement vêtu et bien guidé pour atteindre le sommet et pouvoir profiter de la vue.
Les chapitres 1 et 2 vous permettent de vous chausser : installation et prise en main du langage
R. Puis vous vous équipez dans les chapitres 3, 4 et 5 en étudiant les statistiques descriptives
pour une ou deux variables et les lois de probabilité usuelles. L’escalade commence à partir
du chapitre 6 où vous êtes initiés à la théorie de l’échantillonnage et à une notion trop mal
connue : les intervalles de confiance. Le chapitre 7 introduit la théorie des tests d’hypothèse qui
est complétée au chapitre 8 par les tests du Khi-deux. Le sommet est atteint avec l’exposé de la
© Dunod – La photocopie non autorisée est un délit.
Cet ouvrage suit un certain nombre de conventions typographiques qui ont pour objectif de
faciliter la lecture.
Les noms de fichiers sont imprimés avec une police de type machine à écrire.
Exemple : R, SAS, Linux, ade4, etc.
Les noms de fichiers sont également imprimés avec la même police que celle ci-dessus.
Exemple : test.R, donnees.txt, etc.
Nous présentons des commandes saisies sous R et leurs résultats de la manière suivante.
La commande saisie est indiquée, dans un encadré, avec une police à chasse fixe précédée de
l’invite de commande >.
Exemple :
> summary(donnees)
Lorsque la commande R doit être répartie sur plusieurs lignes, les lignes suivantes sont
précédées du symbole + :
Exemple :
> filled.contour(volcano, color.palette = terrain.colors, asp = 1,
+ main = "jeu de données volcano : courbes de niveaux")
Le résultat de la commande tel qui est affiché par R est indiqué avec une police à chasse fixe
dans un cadre avec une trame en gris clair.
Exemple :
Version utilisée : nous avons utilisé dans ce livre le langage R version 3.4.3
(2017-11-30).
Chapitre 1
Initiation au langage R
« Comme dans toute initiation, c’est dans le fait même de sourire qu’est le triomphe. »
De Paul Auster, La chambre dérobée, 1994
Objectifs de ce chapitre
➤ présenter R
➤ installer R
➤ prise en main des premières lignes de commande incontournables
Les informations sur R sont disponibles sur le site internet1 dédié au projet :
https://www.r-project.org/
1. En juillet 2018, il s’agit de l’adresse officielle qui peut depuis avoir été éventuellement modifiée.
2 1 • Initiation au langage R
2. La liste des serveurs est disponible à l’adresse https://cran.r-project.org/mirrors.html et leur état à l’adresse
https://cran.r-project.org/mirmon_report.html.
1.1 Présentation du langage R 3
EN CART 1.1
En janvier 2018, il existait six miroirs en France dont les adresses sont les suivantes :
1. Laboratoire de Biométrie et Biologie Évolutive, CNRS et Université Lyon I
https://pbil.univ-lyon1.fr/CRAN/
2. Institut de Biologie et Chimie des Protéines, CNRS et Université Lyon I
https://mirror.ibcp.fr/pub/CRAN/
http://mirror.ibcp.fr/pub/CRAN/
3. Institut de biologie du Développement de Marseille, CNRS et Université Aix-Marseille
https://cran.biotools.fr/
http://cran.biotools.fr/
4. Institut de Génétique Humaine, Montpellier
https://ftp.igh.cnrs.fr/pub/CRAN/
http://ftp.igh.cnrs.fr/pub/CRAN/
5. Institut de Radioprotection et de Sûreté Nuclaire, Paris
http://cran.irsn.fr/
6. SAAM, Université Paris 1 Panthéon Sorbonne
https://cran.univ-paris1.fr/
http://cran.univ-paris1.fr/
soi-même.
• Il existe une version française du langage R même si le site officiel est rédigé en langue
anglaise.
• La très grande majorité des fonctions du langage ne diffère pas d’un système d’exploitation
à l’autre bien que les interfaces graphiques ne sont pas similaires.
Il existe plusieurs interfaces graphiques, en anglais GUI pour Graphical User Interface,
qui permettent d’accéder à une partie des fonctions du langage R.
• RGUI, l’interface graphique installée par défaut sous Windows.
• JGR, une interface graphique programmée en Java pour R. Elle fonctionne pour tous les
systèmes d’exploitation sur lesquels le langage Java est disponible et donc aussi bien pour
Microsoft Windows que pour Mac OS X et de nombreux systèmes de type Unix.
• Rattle, une interface graphique pour le data mining utilisant R.
4 1 • Initiation au langage R
• R Commander, une interface graphique pour faire des statistiques usuelles avec R.
• Statistical Lab.
• RExcel, pour exécuter les fonctionnalités de R et de R Commander à partir de Microsoft
Excel.
• rggobi, une interface pour le logiciel GGobi spécialisé dans la visualisation de données
multidimensionnelles.
• RKWard, une interface graphique basée sur les bibliothèques de KDE, une interface gra-
phique disponible sur de nombreux systèmes de type Unix.
Il existe également des programmes qui facilitent l’écriture des instructions et des programmes
en langage R.
Ces programmes se regroupent en deux grandes catégories :
• Les éditeurs de texte comme le bloc-note de Microsoft Windows, Microsoft Wordpad ou
Microsoft Word.
• Les environnements de programmation, appelés en anglais Integrated development envi-
ronments (IDEs), comme Tinn-R, Emacs (Emacs Speaks Statistics), Jedit, Kate, WinEdt
(R Package RWinEdt) ou Vim.
Pour les utilisateurs qui en auraient besoin, par exemple pour rédiger un mémoire ou un rapport
de stage, il est également possible d’intégrer directement des résultats obtenus avec R dans des
documents LATEXà l’aide du langage Sweave ou dans des documents au format OpenDocument
(ODF) à l’aide du langage odfWeave.
Il existe plusieurs sites internet, principalement en langue anglaise, consacrés au langage R.
• La section sur R à l’Open Directory Project.
• RSeek et R site search qui sont des moteurs de recherche spécialisés dans la recherche de
documents consacrés à R.
• Plusieurs listes de diffusion permettent aux utilisateurs novices ou expérimentés de R de
poser directement leurs questions aux autres utilisateurs afin qu’ils leur fassent partager
leur expérience du langage.
• Le R Journal est un journal à comité de lecture comportant des articles consacrés aux
problèmes de calcul statistique et au développement du langage R. Il peut aussi bien
intéresser de simples utilisateurs du langage que des programmeurs.
• R Books comprend une liste importante de livres consacrés à R.
• Le R Graphical Manual explique par l’exemple comment construire des graphiques à partir
de n’importe quelle bibliothèque du langage. Il comporte également un index exhaustif des
fonctions de toutes les bibliothèques d’extensions du langage R.
• Le R Wiki est un site coopératif de documentation sur le langage R.
1.2 Maintenant c’est à vous 5
Remarque : le téléchargement de R n’est pas très long. En effet, sa taille est de 62,0 Mo.
Remarque : dans la grande majorité des situations, l’installation de R est très simple et
ne nécessite que peu de connaissances techniques.
• R fonctionne avec plusieurs fenêtres sous Windows. La fenêtre R Console est la fenêtre
principale où sont réalisées par défaut les entrées de commandes et les sorties de résultats
en mode texte. À celle-ci peuvent s’ajouter des fenêtres facultatives, telles que les fenêtres
graphiques, les fenêtres d’informations (historique des commandes, aide, visualisation de
fichier, etc), toutes appelées par des commandes spécifiques via la fenêtre R Console.
• Le menu File ou Fichier contient les outils nécessaires à la gestion de l’espace de
travail, tels que la sélection du répertoire par défaut, le chargement de fichiers sources
externes, la sauvegarde et le chargement d’historiques des commandes exécutées, etc.
• Le menu Edit ou Edition contient les habituelles commandes de copier-coller, ainsi
que la boîte de dialogue autorisant la personnalisation de l’apparence de l’interface.
• Le menu View ou Voir permet d’afficher ou de masquer la barre d’outils et la barre de
statut.
• Le menu Misc traite de la gestion des objets en mémoire et permet d’arrêter un calcul ou
des calculs en cours de traitement.
• Le menu Packages automatise la gestion et le suivi des bibliothèques de fonctions,
permettant leur installation et leur mise à jour de manière transparente depuis l’un des
miroirs du CRAN (Comprehensive R Archive Network) https://cran.r-project.org/.
• Enfin, le menu Windows ou Fen^ etres et le menu Help ou Aide assument des fonctions
similaires à celles qu’ils occupent dans les autres applications Windows, à savoir la
1.2 Maintenant c’est à vous 7
définition spatiale des fenêtres et l’accès à l’aide en ligne et aux manuels de références
du langage R.
Remarque : vous verrez bientôt comment installer très facilement les packages dispo-
nibles sur le site du CRAN directement depuis R.
8 1 • Initiation au langage R
Il existe une procédure alternative pour les utilisateurs d’un environnement Windows.
1. Reprenez la procédure de téléchargement de R vue à la section Installer le langage R .
2. Cette fois-ci au lieu de cliquer sur base, cliquez sur contrib.
3. Cliquez ensuite sur le dossier de la version R que vous avez installée.
4. Puis cliquez sur le package dont vous avez besoin.
5. Un fichier .zip est enregistré sur votre disque dur.
6. Démarrez l’interface graphique de R, allez dans le menu Packages et choisissez
Installer depuis un fichier .zip. Indiquez alors à R le fichier .zip que vous
venez de télécharger.
Lorsque vous aurez besoin de packages qui ne sont pas installés par défaut pour réaliser les
analyses statistiques qui vous seront demandées dans les exercices, cela vous sera signalé. Il
faudra alors installer ces packages supplémentaires sur votre ordinateur.
Puis sous ce texte, le symbole rouge >, appelé prompt, apparaît également. Il signifie que R
est prêt à travailler.
Il ne faut jamais taper ce symbole au clavier car il est déjà présent en début de ligne sur la
fenêtre R Console.
C’est à la suite de > que vous taperez les lignes de commande de R. Une fois la commande tapée,
vous devez toujours la valider en appuyant sur la touche Entrée du clavier.
Si votre commande est incomplète, le symbole > est remplacé par +. Ce symbole + signifie
que R attend la suite de la commande. Si vous ne savez pas compléter la ligne de commande
ou qu’elle présente une erreur vous pouvez appuyer sur la touche Echap pour annuler la
commande et créer un nouveau symbole >.
1.3.2 Quitter R
Pour quitter R, vous utilisez la commande suivante :
> q()
R vous propose de sauvegarder le travail effectué. Trois réponses vous sont proposées : y (pour
yes), n (pour no) ou c (pour cancel, annuler).
© Dunod – La photocopie non autorisée est un délit.
Si vous tapez y, cela permet que les commandes exécutées pendant la session et les objets
enregistrés en mémoire soient conservés et soient donc rappelables et réutilisables .
Si vous tapez n, vous quittez R qui oubliera tout le travail que vous avez réalisé. Attention, vous
risquez de tout perdre !
Si vous tapez c, la procédure de fin de session sous R est annulée.
Sous l’environnement Windows ou Mac OS X, c’est une boîte de dialogue en français qui
apparaîtra à l’écran et qui comportera les mêmes questions.
ou encore :
> help(read.table)
Pour une bibliothèque d’extension, dont le nom est package, vous pouvez consulter une fiche
de documentation en tapant :
> help(package="package")
Grâce à cette aide, il suffit que vous reteniez le nom de la bibliothèque où se trouve la fonction
que vous souhaitez utiliser, mais pas forcément le nom exact de cette fonction.
Les pages d’aide sont généralement très détaillées. Elles contiennent souvent, entre autres :
– une section See Also qui donne les pages d’aide sur des sujets apparentés.
– une section Description qui précise ce que fait la fonction.
– une section Examples avec des lignes de commande illustrant ce que fait la fonction
documentée. Ces exemples peuvent être exécutés directement en utilisant la fonction
example, essayez par exemple :
> example(plot)
Pour afficher successivement les différents graphiques ainsi créés, vous devez cliquer
plusieurs fois de suite sur la fenêtre où sont situés les graphiques.
1.3 Vos premières lignes de commande 11
L’option help_type="text" de la fonction help permet d’afficher l’aide au format texte .txt.
Exemple : vous cherchez à obtenir des informations au format .txt sur la fonction
read.table, vous taperez alors la commande suivante :
> help("read.table",help_type="text")
Le format .html est celui utilisé par défaut lorsque vous utilisez l’interface graphique de R
dans un environnement Mac OS X ou Windows.
La fonction help.start permet d’accéder à la page d’accueil de l’aide au format .html.
> help.start()
les modifier suivant vos besoins. De plus, ces lignes de commande sont souvent un exemple
d’analyse de données et pointent parfois sur d’autres fonctions utiles à essayer. La notion de
fonctions sous R sera développée dans le chapitre suivant.
a) R comme calculatrice
[1] 10
[1] 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
[17] 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
[33] 152 153 154 155
Dans le résultat ci-dessus, l’indice de l’élément 120 est 1, celui de 136 est 17 et celui de
152 est 33.
Le chiffre qui se trouve entre les crochets indique l’indice du premier élément de la ligne sur
B laquelle il se trouve.
S
U
Exemple : une fonction dont vous pourrez avoir besoin est la fonction sqrt, qui n’est rien
d’autre que la racine carrée d’un nombre. Tapez la ligne de commande suivante :
> sqrt(4)
[1] 2
1.3 Vos premières lignes de commande 13
1.3.6 Écrire des scripts avec un éditeur de texte et les compiler sous R
Il est souvent plus pratique de composer le code R dans une fenêtre spécifique de l’interface
graphique : la fenêtre de script.
Les entrées Nouveau script ou Ouvrir un script permettent de créer un nouveau script
de commandes R ou d’accéder à un ancien script sauvegardé lors d’une session précédente
d’utilisation du logiciel.
Pour exécuter des instructions à partir de la fenêtre de script il suffit de procéder par copier-coller
ou de se servir du raccourci clavier ctrl+R .
Pour sauvegarder un script, il suffit, lorsque la fenêtre de script est active, de sélectionner l’entrée
Sauver du menu Fichier .
Souvent il est proposé aux débutants d’utiliser le traitement de texte de Word car la plupart
des mises en forme du texte n’affecte pas l’exécution des lignes de commande lors du
copier-coller . Attention ! Il faut désactiver la mise en forme automatique du texte.
Remarque : certains éditeurs, comme emacs, Xemacs ou Tinn-R peuvent vous être
conseillés car ils vous rendront la vie plus facile en fournissant la tabulation intelligente,
la coloration syntaxique et le complément des commandes.
Indépendamment de l’éditeur, vous sauvegardez les scripts dans un de vos répertoires. Ensuite
deux solutions s’offrent à vous :
1. soit vous utilisez le copier-coller sur la fenêtre R Console,
2. soit vous les lisez avec l’une des trois commandes suivantes :
> source(file="C://chemin//vers//nomdefichier//fichier.R",echo=T)
ou :
> source(file=".../repertoire/fichier.R",echo=T)
14 1 • Initiation au langage R
ou encore :
> source("fichier.R",echo=T)
# Si "fichier.R" est dans le répertoire de travail
1. Notez l’utilisation des slashes pour séparer les répertoires, même sous l’environnement
Windows.
2. Notez la présence du symbole #. Sous R, ce symbole est le symbole des commentaires.
Tout ce qui suit un # est alors ignoré. Sachez qu’un élément clef d’une bonne écriture de
script est la présence abondante de commentaires.
Écrire des scripts lisibles et commentés est une habitude à prendre dès maintenant car cela
B vous rendra l’utilisation de R bien plus facile.
S
U
1. Écrire des scripts est un gain de temps car vous pouvez facilement réutiliser, en les
adaptant si nécessaire, des lignes de commande déjà tapées.
2. Si vous avez beaucoup de lignes de commande à écrire, c’est beaucoup plus simple de
les manipuler, de les modifier dans un éditeur de texte.
3. Écrire des scripts est un outil de collaboration puissant. C’est souvent pratique de pouvoir
envoyer à un de vos camarades ou de vos collègues, par fichier attaché dans un mail
par exemple, votre code et le fichier de données brut associé et de savoir qu’il lui suffit
d’exécuter la fonction source sur votre code pour effectuer votre analyse sur sa machine.
4. Enfin il n’existe pas de message d’alerte dans R sauf quand vous quittez R. Vous pouvez
alors perdre des données sans vous en rendre compte. Le seul moyen de trouver l’erreur
est de recommencer l’écriture de la ligne de commande.
Il est à noter qu’il existe également des langages de programmation libres et gratuits comme
Tinn-R qui sont destinés à vous faciliter la rédaction de scripts.
4. Vous devez faire attention à l’utilisation du point virgule. En effet, sous R, ce dernier sert à
séparer deux instructions.
5. Vous pouvez rappeler les commandes déjà éxécutées en utilisant la touche Flèche vers le
haut .
6. Vous pouvez parcourir la ligne de commande que vous êtes en train d’écrire en appuyant
sur les touches Flèche vers la gauche et Flèche vers la droite .
– Rcmdr (RCommander) est une bibliothèque pour le langage R, disponible pour les trois
environnements Windows, Mac OS X et Linux. C’est avant tout une interface graphique
pour un grand nombre de fonctions usuellement utilisées en statistique. Son utilisation
rend la pratique de R proche de celles d’autres logiciels de statistique « à menus et boîtes
de dialogue » comme par exemple SPSS, Minitab ou Statistica. Elle permet en outre
d’importer facilement des fichiers au format .csv, SPSS, SAS ou Minitab. Cette bibliothèque
permet, elle aussi comme RStudio, de transformer automatiquement un script R en un fichier
au format html où sont intercalées les commandes R avec les résultats de celles-ci.
Pour vous montrer la facilité avec laquelle il est possible de produire ces rapports html ainsi que
le rendu final obtenu, vous trouverez en ligne, pour chacun des chapitres du livre, des rapports,
faits avec RStudio et Rcmdr.
EN RÉSUMÉ
Commande Description
q() Quitte le langage.
?fonction
ou Demande la fiche de documentation de la fonction.
help("fonction")
help(package = Demande la fiche de documentation du package intitulé
"nomdupackage") nomdupackage.
install.packages( Installe le package intitulé nomdupackage.
"nomdupackage")
n:m Crée une suite de nombres d’entiers de n à m.
seq(n, m, i) Crée une suite de nombres de n à m en incrémentant par i.
rep(s, n) Crée une suite contenant n fois s.
source("fichier") Exécute le script contenu dans fichier.
Remarque : certaines commandes ne sont pas encore apparues dans ce premier chapitre
mais vont être introduites dans l’exercice 1.2 de ce chapitre.
Du mal à démarrer 17
EXERCICES
> seq(from=a,to=b,by=k)
Remarque : ne tapez pas cette ligne de commande en l’état. Il faut que vous remplaciez
les valeurs a, b et k par celles que vous avez choisies.
Remarque : seq peut créer une suite d’entiers mais aussi une suite de réels ce que ne fait
pas l’opérateur ":". En fait, ":" est un cas particulier de la fonction seq avec un pas
© Dunod – La photocopie non autorisée est un délit.
toujours égal à 1.
1) Créez la suite d’entiers consécutifs de 10 à 25 avec les deux méthodes.
2) Créez la suite d’entiers en progression arithmétique de premier terme 20, de dernier terme
40 et de raison 5.
Il existe une fonction, la fonction rep, qui peut servir à construire des suites particulières
comme les suites constantes ou les suites périodiques. rep se caractérise par deux arguments :
le premier, noté x par R, est celui qui comporte les chiffres qui composent le motif qui est répété
dans la suite et le second, noté times par R, est le nombre de fois que vous souhaitez répéter x.
3) Créez la suite dont tous les termes sont identiques et égaux à 28 et de longueur 10.
18 1 • Initiation au langage R
DU MAL À DÉMARRER
➩ Exercice 1.1
1) Relisez le paragraphe 1.2.1 du chapitre 1.
2) Relisez le paragraphe 1.2.3 du chapitre 1.
➩ Exercice 1.2
1) Lisez l’aide de la fonction ":", en tapant ?":", et celle de la fonction seq.
2) Utilisez la fonction seq.
3) Utilisez la fonction rep.
Exercice 1.1
1) Les indications pour télécharger et installer R sont détaillées dans le début de ce chapitre.
2) Pour télécharger la bibliothèque depuis l’un des sites miroirs du CRAN, il suffit d’exécuter la
ligne suivante :
> install.packages("BioStatR")
Si la bibliothèque est indisponible sur le CRAN au moment où vous en avez besoin, il est
possible de la télécharger depuis le site internet des auteurs en utilisant l’option repos de la
fonction install.packages.
L’option type force R à utiliser l’un des trois types de format de fichier pour les bibliothèques
d’extension : type="source" pour les fichiers source, type="mac.binary" pour les binaires
Solution des exercices 19
Mac OS X et type="win.binary" pour les binaires Windows. Il faut bien sûr penser à choisir
un format compatible avec son environnement.
Enfin les fichiers de la bibliothèque aux formats source .tar.gz, principalement pour Linux,
binaire .tgz, pour Mac OS X, ou binaire .zip, pour Windows, sont également hébergés sur le
même site internet à l’adresse http://www-irma.math.unistra.fr/~fbertran/BioStatR/.
Pour consulter l’aide de la bibliothèque BioStatR, utilisez la fonction help(package=
"BioStatR").
Ce qu’il faut retenir de cet exercice. La fonction install.packages permet d’installer des
B bibliothèques de fonctions.
S
U
Exercice 1.2
1) Vous souhaitez créer la suite d’entiers de 10 à 25.
Avec la première méthode, vous tapez alors la ligne de commande suivante :
> 10:25
[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
> seq(from=10,to=25,by=1)
[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
© Dunod – La photocopie non autorisée est un délit.
> seq(10,25,1)
[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
> seq(from=20,to=40,by=5)
[1] 20 25 30 35 40
20 1 • Initiation au langage R
> seq(20,40,5)
[1] 20 25 30 35 40
3)
> rep(x=28,times=10)
[1] 28 28 28 28 28 28 28 28 28 28
> rep(28,10)
[1] 28 28 28 28 28 28 28 28 28 28
Ce qu’il faut retenir de cet exercice. Les fonctions seq et rep permettent de créer rapidemment
B des suites de nombres régulières.
S
U
Chapitre 2
« Les mathématiques n’étudient pas des objets, mais les relations entre ces objets. »
H. Poincaré (1854-1912)
Objectifs de ce chapitre
➤ définir ce que sont les objets sous R et les manipuler
➤ présenter les fonctions usuelles de R
➤ manipuler des données avec R, comme :
• saisir des données sous R
• importer des fichiers de données sous R
• écrire des fichiers de données à partir de R
Exemple : pour connaître les jeux de données contenus dans le package base, tapez la
commande suivante :
> data(package = "datasets")
Notez la présence des "" autour de datasets, qui indique à R que datasets est une
chaîne de caractères et qu’elle n’est à considérer que comme telle puisque c’est le nom
du package à explorer.
Notez la présence du fichier iris. Les données de ce fichier sont célèbres. Elles ont
été collectées par Edgar Anderson1 . Le fichier donne les mesures en centimètres des
quatre variables suivantes :
1. longueur du sépale (Sepal.Length),
2. largeur du sépale (Sepal.Width),
3. longueur du pétale (Petal.Length) et
4. largeur du pétale (Petal.Width)
pour trois espèces d’iris :
1. iris setosa,
2. iris versicolor et,
3. iris virginica.
Sir R.A. Fisher2 a utilisé ces données pour trouver des variables3 permettant de séparer
au mieux les trois espèces d’iris. Vous pouvez obtenir ces renseignements en tapant
soit la commande suivante (rencontrée au chapitre 1)
> ?iris
1. E. Anderson, (1935), The irises of the Gaspe Peninsula, Bulletin of the American Iris Society, 59, 2-5.
2. R.A. Fisher, (1936), The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II,
179-188.
3. Il s’agit en fait de combinaisons linéaires des variables du jeu de données pour ceux qui connaissent cette notion.
2.2 Quelques définitions 23
> help(iris)
Tapez iris et non Iris ou IRIS car R n’est pas indifférent aux lettres majuscules et aux
lettres minuscules, comme vous l’avez déjà appris dans le chapitre 1.
Définition 2.1 Un objet est un espace dans lequel vous pouvez stocker tout ce qui vous intéresse.
© Dunod – La photocopie non autorisée est un délit.
Définition 2.2 Un vecteur est un objet d’un même mode pour toutes les valeurs qui le consti-
tuent. Vous rencontrerez donc soit des vecteurs numériques, soit des vecteurs de caractères,
soit des vecteurs logiques, soit des vecteurs vides. Un vecteur est constitué de coordonnées ou
encore de composantes. Parfois, le mot éléments est utilisé à la place de coordonnées.
Définition 2.3 Une matrice est un objet d’un même mode pour toutes les valeurs qui la consti-
tuent. Comme les vecteurs, vous rencontrerez donc soit des matrices numériques, soit des
matrices de caractères, soit des matrices logiques, soit des matrices vides. Contrairement au
24 2 • Objets, fonctions et données avec le langage R
vecteur, la matrice peut avoir plus qu’une colonne. Chaque élément (et c’est élément ici qu’il
faut utiliser) d’une matrice est repéré par son numéro de ligne et son numéro de colonne. Toutes
les lignes d’une matrice ont la même longueur. Il en va de même pour ses colonnes. En revanche,
la longueur des lignes peut être différente de celle des colonnes.
Définition 2.4 Une liste est un objet permettant de stocker des objets qui peuvent être hétéro-
gènes, c’est-à-dire qui n’ont pas tous le même mode ou la même longueur.
Définition 2.5 Un tableau de données, ou data.frame en anglais, est une liste particulière
dont les composantes sont de même longueur et dont les modes peuvent être différents. Un
data.frame est un tableau à double entrée : les lignes sont les individus sur lesquels les
mesures sont faites et les colonnes sont les variables.
Remarque : les jeux de données que vous utilisez seront souvent considérés comme des
data.frames.
Définition 2.6 Un facteur est un vecteur particulier qui permet de manipuler naturellement des
variables qualitatives 4 .
4. Le chapitre suivant précisera la différence entre les variables qualitatives et les variables quantitatives.
2.3 Quelques manipulations élémentaires 25
Remarque : R ne vous affiche rien dans la console. Pour que R vous renvoie le résultat de
cette affectation, il faut lui demander de l’imprimer. Vous verrez comment y parvenir au
paragraphe suivant.
> m=1973
> m
[1] 1973
2.3.2 Afficher
Quand vous affectez un nom à un objet, l’affichage de celui-ci n’est pas automatique. Il faut que
vous le demandiez en tapant uniquement le nom donné à l’objet.
Exemple :
> n
[1] 28
> N+n
[1] 48
Vous apprendrez dans la suite comment affecter et visualiser à l’aide de la même ligne de
commande.
Vous pouvez utiliser autant d’objets que vous souhaitez. Les objets peuvent contenir non
seulement des nombres comme vous venez de le voir mais aussi des chaînes de caractères, qui
sont alors indiquées par des guillemets droits, et d’autres choses encore.
26 2 • Objets, fonctions et données avec le langage R
2.3.3 Supprimer
Par défaut R conserve en mémoire tous les objets créés lors de la session. Il n’y a que dans
le cas où vous quittez R, sans sauvegarder la session, que les objets que vous avez créés sont
supprimés.
Il est donc conseillé de supprimer régulièrement les objets que vous avez créés lors de votre
session. Attention, vous devez être sûr de ne plus en avoir besoin car ils seront définitivement
perdus.
Pour savoir quels sont les objets qui ont été créés pendant votre session, utilisez, à votre
B convenance, la commande ls() ou la commande objects().
S
U
– plusieurs objets, par exemple les objets n et N, utilisez alors la ligne de commande suivante :
> rm(n,N)
Exemple : vous voulez déterminer les caractéristiques classe, mode et taille de l’objet
iris.
Pour connaître la classe de l’objet iris de R, tapez la commande :
> class(iris)
[1] "data.frame"
[1] "list"
Vous cherchez à connaître les noms des colonnes de l’objet iris de R. Pour cela, vous
tapez la commande :
> names(iris)
Pour connaître la taille d’un objet, il existe dans R, deux fonctions : length et dim.
length renvoie le nombre d’éléments d’un vecteur, d’une matrice, d’un array, d’une liste ou
d’un facteur, le nombre de colonnes d’un data.frame et le nombre de cases d’une table.
Exemple : vous cherchez à connaître la taille de l’objet iris de R, sachant que iris est
un data.frame. Donc si vous tapez la commande :
© Dunod – La photocopie non autorisée est un délit.
> length(iris)
[1] 5
ce qui est logique puisque le data.frame iris est constitué de cinq colonnes. Mainte-
nant si vous tapez la commande :
> dim(iris)
R vous affiche :
[1] 150 5
28 2 • Objets, fonctions et données avec le langage R
Ce résultat est plus complet que le précédent. En effet, il vous indique que le data.frame
iris est un tableau constitué de 150 lignes et de 5 colonnes.
1. La fonction length comptabilise les valeurs manquantes dans la longueur des vecteurs.
B
S
U 2. Si vous cherchez à savoir si l’objet étudié possède ou non des valeurs manquantes, vous
utiliserez alors la commande is.na.
3. La fonction pour connaître la taille d’un objet est soit dim soit length.
Il est possible de convertir le mode d’un objet à un autre mode en utilisant les commandes
suivantes :
as.character
as.list
as.logical
as.numeric
Si vous souhaitez tester si un objet est d’un certain mode, il faut utiliser les commandes
suivantes :
is.character
is.list
is.logical
is.numeric
is.null
> serie1<-c(1.2,36,5.33,-26.5)
> serie1
> mode(serie1)
[1] "numeric"
Donc, vous en déduisez que les éléments du vecteur serie1 sont des nombres réels.
> class(serie1)
[1] "numeric"
Ici le résultat numeric signifie que l’objet serie1 est un vecteur contenant des nombres
réels.
Il faut donc faire attention aux deux sens différents du résultat numeric lorsqu’il est
obtenu avec la commande class ou avec la commande mode.
> c(1.2,36,5.33,-26.5)
Dans ce cas, le résultat de la commande est affiché directement et n’est pas stocké en mémoire
car vous n’avez pas affecté ce résultat à un objet.
> (serie1<-c(1.2,36,5.33,-26.5))
Quand vous donnez un nom à un objet, l’affichage de celui-ci n’est pas automatique. Vous le
B demandez en tapant le nom donné à l’objet.
S
U
> serie2<-c("bleu","vert","marron")
> serie2
> mode(serie2)
[1] "character"
Donc, vous en déduisez que les éléments du vecteur serie2 sont des caractères.
Remarque :
1. Si vous mélangez, dans un même vecteur, des caractères et des valeurs numériques, les
valeurs numériques sont automatiquement converties en chaînes de caractères.
2. Quand les éléments du vecteur sont des chaînes de caractères, il est obligatoire de les
déclarer entre guillemets, sinon R ne reconnaît pas les coordonnées du vecteur.
Exemple :
> serie2<-c(bleu,vert,marron)
> serie3<-c(T,T,F,F,T)
> serie3
2.4 Les objets sous R 31
Que signifient les lettres T et F ? Vous allez avoir la réponse en regardant la sortie affichée
par R.
En fait, T et F sont des abréviations de TRUE et de FALSE. Les raccourcis qui existent sous
R vous seront systématiquement mentionnés tout au long de l’ouvrage.
Il est dangereux d’utiliser {T} et {F} car il est possible de redéfinir leurs valeurs. Il est
donc vivement déconseillé de s’en servir !
> mode(serie3)
[1] "logical"
Donc, vous en déduisez que les éléments du vecteur serie3 sont des valeurs logiques.
Exemple : vous souhaitez afficher la troisième coordonnée de la serie1. Pour cela, vous
tapez la commande suivante :
> serie1[3]
[1] 5.33
Les fonctions head et tail vous permettent d’afficher les premiers ou les derniers éléments
d’un vecteur. Si vous utilisez l’une de ces deux fonctions sans préciser la valeur de l’argument
n, R vous renverra les six premières ou les six dernières valeurs du vecteur.
Exemple : vous souhaitez afficher les deux premières valeurs de la serie1. Pour cela,
vous tapez la commande suivante :
> head(serie1,n=2)
Vous souhaitez afficher les deux dernières valeurs de la serie1. Pour cela, vous tapez la
commande suivante :
> tail(serie1,n=2)
Vous souhaitez les mettre ensemble et observer le résultat. Pour cela, vous tapez les lignes
de commande suivantes :
2.4 Les objets sous R 33
> x<-c(v,w)
> x
[1] 2.3 3.5 6.0 14.0 12.0 3.2 5.0 0.7 1.0 3.5
> y<-c(w,v)
> y
[1] 3.2 5.0 0.7 1.0 3.5 2.3 3.5 6.0 14.0 12.0
Remarque : si les vecteurs que vous voulez combiner ne sont pas du même mode, R va
essayer de convertir l’un des deux au type de l’autre. Par exemple, si vous combinez un
vecteur de caractères et un vecteur numérique, R transformera le vecteur numérique en un
vecteur de caractères.
Exemple : ainsi pour extraire les deuxième et cinquième coordonnées du vecteur v, vous
tapez la ligne de commande suivante :
> v[c(2,5)]
© Dunod – La photocopie non autorisée est un délit.
Exemple : pour supprimer les deuxième et troisième coordonnées du vecteur v, vous tapez
la ligne de commande suivante :
> v[-c(2,3)]
[1] 6 14 12
Si vous disposez de deux vecteurs ayant le même nombre de coordonnées, vous pouvez
demander à afficher les valeurs de l’un pour lesquelles les valeurs de l’autre sont supérieures
(ou inférieures) à une certaine valeur.
Exemple : les vecteurs v et w sont composés de 5 valeurs. Vous pouvez demander d’ex-
traire du vecteur w les coordonnées de w pour lesquels v est supérieur à quatre en utilisant
la ligne de commande suivante :
> w[v>4]
Remarque : v>4 est le vecteur logique c(FALSE, FALSE, TRUE, TRUE, TRUE) qui
indique à R les éléments à conserver (valeur TRUE) ou à supprimer (valeur FALSE) du
vecteur v ou du vecteur w.
e) Faire des calculs sur les coordonnées d’un vecteur ou sur des vecteurs
R peut faire des calculs sur l’ensemble des coordonnées d’un vecteur, comme l’addition de deux
vecteurs, la multiplication et la division par un scalaire.
Exemple :
> (v+w)/2
ou encore :
> 20+5*v
Remarque : R vous signale un Warning. Savez-vous pourquoi ? Si vous tapez les deux
lignes de commande suivantes :
> length(v)
[1] 5
> length(z)
[1] 3
Savez-vous maintenant pourquoi ? En fait, les deux vecteurs n’ont pas la même longueur
et R recycle z autant de fois nécessaires pour atteindre la longueur du plus grand des
vecteurs.
Quand deux vecteurs ne sont pas de même longueur, le plus court est recyclé par R.
B
S
U
[1] 1 2 3 4 5 6 7 8 9 10
36 2 • Objets, fonctions et données avec le langage R
Si vous voulez remplacer la troisième coordonnée de s par 35, vous utilisez alors la ligne
de commande suivante :
> s[3]<-35
[1] 1 2 35 4 5 6 7 8 9 10
Exemple : si vous voulez remplacer la valeur 1 par la valeur 25, vous utilisez alors la
ligne de commande suivante :
> s[s==1]<-25
[1] 25 2 35 4 5 6 7 8 9 10
Exemple : si vous voulez remplacer toutes les valeurs supérieures ou égales à 5 par 20,
vous utilisez alors la ligne de commande suivante :
> s[s>=5]<-20
[1] 20 2 20 4 20 20 20 20 20 20
[1] 1 2 3
Si vous voulez qu’un nouveau vecteur contienne deux fois le vecteur donnees, alors vous
tapez la ligne de commande suivante :
> rep(x=donnees,times=2)
[1] 1 2 3 1 2 3
> rep(donnees,2)
[1] 1 2 3 1 2 3
Exemple : vous pouvez également demander qu’un vecteur contienne 50 fois la valeur 1
en tapant la ligne de commande suivante :
> rep(1,50)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[34] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
© Dunod – La photocopie non autorisée est un délit.
Exemple : vous pouvez également demander qu’un vecteur contienne quatre fois la chaîne
de caractères chien en tapant la ligne de commande suivante :
> rep("chien",4)
Seconde façon : une autre façon de nommer les coordonnées d’un vecteur est que vous
définissiez un vecteur formé de chaînes de caractères, puis que vous utilisiez la fonction names.
Exemple :
> matiere<-c("Anglais","Informatique","Biologie")
> matiere
> note<-c(12,19.5,14)
> note
> names(note)<-matiere
> note
> names(note)<-NULL
> note
Exemple : pour trier les notes de Guillaume dans l’ordre croissant, vous tapez la ligne de
commande suivante :
> sort(note)
Remarque : la fonction rev, pour reverse, appliquée au vecteur v renvoie un vecteur dont
les éléments sont ceux de v mais rangés du dernier au premier.
> rev(note)
> mode(serie4)
> "numeric"
Pour savoir où se trouve(nt) une/(des) valeur(s) manquante(s) dans un objet de R, vous devez
utiliser la fonction suivante :
> is.na
Exemple :
> is.na(serie4)
> matrice1<-matrix(1:12,ncol=3)
> matrice1
2.4 Les objets sous R 41
Remarque : que remarquez-vous ? R a rangé, par défaut, les éléments dans la matrice1
par colonne.
Si vous souhaitez ranger les éléments dans la matrice, ligne par ligne, vous utilisez alors
l’argument byrow=TRUE ou byrow=T.
Exemple :
> matrice2<-matrix(1:12,ncol=3,byrow=TRUE)
> matrice2
Vous avez également la possibilité d’attribuer des noms aux lignes et aux colonnes d’une
matrice via l’option dimnames que vous ajouterez dans la fonction matrix. Ces noms doivent
être de type character.
Remarque : tapez la ligne de commande suivante :
© Dunod – La photocopie non autorisée est un délit.
> class(matrice2)
[1] "matrix"
Donc matrice2 est une matrice. Appliquez la fonction length à cette matrice :
> length(matrice2)
[1] 12
> dim(matrice2)
[1] 4 3
dim vous renvoie le nombre de lignes et de colonnes qui forment la matrice, c’est-à-dire
4 et 3. Notez que 4 fois 3 est égal à 12, le nombre d’éléments de la matrice.
Sur une matrice, il y a une différence entre la fonction length et la fonction dim.
B
S
U
Comme pour les vecteurs, R recycle les éléments du vecteur utilisé lors de la création d’une
matrice.
Exemple :
> matrice3<-matrix(1:12,nrow=4,ncol=4)
> matrice3
Pour un élément (i,j) d’une matrice appelée nom_matrice, vous devez utiliser la ligne de
commande suivante :
> nom_matrice[i,j]
> matrice3[3,3]
[1] 11
2.4 Les objets sous R 43
Pour une partie de la matrice, plusieurs possibilités s’offrent à vous en fonction de ce que
vous cherchez à faire. Pour sélectionner la ligne i d’une matrice, vous devez utiliser la ligne de
commande suivante :
> nom_matrice[i,]
Pour sélectionner la colonne j d’une matrice, vous devez utiliser la ligne de commande
suivante :
> nom_matrice[,j]
> matrice3[3,]
[1] 3 7 11 3
> matrice3[,3]
[1] 9 10 11 12
Remarque : R vous renvoie, par défaut toujours le résultat sous la forme d’un vecteur
même si c’est une colonne que vous avez demandé à extraire. Si vous voulez que le
© Dunod – La photocopie non autorisée est un délit.
résultat apparaisse sous forme d’une matrice à une ligne ou à une colonne, vous devez
utiliser l’argument drop=FALSE.
Exemple :
> matrice3[,3,drop=FALSE]
[,1]
[1,] 9
[2,] 10
[3,] 11
[4,] 12
44 2 • Objets, fonctions et données avec le langage R
Pour sélectionner plusieurs colonnes ou plusieurs lignes à la fois, plusieurs méthodes sont
disponibles. Quelques unes d’entre elles vous sont présentées dans la suite et leur utilisation
conseillée mais vous pouvez en trouver d’autres. Vous pouvez sélectionner des colonnes par un
vecteur d’entiers représentant le(s) numéro(s) des colonnes à conserver, ou par un vecteur de
valeurs logiques indiquant si vous voulez extraire ou non chacune des colonnes.
Exemple : vous souhaitez construire la matrice4 constituée de la deuxième et de la
quatrième colonne de la matrice3. Pour cela, vous tapez la ligne de commande suivante :
> (matrice4<-matrice3[,c(2,4)])
[,1] [,2]
[1,] 5 1
[2,] 6 2
[3,] 7 3
[4,] 8 4
Pour supprimer la première ligne ou la première colonne d’une matrice, il faut utiliser soit
nom_matrice[-1,] soit nom_matrice[,-1].
Exemple :
> (matrice5<-matrice3[,-1])
> nrow(matrice5)
[1] 4
2.4 Les objets sous R 45
> ncol(matrice5)
[1] 3
Remarque : vous pouvez aussi obtenir ces deux informations en vous servant de la fonc-
tion dim déjà rencontrée au début de ce chapitre.
Exemple :
> dim(matrice5)
[1] 4 3
Vous pouvez aussi rajouter des lignes, avec la fonction rbind, ou des colonnes, avec la
fonction cbind, à une matrice existante, voire même concaténer des matrices.
Exemple :
> rbind(matrice5,c(13:15))
[2,] 6 10 2
[3,] 7 11 3
[4,] 8 12 4
[5,] 13 14 15
> cbind(matrice5,c(13:16))
> matrice7<-matrix(1:12,ncol=4)
> matrice7
Maintenant, si vous souhaitez multiplier les deux matrices matrice6 et matrice7, vous
allez utiliser la fonction %*%. Vous tapez donc la ligne de commande suivante :
> matrice8<-matrice6 %*% matrice7
> matrice8
le résultat aurait été le même. En effet, tapez les deux lignes suivantes :
48 2 • Objets, fonctions et données avec le langage R
> matrice11<-matrice9*matrice6
> matrice11
et vous obtenez :
le résultat obtenu n’aurait pas été le même. En effet, tapez la ligne de commande suivante :
et vous obtenez :
Le tableau suivant donne les principales commandes utiles lorsque vous chercherez à faire
B des calculs sur les matrices :
S
U
Commande Description
t(nom_matrice) Transpose la matrice sur laquelle vous travaillez.
det(nom_matrice) Calcule le déterminant de la matrice sur laquelle vous travaillez.
solve(nom_matrice) Inverse la matrice sur laquelle vous travaillez.
eigen(nom_matrice) Diagonalise la matrice sur laquelle vous travaillez.
2.5.1 Généralités
Une fonction se distingue facilement des objets que vous avez déjà rencontrés. En effet, pour se
servir d’une fonction il faut faire suivre son nom de parenthèses qui contiennent des informations
nécessaires à l’exécution de la fonction.
Exemple :
Pour afficher le contenu d’une fonction, il suffit de taper le nom de la fonction sans les
parenthèses.
Exemple :
mode
function (x)
{
if (is.expression(x))
return("expression")
if (is.call(x))
return(switch(deparse(x[[1L]])[1L], ‘(‘ = "(", "call"))
if (is.name(x))
"name"
else switch(tx <- typeof(x), double = , integer =
+ "numeric",
closure = , builtin = , special = "function", tx)
}
<environment : namespace :base>
Ce sont les parenthèses qui permettent l’exécution de la fonction. Si vous les oubliez, la
B fonction ne s’exécutera pas.
S
U
Exemple : si vous souhaitez afficher la liste des objets en mémoire de R, il faut taper la
commande ls() et non simplement ls. En effet, si vous écrivez ls, R affichera le contenu
50 2 • Objets, fonctions et données avec le langage R
de l’objet ls c’est-à-dire le code de la fonction ! Ainsi, même pour utiliser une fonction
qui n’a pas besoin d’arguments, il faut faire suivre son nom de parenthèses.
fonction(formula=, data=)
où formula est de type réponse ∼ prédicteurs et data représente le tableau de données sur
lequel vous travaillez et dans lequel se trouvent les variables qui interviennent dans formula.
Ce qui est appelé réponse en statistique correspond à la variable à expliquer et ce qui est appelé
prédicteurs correspond à l’ensemble des variables explicatives.
2.6 Les données sous R 51
Exemple :
> aov(Sepal.Length~Species,data=iris)
Ici la fonction est aov, la réponse est Sepal.Length, ici il n’y a qu’un prédicteur qui est
Species et le tableau de données est iris. Cette fonction sert à réaliser une analyse de
la variance à un facteur, comme vous le verrez au chapitre 10 de ce livre.
Call:
aov(formula = Sepal.Length ~ Species, data = iris)
Terms:
Species Residuals
Sum of Squares 63.21213 38.95620
Deg. of Freedom 2 147
Pour saisir des données sous R, vous connaissez déjà les deux fonctions seq et c. Mais il en
existe encore une autre qui peut vous être utile : la fonction scan. Avec cette fonction, la saisie
d’une série de données peut paraître moins fastidieuse.
Exemple : tapez la ligne de commande suivante :
> jeu1<-scan()
R vous redonne la main et vous pouvez taper les valeurs du jeu de données :
1: 1.2
2: 36
3: 5.33
4: -26.5
5:
52 2 • Objets, fonctions et données avec le langage R
Read 4 items
Exemple : la fonction scan est particulièrement utile pour saisir une matrice :
> matrix(scan(),nrow=2,byrow=TRUE)
1: 1 3 4
4: 5 2 1
7:
Read 6 items
[,1] [,2] [,3]
[1,] 1 3 4
[2,] 5 2 1
Ces trois fonctions vous permettent de créer un vecteur ou une matrice de données sous R.
B
S
U
Remarque : la nature des vecteurs peut-être différente. En effet, ils peuvent être de nature
quantitative ou qualitative.
Pour créer un tableau de données sous R, il faut utiliser la fonction data.frame. Cette
fonction permet de concaténer des vecteurs de même longueur et de modes différents.
Les jeux de données que vous étudierez seront souvent considérés comme des data.frames.
B
S
U
mat phy
1 19.6 19.1
2 17.6 17.8
3 18.2 18.7
4 16.0 16.1
Il est possible de donner des noms aux lignes du tableau de données avec l’option row.names
qui doit fournir un vecteur de mode caractère et de longueur égale au nombre de lignes du
tableau de données.
Exemple : le tableau de données ci-dessus correspond aux moyennes trimestrielles de
mathématiques et de sciences physiques qu’ont obtenu Guillaume, Valérie, Thomas et
Julie. Donc, vous tapez la ligne de commande suivante pour voir apparaître les noms en
face des quatre lignes :
> res2<-data.frame(mat,phy,row.names=c("Guillaume","Valérie",
+ "Thomas","Julie"))
> res2
mat phy
Guillaume 19.6 19.1
Valérie 17.6 17.8
© Dunod – La photocopie non autorisée est un délit.
Les fonctions cbind et rbind, qui ont été introduites dans le paragraphe sur les matrices,
s’utilisent aussi avec les tableaux de données.
Vous noterez aussi que les fonctions ncol et nrow, qui renvoient le nombre de colonnes et le
nombre de lignes, s’emploient également.
Enfin, il est possible d’utiliser les crochets pour extraire une sous-partie d’un tableau de
données. Ces derniers ont le même comportement que lorsqu’ils sont utilisés avec des matrices.
Enfin, vous rencontrerez dans le paragraphe suivant la fonction read.table qui permet de
créer un tableau de données à partir des informations contenues dans un fichier au format texte.
54 2 • Objets, fonctions et données avec le langage R
Pour connaître le répertoire de travail actuellement utilisé par R, qui est par défaut le répertoire
où le langage est installé, il suffit d’utiliser la fonction getwd sans spécifier aucun argument.
Exemple : si l’un des auteurs tape :
> getwd()
[1] "C:/Users/Bertrand/Documents"
Pour changer le répertoire de travail par défaut, pour la durée de la session R, pour, par
exemple, le répertoire "C:\Data", il suffit de taper la commande suivante :
> setwd("C:\\Data")
ou de manière équivalente :
> setwd("C:/Data")
Pour des raisons liées à la syntaxe de R, plus précisément la syntaxe des systèmes de type
B Unix, la barre oblique inversée "\" doit être remplacée soit par une barre oblique "/" soit par
S
U
deux barres obliques inversées "\\".
Il faut remplacer le chemin écrit ci-dessus par celui où est enregistré le fichier dans votre
ordinateur.
– utiliser, dans un environnement Windows et Mac OS X, la fonction file.choose qui vous
permettra de sélectionner le fichier à l’aide de l’explorateur de fichiers.
© Dunod – La photocopie non autorisée est un délit.
Comme vous allez le voir dans la suite de ce chapitre, la plupart des formats de fichiers sont
reconnus par R. Vous allez commencer par apprendre à sauvegarder et à lire des objets R au
format utilisé par R.
> pH<-c(1.2,3.5,11.0,7.1,8.2)
> pH
> save(pH,file="FichierpH.RData")
> rm(pH)
Vérifiez que l’objet pH est désormais absent de la mémoire du logiciel en cherchant à afficher
son contenu :
> pH
> load("FichierpH.RData")
L’objet pH est à nouveau présent en mémoire et vous pouvez afficher son contenu :
> pH
Pour lire un fichier de sauvegarde au format de R, vous pouvez aussi simplement le glisser
B dans la fenêtre de la Console R de l’interface graphique du logiciel lorsque vous en disposez
S
U
d’une.
53.5 160
74.4 172
52.6 151
88.6 163
49.2 169
Pour afficher le jeu de données contenu dans le fichier table1.txt à l’écran, bien sûr après
l’avoir sauvegardé dans votre ordinateur, vous utiliserez la fonction read.table.
Exemple : tapez la ligne de commande suivante :
> read.table(paste(Chemin,"table1.txt",sep=""))
V1 V2
1 53.5 160
2 74.4 172
3 52.6 151
4 88.6 163
5 49.2 169
R affiche le tableau de données ainsi créé en numérotant les lignes et en donnant aux
© Dunod – La photocopie non autorisée est un délit.
colonnes un nom.
Si vous avez indiqué comme répertoire de travail celui où se trouve ce fichier, il suffit
d’utiliser la commande :
> read.table("table1.txt")
> read.table("http://www-irma.u-strasbg.fr/~fbertran/BioStatR/
+ table1.txt")
V1 V2
1 53.5 160
2 74.4 172
3 52.6 151
4 88.6 163
5 49.2 169
Changez le répertoire de travail de R pour celui dans lequel vous avez enregistré les fichiers
que vous deviez télécharger à l’aide la fonction setwd ou du menu Fichier.
Vous aurez besoin de conserver le tableau de données comme un objet en lui donnant un nom
pour pouvoir le réutiliser plus tard.
Exemple : tapez la ligne de commande suivante :
> table1<-read.table("table1.txt")
V1 V2
1 53.5 160
2 74.4 172
3 52.6 151
4 88.6 163
5 49.2 169
Vous pouvez demander seulement l’affichage d’une colonne de cet objet en vous servant de
l’opérateur $.
Exemple :
> table1$V1
> table1[1,1]
[1] 53.5
ou encore en tapant :
> table1[c(1),c(1)]
[1] 53.5
Vous pouvez demander les éléments des deux premières lignes et de la première colonne en
tapant :
> table1[1:2,1]
Vous pouvez demander les éléments des deux premières lignes et des deux premières colonnes
en tapant :
> table1[1:2,1:2]
© Dunod – La photocopie non autorisée est un délit.
V1 V2
1 53.5 160
2 74.4 172
Pour travailler ensuite sur les variables de la table, vous pouvez leur attribuer un nom plus
parlant que la syntaxe utilisée par R.
Exemple : tapez les lignes de commande suivantes :
> masse<-table1$V1
> taille<-table1$V2
> masse
> taille
Si vous avez spécifié le nom des variables dans la première ligne de votre fichier de données,
vous devez l’indiquer par l’option header=TRUE ou éventuellement header=T.
Exemple :
> read.table("table2.txt",header=TRUE)
Masse Taille
1 53.5 160
2 74.4 172
3 52.6 151
4 88.6 163
5 49.2 169
Par défaut, R lit la première ligne comme une ligne de données et nomme les colonnes sous la
forme V1, V2, . . . , comme pour table1.txt.
Par défaut, un point (.) est utilisé pour les décimales. Mais si les décimales sont notées par
une virgule dans votre fichier de données il faut le spécifier en utilisant dec=",".
Exemple : en tapant la ligne de commande suivante :
> read.table("table3.txt",dec=",")
Par défaut, un espace est utilisé pour séparer les valeurs appartenant à différentes colonnes.
Mais si les colonnes sont séparées par un autre caractère dans votre fichier de données il faut le
spécifier en utilisant l’argument sep.
Exemple : dans le cas où le séparateur est un point virgule, vous utiliserez l’argument
sep=";" :
Pour enregistrer un tableau de données ou une matrice stockée dans l’objet data dans un
fichier au format texte, vous utiliserez la commande suivante :
> write.table(data,file=file.choose())
> read.csv("table6.csv")
> read.csv2("table5.csv")
Pour enregistrer un tableau de données ou une matrice stockée dans l’objet data dans un
fichier au format csv anglo-saxon, vous utiliserez la commande suivante :
> write.csv(data,file=file.choose())
Pour enregistrer un tableau de données ou une matrice stockée dans l’objet data dans un
fichier au format csv français, vous utiliserez la commande suivante :
> write.csv2(data,file=file.choose())
La bibliothèque Rcmdr propose une interface graphique pour le langage R qui permet à son
utilisateur de réaliser des tâches de manipulation de données et des analyses statistiques
simples au travers de menus et de boîtes de dialogue. Cette bibliothèque permet de réaliser
l’import des fichiers textes (.csv par exemple) ou au format SPSS, SAS et même Excel. En effet,
il est possible de lire aussi bien les fichiers au format .xls (Excel 97-2003) ou au format .xlsx
(Excel 2007-2016). Nous procédons de la manière suivante.
62 2 • Objets, fonctions et données avec le langage R
Figure 2.1
Figure 2.2
Figure 2.3
2.6 Les données sous R 63
Figure 2.4
e) Lire et écrire un fichier au format Microsoft Excel dans l’un des trois environnements
Windows, Mac OS X ou Linux
La bibliothèque xlsx permet d’importer ou d’exporter des fichiers aux formats .xls (Excel
97-2003) ou .xlsx (Excel 2007-2013). Elle repose sur le langage Java qui doit donc être, comme
c’est presque systématiquement le cas de nos jours, présent sur votre ordinateur. Bien que la
bibliothèque xlsx soit très complète et agréable à utiliser, sa vignette, à laquelle vous pouvez
accéder en exécutant l’instruction vignette("xlsx"), après avoir installé cette bibliothèque
bien sûr, est à ce jour peu détaillée. Nous vous proposons donc ci-dessous un exemple simple de
son utilisation. Installez la bibliothèque xlsx. L’instruction suivante permet de lire la première
feuille de calcul d’un classeur Excel :
> library(xlsx)
> (data<-read.xlsx(file.choose(),1))
Masse Taille
1 53.5 160
2 74.4 172
© Dunod – La photocopie non autorisée est un délit.
3 52.6 151
4 88.6 163
5 49.2 169
> args(read.xlsx)
Voici le rôle que joue chacun d’entre eux ainsi que leur valeur utilisée par défaut si vous ne la
spécifiez pas lorsque vous vous servez de la fonction read.xlsx.
– file est le nom du classeur Excel à importer dans R et le premier des deux seuls arguments
qui n’a pas de valeur par défaut.
– sheetIndex est le numéro de la feuille à lire dans le classeur Excel et le second des deux
seuls arguments qui n’a pas de valeur par défaut.
– sheetName est le nom de la feuille à lire dans le classeur Excel. Il faut fournir soit le
numéro de la feuille avec sheetIndex soit son nom avec sheetName.
– rowIndex est un vecteur de nombres qui correspondent aux lignes de la feuille qu’il faut
extraire. Par défaut, la valeur NULL est utilisée et toutes les lignes non vides sont extraites
sauf si une restriction est faite à l’aide de l’une des deux options startRow ou endRow.
– startRow est un nombre qui désigne la première ligne à extraire. Par défaut, si startRow =
NULL, la première ligne extraite est la première ligne de la feuille. Cette option n’est active
que si rowIndex = NULL.
– endRow est un nombre qui désigne la dernière ligne à extraire. Par défaut, si endRow =
NULL, la dernière ligne extraite est la dernière ligne non vide de la feuille. Cette option
n’est active que si rowIndex = NULL.
– colIndex est un vecteur de nombres qui correspondent aux lignes de la feuille qu’il faut
extraire. Par défaut, la valeur NULL est utilisée et toutes les lignes non vides sont extraites.
– as.data.frame est une valeur logique, TRUE par défaut, qui indique si le résultat de
l’extraction doit être, ou non, transformé en data.frame. Si la valeur FALSE est utilisée,
le résultat de l’extraction est une liste dont chacun des éléments correspond au contenu de
l’une des colonnes lues.
– header est une valeur logique, TRUE par défaut, qui indique si la première ligne lue, c’est-
à-dire celle qui correspond au premier élément du vecteur rowIndex, contient, ou non, le
nom des colonnes.
– colClasses est un vecteur de caractères qui représentent la classe de chacune des colonnes.
Il est recyclé autant de fois que nécessaire. La valeur par défaut, NA, indique que la classe
de chacune des variables sera déterminée par la classe de la première cellule non vide
de cette colonne. Il est possible de ne spécifier qu’une partie des classes des colonnes.
Pour les autres colonnes, la valeur de colClasses sera NA et R déterminera leur classe
automatiquement.
– keepFormulas est une valeur logique, FALSE par défaut, qui indique si les formules Excel
présentent dans les cellules doivent être, ou non, conservée comme du texte dans R et ne
pas être évaluées avant l’extraction.
2.6 Les données sous R 65
– encoding est l’encodage à déclarer pour les chaînes de caractères qui sont extraites. Cette
option permet de spécifier un encodage Latin-1 ou UTF-8.
Remarque :
1. La fonction read.xlsx est assez lente pour les feuilles de calcul de grande taille (plus
de 100 000 cellules). En consultant la page d’aide, vous constaterez que la fonction
read.xlsx2 existe également. C’est elle dont il faut se servir en présence de ces
grandes feuilles de calcul car elle s’appuie plus sur le langage Java et est, grâce à cela,
bien plus performante. Par contre, elle ne reconnaît pas les dates automatiquement
qu’il faut déclarer avec l’option colClasses.
2. Dans la pratique, vous n’utiliserez que les arguments file, sheetIndex ou
sheetName. Ce sont donc les seuls dont vous devez vous souvenir.
3. Si vous ne voulez pas extraire la totalité d’une feuille de calcul, pensez à utiliser les
arguments rowIndex, ou startRow et endRow, et colIndex.
Vous calculez le BMI de chacun des individus du jeu de données que vous stockez dans la
colonne BMI de l’objet data :
> data$BMI<-data$Masse/(data$Taille/100)^2
+ row.names = FALSE)
L’option row.names = FALSE précise que vous ne voulez pas exporter les noms des lignes.
En utilisant l’option append = TRUE, vous pouvez ajouter à un fichier existant des données
en y créant une nouvelle feuille de calcul :
Remarque : attention, par défaut la valeur de l’option append est FALSE et par conséquent
si vous souhaitez ajouter une feuille à un classeur, il faut absolument préciser append =
TRUE car sinon vous détruirez le fichier existant et le remplacerez par un fichier qui ne
contient plus que la feuille que vous vouliez ajouter.
> args(write.xlsx)
> wb <-loadWorkbook(file.choose())
Dans le cas d’un ajout à une feuille existante, récupérez l’ensemble des feuilles existantes
dans le classeur avec la première instruction puis sélectionnez, à l’aide de la seconde instruction,
la feuille dans laquelle vous souhaitez faire l’ajout, ici la première feuille du classeur :
Dans le cas d’un ajout dans une nouvelle feuille, nommée ajout1, exécutez la commande :
2.6 Les données sous R 67
Vous souhaitez intégrer un graphique représentant ces données dans une nouvelle feuille
nommée graphique. Créez la feuille :
Les options startRow et startColumn indiquent où doit se situer le coin supérieur gauche
du graphique. Il faudra vous souvenir de l’option scale qui permet d’ajuster l’espace occupé
© Dunod – La photocopie non autorisée est un délit.
> saveWorkbook(wb,"table8bis.xls")
f) Lire, écrire et mettre à jour des fichiers au format Microsoft Excel, Excel 2007, Access
et Access 2007 dans un environnement Windows
Il est possible de lire des fichiers au format Microsoft Excel, Excel 2007, Access et Access
2007 en utilisant les fonctionnalités ODBC de l’environnement Windows. L’utilisation de ces
fonctions est plus complexe que celles décrites dans le paragraphe précédent mais permet l’accès
à un plus grand nombre de formats de fichier et pourra donc s’avérer utile.
La bibliothèque utilisée ci-dessous existe aussi pour linux et Mac OSX mais les fonctions
odbcConnectExcel, odbcConnectAccess, odbcConnectExcel2007 et odbcConnectAc-
ces2007 n’y sont pas présentés.
RODBC ne fonctionnera qu’avec Microsoft office d’installé sur votre ordinateur. De plus, si
vous avez Office 32 bits, vous devez utiliser R 32 bits pour pouvoir vous servir de RODBC. Il
en va de même si vous avez Office 64 bits, vous devez utiliser R 64 bits.
> library(RODBC)
> connexion<-odbcConnectExcel()
> data<-sqlFetch(connexion,"Feuil1")
> close(connexion)
> data
Dans les instructions précédentes, Feuil1 est le nom de la feuille Excel du classeur
dont il faut importer les données. Il peut changer en fonction de votre fichier. Ce nom peut
se retrouver soit en visualisant le fichier à l’aide d’Excel, soit en exécutant la commande
sqlTables(connexion) après avoir établi une connexion avec le classeur Excel à l’aide
2.6 Les données sous R 69
Pour mettre à jour une feuille existante d’un classeur à l’aide d’un jeu de données, il faut
utiliser la fonction sqlUpdate. Pour pouvoir fonctionner, la fonction sqlUpdate a besoin de
connaître le nom de la colonne permettant d’identifier chacun des individus du jeu de données,
© Dunod – La photocopie non autorisée est un délit.
c’est pourquoi vous utiliserez la Feuille 2 du classeur table7.xls. L’intérêt de cette approche
est qu’il est possible de mettre à jour des données sans avoir à reproduire l’ordre exact avec
lequel les individus sont enregistrés dans le fichier à modifier. Remarquez également que dans
le fichier à mettre à jour, la colonne BMI existe déjà et que toutes ses valeurs sont égales à 0.
La fonction odbcCloseAll permet de fermer toutes les connexions ouvertes avec des fichiers.
Pensez à vous en servir pour repartir de zéro si vous avez des difficultés.
70 2 • Objets, fonctions et données avec le langage R
g) Lire un fichier au format Microsoft Excel dans les trois environnements Windows,
Mac OS X ou Linux
La bibliothèque gdata permet de lire des fichiers au format Excel 97-2003 et au format Excel
2007 si le langage de progammation Perl est installé sur votre ordinateur, ce qui est le cas par
défaut si vous utilisez Mac OS X ou un système de type Linux. Si vous utilisez un environne-
ment Windows, vous pouvez vous procurer une version gratuite de Perl sur internet. Exécutez
l’instruction suivante pour installer cette bibliothèque :
> install.packages("gdata")
> library(gdata)
> read.xls(file.choose())
Masse Taille
1 53.5 160
2 74.4 172
3 52.6 151
4 88.6 163
5 49.2 169
Vous constatez que par défaut la fonction read.xls du package gdata lit la première feuille
du classeur Excel. Si vous souhaitez en lire une autre, vous utiliserez l’argument sheet. Vous
voulez lire la deuxième feuille du classeur table7.xls, vous exécutez donc la commande
suivante :
> read.xls(file.choose(),sheet=2)
2.6 Les données sous R 71
Enfin n’oubliez pas que R peut aller lire des fichiers stockés sur Internet sans que vous ayez
besoin de les télécharger au préalable. La commande suivante vous montre comment utiliser
cette possibilité du logiciel en lisant le fichier table7.xls directement sur le site internet des
auteurs :
> read.xls("http://www-irma.u-strasbg.fr/~fbertran/BioStatR/table7.xls",
+ sheet=1)
Downloading...
essai de l’URL ’http://www-irma.u-strasbg.fr/~fbertran/BioStatR/table7.xls’
Content type ’application/vnd.ms-excel’ length 18432 bytes (18 Kb)
URL ouverte
downloaded 18 Kb
Masse Taille
1 53.5 160
2 74.4 172
3 52.6 151
4 88.6 163
5 49.2 169
© Dunod – La photocopie non autorisée est un délit.
Remarque : il existe d’autres bibliothèques pour lire, écrire ou manipuler des fichiers au
format Microsoft Excel depuis R.
– XLConnect qui est également basé sur le langage Java. La documentation fournie pour
cette bibliothèque est riche. En particulier, la vignette XLConnect permet un démarrage
aisé. (vignette("XLConnect") ou vignette("XLConnectImpatient")).
– xlsReadWrite qui n’est plus mise à jour et qui nécessite un environnement 32 bits.
72 2 • Objets, fonctions et données avec le langage R
EN RÉSUMÉ
Commande Description
s<-valeur Affecte valeur à l’objet s.
s=valeur
rm(s) Supprime l’objet s.
mode(s) Affiche le mode (numérique, caractère,. . .) de l’objet
s.
class(s) Affiche la classe (data.frame,. . .) de l’objet s.
names(s) Renvoie les noms des éléments de l’objet s.
Si s est un tableau de données, renvoie les noms des
colonnes.
length(s) Affiche le nombre d’éléments contenus dans l’objet s.
dim(s) Donne les dimensions de l’objet s.
as.character(s) Transforme l’objet s en caractères.
as.list(s) Transforme l’objet s en liste.
as.logical(s) Transforme l’objet s en booléen.
as.numeric(s) Transforme l’objet s en numérique.
is.character(s) Teste si l’objet s est un caractère.
is.list(s) Teste si l’objet s est une liste.
is.logical(s) Teste si l’objet s est un booléen.
is.na(s) Teste si l’objet s a des valeurs manquantes.
is.numeric(s) Teste si l’objet s est numérique.
is.null(s) Teste si l’objet s est nul.
c(s1 , s2 , ..., sk ) Crée un vecteur en collant les s1 , s2 , ..., sk dans
l’ordre.
Exemple : c(2:5,7,seq(8,9,0.5)) produit
2,3,4,5,7,8,8.5,9.
sort(s) Trie les coordonnées d’un vecteur par ordre croissant.
2.6 Les données sous R 73
Commande Description
rev(sort(s)) Trie les coordonnées d’un vecteur par ordre
décroissant.
s[I] Crée une suite composée des éléments de la suite s
indexées par I. Ici I peut être de la forme :
I est entier. Exemple : s[3] renvoie le 3ème élément
de s.
I est une suite. Exemple : s[3:5] renvoie les
3ème,. . .,5ème éléments de s.
I est une condition. Exemple : s[t>3] renvoie les
éléments de s correspondants aux éléments de t qui
sont supérieurs à 3.
s[-I] Crée une suite composée des éléments de s qui sont
complémentaires à ceux indexés par I.
tail(s,n=k) Renvoie les k derniers éléments ou les dernières
lignes de l’objet s.
nrow(s) Donne le nombre de lignes de l’objet s.
ncol(s) Donne le nombre de colonnes de l’objet s.
tab$col Renvoie le vecteur composé des éléments de la
colonne col de la table tab.
Exemple : e<-amis$email initialise la variable e
avec les valeurs de la colonne email de la table amis.
rbind(r1 , ..., rk ) Crée une matrice ou un tableau de données en collant
les r1 , ..., rk l’un en dessous de l’autre.
cbind(c1 , ..., ck ) Crée une matrice ou un tableau de données en collant
les c1 , ..., ck l’un à côté de l’autre.
Saisit au clavier un jeu de données numériques.
© Dunod – La photocopie non autorisée est un délit.
scan()
getwd() Affiche le répertoire de travail dans la console.
setwd(Chemin) Définit Chemin comme répertoire de travail.
file.choose() Permet de sélectionner facilement un fichier stocké
sur l’ordinateur avec une boîte de dialogue conviviale.
load("file") Charge le contenu du fichier de sauvegarde file au
format R en mémoire.
save(objet,file="file") Sauvegarde l’objet objet dans le fichier de
sauvegarde file .
74 2 • Objets, fonctions et données avec le langage R
Commande Description
read.table("file") Lit le fichier de données file ne contenant pas les
noms des variables en première ligne.
read.table("file",header=T) Lit le fichier de données file en spécifiant que les
noms des variables sont contenus dans la première
ligne.
Exemple :
t<-read.table("table.txt",header=T).
write.table(objet,"file") Écrit objet dans le fichier de données file.
read.csv("file") Lit un fichier de données file au format CSV
anglo-saxon.
write.csv(objet,"file") Écrit objet dans un fichier de données file au
format CSV anglo-saxon.
read.csv2("file") Lit un fichier de données file au format CSV
français.
write.csv2(objet,"file") Écrit objet dans un fichier de données file au
format CSV français.
Package xlsx Environnement Windows, Mac OS X ou Linux
read.xlsx("file", Lit la feuille de calcul numéro sheetIndex du fichier
sheetIndex) de données file au format Excel.
Package xlsx Environnement Windows, Mac OS X ou Linux
write.xlsx(objet,"file", Écrit objet dans la feuille de calcul sheetName du
sheetName) fichier de données file au format Excel.
Package gdata Environnement Windows, Mac OS X ou Linux
read.xls("file") Lit un fichier de données file au format Excel.
Pour utiliser les fonctions read.xlsx et write.xlsx, il faut au préalable charger le package
xlsx.
EXERCICES
28; 27, 5; 27; 28; 30, 5; 30; 31; 29, 5; 30; 31; 31; 31, 5; 32; 30; 30, 5.
2) Saisissez la variable masse1 contenant les 5 valeurs suivantes : 40; 39; 41; 37, 5; 43.
3) Sans refaire de saisie, créez la variable nouvelle.masse contenant 20 valeurs :
– les cinq valeurs de masse1 répétées deux fois
– et les dix dernières valeurs de masse.
4) Enregistrez, dans votre répertoire de travail, la variable nouvelle.masse dans une feuille
nommée "Nouvelle Masse" du classeur Excel "Masse.xls".
PROBLÈME
1) Construisez le vecteur suite qui est une suite d’entiers allant de 1 à 12.
2) Vous souhaitez connaître les éléments du vecteur suite strictement supérieurs à 6. Quelle
est la ligne de commande que vous devez taper pour obtenir le résultat ?
Il est possible d’associer des vecteurs logiques logic1 et logic2 en utilisant les connecteurs
logiques suivants :
– !logic1 est la négation de logic1, également appelé opérateur NON, c’est-à-dire le
vecteur dont les éléments sont TRUE lorsque ceux de logic1 sont FALSE et dont les
éléments sont FALSE lorsque ceux de logic1 sont TRUE.
– logic1 & logic2 est la conjonction, également appelé opérateur ET, des deux vecteurs
logiques logic1 et logic2.
– logic1 && logic2 est identique à logic1[1] & logic2[1] et seul le premier élément
de chacun des deux vecteurs est utilisé.
– logic1 | logic2 est la disjonction inclusive, également appelé opérateur OU inclusif,
des deux vecteurs logiques logic1 et logic2.
– logic1 || logic2 est identique à logic1[1] | logic2[1] et seul le premier élément
de chacun des deux vecteurs est utilisé.
– xor(logic1, logic2) est la disjonction exclusive, également appelé opérateur OU
exclusif, des deux vecteurs logiques logic1 et logic2.
3) Vous souhaitez connaître les éléments du vecteur suite strictement inférieurs à 6. Quelle est
la ligne de commande que vous devez taper pour obtenir le résultat ?
4) Vous souhaitez connaître les éléments du vecteur suite égaux à 6. Quelle est la ligne de
commande que vous devez taper pour obtenir le résultat ?
5) Vous souhaitez savoir si le premier élément du vecteur suite est inférieur ou égal à 8 et
supérieur ou égal à 4. Quelle est la ligne de commande que vous devez taper pour obtenir le
résultat ?
Problème 77
6) Vous souhaitez connaître les éléments du vecteur suite inférieurs ou égaux à 4 ou supérieurs
ou égaux à 8. Quelle est la ligne de commande que vous devez taper pour obtenir le résultat ?
7) Vous souhaitez savoir si le premier élément du vecteur suite est inférieur ou égal à 4 ou
supérieur ou égal à 8. Quelle est la ligne de commande que vous devez taper pour obtenir le
résultat ?
8) Vous allez maintenant construire les tables de vérité des opérateurs logiques à l’aide de la
fonction outer. La fonction outer permet d’appliquer une fonction de deux arguments à tous
les couples d’éléments que vous pouvez former à partir des coordonnées de deux vecteurs.
Exemple : vous considérez le vecteur u des entiers de 1 à 10 et le vecteur v des entiers de
1 à 8. Vous souhaitez construire le tableau à deux dimensions avec le produit de toutes les
coordonnées des deux vecteurs. Vous exécutez la commande suivante :
> u<-1:10
> v<-1:8
> outer(u,v,"*")
> x<-c(NA,FALSE,TRUE)
> names(x)<-as.character(x)
> !x
> outer(x,x,"&")
78 2 • Objets, fonctions et données avec le langage R
> outer(x,x,"|")
> outer(x,x,"xor")
DU MAL À DÉMARRER
➩ Exercice 2.1
1) Utilisez l’opérateur ":".
2) Utilisez la fonction rep et la fonction c pour créer un vecteur.
3) Utilisez la fonction c et la fonction rep pour créer un vecteur. Faites attention à l’ordre
que vous allez donner à ces deux fonctions.
➩ Exercice 2.2
1) Utilisez la fonction c.
2) Utilisez la fonction c.
3) Utilisez la fonction c, la fonction rep et relisez le paragraphe 2.4.2 b) intitulé Afficher
une ou plusieurs coordonnées d’un vecteur .
4) Relisez le paragraphe 2.6.3 e) intitulé Lire et créer un fichier au format Excel 97-2003
dans un environnement Windows ainsi que le paragraphe 2.6.3 f) intitulé Lire, écrire
et mettre à jour des fichiers au format Microsoft Excel, Excel 2007, Access et Access
2007 dans un environnement Windows .
Solution des exercices 79
➩ Exercice 2.3
1) Utilisez la fonction c.
2) Utilisez la fonction c. Relisez le paragraphe 2.6.2 intitulé Créer un tableau de données
sous R . Puis utilisez la fonction data.frame et l’option row.names.
3) Mêmes consignes qu’à la question 2).
4) Mêmes consignes qu’à la question 2).
5) Pensez à vous servir des crochets de la même manière que lorsque vous utilisez des
matrices et de l’option drop=FALSE.
6) Mêmes consignes qu’à la question 5).
7) Commencez par regarder l’aide sur les opérateurs logiques, puis pensez à utilisez aussi
l’option drop=FALSE.
➩ Problème 2.1
1) Utilisez l’opérateur ":".
2) Pensez à vous servir de >.
3) Pensez à vous servir de < ou de ! et de >=.
4) Pensez à vous servir de == ou de <= et de >=.
5) Pensez à vous servir de &&.
6) Pensez à vous servir de |.
7) Pensez à vous servir de ||.
8) Exécutez les commandes indiquées dans l’énoncé.
© Dunod – La photocopie non autorisée est un délit.
Exercice 2.1
1)
> v<-101:112
> v
[1] 101 102 103 104 105 106 107 108 109 110 111 112
80 2 • Objets, fonctions et données avec le langage R
Vous auriez également pu obtenir le même résultat avec la ligne de commande suivante :
> v<-seq(101,112)
2)
> w<-rep(c(4,6,3),4)
> w
[1] 4 6 3 4 6 3 4 6 3 4 6 3
Remarque : vous vérifiez au passage que la dimension de w est celle demandée par
l’énoncé, c’est-à-dire égale à 12.
> length(w)
[1] 12
3)
> x<-c(rep(4,8),rep(6,7),rep(3,5))
> x
[1] 4 4 4 4 4 4 4 4 6 6 6 6 6 6 6 3 3 3 3 3
> length(x)
[1] 20
Vous auriez également pu obtenir le même résultat avec la ligne de commande suivante :
> x<-rep(c(4,6,3),c(8,7,5))
Solution des exercices 81
Exercice 2.2
1)
> masse<-c(28,27.5,27,28,30.5,30,31,29.5,30,31,31,31.5,32,30,30.5)
> masse
[1] 28.0 27.5 27.0 28.0 30.5 30.0 31.0 29.5 30.0 31.0 31.0 31.5 32.0 30.0
[15] 30.5
2)
> masse1<-c(40,39,41,37.5,43)
> masse1
> nouvelle.masse<-c(rep(masse1,2),masse[6:15])
> nouvelle.masse
© Dunod – La photocopie non autorisée est un délit.
[1] 40.0 39.0 41.0 37.5 43.0 40.0 39.0 41.0 37.5 43.0 30.0 31.0 29.5 30.0
[15] 31.0 31.0 31.5 32.0 30.0 30.5
> length(nouvelle.masse)
[1] 20
82 2 • Objets, fonctions et données avec le langage R
– Deuxième méthode : pour obtenir les dix dernières valeurs du vecteur masse, vous avez
peut-être procédé de la manière suivante :
> (nouvelle.masse<-c(rep(masse1,2),tail(masse,n=10)))
[1] 40.0 39.0 41.0 37.5 43.0 40.0 39.0 41.0 37.5 43.0 30.0 31.0 29.5 30.0
[15] 31.0 31.0 31.5 32.0 30.0 30.5
Notez que vous obtenez bien le même résultat qu’avec la première méthode.
4) Pour sauvegarder les données le plus simplement possible en créant un nouveau classeur
Excel au format .xlsx :
> library(xlsx)
> write.xlsx(nouvelle.masse,file=file.choose())
Pour que la colonne dans ce nouveau fichier Excel qui contient les masses s’appelle Masse :
> write.xlsx(data.frame(Masse=nouvelle.masse),file=file.choose())
Pour créer un classeur appelé Resultat.xls contenant une feuille qui contient les masses :
> massedf<-data.frame(nouvelle.masse)
> library(RODBC)
> connexion<-odbcConnectExcel("Resultat.xls",readOnly = FALSE)
> sqlSave(connexion,massedf)
> close(connexion)
B
– Les fonctions c, rep, tail pour créer des vecteurs, la fonction data.frame pour créer un
S tableau de données.
U
– La fonction write.xlsx de la bibliothèque xlsx et les fonctions odbcConnectExcel, sqlSave
et close de la bibliothèque RODBC pour créer un fichier au format Microsoft Excel à partir
d’une matrice ou d’un tableau de données existant dans R.
Solution des exercices 83
Exercice 2.3
1)
> nom<-c("Guillaume","Valérie","Thomas","Julie","Sébastien","Stéphanie",
+ "Grégory","Ambre","Jean-Sébastien","Camille")
> nom
2) Pour un vecteur :
> age<-c(25,24,23,22,41,40,59,58,47,56)
> names(age)<-nom
> age
Si vous regardez la nature de votre vecteur age, en tapant la ligne de commande suivante :
© Dunod – La photocopie non autorisée est un délit.
> str(age)
> c("Guillaume"=66.5,"Valérie"=50.5,"Thomas"=67.5,"Julie"=52.0,
+ "Sébastien"=83.0,"Stéphanie"=65.0,"Grégory"=79.0,"Ambre"=64.0,
+ "Jean-Sébastien"=81.0,"Camille"=53.0)
84 2 • Objets, fonctions et données avec le langage R
Remarque : vous pouvez ôter les guillemets autour des prénoms, sauf autour de Jean-
Sébastien à cause de la présence du tiret que R interprète comme un signe moins.
> age<-data.frame(age,row.names=nom)
> age
age
Guillaume 25
Valérie 24
Thomas 23
Julie 22
Sébastien 41
Stéphanie 40
Grégory 59
Ambre 58
Jean-Sébastien 47
Camille 56
3) Pour un vecteur :
> masse<-c(66.5,50.5,67.5,52,83,65,79,64,81,53)
> names(masse)<-nom
> masse
> masse<-data.frame(masse,row.names=nom)
> masse
poids
Guillaume 66.5
Valérie 50.5
Thomas 67.5
Julie 52.0
Sébastien 83.0
Stéphanie 65.0
Grégory 79.0
Ambre 64.0
Jean-Sébastien 81.0
Camille 53.0
4) Pour un vecteur :
> taille<-c(1.86,1.62,1.72,1.67,1.98,1.77,1.83,1.68,1.92,1.71)
> names(taille)<-nom
> taille
1.92 1.71
> taille<-data.frame(taille,row.names=nom)
> taille
taille
Guillaume 1.86
Valérie 1.62
Thomas 1.72
Julie 1.67
Sébastien 1.98
Stéphanie 1.77
86 2 • Objets, fonctions et données avec le langage R
Grégory 1.83
Ambre 1.68
Jean-Sébastien 1.92
Camille 1.71
5) Pour un vecteur :
> masse.lourde<-masse[masse>80]
> masse.lourde
Sébastien Jean-Sébastien
83 81
> masse.lourde<-masse[masse>80,]
> masse.lourde
[1] 83 81
Ceci n’est pas le résultat voulu, puisque vous perdez le nom des personnes qui ont des masses
supérieures à 80 kg. En fait, ce qui se passe est dû au fait que vous travaillez avec un data.frame.
Il reste en tant que tel lorsque vous faites vos opérations d’extraction sauf lorsque vous extrayez
une ligne ou une colonne. Dans ce cas, R vous donne le résultat sous la forme d’un vecteur et
élimine alors le nom des individus du data.frame.
> str(masse.lourde)
num [1:2] 83 81
L’objet masse a bien perdu sa structure de data.frame. Il faut donc modifier vos lignes de
commande pour demander à R de vous renvoyer un tableau de données et non un vecteur. Mais
comment ?
Vous pouvez utiliser l’option drop=FALSE. En effet, si vous tapez maintenant les deux lignes de
commande suivantes :
Solution des exercices 87
> masse.lourde<-masse[masse>80,,drop=FALSE]
> masse.lourde
masse
Sébastien 83
Jean-Sébastien 81
Notez la présence de deux virgules avant drop=FALSE. Car si vous n’en mettez qu’une seule, R
vous affiche un avertissement
[1] 83 81
Message d’avis :
In ‘[.data.frame‘(poids, poids > 80, drop = FALSE) :
drop argument will be ignored
6) Vous devez extraire du vecteur taille les individus dont la masse est supérieure à 80 kg.
Pour un vecteur :
> taille.masse.lourde<-taille[masse>=80]
> taille.masse.lourde
Sébastien Jean-Sébastien
1.98 1.92
> taille.masse.lourde<-taille[masse>=80,,drop=FALSE]
> taille.masse.lourde
taille
Sébastien 1.98
Jean-Sébastien 1.92
Remarque : vous vous êtes encore servi de l’option drop=FALSE puisque l’objet taille
est un data.frame (cf. la question 4)).
7) Vous devez extraire du vecteur des tailles les individus dont la masse est supérieure à 80 kg
et l’âge est supérieur à 30 ans. Il faut donc combiner deux conditions : masse>=80 et age>=30.
88 2 • Objets, fonctions et données avec le langage R
Sébastien Jean-Sébastien
1.98 1.92
taille
Sébastien 1.98
Jean-Sébastien 1.92
Remarque : si vous souhaitez vérifier les derniers résultats, tapez les deux lignes de
commande suivantes :
> ensemble<-cbind(age,masse,taille)
> ensemble
– Comment spécifier les noms des individus dans un vecteur ou un tableau de données.
B
S
U – Comment extraire des individus en fonction des différentes valeurs prises par les variables.
– La fonction cbind pour combiner des vecteurs, des matrices ou des jeux de données en
juxtaposant leurs colonnes.
Solution du problème 89
SOLUTION DU PROBLÈME
Problème 2.1
1) Le vecteur à construire est une suite d’entiers consécutifs, il suffit d’utiliser la fonction :.
> suite<-1:12
> suite
[1] 1 2 3 4 5 6 7 8 9 10 11 12
2)
> suite>6
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
R vous renvoie un vecteur logique. La valeur de chacune de ses coordonnées vous indique si
l’élément qui est à la même position dans le vecteur suite est strictement supérieur à 6 ou non.
Ainsi, dans ce cas, FALSE signifie inférieur ou égal à 6 et TRUE signifie strictement supérieur à 6.
3)
> suite<6
© Dunod – La photocopie non autorisée est un délit.
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> !(suite>=6)
4)
> suite==6
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
90 2 • Objets, fonctions et données avec le langage R
5)
> suite<=8&&suite>=4
[1] FALSE
6)
> suite<=4|suite>=8
[1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
7)
> suite<=4||suite>=8
[1] TRUE
Objectifs de ce chapitre
➤ se familiariser avec le vocabulaire de la statistique
➤ décrire une série statistique
➤ faire des représentations graphiques d’une série statistique
➤ donner des résumés numériques d’une série statistique
3.1 INTRODUCTION
Le but de la statistique descriptive est de présenter les données récoltées sous une forme telle
que vous puissiez en prendre connaissance facilement et rapidement. La statistique descriptive
consiste à réaliser trois grandes étapes :
1. Établir des distributions statistiques.
2. Représenter les données sous forme de graphiques.
3. Calculer des caractéristiques qui réduisent l’information.
92 3 • Statistiques descriptives univariées
Définition 3.1 La statistique est la discipline des mathématiques qui a pour objet les méthodes
qui permettent de collecter et d’analyser les données empiriques et d’en extraire des statistiques.
Définition 3.2 Les statistiques sont des données numériques qui interviennent pratiquement
dans tous les domaines d’activité : gestion financière (états, banques, assurances, entreprises
. . . ), démographie, contrôles de qualité, études de marché, sciences expérimentales (biologie,
psychologie . . . ) . . .
Remarque : il est bien connu l’existence d’un grand nombre de définitions de la statis-
tique. Kendall ose même écrire que « parmi les thèmes à propos desquels les statisticiens
ne sont pas d’accord se trouve la définition de leur science ».
Définition 3.3 L’ensemble sur lequel porte l’activité statistique s’appelle la population. Elle
est généralement notée V pour rappeler la notation des probabilités mais par exemple dans la
théorie des sondages elle est notée U , U comme Univers.
Remarque : lorsque la population est finie, le nombre d’éléments contenus dans V est
noté N , ce qui se note également Card (V) = N .
Définition 3.4 Les éléments qui constituent la population sont appelés les individus ou encore
les unités statistiques.
Définition 3.5 Un échantillon, noté généralement S (S comme sample , ce qui signifie
échantillon en anglais) est une partie de la population prélevée soit de façon aléatoire soit de
façon non aléatoire.
Remarque :
1. Le nombre d’éléments contenus dans S est noté n, ce qui se note aussi Card (S) = n.
2. Il faut distinguer deux types d’échantillonnage :
– l’échantillonnage exhaustif (le tirage est réalisé sans remise),
– l’échantillonnage non-exhaustif (le tirage est réalisé avec remise).
Figure 3.1
Définition 3.6 Les caractéristiques étudiées sur les individus d’une population sont appelées
les caractères.
Définition 3.7 Un caractère est une application x d’un ensemble V fini de cardinal N (la
© Dunod – La photocopie non autorisée est un délit.
population) dans un ensemble C (l’ensemble des valeurs possibles du caractère), qui associe
à chaque individu v de V la valeur x(v) que prend ce caractère sur l’individu v.
Définition 3.8 Un caractère quantitatif est un caractère dont les issues produisent un nombre
ou une suite de nombres.
Il faut distinguer :
– les caractères quantitatifs continus,
– les caractères quantitatifs discrets.
94 3 • Statistiques descriptives univariées
Définition 3.9 Un caractère quantitatif continu est un caractère qui peut prendre toutes les
valeurs d’un intervalle.
Définition 3.10 Un caractère quantitatif discret ou discontinu est un caractère qui ne prend
que des valeurs isolées.
Il faut distinguer :
– les caractères simples ou univariés,
– les caractères multiples.
Définition 3.11 Un caractère simple est un caractère dont la mesure sur un individu produit
un seul nombre. L’ensemble de leurs valeurs est donc R ou une partie de R.
Définition 3.12 Un caractère multiple est un caractère dont la mesure sur un individu produit
une suite finie de nombres. L’ensemble de leurs valeurs est donc Rn ou une partie de Rn .
Définition 3.13 Un caractère qualitatif est un caractère dont les issues ne sont pas quanti-
fiables numériquement.
Nous parlons de modalités et non d’issues dans ce cas. Les modalités d’un caractère qualitatif
peuvent être ordonnées ; nous disons alors que le caractère est ordinal. Sinon nous disons que
le caractère est nominal.
Exemple : le genre.
Remarque : les différentes valeurs que peut prendre un caractère qualitatif sont souvent
résumées par un codage numérique. C’est ce qui se fait le plus généralement. Mais un tel
codage est purement conventionnel et n’a pas un sens quantitatif.
Dans ce chapitre et dans les suivants, vous allez travailler avec un premier fichier intitulé
Mesures et un second intitulé Mesures5 pour illustrer les différentes commandes de R que vous
allez rencontrer par la suite.
Téléchargez la bibliothèque "BioStatR". Vous l’avez déjà fait si vous avez traité l’exercice 1
du chapitre 1. Chargez en mémoire les fonctions et les jeux de données de cette bibliothèque en
exécutant :
>library(BioStatR)
Pour afficher le jeu de données Mesures, vous pouvez tapez tout simplement la ligne de
commande suivante :
> Mesures
........................................................
243 4.3 14.6 laurier rose
244 2.7 11.3 laurier rose
245 2.6 9.1 laurier rose
246 2.4 9.0 laurier rose
© Dunod – La photocopie non autorisée est un délit.
Vous pourriez aussi demander à R d’afficher les premières lignes de ce fichier. Pour cela, vous
devez taper la ligne de commande suivante :
> head(Mesures)
96 3 • Statistiques descriptives univariées
Remarque : la fonction head ne vous donne que les six premières lignes. Si vous sou-
haitez en afficher plus, il faut renseigner la fonction head à l’aide d’un argument qui lui
indique le nombre de lignes à afficher.
Exemple :
> head(Mesures,10)
Il existe la fonction équivalente pour afficher les six dernières lignes d’un fichier. Il s’agit de
la fonction tail.
> tail(Mesures)
Remarque : comme la fonction head, la fonction tail prend un argument qui permet
d’afficher plus que les six dernières lignes.
Pour avoir une description de ce fichier, vous pouvez utiliser la fonction str :
> str(Mesures)
Remarque : dans la sortie ci-dessus que vient de donner R, vous voyez apparaître le mot
Factor, qui représente la classe de la variable espece. En effet, si vous tapez la ligne de
commande suivante :
> class(Mesures$espece)
[1] "factor"
Savez-vous ce que représente ce terme ? En fait, il indique que la variable espece est
une variable qualitative. Reportez-vous au début du chapitre 2 pour consulter la définition
d’un facteur.
R vous renseigne aussi sur son nombre de modalités ( levels en anglais) : la variable
espece en a quatre. Comment obtenez-vous les noms des quatre espèces ? Une première
idée serait d’utiliser la fonction names rencontrée au chapitre 2 et donc de taper la ligne
© Dunod – La photocopie non autorisée est un délit.
de commande suivante :
> names(Mesures$espece)
mais R renvoie :
NULL
Savez-vous pourquoi ? En fait, la fonction names renvoie le nom des colonnes du jeu de
données Mesures. En effet, tapez la ligne de commande suivante :
> names(Mesures)
98 3 • Statistiques descriptives univariées
Donc, si vous voulez le nom des modalités de la variable espece, il faut utiliser la
fonction levels et donc taper la ligne de commande suivante :
> levels(Mesures$espece)
Il existe sous R une fonction factor. Cette fonction transforme un vecteur en un facteur. Pour
en savoir plus sur cette fonction et sur son utilisation, allez consulter l’aide de R. Pour cela,
tapez la ligne de commande suivante :
> ?factor
Quelques mois après, le jardinier a complété son premier fichier Mesures en un fichier
Mesures5 avec deux nouvelles variables qui sont :
– la masse sèche, relevée sur les 252 haricots ,
– et le nombre de graines contenues dans les gousses des glycines blanches et violettes.
Donc, regardez de quoi est constitué le fichier Mesures5 en tapant la ligne de commande
suivante :
> str(Mesures5)
> Mesures5
3.3 Les fichiers de données : Mesures et Mesures5 99
vous affiche le contenu du fichier Mesures5. Ci-dessous, il n’est reproduit que les 20 dernières
lignes de ce fichier. Notez que R limite, par défaut, l’affichage des dataframes à 200 lignes. R
indique que 52 lignes n’ont pas été affichées, en les ajoutant aux 200 présentes dans la console,
il y en a bien 252.
...................................................
181 4.9 15.3 NA 1.2 laurier rose
182 6.2 15.9 NA 1.1 laurier rose
183 4.0 15.0 NA 0.7 laurier rose
184 3.3 11.0 NA NA laurier rose
185 4.8 15.1 NA 0.8 laurier rose
186 5.6 15.6 NA 1.0 laurier rose
187 4.5 15.3 NA 0.7 laurier rose
188 6.3 18.4 NA 1.6 laurier rose
189 4.2 14.0 NA 0.8 laurier rose
190 3.9 12.6 NA 1.1 laurier rose
191 5.8 16.8 NA 0.9 laurier rose
192 4.7 13.6 NA 1.0 laurier rose
193 6.0 15.1 NA 1.5 laurier rose
194 6.5 16.7 NA 1.7 laurier rose
195 5.0 15.3 NA 1.0 laurier rose
196 5.5 17.1 NA 1.3 laurier rose
197 4.7 14.6 NA 1.0 laurier rose
198 5.7 15.0 NA 1.5 laurier rose
199 3.6 10.4 NA 1.1 laurier rose
200 5.4 16.5 NA 1.3 laurier rose
Remarque : il y a deux choses à noter sur ces 20 dernières lignes du jeu de données
Mesures5 affichées par R.
1. Dans l’avant-dernière colonne, qui est celle de la variable masse_sec, vous voyez
apparaître une fois NA qui est l’abréviation de Not Available , et qui vous indique
qu’il y a une valeur manquante pour la masse sèche pour l’unité statistique 184.
2. Dans la quatrième colonne (en partant de la gauche), qui est celle de la variable
graines, vous voyez apparaître NA sur les 20 lignes, ce qui signifie que pour ces 20
dernières unités statistiques, le nombre de graines n’a pas été renseigné. Ce qui est tout
à fait cohérent, puisque le jardinier n’a compté que les graines dans les gousses des
glycines et ici les 20 dernières unités statistiques ne concernent que les lauriers roses.
100 3 • Statistiques descriptives univariées
Notez qu’il y a N valeurs dans cette suite. Donc ici, il s’agit de tous les éléments de la popu-
lation. Mais très souvent, la série statistique que vous allez étudier n’est pas la population
entière mais juste un échantillon. Vous pouvez facilement calculer des caractéristiques comme
la moyenne, l’écart-type de l’échantillon que vous étudiez, mais ce sont des approximations
des caractéristiques de la population. Ces approximations, appelées estimations, peuvent être
calculées de manière plus ou moins précise. Dans certains cas, il est donc recommandé d’utili-
ser des formules spécifiques lorsqu’un échantillon est utilisé pour estimer des caractéristiques
de la population. Dans ces cas, ces formules sont mises en avant dans la suite.
Exemple : le jardinier n’a pas ramassé tous les haricots qui étaient tombés dans son
Définition 3.14 L’effectif de la valeur xi est le nombre n i de fois que la valeur xi est prise,
c’est-à-dire le cardinal de l’ensemble X −1 (xi ).
i
Définition 3.15 L’effectif cumulé en xi est égal à la somme n j.
j=1
p
Remarque : lorsque i = p, l’effectif cumulé en x p est alors égal à : n j = N.
j=1
ni
Définition 3.16 La fréquence de la valeur xi est égale au rapport f i = de l’effectif de xi à
N
l’effectif total N de la population, c’est-à-dire le cardinal de V ou encore la somme des n i .
i
Définition 3.17 La fréquence cumulée en xi est égale à la somme f j.
j=1
p
Remarque : lorsque i = p, la fréquence cumulée en x p est alors égale à : f j = 1.
j=1
3.4 Description d’une série statistique 101
Définition 3.18 La série statistique (xi , n i )i=1,..., p ou (xi , f i )i=1,..., p est appelée distribution
statistique discrète ou distribution statistique continue. Elle est aussi parfois appelée distri-
bution statistique non groupée.
Remarque :
1. Le nom de distribution statistique non groupée provient de l’opposition avec une
distribution statistique groupée, c’est-à-dire obtenue en regroupant les différentes
valeurs possibles du caractère en classes et qui sera introduite au paragraphe suivant.
2. Ces définitions sont établies dans le cadre d’une population. D’ailleurs, vous voyez
apparaître la taille N de la population dans certaines définitions. Mais vous pourriez
les énoncer dans le cadre d’un échantillon issu de la population que vous étudiez. Pour
cela, il vous suffit de remplacer la taille N dans les définitions où vous voyez apparaître
cette dernière par la taille n de l’échantillon, puis d’adapter les notations. En effet,
vous parlerez alors de distribution observée ou de distribution empirique et non
plus de distribution statistique discrète ou continue. Le reste est inchangé.
Exemple : rappelons que les 252 haricots ramassés par le jardinier forment un échan-
tillon de l’ensemble des haricots qui se trouvent sur son terrain. Ici la population
étudiée est l’ensemble de tous les haricots qui tombent dans le jardin.
Soit la variable graines du jeu de données Mesures5. La variable graines est une
variable quantitative discrète mais vous auriez pu aussi choisir la variable taille qui est
une variable quantitative continue sur laquelle vous auriez fait les mêmes calculs que ceux
que vous allez effectuer ci-dessous. Vous allez mettre en application les quatre premières
définitions ci-dessus en utilisant les commandes adaptées de R pour calculer ces valeurs.
La variable graines varie entre 1 et 7. Pour trouver cette information, vous allez utiliser
la fonction table et tapez les deux lignes de commande suivantes :
© Dunod – La photocopie non autorisée est un délit.
> table_graines<-table(Mesures5$graines)
> table_graines
1 2 3 4 5 6 7
11 41 27 16 10 2 3
Cette sortie vous donne le tableau de l’effectif de chaque valeur que prend la variable
graines.
Pour calculer le tableau des effectifs cumulés, vous allez utiliser la fonction cumsum en
procédant de la manière suivante :
> effcum_graines<-cumsum(table_graines)
> effcum_graines
102 3 • Statistiques descriptives univariées
1 2 3 4 5 6 7
11 52 79 95 105 107 110
Remarque : pourquoi 110 ? Parce qu’il y a 110 glycines présentes dans le jeu de
données Mesures5 et que c’est seulement à l’intérieur des gousses de glycines que
le jardinier a compté les graines. Comment retrouvez-vous cette valeur ? En tapant
la ligne de commande suivante :
> table(Mesures5$espece)
> freq_table_graines<-table_graines/sum(table_graines)
> options(digits=3)
> freq_table_graines
1 2 3 4 5 6 7
0.1000 0.3727 0.2455 0.1455 0.0909 0.0182 0.0273
– Seconde méthode :
> freq_table_graines<-prop.table(table(Mesures5$graines))
> freq_table_graines
1 2 3 4 5 6 7
0.1000 0.3727 0.2455 0.1455 0.0909 0.0182 0.0273
Pour obtenir le tableau des fréquences cumulées, il y a encore deux manières de faire.
3.4 Description d’une série statistique 103
– Première méthode :
> freqcum_table_graines<-cumsum(table_graines/
+ sum(table_graines))
> freqcum_table_graines
1 2 3 4 5 6 7
0.100 0.473 0.718 0.864 0.955 0.973 1.000
– Seconde méthode :
> freq_table_graines<-cumsum(prop.table((table
+ (Mesures5$graines))))
> freq_table_graines
1 2 3 4 5 6 7
0.100 0.473 0.718 0.864 0.955 0.973 1.000
Définition 3.19 L’effectif de ]ai ; ai+1 ] est le nombre n i de valeurs prises dans ]ai ; ai+1 ], c’est-
© Dunod – La photocopie non autorisée est un délit.
Définition 3.20 L’effectif cumulé en ai est le nombre de valeurs prises dans l’intervalle
] − ∞; ai ].
ni
Définition 3.21 La fréquence de ]ai ; ai+1 ] est égale au rapport f i = ·
N
i
Définition 3.22 La fréquence cumulée en ai est égale la somme f j.
j=1
p
Remarque : lorsque i = p, la fréquence cumulée en a p est alors égale à : f j = 1.
j=1
104 3 • Statistiques descriptives univariées
Définition 3.23 La série statistique (]ai ; ai+1 ], n i )i=1,..., p ou (]ai ; ai+1 ], f i )i=1,..., p est appelée
distribution statistique groupée.
Remarque :
1. Même remarque que dans le paragraphe précédent, à savoir : ces définitions sont
établies dans le cadre d’une population. Mais vous pourriez les énoncer dans le cadre
d’un échantillon issu de la population que vous étudiez. Pour cela, il vous suffit de
remplacer la taille N dans les définitions où vous voyez apparaître cette dernière par la
taille n de l’échantillon, puis d’adapter les notations. Le reste est inchangé.
2. Vous pouvez vous poser la question suivante : Comment ces regroupements sont-ils
fabriqués ? . Une façon simple est d’utiliser la règle de Sturges. Ainsi vous n’avez
pas à vous préoccuper de savoir combien de classes vous devez construire puisque le
nombre de classes est donné par la formule suivante :
Nombre de classes = sup log2 (N ) + 1
La question que maintenant vous vous posez est : Est-ce que R applique la règle de Sturges
pour regrouper les données ? . Pour répondre à cette question, vous tapez la ligne de commande
suivante :
> ?hist
Et dans l’aide, vous pouvez lire dans la rubrique Details, The default for breaks is
"Sturges": see nclass.Sturges. Ce qui veut dire que par défaut, R utilise la règle de
Sturges mais en propose aussi deux autres :
– la règle de Scott :
Nombre de classes = 3, 5sc (x)n −1/3 ,
où sc (x) est l’écart-type corrigé de la série statistique, qui sera défini à la fin de ce chapitre
et n la taille de l’échantillon.
– et la règle de Freedman-Diaconis :
où EIQ(x) est l’étendue interquartile de la série statistique, qui sera définie à la fin de ce
chapitre et n la taille de l’échantillon.
3.4 Description d’une série statistique 105
Remarque : les définitions utilisées par R sont adaptées au traitement d’échantillons. Vous
pouvez aussi utiliser ces deux règles lorsque vous travaillez avec des données provenant
d’une population. Il suffit de remplacer n par N et l’écart-type corrigé ds-c par l’écart-type
s, qui sera défini à la fin de ce chapitre.
Enfin, sachez que vous êtes libre aussi de regrouper comme vous le souhaitez vos données,
c’est-à-dire de définir vous-même un nombre de classes ainsi que la longueur de la classe.
Lorsque vous aurez défini votre nombre de classes, c’est-à-dire celui qui vous semble le plus en
adéquation avec vos données, pour faire vos représentations graphiques sous R, vous utiliserez
alors l’argument breaks. L’exercice 2, proposé à la fin de ce chapitre, détaille l’utilisation de
cette commande.
Pour terminer, sachez que le nombre de classes et la longueur de la classe sont à déterminer
de telle sorte que la distribution ait une allure aussi régulière que possible, sans pour autant
en dissimuler les caractéristiques essentielles. Généralement, le nombre de classes est compris
entre 10 et 20. Il est petit lorsque le nombre de données est faible et grand lorsque le nombre de
données est important. D’autre part, la longueur de la classe est en général constant d’une classe
à l’autre.
Exemple : soit la variable masse du jeu de données Mesures. Vous allez mettre en applica-
tion les quatre premières définitions de ce paragraphe en utilisant les commandes adaptées
de R pour trouver ces valeurs. La variable masse varie entre 1,0 et 49,2. Pour trouver cette
information, vous tapez les lignes de commande suivantes :
> minmax<-c(min(Mesures$masse),max(Mesures$masse))
> minmax
Cette variable est une variable quantitative continue. Vous avez le choix de l’étudier :
© Dunod – La photocopie non autorisée est un délit.
[1] 0 5 10 15 20 25 30 35 40 45 50
106 3 • Statistiques descriptives univariées
[1] 82 58 51 23 16 12 4 2 1 3
Maintenant pour établir les effectifs cumulés, les fréquences et les fréquences cumulées,
vous allez procéder de la manière suivante.
– Pour les effectifs cumulés, vous tapez les deux lignes de commande suivantes :
> effectifs<-histo$counts
> cumsum(effectifs)
[1] 82 140 191 214 230 242 246 248 249 252
> frequences<-effectifs/sum(effectifs)
> print(frequences,digits=3)
[1] 1
> print(cumsum(frequences),digits=3)
[1] 0.325 0.556 0.758 0.849 0.913 0.960 0.976 0.984 0.988 1.000
Définition 3.24 Le tableau de contingence regroupe les effectifs des différentes modalités d’une
variable qualitative.
> table(Mesures$espece)
fonction pairs
La manière la plus simple de produire des graphiques sous R est d’utiliser la fonction plot :
Exemple :
> plot(taille~masse,data=Mesures)
> ggplot(Mesures,aes(x=masse,y=taille))+geom_pointC
108 3 • Statistiques descriptives univariées
25
20
taille
15
10
5
0 10 20 30 40 50
masse
Figure 3.2A
● ●
●
● ●
● ●
●
●
20 ●
●
● ●
● ●
●
● ●
● ●
● ●
●
● ●
● ●●
● ●
● ●
●●
●
● ● ●●
taille
● ● ●
● ● ● ●
●
●
●●● ● ● ●
● ●
● ● ●
●●●●●
● ● ●
●●●●●● ●
●● ● ●● ●
●● ● ● ●● ● ●
●● ● ● ●
●● ● ● ● ●●● ●
●● ● ● ● ●
● ●● ● ●
●
●●● ● ●
●●
● ● ● ●
●● ●● ● ●
●
●● ● ● ●●
● ●●● ● ●
● ● ●
●● ● ● ● ●●● ●● ● ● ●
● ●
● ●● ●
● ● ●● ●
●●● ● ●● ●●
●
●
●
● ●● ●
● ●
● ● ●
● ● ● ●
●● ● ● ●
● ● ● ●
●
10 ● ●●
●
●
●●● ●
● ● ● ●●
●
●●● ●
●●
● ● ●
● ● ●●● ●
●
● ●●
● ●
●●
●
● ●
●
0 10 20 30 40 50
masse
Figure 3.2B
3.5 Représentations graphiques d’une série statistique 109
> args(plot.default)
L’argument ... signifie qu’il y a encore d’autres paramètres graphiques possibles. Ils sont
contrôlés par la fonction par.
> names(par())
Voilà le résultat :
Taille vs. Masse
25
20
Taille
15
10
5
0 10 20 30 40 50
Masse
Figure 3.3A
Vous pouvez obtenir le même graphique avec la fonction ggplot en tapant la ligne de
commande suivante :
> ggplot(Mesures,aes(x=masse,y=taille))+geom_point(pch19) +
+ xlab("Masse")+ylab("Taille")+ggtitle("Taille vs. Masse")
Depuis la version 2.2.0 de ggplot, les titres des graphiques sont alignés à gauche.
3.5 Représentations graphiques d’une série statistique 111
Figure 3.3B
Il est possible de choisir ce réglage pour tous les graphiques à venir en modifiant le thème
utilisé par ggplot de la manière suivante :
● ●
●
● ●
● ●
●
●
20 ●
●
● ●
● ●
●
● ●
● ●
● ●
●
● ●
● ●●
● ●
● ●
●●
●
● ● ●●
Taille
● ● ●
● ● ●
● ●
●
●●● ● ● ●
● ●
● ● ●
●●●●●
● ● ●
●
● ● ●●● ●
●● ● ●● ●
●●
●● ● ● ●● ● ●
● ● ●
●● ● ● ● ●●● ●
●● ● ● ● ●
● ●● ● ●
●
●● ● ● ●
●●
● ● ● ●
●● ●● ● ●
●
●● ● ● ●●
● ●
●● ● ●
● ● ●
●● ● ● ● ●●● ●● ● ● ●
● ●
● ●● ●
● ● ● ●
●●● ●● ● ●
●●
● ● ●● ●●
●
● ● ●
● ● ● ●●
●● ● ● ●
●
●
● ● ● ●
10 ● ●●
●
●
●●● ●
● ● ● ● ●
●● ●
●●
●●
● ● ●
● ● ●●● ●
●
● ●●
● ●
●●
●
● ●
●
0 10 20 30 40 50
Masse
Figure 3.3C
Maintenant, vous pourriez souhaiter faire tous les graphiques qui couplent variable par
variable du fichier de données Mesures5. C’est possible avec la fonction pairs. En effet,
la fonction pairs reproduit tous les graphiques variable par variable possibles sur une seule
fenêtre graphique (qui est gérée comme une matrice).
3.5 Représentations graphiques d’une série statistique 113
Exemple :
> pairs(Mesures5)
Voici le résultat :
5 10 15 20 25 0 5 10 15
50
30
masse
0 10
10 15 20 25
taille
5
1 2 3 4 5 6 7
graines
15
10
masse_sec
5
0
4.0
3.0
© Dunod – La photocopie non autorisée est un délit.
espece 2.0
1.0
Figure 3.4
> pairs(Mesures5,diag.panel=panel.hist)
114 3 • Statistiques descriptives univariées
5 10 15 20 25 0 5 10 15
50
masse
30
0 10
10 15 20 25
taille
5
1 2 3 4 5 6 7
graines
masse_sec
15
10
5
0
4.0
espece
Figure 3.5A
Figure 3.5B
© Dunod – La photocopie non autorisée est un délit.
Définition 3.25 Le diagramme en bâtons des effectifs (resp. des fréquences) d’une distribu-
tion statistique discrète est constitué d’une suite de segments verticaux d’abscisses xi dont la
longueur est proportionnelle à l’effectif (resp. la fréquence) de xi .
Définition 3.26 Le polygone des effectifs (resp. des fréquences) d’une distribution statistique
discrète est obtenu à partir du diagramme en bâtons des effectifs (resp. des fréquences) en
joignant par un segment les sommets des bâtons.
116 3 • Statistiques descriptives univariées
Définition 3.27 En remplaçant dans la définition précédente le mot effectifs (resp. fréquences)
par effectifs cumulés (resp. fréquences cumulées), vous obtenez le polygone des effectifs cumu-
lés (resp. des fréquences cumulées).
Maintenant, si vous souhaitez mettre en évidence les pourcentages pour comparer visuelle-
ment la structure de la série statistique que vous étudiez, vous représenterez les données à l’aide
d’un diagramme circulaire.
Exemple : vous allez mettre en application ces définitions sur la variable graine du
fichier Mesures5.
Commençons par tracer le diagramme en bâtons. Pour cela, vous allez utiliser à nouveau
la fonction plot, qui en général, est utilisée pour représenter un nuage de points, comme
vous avez pu le constater précédemment, mais ici va être utilisée autrement.
> plot(table(Mesures5$graines),lwd=4,col="red",
+ xlab="Nombre de graines",ylab="Effectif")
Il vous faut noter que, dans cette commande, vous avez rempli plusieurs arguments
de la fonction plot rencontrée auparavant.
– La première option lwd (« lwd » pour « linewidth ») indique la largeur des barres
verticales. Ici elle est égale à 4.
– La deuxième option col vous permet de choisir la couleur des barres verticales.
– Enfin les deux derniers arguments xlab et ylab vous permettent d’afficher un titre
sous l’axe des abscisses ainsi qu’à côté de l’axe des ordonnées.
40
30
Effectif
20
10
0
1 2 3 4 5 6 7
Nombre de graines
Figure 3.6A
Vous pouvez vous demander à quoi correspond ce graphique. Rappelez-vous, vous avez
affiché auparavant un tableau donnant la répartition des effectifs en fonction du nombre
© Dunod – La photocopie non autorisée est un délit.
Notez qu’il s’agit d’un diagramme en bâtons pour les deux types de glycines.
Il est possible d’obtenir un diagramme en bâtons avec la bibliothèque ggplot en utilisant
la fonction geom_bar ou la fonction geom_histogram. Cette dernière permet de modifier
la largeur des barres pour qu’ils ressemblent plus à des bâtons. C’est ce graphique qui est
représenté dans la suite.
> ggplot(Mesures5, aes(x = graines)) + geom_bar(fill=I("red")) +
+ xlab("Nombre de graines") + ylab("Effectif")
118 3 • Statistiques descriptives univariées
Figure 3.6B
Pour obtenir les diagrammes en bâtons par groupe avec ggplot, il suffit « d’ajouter » au
graphique l’élément facet_grid ou facet_wrap :
1) facet_grid(.∼espece) pour obtenir des graphiques juxtaposés horizontalement,
2) facet_grid(espece∼.) pour obtenir des graphiques juxtaposés verticalement,
3) facet_wrap(∼espece) pour obtenir des graphiques disposés suivant un quadrillage.
> ggplot(Mesures5, aes(x = graines)) +
+ geom_histogram(binwidth=.1,fill=I("red")) +
+ xlab("Nombre de graines") + ylab("Effectif") + facet_grid(.~espece)
3.5 Représentations graphiques d’une série statistique 119
Figure 3.6C
Vous pourriez souhaiter un diagramme en bâtons pour chaque type de glycines. Vous
pouvez commencer par la répartition des effectifs en fonction du nombre de graines
présentes dans chaque type de glycines. Les effectifs par groupe s’obtiennent en utilisant
la fonction tapply.
> tapply(Mesures5$graines,Mesures5$espece,table)
120 3 • Statistiques descriptives univariées
Cette commande signifie appliquer la fonction table aux éléments de graines regrou-
pés par les sous-groupes définis par le facteur espece .
Plus généralement, tapply permet d’appliquer n’importe quelle fonction sur des sous-
groupes de données.
$’bignone’
character(0)
$’glycine blanche’
1 2 3 4 5 6 7
7 19 11 10 5 1 1
$’glycine violette’
1 2 3 4 5 6 7
4 22 16 6 5 1 2
$’laurier rose’
character(0)
Pour obtenir un diagramme en barres pour chacun des sous-groupes, vous allez utiliser
la fonction barchart de la bibliothèque lattice. Vous commencez donc par installer
cette bibliothèque et placer ses fonctions dans la mémoire de R à l’aide des deux premières
commandes ci-dessous :
> install.packages("lattice")
> library("lattice")
> data.graines_espece<-as.data.frame(table(Mesures5$graines,
+ Mesures5$espece))
> colnames(data.graines_espece)<-c("nbr.graines","espece",
+ "effectif")
> barchart(effectif~nbr.graines|espece,
+ data=data.graines_espece,layout=c(1,4))
Notez la présence d’une nouvelle fonction as.data.frame, qui en fait n’est pas com-
plètement nouvelle, puisqu’au chapitre 2 vous avez déjà rencontré des fonctions du
type as.numeric ou as.character. Ici as.data.frame a la même fonctionnalité que les
fonctions as.numeric et as.character, à savoir changer un objet en data.frame.
Notez également la présence de la fonction colnames qui permet de donner un nom
aux différentes colonnes de votre data.frame.
3.5 Représentations graphiques d’une série statistique 121
Voici le résultat :
20
15
10
5
0
20
15
10
5
Effectif
20
15
10
5
0
20
15
10
5
0
1 2 3 4 5 6 7
Figure 3.7
© Dunod – La photocopie non autorisée est un délit.
Mais vous pourriez faire d’une autre façon, plus élégante semble-t-il :
> as.data.frame(table(Mesures5$graines,Mesures5$espece))
Mais lorsque vous tapez cette ligne, vous observez que les noms des colonnes ne sont pas
les bons. Donc il faut que vous tapiez la ligne de commande suivante :
Dans certaines situations, pour rendre les résultats plus faciles à lire, il est intéressant de
pouvoir remplacer la valeur 0 par un autre symbole. L’argument zero.print="."
de la fonction print permet d’afficher des . à la place des 0 dans le tableau de
contingence.
Le résultat de la dernière commande est le suivant :
20
15
10
0
Effectif
20
15
10
1 2 3 4 5 6 7 1 2 3 4 5 6 7
Figure 3.8
espece
nbr.graines glycine blanche glycine violette
1 7 4
2 19 22
3 11 16
4 10 6
5 5 5
6 1 1
7 1 2
> (data.graines.espece<-as.data.frame(table.graines.espece,
+ responseName="effectif"))
> barchart(effectif~nbr.graines|espece,
+ data=data.graines.espece)
20
15
Effectif
10
1 2 3 4 5 6 7 1 2 3 4 5 6 7 Figure 3.9
20
15
10
5
Effectif
20
15
10
1 2 3 4 5 6 7 Figure 3.10
3.5 Représentations graphiques d’une série statistique 125
Maintenant, si vous voulez des vrais bâtons à la place des rectangles, il vous
suffit de taper la ligne de commande suivante :
> xyplot(effectif~nbr.graines|espece,
+ data=data.graines.espece,type="h",lwd=4)
Voici le résultat :
1 2 3 4 5 6 7
20
15
Effectif
10
5
© Dunod – La photocopie non autorisée est un délit.
1 2 3 4 5 6 7
Nombre de graines
Figure 3.11
Enfin, si vous souhaitez que les deux graphiques soient l’un en dessous de l’autre,
il vous suffit de taper la ligne de commande suivante :
> xyplot(effectif~nbr.graines|espece,
+ data=data.graines.espece,type="h",layout=c(1,2),lwd=4)
126 3 • Statistiques descriptives univariées
Voilà le résultat :
20
15
10
5
Effectif
20
15
10
1 2 3 4 5 6 7
Nombre de graines
Figure 3.12
Enfin, une dernière représentation possible est celle-ci. Tapez la ligne de commande
suivante :
> barplot(table.graines.espece,beside=TRUE,
+ legend=rownames(table.graines.espece))
> plot(table(Mesures5$graines),lwd=4,col="red",
+ xlab="Nombre de graines",ylab="Effectif")
> lines(table(Mesures5$graines),type="l",lwd=4)
Remarque : l’option type="l" est nécessaire pour ajouter une ligne brisée et non
des barres verticales puisque vous appliquez la fonction lines à une table.
Vous obtenez le graphique reproduit à la figure 3.14.
3.5 Représentations graphiques d’une série statistique 127
1
20
2
3
4
5
6
7
15
10
5
0
20
10
0
1 2 3 4 5 6 7
– Pour le polygone des effectifs cumulés, tapez les deux lignes de commande suivantes :
> plot(cumsum(table(Mesures5$graines)),type="h",lwd=4,col="red",
+ xlab="Nombre de graines",ylab="Effectif")
> lines(cumsum(table(Mesures5$graines)),lwd=4)
Vous travaillez ici avec un vecteur numérique d’où la nécessité de l’option type="h"
dans la fonction plot et l’absence de type="l" dans la fonction lines.
Voilà le résultat :
100
80
Effectif
60
40
20
1 2 3 4 5 6 7
Nombre de graines
Figure 3.15
Pour terminer, traçons le diagramme circulaire. Pour cela, vous allez utiliser la fonc-
tion pie dans laquelle vous renseignerez l’argument couleur . Pour bien comprendre
comment construire ce diagramme, vous allez procéder en trois étapes :
1. D’abord, vous allez devoir récupérer les fréquences que vous avez calculées précédem-
ment.
> pie.graines<-c(0.1000,0.3727,0.2455,0.1455,0.0909,0.0182,
+ 0.0273)
3.5 Représentations graphiques d’une série statistique 129
2. Puis vous allez donner un nom aux sept sections de ce diagramme, en tapant la ligne
de commande suivante :
3. Et enfin, vous allez mettre sept couleurs différentes pour mettre en évidence les diffé-
rences en tapant la ligne de commande suivante :
> pie(pie.graines,col=c("red","purple","cyan","blue",
+ "green","cornsilk","orange"))
Voici le résultat :
2 graines
1 graine
7 graines
6 graines
3 graines 5 graines
© Dunod – La photocopie non autorisée est un délit.
4 graines
Figure 3.16
Il est en fait possible d’aller beaucoup plus vite en définissant les noms des secteurs
directement dans la fonction pie avec l’argument labels et en utilisant la fonction
rainbow, arc-en-ciel en anglais. La commande rainbow(n) renvoie un vecteur de n
couleurs, du rouge au violet dans l’ordre de l’arc en ciel et est très pratique pour colorer
les graphiques de R.
> pie(table(Mesures5$graines),labels=c("1 graine",paste(2:7,
+ " graines")),col=rainbow(7))
130 3 • Statistiques descriptives univariées
Remarque : lorsqu’il est utilisé pour estimer une densité, un histogramme délimite une
aire totale égale à 1.
Définition 3.30 Le polygone des effectifs ou des fréquences d’une distribution statistique
groupée est obtenu en joignant dans l’histogramme de cette distribution les milieux des côtés
horizontaux supérieurs.
Définition 3.31 Le polygone des fréquences cumulées d’une distribution statistique groupée
est la représentation graphique de la fonction définie sur chaque intervalle ]ai ; ai+1 ], 1 i p
par :
i−1
x − ai
f (x) = fj + fi .
ai+1 − ai
j=1
Exemple : vous allez mettre en application ces trois définitions sur la variable masse du
fichier Mesures. Vous allez commencer par tracer l’histogramme avec la fonction hist
que vous avez déjà utilisée dans le paragraphe précédent.
> hist(Mesures$masse)
Vous constatez que le titre du graphique et les noms des axes sont écrits en anglais. Il est
possible de les modifier ainsi :
> histo<-hist(Mesures$masse,ylab="Effectif",xlab="Masse",
+ main="Histogramme des masses")
3.5 Représentations graphiques d’une série statistique 131
Voilà le résultat :
Figure 3.17
Vous pouvez aussi obtenir les résultats numériques qui ont permis de tracer cet histo-
gramme. Vous les avez déjà obtenus précédemment quand vous avez établi la distribution
statistique groupée de la variable masse du fichier Mesures en tapant les lignes de
commande suivantes :
© Dunod – La photocopie non autorisée est un délit.
> histo<-hist(Mesures$masse)
> histo
$breaks
[1] 0 5 10 15 20 25 30 35 40 45 50
$counts
[1] 82 58 51 23 16 12 4 2 1 3
$intensities
[1] 0.0650793521 0.0460317460 0.0404761905 0.0182539683
[5] 0.0126984127 0.0095238095 0.0031746032 0.0015873016
[9] 0.0007936508 0.0023809524
132 3 • Statistiques descriptives univariées
$density
[1] 0.0650793521 0.0460317460 0.0404761905 0.0182539683
[5] 0.0126984127 0.0095238095 0.0031746032 0.0015873016
[9] 0.0007936508 0.0023809524
$mids
[1] 2.5 7.5 12.5 17.5 22.5 27.5 32.5 37.5 42.5 47.5
$xname
[1] "Mesures$masse"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
Remarque : la présence du ~ n’est pas une erreur et signifie que vous vous intéres-
sez à la répartition de la masse en fonction des espèces.
Le résultat a été reproduit à la figure 3.18.
Maintenant, pour tracer le polygone des effectifs de la variable masse, tapez les lignes de
commande suivantes :
> histo<-hist(Mesures$masse,ylab="Effectif",xlab="Masse",
+ main="Polygone des effectifs des masses")
> lines(histo$mids,histo$counts,lwd=2)
> points(histo$mids,histo$counts,cex=1.2,pch=19)
0 10 20 30 40 50
60
40
20
Pourcentage du total
60
40
20
0 10 20 30 40 50
Figure 3.19
3.5 Représentations graphiques d’une série statistique 135
Pour terminer, vous allez tracer le polygone des effectifs cumulés. Pour cela, tapez les
lignes de commande suivantes :
> histo<-hist(Mesures$masse,plot=FALSE)
> barplot<-barplot(cumsum(histo$counts),ylab="Effectif",
+ xlab="Masse",main="Polygone des effectifs cumulés des masses")
> lines(barplot,cumsum(histo$counts),lwd=2)
> points(barplot,cumsum(histo$counts),cex=1.2,pch=19)
Voici le résultat :
© Dunod – La photocopie non autorisée est un délit.
Figure 3.20
En fait, la boîte à moustaches est un moyen rapide de figurer le profil essentiel d’une série
statistique quantitative.
Sur la boîte à moustaches, vous verrez apparaître la médiane, le premier et le troisième
quartiles, l’étendue, l’étendue interquartile ainsi que, s’il y en a, des valeurs atypiques par
rapport au reste de la distribution.
Remarque : la boîte à moustaches peut être aussi appelée boîte de distribution ou box-
plot.
Une question que vous vous posez est désormais : Comment cette boîte à moustaches
est-elle construite ? . Il en existe plusieurs versions, mais une telle boîte comprend le plus
souvent :
– une échelle des valeurs présente sur l’axe vertical,
– la valeur du premier quartile, noté Q 1 , qui est le trait inférieur de la boîte,
– la valeur du troisième quartile, noté Q 3 , qui est le trait supérieur de la boîte,
– la valeur de la médiane, notée Q 2 , (Q 2 est aussi le deuxième quartile, vous reverrez cela
au paragraphe suivant) représentée par un trait horizontal au sein de la boîte,
– les moustaches inférieure et supérieure représentées par des pointillés (c’est cette repré-
sentation qu’utilise R) ou des traits pleins verticaux de chaque côté de la boîte et qui se
terminent par des traits horizontaux,
– les valeurs atypiques représentées chacune soit par un cercle (c’est cette représentation
qu’utilise R) soit par une étoile.
Définition 3.33 Une valeur aberrante est une valeur qu’il est impossible d’avoir observé pen-
dant l’expérience car elle est en totale contradiction avec votre connaissance du contexte
expérimental. Une valeur aberrante peut être due à une erreur de mesure, de relevé, de saisie
ou à une défaillance d’un appareil de mesure.
Une dernière question que vous pouvez vous poser est : Comment ces deux moustaches
sont-elles construites ? .
Il existe plusieurs façons de construire les moustaches mais le plus souvent les valeurs des
moustaches inférieure et supérieure sont calculées ainsi :
– moustache inférieure : valeur de la série immédiatement supérieure à la frontière basse,
avec la frontière basse qui vaut : Q 1 − 1, 5 × (Q 3 − Q 1 ),
3.5 Représentations graphiques d’une série statistique 137
Exemple :
> boxplot(Mesures$masse)
> title("Bo^
ıte à moustaches de la variable masse")
Figure 3.21
138 3 • Statistiques descriptives univariées
Enfin, sachez que vous pouvez récupérer, avec la fonction boxplot.stats, les valeurs
numériques qui ont permis de construire cette boîte à moustaches en tapant la ligne de commande
suivante :
> boxplot.stats(Mesures$masse)
$stats
[1] 1.0 4.5 8.4 14.6 29.6
$n
[1] 252
$conf
[1] 7.39474 9.40526
$out
[1] 32.0 35.5 32.5 40.0 49.2 46.0 42.2 48.4 31.7 33.7
> boxplot(Mesures$masse~Mesures$espece)
50
40
30
20
10
0
Figure 3.22
Pour colorier chacune des boîtes avec une couleur différente, il suffit d’utiliser l’argument
col que vous pouvez combiner avec la fonction rainbow que vous avez vue dans le paragraphe
consacré à la construction du diagramme circulaire :
> boxplot(Mesures$masse~Mesures$espece,col=rainbow(4))
moustaches par groupe, soit sur le même graphique, soit sur des panneaux différents à la manière
dont vous aviez obtenu des histogrammes et des diagrammes en bâtons précédemment :
> bwplot(masse~espece,data=Mesures,pch="|")
> bwplot(~masse|espece,data=Mesures,pch="|")
Remarque : vous trouverez en ligne des graphiques similaires réalisés avec la biblio-
thèque ggplot2.
b) Le diagramme tige-feuilles
Le diagramme tige-feuilles, encore appelé histogramme de Tukey, fournit des informations
encore plus précises que celles d’un histogramme. En effet, il permet non seulement de montrer
la fréquence de certaines classes mais aussi de représenter les valeurs des données ce qui autorise
140 3 • Statistiques descriptives univariées
Exemple :
> stem(Mesures$masse)
0 | 0455
2 | 12445667777999990222223333444444455566688899
4 | 00111233444455556677777778888999002333333445556788888
6 | 01122333456677901123469
8 | 0267880002346677
10 | 123366779999333555777
12 | 00024458899234555688
14 | 000223466025799
16 | 444668922338
18 | 02218
20 | 046614568
22 | 445669
24 | 152
26 | 01246
28 | 679026
30 | 7
32 | 057
34 | 5
36 |
38 |
40 | 0
42 | 2
44 |
46 | 0
48 | 42
3.6 Représentations numériques d’une série statistique 141
– Il est à noter que les graphes produits par R peuvent être réduits ou agrandis sans déforma-
tion.
Définition 3.34 Un mode, Mo(x), d’une distribution statistique discrète est l’une des valeurs
x1 , x2 , . . . , x p dont la fréquence est maximale.
Pour calculer le mode d’une série statistique discrète, il vous faut utiliser la fonction table.
Définition 3.35 Une classe modale, Mo(x), d’une distribution statistique groupée, est une
classe de densité, c’est-à-dire de rapport fréquence/longueur, maximale.
Définition 3.36 La distribution est unimodale si elle a un seul mode. Si elle en a plusieurs, elle
est plurimodale (bimodale, trimodale . . . ).
Pour calculer la classe modale d’une série statistique continue, l’histogramme de la variable
© Dunod – La photocopie non autorisée est un délit.
étudiée peut-être un bon moyen d’y accéder comme vous allez le voir ci-dessous avec l’exemple
traité.
Exemple : vous souhaitez déterminer la classe ou les classes modale(s) de la variable
masse du fichier Mesures par exemple. Vous pourriez également la ou les chercher sur
la variable taille du même tableau de données. Pour déterminer la classe ou les classes
modales sur une variable quantitative, vous avez deux manières de procéder :
1. soit de manière graphique,
2. soit de manière numérique.
Première méthode : graphiquement.
Vous tracez l’histogramme de la variable masse du jeu de données Mesures. Pour cela,
vous tapez la ligne de commande suivante :
142 3 • Statistiques descriptives univariées
> hist(Mesures$masse,ylab="Effectif",xlab="Masse",
+ main="Histogramme des masses")
Figure 3.23
[1] 0 5 10 15 20 25 30 35 40 45 50
3.6 Représentations numériques d’une série statistique 143
[1] 82 58 51 23 16 12 4 2 1 3
Maintenant il vous faut interpréter ces lignes de sortie : vous recherchez dans la sortie de
counts (qui signifie dénombrements) la plus grande valeur. Il s’agit de 82. Ensuite, vous
regardez à quel intervalle 82 appartient et vous concluez que la classe modale est égale à
[0; 5].
Remarque : vous pourriez retrouver ce résultat autrement en tapant la ligne de commande
suivante :
> which(histo$density==max(histo$density))
[1] 1
Ce résultat indique que c’est la première classe qui est la classe modale, c’est-à-dire la
classe [0; 5].
Définition 3.37 Soit m et d les parties entière et décimale de (N + 1)/2. La médiane, notée
Q2 (x) ou Q0,5 (x), d’une série statistique est définie par Q2 (x) = x(m) + d(x(m+1) − x(m) ), où x(m)
signifie la m-ième valeur lorsque la série statistique est classée par ordre croissant. x(m) est
aussi appelée la m-ième statistique d’ordre.
Remarque :
1. Il existe beaucoup de définitions pour la médiane. Celle qui est présentée ici, est celle
© Dunod – La photocopie non autorisée est un délit.
Exemple : vous allez calculer la médiane de la variable masse du fichier Mesures. Pour
cela, vous tapez la ligne de commande suivante :
> median(Mesures$masse)
[1] 8.4
Remarque : il existe aussi une autre ligne de commande qui vous rend le même résultat :
> quantile(Mesures$masse,0.5,type=6)
144 3 • Statistiques descriptives univariées
50%
8.4
Vous voyez apparaître la fonction quantile qui est aussi une caractéristique de position.
Définition 3.38 Pour tout nombre a ∈]0; 1[, soit m et d les parties entière et décimale de
a(N + 1). Le quantile d’ordre a, noté Qa (x), d’une série statistique est défini par : Qa (x) =
x(m) + d(x(m+1) − x(m) ).
Définition 3.39 Soit m et d les parties entière et décimale de (N + 1)/4. Le premier quartile,
noté Q1 (x) ou Q0,25 (x), d’une série statistique est défini par Q1 (x) = x(m) + d(x(m+1) − x(m) ).
Exemple : pour calculer le premier quartile de la variable masse du fichier Mesures, vous
tapez la ligne de commande suivante :
> quantile(Mesures$masse,0.25,type=6)
25%
4.5
Définition 3.40 Soit m et d les parties entière et décimale de 3(N +1)/4. Le troisième quartile,
noté Q3 (x) ou Q0,75 (x), d’une série statistique est défini par Q3 (x) = x(m ) + d (x(m +1) − x(m ) ).
75%
14.6
Remarque :
1. Vous pourriez aussi avoir envie d’afficher les trois quartiles. Pour cela, vous tapez la
ligne de commande suivante :
> quantile(Mesures$masse,c(0.25,0.5,0.75),type=6)
2. Vous pourriez aussi avoir envie d’afficher les cinq quartiles. Pour cela, vous tapez la
ligne de commande suivante :
> quantile(Mesures$masse,type=6)
3. Ne confondez pas quartile et quantile. Ce ne sont pas les mêmes quantités comme vous
venez de le voir.
Définition 3.41 Pour une distribution statistique, discrète ou continue, non groupée, la
moyenne arithmétique, notée m(x), est le nombre réel défini par :
p
1
p
m(x) = xi f i = xi n i .
N
i=1 i=1
Pour une distribution statistique groupée, la moyenne arithmétique, notée m(x), se calcule
par :
p
ai + ai+1
m(x) = fi .
2
i=1
Cette moyenne peut aussi se calculer sur des données issues d’un échantillon.
Définition 3.42 Pour un échantillon non groupé, la moyenne arithmétique, notée x n , est
définie par :
1
n
xn = xi .
n
© Dunod – La photocopie non autorisée est un délit.
i=1
1
q
xn = xi n i ,
n
i=1
Remarque :
1. Dans la définition de la moyenne arithmétique d’un échantillon, une notation a été
introduite x n . Certains ouvrages et auteurs l’utilisent et la réservent uniquement pour la
moyenne arithmétique d’un échantillon, comme cela sera fait dans cet ouvrage. Parfois,
vous pouvez aussi trouver une abréviation de cette notation qui est : x.
146 3 • Statistiques descriptives univariées
[1] 11.13056
Il existe une fonction de R qui peut vous donner en une seule fois toutes ces informations et
même plus (la valeur minimale et la valeur maximale de la variable) : la fonction summary. Mais
attention, les quartiles (1er quartile, médiane, 3e quartile) sont calculés avec le type 7 qui est
l’option par défaut du langage R ! Ce qu’il faut savoir c’est que la différence est faible entre
les valeurs calculées par le type 6 et le type 7. Vous pouvez donc sans inquiétude utiliser la
fonction summary.
> summary(Mesures$masse)
Définition 3.43 L’étendue, notée e(x), est la différence entre la plus grande et la plus petite des
valeurs prises par la série statistique, donc e(x) = max(x) − min(x).
> max(Mesures$masse)-min(Mesures$masse)
[1] 48.2
– Deuxième façon : soit vous utilisez la fonction range qui vous donne le minimum et
le maximum de la série et vous appliquez ensuite la fonction diff sur range. Ce qui
donne la ligne de commande suivante :
> diff(range(Mesures$masse))
[1] 48.2
Définition 3.44 L’étendue interquartile, notée EIQ(x), est la différence entre le troisième
© Dunod – La photocopie non autorisée est un délit.
[1] 10.1
Remarque : IQR pour InterQuartile Range . De plus cette caractéristique est plus
sensible aux valeurs atypiques que l’étendue.
148 3 • Statistiques descriptives univariées
Définition 3.45 Pour une distribution statistique, discrète ou continue, non groupée, la variance,
notée Var (x), est le nombre réel positif défini par :
p
1
p
Var (x) = s (x) =
2
(xi − m(x)) f i =
2
(xi − m(x))2 n i .
N
i=1 i=1
Pour une distribution statistique groupée en classes d’amplitudes égales à a, la variance, notée
Var (x), se calcule généralement en utilisant la correction de Sheppard. Elle est égale au
nombre réel positif défini par :
p
a2 1
p
a2
Var (x) = s (x) =
2
(xi − m(x)) f i −
2
= (xi − m(x))2 n i − ·
12 N 12
i=1 i=1
Remarque :
1. La variance est une moyenne arithmétique qui s’ignore. En effet, la variance est la
moyenne des carrés des écarts à la moyenne arithmétique.
2. Vous pouvez aussi calculer la variance d’une autre manière, en utilisant la Formule de
Huygens :
s2 (x) = m x 2 − m2 (x),
où m x 2 est la moyenne du carré des valeurs de la distribution. Cette formule est
parfois préférée et conseillée car elle ne fait intervenir qu’une fois la moyenne qui
parfois est une valeur arrondie et non la valeur exacte. Donc cela implique moins
d’erreurs de calcul.
Cette variance peut aussi se calculer sur des données issues d’un échantillon. Elle se définit
ainsi.
Définition 3.46 Pour un échantillon non groupé, la variance empirique, notée s 2 (x), est définie
par :
1
n
s 2 (x) = (xi − x n )2 .
n
i=1
Pour un échantillon groupé, la variance empirique, notée s 2 (x), se calcule par :
1
q
2
s (x) = (xi − x n )2 n i .
n
i=1
Pour un échantillon groupé, la variance corrigée, notée sc2 (x), se calcule par :
1
q
sc2 (x) = (xi − x n )2 n i .
n−1
i=1
Remarque :
1. Parfois certains auteurs nomment cette variance, la variance estimée ou la variance
de l’échantillon par opposition à la variance de la population, notée s2 (x).
2. Pourquoi existe-t-il deux formules pour calculer la variance ? Parce qu’il y a une
formule qui calcule la variance lorsque toutes les unités statistiques sont présentes :
c’est le calcul de la variance dans la population s2 (x) et une autre qui calcule la
variance dans un échantillon : c’est la variance corrigée. Vous comprendrez davantage
l’existence de ces deux formules dans le chapitre 6.
Exemple :
> var(Mesures$masse)
[1] 81.0281
Remarque : vous pouvez vous poser la question : Quelle variance R calcule-t-il ? . La
réponse est que R, comme tout bon logiciel de statistique, calcule la variance corrigée
car c’est celle-là qu’il faut calculer lorsque les données qui sont traitées sont issues d’un
échantillon.
Il est alors facile de calculer la variance non corrigée. Il suffit de multiplier la variance
corrigée
n−1
– soit par le coefficient si vous travaillez sur un échantillon,
n
© Dunod – La photocopie non autorisée est un délit.
N −1
– soit par le coefficient si vous travaillez sur la population.
N
> (var(Mesures$masse)*(length(Mesures$masse))
+ /(length(Mesures$masse)-1))
[1] 81.35093
Remarque : nous rappelons que le signe « + » est là pour indiquer une nouvelle ligne et
non à intégrer dans la ligne de commande.
3.48 Pour une distribution statistique discrète ou continue, l’écart-type, noté s(x),
Définition
est égal à s2 (x).
150 3 • Statistiques descriptives univariées
Cet écart-type peut aussi se calculer sur des données issues d’un échantillon. Il se définit
ainsi.
Définition 3.49 Pour un échantillon, l’écart-type empirique, noté s(x), est égal à s 2 (x).
Remarque :
1. Devez-vous écrire écart-type ou écart type ? Pour répondre à cette question, vous
pourrez consulter l’article de deux pages intitulé Écart ? type de Jacques Goupy,
paru dans la Revue MODULAD, numéro 35, en 2006 et téléchargeable depuis l’adresse
suivante : http://www-rocq.inria.fr/axis/modulad/archives.htm.
2. Pourquoi existe-t-il deux formules pour calculer un écart-type ? Comme auparavant
pour la variance, il y a une formule pour un écart-type calculé à partir de données
issues d’une population et une formule pour un écart-type calculé à partir de données
issues d’un échantillon. Vous pourrez aussi consulter l’article de quatre pages intitulé
Quelle est la bonne formule de l’écart-type ? d’Emmanuel Grenier, paru dans
Exemple :
> sd(Mesures$masse)
[1] 9.001561
Remarque :
1. sd est l’abréviation de Standard Deviation .
2. Vous pouvez vous poser la même question que précédemment : Quel écart-type R
calcule-t-il ? . La réponse est que R, comme tout bon logiciel de statistique, calcule
l’écart-type corrigé car c’est celui-là qu’il faut calculer lorsque les données qui sont
traitées sont issues d’un échantillon.
Définition 3.51 La médiane des écarts absolus à la médiane, notée MAD(x) (pour Median
Absolute Deviation), d’une série statistique est le nombre réel défini par :
MAD(x) = Q2 |xi − Q2 (x)| 1iN .
Remarque : la médiane des écarts absolus à la médiane est également utilisée pour
estimer l’écart-type au sein de la population à partir d’un échantillon.
3.6 Représentations numériques d’une série statistique 151
Exemple :
> mad(Mesures$masse,constant=1)
[1] 6.74583
L’option constant=1 est nécessaire pour que le langage R calcule la valeur du MAD d’une série
statistique définie comme en 3.51.
> mad(Mesures$masse,quantile(Mesures$masse,type=1,probs=.5),constant=1)
[1] 4.6
> median(abs(Mesures$masse-quantile(Mesures$masse,type=1,probs=.5)))
[1] 4.6
© Dunod – La photocopie non autorisée est un délit.
Lors du calcul de la médiane des valeurs absolues des écarts à la valeur de référence, la
fonction mad utilise par défaut la définition de la médiane implémentée dans la fonction median
de R : valeur centrale de la série ou de l’échantillon dans le cas d’un effectif impair ou moyenne
des deux valeurs centrales dans le cas d’un effectif pair. Les options low et high permettent
d’utiliser deux autres définitions alternatives : la plus petite ou la plus grande des deux valeurs
centrales dans le cas d’un effectif pair, la définition restant inchangée dans le cas d’un effectif
impair !
> mad(Mesures$masse,constant=1,low=TRUE)
[1] 4.5
152 3 • Statistiques descriptives univariées
> quantile(abs(Mesures$masse-median(Mesures$masse)),type=1,probs=.5)
50%
4.5
> mad(Mesures$masse,quantile(Mesures$masse,type=1,probs=.5),constant=1,low=TRUE)
[1] 4.6
> quantile(abs(Mesures$masse-quantile(Mesures$masse,type=1,probs=.5)),
+ type=1,probs=.5)
50%
4.6
Définition 3.52 Le coefficient de variation, noté CV(x), d’une série statistique est défini par le
rapport de l’écart-type avec la moyenne arithmétique. Pour un échantillon, il s’agit du rapport
de l’écart-type corrigé avec la moyenne arithmétique.
Remarque :
1. Le CV(x) est défini pour des variables positives.
2. Ce coefficient n’a pas d’unité. Il permet de comparer des séries statistiques entre elles
qui n’ont pas les mêmes unités.
Exemple : comparer les températures dans différents pays, puisque plusieurs unités
coexistent.
3. Pour calculer le coefficient de variation, vous pouvez utiliser la bibliothèque BioStatR.
Exemple :
> library(BioStatR)
> cvar(Mesures$masse)
[1] 80.87253
3.6 Représentations numériques d’une série statistique 153
Définition 3.53 Le moment centré d’ordre r d’une distribution statistique discrète est égal à :
p
Définition 3.54 Le coefficient d’asymétrie de Fisher d’une série statistique est la quantité
g1 (x) définie par :
m m 3 (x) m m 3 (x)
g1 (x) = = ·
s3 (x) (m m 2 (x))3/2
Définition 3.55 Le coefficient d’asymétrie de Pearson d’une série statistique est la quantité
b1 (x) définie par :
(m m 3 (x))2 (m m 3 (x))2
b1 (x) = = = g21 (x).
(s2 (x))3 (m m 2 (x))3
Définition 3.56 Le coefficient d’asymétrie de Fisher corrigé d’un échantillon est la quantité
g1,c (x) définie par :
n 3
n xi − x n
© Dunod – La photocopie non autorisée est un délit.
g1,c (x) =
(n − 1)(n − 2) sc
i=1
⎡ ⎤
1
n
√ ⎢ (xi − x n )3 ⎥
⎢
n(n − 1) ⎢ n ⎥
i=1 ⎥
⎢ 3/2 ⎥
n − 2 ⎢
= .
n ⎥
⎣ 1 ⎦
(xi − x n )2
n
i=1
154 3 • Statistiques descriptives univariées
Définition 3.57 Le coefficient d’aplatissement de Fisher d’une série statistique est la quantité
g2 (x) définie par :
m m 4 (x)
g2 (x) = − 3.
(m m 2 (x))2
Définition 3.58 Le coefficient d’aplatissement de Fisher corrigé d’un échantillon est la quan-
tité g2,c (x) définie par : ⎡ ⎤
n
⎢ (xi − x n ) 4
⎥
⎢ i=1 ⎥
⎥ − 3 (n − 1)
2
(n + 1)n ⎢
g2,c (x) =
(n − 1)(n − 2)(n − 3) ⎢
⎣ sc4 ⎥
⎦ (n − 2)(n − 3)
n−1
= ((n + 1)g2,ech (x) + 6),
(n − 2)(n − 3)
où :
1
n
(xi − x n )4
n
i=1
g2,ech (x) =
2 − 3.
1 n
(xi − x n )2
n
i=1
Définition 3.59 Le coefficient d’aplatissement de Pearson d’une série statistique est la quan-
tité b2 (x) définie par :
m m 4 (x) m m 4 (x)
b2 (x) = = ·
(m m 2 (x))2 s4 (x)
Exemple : nous considérons dans un premier temps que l’ensemble des masses est un
échantillon. Par conséquent nous cherchons à évaluer le coefficient d’asymétrie corrigé
g1,c (x) et d’aplatissement corrigé g2,c (x). Pour calculer ces deux caractéristiques de
forme corrigées, téléchargeons la bibliothèque agricolae.
> kurtosis(Mesures$masse)
[1] 3.080963
3.6 Représentations numériques d’une série statistique 155
> detach(package:agricolae)
> library(e1071)
> skewness(Mesures$masse,type=1)
[1] 1.630072
> kurtosis(Mesures$masse,type=1)
[1] 2.996456
> skewness(Mesures$masse,type=2)
[1] 1.639849
> kurtosis(Mesures$masse,type=2)
[1] 3.080963
Remarque :
1. Le skewness mesure l’asymétrie de la distribution d’une variable quantitative.
EN RÉSUMÉ
Commande Description
head("data") Affiche les 6 premières lignes de data.
tail("data") Affiche les 6 dernières lignes de data.
str("objet") Affiche la structure de objet.
levels("factor") Affiche les niveaux de factor.
table("vector") Affiche la table des effectifs de vector.
cumsum("vector") Cumule l’une après l’autre les coordonnées de vector.
sum("vector") Calcule la somme des coordonnées de vector.
prop.table("vector") Affiche la table des fréquences de vector.
min("vector") Calcule la valeur minimale de vector.
max("vector") Calcule la valeur maximale de vector.
tapply(x,grp,fonct) Applique la fonction fonct aux groupes constitués à partir
du vecteur x grâce aux modalités du facteur grp.
as.data.frame("matrix") Transforme matrix en un tableau de données.
rownames("matrix") Affiche le nom des lignes de matrix.
rownames("dframe") Affiche le nom des lignes de dframe.
colnames("matrix") Affiche le nom des colonnes de matrix.
colnames("dframe") Affiche le nom des colonnes de dframe.
Commandes pour les représentations graphiques
plot(x,y) Trace le nuage de points de y en fonction de x.
barchart(...) Trace un diagramme.
barplot(x) Trace un diagramme en bâtons de x.
pie(x) Trace un diagramme circulaire de x.
hist() Trace un histogramme, avec des options pour définir les classes :
• nclass=... pour fixer un nombre de classes
• br=c(...,...,...) pour donner les bornes des classes.
Attention de ne pas utiliser nclass et br en même temps.
boxplot(x) Trace une boîte à moustaches de x.
boxplot(x~fac) Trace une boîte à moustaches pour chaque groupe de valeurs de
x défini par un niveau de fac.
Commandes pour les caractéristiques de position
summary(vector) Donne certaines caractéristiques de position de vector.
summary(dframe) Donne certaines caractéristiques de position pour chaque
colonne de dframe.
mean(vector) Calcule la moyenne de vector.
range(vector) Calcule les valeurs minimale et maximale de vector.
median(vector) Calcule la médiane de vector.
quantile(vector,probs,type) Calcule les quantiles de vector de niveau les valeurs
de probs de type « type ». Par défaut « type=7 »
et probs=c(0,.25,.5,.75,1).
Exercices 157
Commande Description
Commandes pour les caractéristiques de dispersion
var(vector) Calcule la variance corrigée de vector.
sd(vector) Calcule l’écart-type corrigé de vector.
Commandes pour les caractéristiques de forme
kurtosis(vector) Calcule l’aplatissement de vector.
skewness(vector) Calcule l’asymétrie de vector.
Commandes pour manipuler les données
make.groups(x,y,...) Empile les vecteurs x, y,. . . dans un tableau de données
en créant un facteur pour identifier chacun des groupes.
EXERCICES
Dans cet exercice, vous allez découvrir comment fonctionne la fonction factor qui a été
évoquée dans les rappels de cours.
Sur trois variétés de pommes notées 1, 2 et 3, la jutosité de chaque pomme est relevée. La
jutosité est un indice compris entre 0 et 10. Il y a quatre pommes par variété qui ont été testées.
La variété 1 est la Golden Delicious, la variété 2 est la pomme Calville et la variété 3 est la Belle
de Boskoop. Vraisemblablement, la question que vous pourriez vous poser serait : Quelle est
© Dunod – La photocopie non autorisée est un délit.
la variété de pomme la plus juteuse ? . Vous ne chercherez pas à répondre à cette question ici.
En effet, il s’agit d’une application d’une technique statistique connue sous le nom d’analyse
de la variance que vous ne connaissez pas encore. Le but de cet exercice est de vous montrer
comment vous servir de la fonction factor. Les résultats obtenus sont inscrits dans le tableau
suivant.
Variété de pomme Jutosité Variété de pomme Jutosité
1 4 2 7
1 6 2 6
1 3 3 8
1 5 3 6
2 7 3 5
2 8 3 6
158 3 • Statistiques descriptives univariées
> Variete<-factor(Variete)
puis :
> Pommes<-data.frame(Variete,Jutosite)
> rm(Variete)
> rm(Jutosite)
Quelle est la nature du jeu de données Pommes ? Quels sont les modes des deux variables qui
constituent le jeu de données Pommes ?
Remarque :
4) Vous auriez pu procéder autrement. Cette seconde façon est beaucoup plus rapide et vous
êtes invité à vous en servir dès que vous savez qu’une variable dans votre jeu de données est un
facteur.
Tapez les lignes de commande suivantes :
> Variete<-factor(c(rep(1,4),rep(2,4),rep(3,4)))
> Jutosite<-c(4,6,3,5,7,8,7,6,8,6,5,6)
> Pommes<-data.frame(Variete,Jutosite)
5) Il vous est conseillé, au moins dans les premiers temps de votre apprentissage de la statistique,
de ne pas utiliser des nombres pour les niveaux de votre facteur, mais plutôt des lettres. Pour
cela, vous utiliserez l’option labels dans la fonction factor.
Vous allez donner un label aux valeurs numériques 1, 2 et 3, à savoir 1 devient V1, 2 devient V2
et 3 devient V3, V pour Variete. Pour cela, tapez les lignes de commande suivantes :
> Variete<-factor(c(rep(1,4),rep(2,4),rep(3,4)),labels=c("V1","V2","V3"))
> Jutosite<-c(4,6,3,5,7,8,7,6,8,6,5,6)
> Pommes<-data.frame(Variete,Jutosite)
> Variete<-as.factor(c(rep(1,4),rep(2,4),rep(3,4)))
> Jutosite<-c(4,6,3,5,7,8,7,6,8,6,5,6)
> Pommes<-data.frame(Variete,Jutosite)
Vérifiez bien que vous obtenez le même résultat qui est attendu.
7) Calculez les moyennes pour chacun des groupes défini par la variable Variete en utilisant la
fonction tapply :
> tapply(Jutosite,Variete,mean)
Procédez de même pour obtenir l’écart-type, les quantiles ou appliquer la fonction summary à
chacun des groupes défini par le facteur Variete.
© Dunod – La photocopie non autorisée est un délit.
Vous allez vous intéresser ici à la variable masse du jeu de données Mesures. Dans les
rappels de cours, vous avez vu comment grouper ces données automatiquement à l’aide de
l’une des trois règles dues à Sturges, Scott et Freedman-Diaconis. Vous allez voir comment
grouper des données suivant différents critères.
1) Groupez les données en 5 classes à l’aide de l’option breaks=5 de la fonction hist. Que se
passe-t-il si vous cherchez à en obtenir seulement 4 ?
2) Groupez les données en utilisant les classes suivantes [0; 5], ]5; 10], ]10; 15], ]15; 20] et
]20; 50] à l’aide de l’option breaks=c(0,5,10,15,20,50) de la fonction hist.
160 3 • Statistiques descriptives univariées
> brk<-c(0,5,10,15,20,50)
> table(cut(Mesures$masse,brk))
> data.frame(table(cut(Mesures$masse,brk)))
4) Si vous cherchez à créer des groupes dont les effectifs sont équilibrés, vous pouvez par
exemple utiliser la fonction cut2 de la bibliothèque Hmisc. Après avoir téléchargé et installé
cette bibliothèque, commentez les lignes de code suivantes et en particulier le rôle des options g
et m.
> library(Hmisc)
> brk<-c(0,5,10,15,20,50)
> res<-cut2(Mesures$masse,brk)
> table(res)
> table(cut2(Mesures$masse,g=10))
> table(cut2(Mesures$masse,m=50))
Le but de cet exercice est d’introduire les fonctions attach et detach qui permettent
d’accéder plus facilement aux variables contenues dans un tableau de données.
> head(Mesures$masse)
> head(masse)
Que constatez-vous ?
2) Vous allez utiliser les deux fonctions attach et detach. Pour cela, tapez les deux lignes de
commande :
> attach(Mesures)
> head(masse)
> detach(Mesures)
> head(masse)
Le but de cet exercice est de calculer des résumés numériques et de tracer une boîte à
moustaches.
1) Affichez les six premières lignes de ce jeu de données qui est disponible dans la bibliothèque
BioStatR.
2) De quoi est constitué ce jeu de données ? C’est-à-dire : combien de variables composent
ce jeu de données ? quelle est la nature de ces variables ? combien d’unités statistiques sont
présentes dans ce jeu de données ?
3) Quelles sont la classe et la taille de ce jeu de données ?
4) Donnez la moyenne, la valeur minimale, la valeur maximale, la médiane et la ou les classes
modales de la variable Duree.
5) Donnez l’écart-type corrigé, le coefficient de variation et l’étendue de la variable Duree.
6) Tracez la boîte à moustaches de la variable Duree en mettant un label pour l’axe vertical qui
est Durée en heures . Représentez sur cette même boîte la moyenne.
7) Sauvegardez la boîte à moustaches au format .pdf et au format .ps en utilisant les fonctions
pdf et postscript.
PROBLÈME
© Dunod – La photocopie non autorisée est un délit.
Lorsque vous étudiez une série statistique sur un caractère quantitatif qui comporte un grand
nombre de valeurs, il est suggéré de la grouper par classes puis ensuite remplacer chaque
classe par son milieu. Mais les résultats en sont légèrement modifiés, ce que vous pouvez
imaginer. D’ailleurs, comme nous l’avons vu précédemment, il existe des corrections pour
certaines des caractéristiques. Nous avons donné celles pour la variance, l’asymétrie et
l’aplatissement.
Le but de ce problème est d’illustrer un groupement en classes défini préalablement par
l’utilisateur.
162 3 • Statistiques descriptives univariées
Le jeu de données ci-dessous est extrait du livre de F. Couty, J. Debord et D. Fredon, Mini
Manuel de Probabilités et statistique, Dunod, 2007.
Considérez une série statistique de 60 taux d’hémoglobine dans le sang, exprimés en g/L et
mesurés chez des adultes présumés en bonne santé. La série est rangée par valeurs croissantes et
l’ordre dans lequel les données ont été observées n’a pas été conservé.
Femmes 105 110 112 112 118 119 120 120 125 126
127 128 130 132 133 134 135 138 138 138
138 142 145 148 148 150 151 154 154 158
Hommes 141 144 146 148 149 150 150 151 153 153
153 154 155 156 156 160 160 160 163 164
164 165 166 168 168 170 172 172 176 179
1) Créez deux vecteurs : un vecteur Femmes et un vecteur Hommes qui contiennent chacun les
données brutes.
2) Considérez le groupement en classes suivant :
[104; 114], ]114; 124], ]124; 134], ]134; 144], ]144; 154], ]154; 164],
]164; 174], ]174; 184].
Pour chacune des deux séries : femmes et hommes, déterminez les effectifs et les fréquences de
chaque classe.
3) Effectuez une représentation graphique adaptée des deux distributions groupées en classe de
la question 2).
4) Calculez les moyennes pour chacune des trois distributions initiales : ensemble, femmes,
hommes.
5) Calculez les moyennes des trois distributions (ensemble, femmes, hommes) après le groupe-
ment en classes de la question 2), en remplaçant chaque classe par son milieu.
6) Calculez les médianes pour chacune des trois distributions initiales : ensemble, femmes,
hommes.
7) Calculez l’écart interquartile pour chacune des trois distributions initiales : ensemble, femmes,
hommes.
8) Calculez les variances et les écarts-types des trois distributions initiales : ensemble, femmes,
hommes.
9) Pour la distribution des femmes, calculez les caractéristiques de forme de Fisher.
Du mal à démarrer 163
DU MAL À DÉMARRER
➩ Exercice 3.1
1) Utilisez la fonction c et la fonction data.frame.
2) Utilisez la fonction str et la fonction class.
3) Utilisez la fonction str et la fonction class.
4) Utilisez la fonction str.
5) Utilisez la fonction str.
6) Utilisez la fonction str.
7) Utilisez la fonction tapply avec les arguments mean, sd, quantile et summary.
➩ Exercice 3.2
1) Utilisez la fonction hist avec l’option breaks. Pensez à l’option plot=FALSE qui
vous permet d’éviter l’affichage du graphique.
2) Utilisez à nouveau la fonction hist avec les options breaks et plot=FALSE.
3) Utilisez la fonction cut et la fonction table en même temps. Puis utilisez à nouveau
la fonction cut avec la fonction head.
4) Utilisez la fonction cut2 avec les options g et m. N’oubliez pas de télécharger la
bibliothèque Hmisc pour pouvoir utiliser cette fonction. Utilisez également la fonction
table.
© Dunod – La photocopie non autorisée est un délit.
➩ Exercice 3.4
1) Utilisez la fonction head.
2) Utilisez la fonction str.
3) Utilisez la fonction class et la fonction dim.
4) Utilisez la fonction summary et la fonction hist.
5) Utilisez la fonction sd et la fonction cvar.
6) Utilisez la fonction boxplot et points pour représenter la moyenne.
7) Consultez l’aide de la fonction pdf et de la fonction postscript.
➩ Problème 3.1
1) Utilisez la fonction c.
164 3 • Statistiques descriptives univariées
Exercice 3.1
1)
> Variete<-c(rep(1,4),rep(2,4),rep(3,4))
> Variete
[1] 1 1 1 1 2 2 2 2 3 3 3 3
> Jutosite<-c(4,6,3,5,7,8,7,6,8,6,5,6)
> Jutosite
[1] 4 6 3 5 7 8 7 6 8 6 5 6
> Pommes<-data.frame(Variete,Jutosite)
> Pommes
Solution des exercices 165
Variete Jutosite
1 1 4
2 1 6
3 1 3
4 1 5
5 2 7
6 2 8
7 2 7
8 2 6
9 3 8
10 3 6
11 3 5
12 3 6
2)
> str(Pommes)
> class(Pommes$Variete)
[1] "numeric"
Vous notez que les deux variables Variete et Jutosite sont quantitatives puisqu’elles sont
© Dunod – La photocopie non autorisée est un délit.
toutes les deux de classe numérique. Il faut donc changer la classe de la variable Variete.
Variete doit devenir un facteur.
3)
> str(Pommes)
Vous constatez à partir de cette sortie de R que la variable Variete est désormais un facteur.
Vous pouvez aussi retrouver ce résultat en tapant :
166 3 • Statistiques descriptives univariées
> class(Pommes$Variete)
[1] "factor"
La variable Jutosite a gardé sa classe de variable numérique. Vous obtenez le même tableau
que précédemment. En effet, si vous tapez la ligne de commande suivante :
> Pommes
Variete Jutosite
1 1 4
2 1 6
3 1 3
4 1 5
5 2 7
6 2 8
7 2 7
8 2 6
9 3 8
10 3 6
11 3 5
12 3 6
4)
> str(Pommes)
Et vous obtenez encore la même structure qu’auparavant, à savoir la variable Variete est un
facteur et la variable Jutosite est une variable quantitative.
5)
> Pommes
Variete Jutosite
1 V1 4
Solution des exercices 167
2 V1 6
3 V1 3
4 V1 5
5 V2 7
6 V2 8
7 V2 7
8 V2 6
9 V3 8
10 V3 6
11 V3 5
12 V3 6
Ce qui a changé c’est la colonne Variete. En effet, ce ne sont plus 1, 2, 3 qui apparaissent
mais V1, V2, V3.
> str(Pommes)
Ce qui a changé, c’est sur la deuxième ligne de cette sortie, ce ne sont plus 1, 2 et 3 qui sont
entre guillemets mais V1, V2 et V3.
6)
> Pommes
Variete Jutosite
© Dunod – La photocopie non autorisée est un délit.
1 1 4
2 1 6
3 1 3
4 1 5
5 2 7
6 2 8
7 2 7
8 2 6
9 3 8
10 3 6
11 3 5
12 3 6
> str(Pommes)
168 3 • Statistiques descriptives univariées
7) Il suffit d’exécuter la ligne de commande indiquée dans l’énoncé puis de remplacer la fonction
mean par les fonctions sd, quantile et summary.
> tapply(Jutosite,Variete,mean)
1 2 3
4.50 7.00 6.25
> tapply(Jutosite,Variete,sd)
1 2 3
1.2909944 0.8164966 1.2583057
> tapply(Jutosite,Variete,quantile,type=6)
$‘1‘
0% 25% 50% 75% 100%
3.00 3.25 4.50 5.75 6.00
$‘2‘
0% 25% 50% 75% 100%
6.00 6.25 7.00 7.75 8.00
$‘3‘
0% 25% 50% 75% 100%
5.00 5.25 6.00 7.50 8.00
Pour spécifier que la fonction quantile doit utiliser l’option type=6, il suffit de l’ajouter
après la fonction quantile, comme option de la fonction tapply. Il est possible de préciser
ainsi plusieurs options.
> tapply(Jutosite,Variete,summary)
Solution des exercices 169
$‘1‘
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.00 3.75 4.50 4.50 5.25 6.00
$‘2‘
Min. 1st Qu. Median Mean 3rd Qu. Max.
6.00 6.75 7.00 7.00 7.25 8.00
$‘3‘
Min. 1st Qu. Median Mean 3rd Qu. Max.
5.00 5.75 6.00 6.25 6.50 8.00
Vous remarquez que lorsque la fonction à appliquer à chacun des sous-groupes renvoie plusieurs
valeurs, la fonction tapply crée une liste formée par les résultats obtenus sur chacun de ces
sous-groupes, le nom de chaque élément de la liste étant celui du sous-groupe associé.
Enfin, vous noterez qu’il y a une différence entre les premiers et troisièmes quartiles calculés
par la fonction quantile et l’option type=6 et la fonction summary, qui elle calcule des
quantiles de type=7.
Exercice 3.2
1) L’option plot=FALSE permet d’éviter l’affichage du graphique puisque seule la distribution
vous intéresse. Vous obtenez cinq classes d’amplitude égale à 10 et d’extrémités 0, 10, 20, 30,
40, 50.
> hist(Mesures$masse,breaks=5,plot=FALSE)
© Dunod – La photocopie non autorisée est un délit.
$breaks
[1] 0 10 20 30 40 50
$counts
[1] 140 74 28 6 4
$intensities
[1] 0.05556 0.02937 0.01111 0.00238 0.00159
$density
[1] 0.05556 0.02937 0.01111 0.00238 0.00159
$mids
[1] 5 15 25 35 45
170 3 • Statistiques descriptives univariées
$xname
[1] "Mesures$masse"
$equidist
[1] TRUE
attr(,"class")
[1] "histogram"
Par contre, lorsque vous demandez quatre classes au logicel R à l’aide de la fonction hist et de
l’option breaks=4, vous obtenez un résultat identique au précédent et de ce fait une distribution
groupée en cinq classes. Ainsi il faut savoir que la fonction hist de R peut ne pas construire
exactement le nombre de classes demandées par l’utilisateur.
2) Exécutez la commande suggérée dans l’énoncé de la question :
> hist(Mesures$masse,breaks=c(0,5,10,15,20,50),plot=FALSE)
$breaks
[1] 0 5 10 15 20 50
$counts
[1] 82 58 51 23 38
$intensities
[1] 0.06508 0.04603 0.04048 0.01825 0.00503
$density
[1] 0.06508 0.04603 0.04048 0.01825 0.00503
$mids
[1] 2.5 7.5 12.5 17.5 35.0
$xname
[1] "Mesures$masse"
$equidist
[1] FALSE
attr(,"class")
[1] "histogram"
Vous constatez que les limites des classes sont conformes à celles attendues.
Solution des exercices 171
3)
La fonction cut construit un vecteur dont les éléments sont les classes auxquelles les données
initiales appartiennent.
La fonction head permet d’avoir un aperçu des six premiers éléments de ce vecteur :
> head(cut(Mesures$masse,brk))
> data.frame(table(cut(Mesures$masse,brk)))
Les instructions précédentes permettent donc d’obtenir la distribution groupée recherchée. Cal-
culez maintenant l’effectif de chaque classe à l’aide de la ligne de commande suivante :
172 3 • Statistiques descriptives univariées
> table(res)
res
[0,5) [5,10) [10,15) [15,20) [20,50]
80 60 50 23 39
Exercice 3.3
1) En tapant les deux lignes de commande suivantes :
> library(BioStatR)
> head(Mesures$masse)
> head(masse)
vous obtenez :
La variable masse du tableau de données Mesures n’est pas directement accessible : il faut
indiquer à R où la trouver.
2)
> attach(Mesures)
> head(masse)
La fonction attach a indiqué à R de rechercher les objets qu’il ne trouvait pas en mémoire
parmi les variables du tableau de données Mesures.
> detach(Mesures)
> head(masse)
La fonction detach a indiqué à R d’arrêter de rechercher les objets qu’il ne trouvait pas en
mémoire parmi les variables du tableau de données Mesures. Si un objet a été attaché k fois, il
faudra le détacher k fois.
Exercice 3.4
1) Pour afficher les six premières lignes de ce jeu de données, il vous suffit de taper la ligne de
commande suivante :
© Dunod – La photocopie non autorisée est un délit.
> head(Europe)
Pays Duree
1 Allemagne 41.7
2 Autriche 44.1
3 Belgique 41.0
4 Chypre 41.8
5 Danemark 40.5
6 Espagne 42.2
> str(Europe)
174 3 • Statistiques descriptives univariées
> class(Europe)
[1] "data.frame"
Ce jeu de données est un tableau de 25 lignes et de 2 colonnes. Vous obtenez cette information
en tapant la ligne de commande suivante :
> dim(Europe)
[1] 25 2
4) Vous allez pouvoir répondre à cette question en tapant la ligne de commande suivante :
> summary(Europe$Duree)
Figure 3.24
© Dunod – La photocopie non autorisée est un délit.
En regardant l’histogramme, vous constatez qu’avec ce groupement par classes automatique que
R fait, vous obtenez deux classes modales qui sont : ]40; 41] et ]41; 42]. Vous en déduisez que la
distribution de la variable Duree est bimodale.
Seconde méthode : à partir des résultats numériques de l’histogramme. Vous avez besoin
que R vous donne les résultats et que vous les stockiez. Pour cela, vous tapez les lignes de
commande suivantes, en spécifiant que vous ne voulez que la première ligne de la sortie de
l’histogramme :
> histo<-hist(Europe$Duree)
> classe<-histo$breaks
> classe
[1] 39 40 41 42 43 44 45
176 3 • Statistiques descriptives univariées
> which(histo$density==max(histo$density))
[1] 2 3
Donc, il y a deux classes modales qui sont : ]40; 41] et ]41; 42]. La distribution de la variable
Duree est donc bimodale.
5)
> sd(Europe$Duree)
[1] 1.113358
> cvar(Europe$Duree)
[1] 2.669668
> diff(range(Europe$Duree))
[1] 4.3
Il faut représenter la moyenne, qui n’est pas mentionnée par défaut. Pour cela, tapez la ligne de
commande suivante :
> points(1,mean(Europe$Duree),pch=1)
Solution des exercices 177
Remarque :
1. Le 1 dans la ligne de commande ci-dessus indique la valeur de l’abscisse où R doit se
positionner.
2. pch est une option graphique qui définit le symbole qui représente graphiquement le
paramètre que vous souhaitez voir sur le graphique.
Figure 3.25
Notez que R ne met pas de titre par défaut sur les boîtes à moustaches, alors que sur les
histogrammes, un titre par défaut est toujours mentionné, même si celui-ci est en anglais !
7) Les lignes de commande pour sauvegarder la boîte à moustaches au format .pdf sont les
suivantes :
> pdf(file="boxplot.pdf")
> boxplot(Europe$Duree,ylab="Durée en heures")
> points(1,mean(Europe$Duree),pch=1)
> dev.off()
windows
2
178 3 • Statistiques descriptives univariées
Remarque :
1. Cette dernière ligne de sortie vous indique que vous êtes retourné dans la fenêtre
graphique de R qui porte le numéro 2. Il ne faut surtout pas oublier d’exécuter la
commande dev.off() ! En effet, la commande pdf(file="boxplot.pdf") redirige
l’affiche des graphiques vers le fichier boxplot.pdf tant que vous n’indiquez pas à
R de revenir à l’affichage par défaut dans une fenêtre graphique classique. Pour cette
même raison, le fichier boxplot.pdf ne sera complété et donc lisible qu’après avoir
exécuté la commande dev.off().
2. Il faut absolument taper dev.off() sinon plus aucun graphique ne sera affiché. Si
vous rencontrez ce problème, essayez d’exécuter cette commande plusieurs fois de
suite.
Les lignes de commande pour sauvegarder la boîte à moustaches au format .ps sont les
suivantes :
> postscript(file="boxplot.ps")
> boxplot(Europe$Duree,ylab="Durée en heures")
> points(1,mean(Europe$Duree),pch=1)
> dev.off()
windows
2
SOLUTION DU PROBLÈME
Problème 3.1
1)
> Femmes<-c(105,110,112,112,118,119,120,120,125,126,127,128,130,132,133,134,
+ 135,138,138,138,138,142,145,148,148,150,151,154,154,158)
> Femmes
Solution du problème 179
[1] 105 110 112 112 118 119 120 120 125 126 127 128 130 132 133 134 135
[18] 138 138 138 138 142 145 148 148 150 151 154 154 158
> Hommes<-c(141,144,146,148,149,150,150,151,153,153,153,154,155,156,156,160,
+ 160,160,163,164,164,165,166,168,168,170,172,172,176,179)
> Hommes
[1] 141 144 146 148 149 150 150 151 153 153 153 154 155 156 156 160 160
[18] 160 163 164 164 165 166 168 168 170 172 172 176 179
2) Vous allez commencer par traiter les données sur les femmes :
> histo.fem<-hist(Femmes,breaks=c(104,114,124,134,144,154,164,174,184))
> effectif.fem<-histo.fem$counts
> effectif.fem
[1] 4 4 8 6 7 1 0 0
Remarque : vous pouvez vérifier que vous n’avez pas perdu de données en tapant la ligne
de commande suivante :
> sum(effectif.fem)
[1] 30
© Dunod – La photocopie non autorisée est un délit.
> histo.fem<-hist(Femmes,breaks=c(104,114,124,134,144,154,164,174,
+ 184))
vous donne directement le tracé de l’histogramme qui vous servira pour la question
suivante.
> frequence.fem<-effectif.fem/sum(effectif.fem)
> print(frequence.fem,digits=3)
180 3 • Statistiques descriptives univariées
Donc le tableau des effectifs et des fréquences pour les femmes se présente de la façon suivante :
Vous terminerez par le traitement des données sur les hommes. Les commandes sont les mêmes,
il suffit simplement de remplacer femmes par hommes.
> histo.hom<-hist(Hommes,breaks=c(104,114,124,134,144,154,164,174,184))
> effectif.hom<-histo.hom$counts
> effectif.hom
[1] 0 0 0 2 10 9 7 2
> histo.hom<-hist(Hommes,breaks=c(104,114,124,134,144,154,164,174,184)
vous donne directement le tracé de l’histogramme qui vous servira pour la question
suivante.
> frequence.hom<-effectif.hom/sum(effectif.hom)
> print(frequence.hom,digits=3)
Donc le tableau des effectifs et des fréquences pour les hommes se présente de la façon suivante :
3) La représentation graphique adaptée est l’histogramme pour les deux distributions groupées
suivant la répartition proposée à la question 2).
> histo<-hist(Femmes,breaks=c(104,114,124,134,144,154,164,174,184),
+ main="Histogramme de la variable taux d’hémoglobine pour les Femmes",
+ xlab="Taux d’hémoglobine",ylab="Effectif")
4
2
0
Taux d'hémoglobine
Figure 3.26
182 3 • Statistiques descriptives univariées
> histo<-hist(Hommes,breaks=c(104,114,124,134,144,154,164,174,184),
+ main="Histogramme de la variable taux d’hémoglobine pour les Hommes",
+ xlab="Taux d’hémoglobine",ylab="Effectif")
4
2
0
Taux d'hémoglobine
Figure 3.27
Il est possible de représenter ces deux histogrammes sur le même graphique en utilisant la
fonction histogram de la bibliothèque lattice. Vous devez commencer par créer un tableau
de données formé de deux colonnes, la première contenant les taux d’hémoglobine, la seconde
contenant le sexe de l’individu :
> library(lattice)
> Ensemble.df <- make.groups(Femmes,Hommes)
> colnames(Ensemble.df) <- c("Taux","Sexe")
Figure 3.28
Figure 3.29
184 3 • Statistiques descriptives univariées
4) Pour calculer la moyenne de l’ensemble des données, il faut d’abord créer un fichier qui
rassemble à la fois les données sur les femmes et les données sur les hommes. Pour cela, tapez
la ligne de commande suivante :
> Ensemble<-c(Femmes,Hommes)
> Ensemble
[1] 105 110 112 112 118 119 120 120 125 126 127 128 130 132 133 134 135
[18] 138 138 138 138 142 145 148 148 150 151 154 154 158 141 144 146 148
[35] 149 150 150 151 153 153 153 154 155 156 156 160 160 160 163 164 164
[52] 165 166 168 168 170 172 172 176 179
Puis maintenant, vous pouvez calculer la moyenne, en tapant la ligne de commande suivante :
> mean(Ensemble)
[1] 145.9
Pour calculer la moyenne sur les données des femmes, tapez la ligne de commande suivante :
> mean(Femmes)
[1] 132.9333
Pour calculer la moyenne sur les données des hommes, tapez la ligne de commande suivante :
> mean(Hommes)
[1] 158.8667
5) Pour calculer la moyenne sur l’ensemble des données, c’est-à-dire les données des femmes et
des hommes après le groupement en classes, tapez la ligne de commande suivante :
> histo.ens<-hist(Ensemble,breaks=c(104,114,124,134,144,154,164,174,184))
> sum(histo.ens$counts*histo.ens$mids)/length(Ensemble)
[1] 145.3333
Solution du problème 185
Pour calculer la moyenne sur les données des femmes après le groupement en classes, tapez la
ligne de commande suivante :
> sum(histo.fem$counts*histo.fem$mids)/length(Femmes)
[1] 132.6667
Pour calculer la moyenne sur les données des hommes après le groupement en classes, tapez la
ligne de commande suivante :
> sum(histo.hom$counts*histo.hom$mids)/length(Hommes)
[1] 158
6) Pour calculer la médiane sur l’ensemble des données, tapez la ligne de commande suivante :
> quantile(Ensemble,0.50,type=6)
50%
149.5
Pour calculer la médiane sur les données des femmes, tapez la ligne de commande suivante :
> quantile(Femmes,0.50,type=6)
© Dunod – La photocopie non autorisée est un délit.
50%
133.5
Pour calculer la médiane sur les données des hommes, tapez la ligne de commande suivante :
> quantile(Hommes,0.50,type=6)
50%
158
Remarque : vous auriez pu utiliser la fonction median qui vous aurait donné les mêmes
résultats.
186 3 • Statistiques descriptives univariées
7) Pour calculer l’écart interquartile sur l’ensemble des données, vous tapez la ligne de com-
mande suivante :
> IQR(Ensemble,type=6)
[1] 26.25
Pour calculer l’écart interquartile sur les données des femmes, vous tapez la ligne de commande
suivante :
> IQR(Femmes,type=6)
[1] 25.75
Pour calculer l’écart interquartile sur les données des hommes, vous tapez la ligne de commande
suivante :
> IQR(Hommes,type=6)
[1] 15.75
8) Pour calculer la variance sur l’ensemble des données, vous tapez la ligne de commande
suivante :
> var(Ensemble)*(length(Ensemble)-1)/length(Ensemble)
[1] 315.3567
Pour calculer la variance sur les données des femmes, vous tapez la ligne de commande suivante :
> var(Femmes)*(length(Femmes)-1)/length(Femmes)
[1] 201.2622
Pour calculer la variance sur les données des hommes, vous tapez la ligne de commande
suivante :
> var(Hommes)*(length(Hommes)-1)/length(Hommes)
Solution du problème 187
[1] 93.18222
Pour calculer l’écart-type corrigé sur l’ensemble des données, tapez la ligne de commande
suivante :
> sd(Ensemble)*sqrt(length(Ensemble)-1)length(Ensemble)
[1] 17.75828
Pour calculer l’écart-type corrigé sur les données des femmes, tapez la ligne de commande
suivante :
> sd(Femmes)*sqrt(length(Femmes)-1)length(Femmes)
[1] 14.18669
Pour calculer l’écart-type corrigé sur les données des hommes, tapez la ligne de commande
suivante :
> sd(Hommes)*sqrt(length(Hommes)-1)length(Hommes)
[1] 9.653094
9) Pour calculer les caractéristiques de forme de Fisher pour la distribution des femmes, tapez
les lignes de commande suivantes après avoir mis en mémoire la bibliothèque e1071.
> skewness(Femmes,type=1)
© Dunod – La photocopie non autorisée est un délit.
[1] -0.09996127
et :
> kurtosis(Femmes,type=1)
[1] -0.9140576
Comme le coefficient d’asymétrie (-0,09996127) est strictement négatif, la distribution est étalée
vers la gauche. Comme le coefficient d’aplatissement (-0,9140576) est strictement négatif, la
distribution est plus aplatie que celle d’une loi normale réduite.
Chapitre 4
Le calcul des probabilités est appuyé sur cette supposition, que toutes les combinaisons
différentes d’un même effet sont également possibles.
Objectifs de ce chapitre
➤ connaître les principales lois discrètes qui sont nécessaires soit pour modéliser des phéno-
mènes naturels, soit pour réaliser des tests
➤ maîtriser les propriétés essentielles de la loi normale
➤ se familiariser avec les principales lois continues qui sont nécessaires soit pour construire
des intervalles de confiance soit pour réaliser des tests
➤ présenter les approximations de lois par d’autres lois qui peuvent être utiles lors de calculs
fastidieux
➤ présenter les commandes sous R pour calculer, les quantiles, les densités de probabilité
dans le cas discret, les densités et les fonctions de répartition dans le cas continu
Remarque : les variables aléatoires sont notées avec des lettres majuscules et les quanti-
tés déterministes avec des lettres minuscules.
4.1 Variable aléatoire - Variable aléatoire discrète - Variable aléatoire continue 189
Définition 4.1 Soit (V, F , P) un espace probabilisé1 . Une variable aléatoire réelle (v.a.r.) est
une application de V dans R ayant la propriété suivante : pour tout intervalle I de R, l’ensemble
X −1 (I ) = {v ∈ V|X (v) ∈ I } est un événement de F.
Remarque :
1. ∀x ∈ R, FX (x) ∈ [0; 1],
2. FX est une fonction croissante sur R,
3. lim FX (x) = 0 et lim FX (x) = 1 et FX est continue à droite et admet une limite
x→−∞ x→+∞
à gauche en tout point de R,
4. pour tous réels a et b, P (a < X b) = FX (b) − FX (a).
© Dunod – La photocopie non autorisée est un délit.
Définition 4.3 Soit X une v.a.r. définie sur (V, F , P). Elle est appelée variable aléatoire dis-
crète (v.a.d.) X si l’ensemble de ses valeurs X (V) est au plus dénombrable1 .
Définition 4.4 Soit X une v.a.r. définie sur (V, F , P). La loi de la variable aléatoire X est la
donnée d’une suite numérique (P(X = k) = p X (k))k∈X (V) telle que :
1. ∀k ∈ X (V), p X (k) 0,
2. p X (k) = 1,
k∈X (V)
1. Cette notion ne sera pas rappelée dans ce livre. Vous pourrez consulter l’ouvrage Mathématiques L1/L2 : Statistique
et Probabilités en 30 fiches de D. Fredon, M. Maumy-Bertrand et F. Bertrand, Dunod, 2009, pour de plus amples
détails.
190 4 • Lois de probabilités usuelles
3. pour tout réel x, P (X x) = p X (k) où désigne la sommation sur l’ensemble des
kx kx
k ∈ X (V) inférieurs ou égaux à x.
Définition 4.5 Soit X une v.a.r. définie sur (V, F, P). Elle est appelée variable aléatoire conti-
nue s’il existe une fonction f X définie sur R telle que :
1. f X (t) 0 pour tout t ∈ R,
2. l’ensemble des points de discontinuité de f X est fini et ces discontinuités sont de première
espèce (i.e. la limite à gauche et à droite en chaque point existe),
3. pour tout x réel la fonction de répartition FX de la v.a.r. X est donnée par :
x
FX (x) = f X (t) dt.
−∞
La fonction f X est appelée densité de la loi de probabilité de la v.a.r. X ou encore une densité
de probabilité de X.
Définition 4.6 Soit p ∈ [0; 1]. Une variable aléatoire X est dite suivre la loi de Bernoulli de
paramètre p, notée B(1; p), si la variable aléatoire X prend la valeur 1 avec la probabilité p
et la valeur 0 avec la probabilité 1 − p = q.
Remarque :
1. Le terme de variable aléatoire de Bernoulli est synonyme de celui de variable aléatoire
indicatrice qui indique la réalisation éventuelle d’un événement de probabilité p.
2. Une variable de Bernoulli est définie par les deux valeurs 0 et 1 et celles-là seulement.
Toute autre paire de valeurs ne permet plus l’appellation de variable de Bernoulli.
3. La figure 4.1 montre le graphe de la densité de probabilité pour différentes valeurs du
paramètre p.
4.2 Variables aléatoires discrètes : cas fini 191
Proposition 4.7 L’espérance et la variance d’une variable aléatoire X suivant la loi de Ber-
noulli de paramètre p sont égales respectivement à :
E(X ) = p et Var (X ) = p(1 − p) = pq où q = 1 − p.
Définition 4.8 Soit n ∈ N∗ . Une variable aléatoire X est dite suivre une loi uniforme discrète
si la variable aléatoire X prend n valeurs possibles k1 , k2 , . . . , kn avec la probabilité égale à
1/n pour n’importe quelle valeur ki . En particulier une variable aléatoire X est dite suivre la
loi uniforme discrète sur [[a; b]], où a, b ∈ Z et a b, si la variable aléatoire X prend comme
valeurs possibles {a, a + 1, . . . , b} avec la probabilité égale à 1/(b − a + 1) pour n’importe
laquelle de ces valeurs.
Remarque :
1. La loi uniforme discrète sur [[1; n]] peut s’appliquer à toute situation aléatoire à n
issues équiprobables dès que celles-ci peuvent être associées aux nombres 1, 2, . . . , n.
L’espérance et la variance sont alors égales respectivement à :
n+1 n2 − 1
E(X ) = et Var (X ) = ·
2 12
2. La figure 4.2 montre le graphe de la densité de probabilité de la loi uniforme discrète
sur [[1; n]] pour différentes valeurs du paramètre n.
© Dunod – La photocopie non autorisée est un délit.
Proposition 4.9 L’espérance et la variance d’une variable aléatoire X suivant la loi uniforme
discrète sur [[a; b]] sont égales respectivement à :
a+b (b − a)(b − a + 2)
E(X ) = et Var (X ) = ·
2 12
192 4 • Lois de probabilités usuelles
Définition 4.10 Soient n un entier naturel non nul et p ∈ [0; 1]. Une variable aléatoire X est
dite suivre la loi binomiale de paramètres p, notée B(n; p), si la variable aléatoire X
n et
n k
prend la valeur k avec la probabilité égale à p (1 − p)n−k . qest le nombre égal à 1 − p.
k
Remarque :
1. Pour n = 1, ce n’est rien d’autre que la loi de Bernoulli B(1; p).
2. La loi binomiale modélise toutes les situations qui s’apparentent à un tirage avec
remise.
3. La loi binomiale sera utilisée dans les approximations.
4. La figure 4.3 montre le graphe de la densité de probabilité pour différentes valeurs du
paramètre n, le paramètre p étant égal à 0,5.
5. La figure 4.4 montre le graphe de la densité de probabilité pour différentes valeurs du
paramètre p, le paramètre n étant égal à 20.
Proposition 4.12 Si la v.a. X suit la loi B(n X ; p) et la v.a. Y la loi B(n Y ; p), et si X et Y sont
indépendantes alors la v.a. (X + Y ) suit la loi B(n X + n Y ; p).
4.2 Variables aléatoires discrètes : cas fini 193
Proposition 4.13 L’espérance et la variance d’une variable aléatoire X suivant la loi binomiale
de paramètres n et p sont égales respectivement à :
E(X ) = np et Var (X ) = np(1 − p) = npq.
Définition 4.14 Soient N et n deux entiers naturels non nuls tels que n N et p ∈ [0; 1]
tel que N p soit entier. Une variable aléatoire X est dite suivre la loi hypergéométrique de
paramètres N, n et p, notée H(N
; n; p), si la variable aléatoire X prend la valeur k avec la
Np N −N p
k
probabilité égale à N n−k
·
n
Remarque :
1. La loi hypergéométrique modélise toutes les situations qui s’apparentent à un tirage
sans remise.
2. La loi hypergéométrique prend les valeurs entières comprises entre max(0, n − N + N p)
et min(N p, n).
3. La loi hypergéométrique permet d’estimer des tailles de population et en particulier
elle intervient dans les processus de capture-recapture.
4. La figure 4.5 montre le graphe de la densité de probabilité pour différentes valeurs du
paramètre N , avec n = 10 et p = 0,5.
5. La figure 4.6 montre le graphe de la densité de probabilité pour différentes valeurs du
paramètre n, avec N = 20 et p = 0,5.
Proposition 4.15 L’espérance et la variance d’une variable aléatoire X suivant la loi hypergéo-
métrique de paramètres N , n, p sont égales respectivement à :
N −n N −n
E(X ) = np et Var (X ) = np(1 − p) = npq , où q = 1 − p.
N −1 N −1
Remarque :
1. L’espérance de la loi hypergéométrique H(N ; n; p) est égale à l’espérance de la loi
binomiale B(n; p).
2. Vous pourrez consulter l’ouvrage Mathématiques L1/L2 : Statistique et Probabilités en 30 fiches de D. Fredon, M.
Maumy-Bertrand et F. Bertrand, Dunod, 2009, et plus particulièrement l’exercice Capture-recapture de la fiche
11 pour de plus amples détails sur cette procédure.
194 4 • Lois de probabilités usuelles
Définition 4.16 Soit p ∈]0; 1[. Une variable aléatoire X est dite suivre la loi géométrique de
paramètre p, notée G( p), si la variable aléatoire X prend la valeur k 1 avec la probabilité
égale à (1 − p)k−1 p.
Remarque :
1. Cette loi est aussi appelée loi de Pascal.
2. Cette loi sert généralement lorsque vous vous intéressez au temps d’attente du premier
succès, c’est-à-dire au nombre d’essais nécessaires pour obtenir un succès, lors d’une
succession d’expériences aléatoires indépendantes n’ayant que deux issues possibles :
le succès avec une probabilité p et l’échec avec une probabilité 1 − p.
3. La loi géométrique est parfois utilisée pour modéliser des durées de vie. Par exemple,
la loi géométrique est le modèle discret de la mort d’une particule radioactive. La loi
géométrique est la version discrète d’une loi absolument continue : la loi exponentielle
que vous allez rencontrer par la suite dans ce chapitre.
4. La figure 4.7 montre le graphe de la densité de probabilité pour différentes valeurs du
paramètre p.
4.3 Variables aléatoires discrètes : cas infini 195
Proposition 4.17 L’espérance et la variance d’une variable aléatoire X suivant la loi géomé-
trique de paramètre p sont égales respectivement à :
1 1− p
E(X ) = et Var (X ) = ·
p p2
Définition 4.18 Soit l > 0. Une variable aléatoire X est dite suivre la loi de Poisson de
paramètre l, notée P(l), si la variable aléatoire X prend la valeur k avec la probabilité égale
lk
à : exp(−l) ·
k!
Remarque :
1. La loi de Poisson est utilisée pour décrire plusieurs types de phénomènes comme le
nombre d’appels reçus par un standard téléphonique pendant une période donnée, etc.
2. La loi de Poisson est encore utilisée lorsque vous étudiez le nombre d’apparitions de
certains phénomènes rares.
3. Cette loi est aussi utilisée dans les approximations. En particulier, la loi binomiale sera
approchée par la loi de Poisson.
4. La figure 4.8 montre le graphe de la densité de probabilité pour différentes valeurs du
paramètre l.
Proposition 4.19 L’espérance et la variance d’une variable aléatoire X suivant la loi de Poisson
de paramètre l sont égales respectivement à :
© Dunod – La photocopie non autorisée est un délit.
E(X ) = l et Var (X ) = l.
Remarque : c’est une loi discrète qui a son espérance égale à sa variance.
Proposition 4.20 Si la v.a. X suit la loi P(l X ) et la v.a. Y la loi P(lY ), et si X et Y sont
indépendantes alors la v.a. (X + Y ) suit la loi P(l X + lY ).
Plus généralement, si X 1 , . . . , X n sont n variables aléatoires mutuellement indépendantes
et si,
pour tout entier k ∈ [[1; n]], X k suit la loi P(l X k ) alors la variable aléatoire X k suit la
⎛ ⎞ 1kn
loi P ⎝ lXk ⎠ .
1kn
196 4 • Lois de probabilités usuelles
Définition 4.21 Une variable aléatoire X à valeurs dans R suit la loi normale centrée et
réduite, notée N (0; 1), si X est une variable continue et admet pour densité de probabilité la
fonction f X suivante :
2
1 t
f X (t) = √ exp − , pour tout t ∈ R.
2p 2
Proposition 4.22
1. Le graphe de f X a l’allure d’une courbe en cloche assez aplatie. Voir la courbe noire de
la figure 4.9.
2. La fonction de répartition de la loi normale N (0; 1), notée généralement F, est égale à :
x 2
1 t
F(x) = √ exp − dt, pour tout x ∈ R.
2p −∞ 2
Le graphe de F a l’allure d’une courbe en S assez étalée et √ est symétrique par rapport au
point (0; 1/2) et la pente de la tangente en ce point est 1/ 2p. Voir la courbe noire de la
figure 4.10.
3. Soit X une variable aléatoire qui suit la loi normale N (0; 1). Son espérance est égale à
E(X ) = 0 et sa variance à Var (X ) = 1. C’est la raison pour laquelle cette loi est appelée
centrée et réduite et est notée N (0; 1).
4. En particulier, le coefficient d’asymétrie de la loi normale N (0; 1) est nul et le coefficient
d’aplatissement de Pearson de la loi normale N (0; 1) est égal à 3.
4.4 Variables aléatoires continues 197
Définition 4.23 Soient m ∈ R et s > 0. Une variable aléatoire X à valeurs dans R suit la loi
normale de paramètres m et s, notée N (m; s), si X est une variable continue et admet pour
densité de probabilité la fonction f m,s suivante :
2
1 1 t −m
f m,s (t) = √ exp − , pour tout t ∈ R.
2ps2 2 s
Il est à noter que la loi normale est notée dans cet ouvrage N (m; s) et non N (m; s2 ). En effet,
en statistique, il est préférable d’avoir des quantités comparables et par conséquent d’utiliser
l’écart-type s et non la variance s2 . Ainsi les deux paramètres sont exprimés dans la même
unité. Il faudra donc que vous fassiez attention à la notation utilisée dans les autres livres et
dans les logiciels que vous utiliserez pour faire vos analyses. Sachez que R utilise aussi la
même convention, à savoir c’est l’écart-type qu’il faut renseigner et non la variance.
Proposition 4.24
1. Le graphe de f m,s a l’allure d’une courbe en cloche symétrique par rapport à x = m, très
pointue pour s petit, très aplatie pour s grand. Voir la figure 4.9 pour s = 1 et différentes
valeurs de m et la figure 4.11 pour m = 0 et différentes valeurs de s.
2. La fonction de densité de la loi normale N (m; s) vérifie :
Remarque : cette propriété est mise à profit dans les tables de la loi normale centrée et
réduite où elle permet de ne mentionner que les valeurs de FX correspondant aux valeurs
positives de x.
5. Soit X une variable aléatoire qui suit la loi normale N (m; s). L’espérance et la variance
sont égales respectivement à :
E(X ) = m et Var (X ) = s2 .
Définition 4.25 Soit p un entier positif. Une variable aléatoire X suit la loi de Pearson ou loi
du Khi-deux à p degrés de liberté, notée x2 ( p), si X est une variable continue et admet pour
densité de probabilité la fonction f X suivante :
⎧ t p
⎨ 1
p
p exp − t 2 −1 pour t 0
f X (t) = 2 G 2
2 2
⎩
0 pour t < 0
4.4 Variables aléatoires continues 199
+∞
où : G(r ) = t r−1 exp(−t) dt est la fonction gamma d’Euler.
0
Proposition 4.26
1. Soit X une variable aléatoire qui suit la loi du Khi-deux x2 ( p). L’espérance et la variance
sont égales respectivement à :
© Dunod – La photocopie non autorisée est un délit.
E(X ) = p et Var (X ) = 2 p.
Définition 4.27 Soit n un entier positif. Une variable aléatoire X suit la loi de Student à n
degrés de liberté, notée t(n), si X est une variable continue et admet pour densité de probabilité
200 4 • Lois de probabilités usuelles
la fonction f X suivante :
n+1
G
1 2 1
f X (t) = √ n n+1 , pour t ∈ R,
np G t2 2
2 1+
n
Remarque :
1. Ce résultat est dû à W.S. Gosset en 1908, qui a pris le pseudonyme de Student.
2. La figure 4.15 montre le graphe de la densité de probabilité f X pour différentes valeurs
du paramètre n.
Proposition 4.28
1. Soit X une variable aléatoire qui suit la loi de Student t(n). L’espérance et la variance
sont égales respectivement à :
si n 2 E(X ) = 0,
n
si n 3 Var (X ) = ·
n−2
Remarque :
1. Le fait que l’espérance mathématique est nulle, lorsque n est supérieur ou égal à 2,
est évident puisque la densité de probabilité f X est une fonction paire.
2. La variance n’est définie que si n est supérieur ou égal à 3. Elle vaut 3 lorsque n = 3
et tend vers 1 quand n → +∞.
2. Pour être plus précis, l’allure de la loi de Student est similaire à celle de la loi normale
centrée et réduite avec un étalement un peu plus fort.
3. Soit une v.a. U qui suit la loi normale N (0; 1) et X une v.a. qui suit indépendamment de
U la loi du Khi-deux x2 (n). Alors la variable aléatoire Tn = √U suit la loi de Student
X /n
t(n).
4. Pour n = 1, la loi est la loi de Cauchy. La loi de Cauchy est en fait la loi du rapport de
deux variables qui suivent chacune indépendamment la loi normale N (0; 1).
Définition 4.29 Soient n et p deux entiers positifs. Une variable aléatoire X suit la loi de
Fisher-Snedecor à n et p degrés de liberté, notée F(n; p), si X est une variable continue et
admet pour densité de probabilité la fonction f X suivante :
⎧ n + p
⎪
⎪ G n2 n−2
⎪
⎪ n t 2
⎨ n 2 p n+2 p pour t 0
f X (t) = G G p n .
⎪
⎪ 2 2 1+ t
⎪
⎪ p
⎩
0 pour t < 0
Remarque :
1. Pour faire bref, la loi de Fisher-Snedecor est abrégée en loi de Fisher.
2. Les figures 4.17 et 4.19 montrent le graphe de la densité de probabilité f X pour diffé-
rentes valeurs des paramètres n et p.
202 4 • Lois de probabilités usuelles
Proposition 4.30
1. Soit X une variable aléatoire qui suit la loi de Fisher F(n; p). L’espérance et la variance
sont égales respectivement à :
p
si p 3 E(X ) =
p−2
2 p 2 (n + p − 2)
si p 5 Var (X ) = ·
n( p − 2)2 ( p − 4)
4.4 Variables aléatoires continues 203
Définition 4.31 Soit l > 0. Une variable aléatoire X à valeurs dans [0; +∞[ suit la loi
exponentielle de paramètre l, notée E(l), si X est une variable continue et admet pour densité
de probabilité la fonction f X , représentée à la figure 4.21, suivante :
−lt
le pour t 0
f X (t) = .
0 pour t < 0
Proposition 4.32
1. La fonction de répartition d’une loi exponentielle E(l) est égale à :
1 − exp (−lx) si x 0
FX (x) = .
0 si x 0
Par exemple, la figure 4.22 montre le graphe de la fonction de répartition de lois exponen-
tielles.
Remarque : il est préférable de travailler avec la fonction de survie qui est définie par :
r (x) = 1 − FX (x) = P (X > x) .
2. Soit X une variable aléatoire qui suit la loi exponentielle E(l). L’espérance et la variance
de X sont égales respectivement à :
1 1
E(X ) = et Var (X ) = 2 ·
l l
© Dunod – La photocopie non autorisée est un délit.
4.5 APPROXIMATIONS
4.5.1 Approximation de la loi hypergéométrique par la loi binomiale
Proposition 4.33 Soit E un ensemble de N éléments, dont une proportion p de type A. n tirages
sont effectués sans remise dans E. Soit X N le nombre d’éléments de type A obtenus. La variable
aléatoire X N suit alors la loi hypergéométrique H(N ; n; p). Alors la suite (X N ) N 1 converge
en loi vers une variable aléatoire de loi binomiale B(n; p).
Remarque : ainsi, lorsque le nombre total d’éléments N devient très grand, n et p restant
fixes, effectuer des tirages sans remise revient à effectuer des tirages avec remise.
En pratique : la loi hypergéométrique H(N ; n; p) peut être approchée par la loi binomiale
B(n; p) lorsque N 10n.
Proposition 4.34 Soit l un nombre réel fixé dans R+ . Soit (X n )n1 une suite de variables
aléatoires de loi binomiale B(n; pn ) telle que lim npn = l.
n→+∞
Alors la suite (X n )n1 converge en loi vers une variable aléatoire de loi de Poisson P(l).
En pratique : la loi binomiale B(n; p) peut être approchée par la loi de Poisson P(np)
lorsque :
⎧
⎨ n 30
p 0, 1
⎩
np < 15
ou lorsque d’autres conditions précisées dans les énoncés des exercices sont vérifiées.
Remarque : dans certains cas, l’astuce sera d’approcher la loi binomiale B(n; 1 − p) et
non la loi binomiale B(n; p).
Proposition 4.35 Soit (X n )n1 une suite de variables aléatoires indépendantes de loi de Ber-
n
noulli B(1; p), où p ∈]0; 1[. Sn =
k=1 X k suit la loi binomiale B(n; p). Alors la suite
−np
√S n
np(1− p)
converge en loi vers une variable aléatoire de loi normale N (0; 1).
n1
4.5 Approximations 205
En
pratique
√ : la loi binomiale B(n; p) peut être approchée par la loi normale
N np; np(1 − p) lorsque :
⎧
⎨ n 30
np 15
⎩
np(1 − p) > 5
Correction de continuité
Si la variable aléatoire X suit la loi binomiale B(n; p), alors la variable aléatoire X prend des
valeurs
entières positives
√ entre 0 et n. Remplacer la loi binomiale B(n; p) par la loi normale
N np; np(1 − p) revient à considérer la variable aléatoire X comme une variable qui prend
donc toutes les valeurs réelles.
L’intervalle [k − 0, 5; k + 0, 5[ est l’ensemble des nombres réels qui s’arrondissent à k, c’est-à-
dire pour k ∈ [[1; n−1]], alors dans ce cas P(X = k) est remplacée par P(k−0, 5 X < k+0, 5).
Remarque : pour que la somme des valeurs approchées des P(X = k), k variant de 0
à n, soit égale à 1, P(X = 0) est alors remplacée par P(X < 0, 5) et P(X = n) par
P(n − 0, 5 X ).
EN RÉSUMÉ
Pour chacune de ces distributions, vous disposez de quatre commandes préfixées par une des
lettres d, p, q, r et suivi du nom de la distribution :
• dnomdist : il s’agit de la fonction de densité ( f X (x)) pour une distribution de probabilité
continue et de la fonction de probabilité (P[X = k]) pour une distribution de probabilité
discrète,
x
• pnomdist : il s’agit de la fonction de répartition (P[X x] = −∞ f X (t)dt) pour une
distribution de probabilité continue et de la fonction (P[X x] = kx P[X = k]) pour
une distribution de probabilité discrète,
• qnomdist : il s’agit de la fonction des quantiles, c’est-à-dire la valeur pour laquelle la
fonction de répartition atteint une certaine probabilité ; dans le cas discret, cette fonction
renvoie le plus petit entier u tel que FX (u) p où FX est la fonction de répartition de la
distribution considérée,
• rnomdist : génère des réalisations aléatoires indépendantes de la distribution nomdist.
EXERCICES
Cet exercice a un double but : vous faire manipuler à nouveau les lignes de commande qui
réalisent les graphiques et utiliser les fonctions de R qui calculent les densités de probabilité
dans le cas des variables discrètes, les fonctions de densité et les fonctions de répartition dans
le cas des variables continues. Pour représenter des densités, vous pourrez utiliser la fonction
curve. La fonction supply vous sera certainement utile.
Le but de cet exercice est de vous faire manipuler les fonctions de R les plus utiles dans le
calcul de probabilités que vous serez amené à effectuer par la suite.
Exercices 207
1) Avant de taper ces lignes de commande avec R, essayez de trouver ce qu’elles renvoient.
2) Ouvrez R et tapez-les. Indiquez ce que R vous retourne à chaque ligne de commande.
> dnorm(0)
> pnorm(2.58)
> qnorm(0.975)
> rnorm(50)
> rnorm(20,mean=10,sd=2)
> x=seq(-5,5,0.1) ;pdf=dnorm(x) ;plot(x,pdf,type="l",main="Densité de la loi
+ normale centrée et réduite")
> library(ggplot2)
> ggplot(data.frame(x=c(-5,5)),aes(x))+stat_function(fun=dnorm)+
+ ggtitle("Densité d’une loi normale centrée et réduite")+ylab("Densité")
> runif(10)
> rt(10,20)
Le but de cet exercice est de mettre en œuvre la loi binomiale et d’utiliser les différentes
lignes de commande de R qui sont associées à cette loi.
2 % des micro-ordinateurs d’un type donné tombent en panne par mois d’utilisation. Aucun
© Dunod – La photocopie non autorisée est un délit.
Le but de cet exercice est de mettre en œuvre une fois de plus la loi binomiale et d’utiliser
les différentes lignes de commande de R qui sont associées à cette loi.
Des sachets de graines de glycine blanche du Japon dont la contenance est égale à 10 grammes
sont vendus dans le commerce. Dans un sachet, il y a en moyenne 15 graines de glycine blanche
et chaque graine donne lieu au plus à un pied de glycine blanche. Les glycines blanches ont en
effet une probabilité de germination égale à 0,85.
1) Quel est le nombre minimal de sachets que le jardinier doit acheter pour voir pousser au
moins 200 pieds de glycine blanche avec une probabilité supérieure ou égale à 0,95 ?
2) Le jardinier a un budget de 100 euros pour acheter des graines de glycine blanche. Un sachet
est vendu en moyenne 4,50 euros. Combien de pieds de glycine blanche le jardinier doit-il
s’attendre à voir pousser dans son jardin ?
Le but de cet exercice est de mettre en œuvre la loi normale et d’utiliser les différentes lignes
de commande de R qui sont associées à cette loi.
La longueur des tiges de chrysanthèmes en fleurs coupées intervient dans le classement par
catégorie. Pour simplifier, vous supposerez par la suite que cette longueur sera le seul critère
de classement. Un chrysanthème sera classé en catégorie extra si la longueur de sa tige est
supérieure ou égale à 80 centimètres.
Au 1er décembre, la production d’une certaine serre est évaluée à 6 000 chrysanthèmes pour le
mois. À cette époque, les chrysanthèmes classés en catégorie extra sont payés au producteur
10 euros les dix, et les autres 6 euros les dix seulement.
La qualité de la production ayant été étudiée sur un échantillon de 100 tiges coupées de chrysan-
thèmes, nous en concluons que la longueur des tiges coupées est une variable aléatoire qui suit
la loi normale de moyenne 92 centimètres et d’écart-type 8 centimètres.
1) Quelle est la probabilité pour qu’une fleur soit classée en catégorie extra ?
Du mal à démarrer 209
2) Quelle est l’espérance mathématique du nombre de fleurs qui seront classées en catégorie
extra sur les 6 000 fleurs de la production de décembre ?
3) Quel est le mode du nombre de fleurs qui seront classées en catégorie extra sur les 6 000
fleurs de décembre ?
DU MAL À DÉMARRER
➩ Exercice 4.1 Avant de répondre à l’une des quatre questions, consultez l’aide de
la fonction curve, en tapant help(curve), et remarquez la présence d’une option
add=TRUE qui permet de superposer plusieurs courbes sur un même graphique.
1) Utilisez la fonction dbinom.
2) Utilisez la fonction dhyper.
3) Utilisez la fonction pchisq.
4) Utilisez la fonction dt.
➩ Exercice 4.2
1) Consultez l’aide de chacune des fonctions présentes dans les lignes de commande que
vous devez étudier et dont vous ignorez l’effet.
2) Exécutez les lignes de commande l’une après l’autre.
➩ Exercice 4.3
1) Pensez à une loi binomiale pour modéliser cette situation. Utilisez les fonctions dbinom
© Dunod – La photocopie non autorisée est un délit.
et pbinom pour évaluer numériquement les probabilités que vous devez calculer.
2) Utilisez la fonction qbinom.
➩ Exercice 4.4
1) Utilisez plusieurs fois la fonction qbinom pour trouver le bon n.
2) Quel est le nombre maximal de sachets que le jardinier peut acheter ? Calculez l’espé-
rance de la binomiale associée.
➩ Exercice 4.5
1) Utilisez la fonction pnorm.
2) Montrez que le nombre de fleurs classées extra suit une loi binomiale dont vous
déterminerez les paramètres. Calculez l’espérance de cette loi.
210 4 • Lois de probabilités usuelles
Exercice 4.1 Le vecteur couleurs servira à spécifier la couleur ou le niveau de gris des
courbes de chaque graphique. L’utilisation des niveaux de gris, produits par la fonction gray,
permet de reproduire exactement les figures de ce chapitre.
Il suffit de changer le vecteur couleurs pour créer des figures en couleurs sans avoir à modifier
aucune des autres lignes de commande.
> couleurs<-c("black","red","green","blue")
Vous pouvez obtenir la liste des couleurs existantes en exécutant la commande colours() et
modifier le vecteur couleurs avec les couleurs que vous aurez choisies vous-même.
Les graphiques associés aux lois discrètes sont plus difficiles à obtenir.
1) La figure 4.3.
2) La figure 4.5.
Solution des exercices 211
3) La figure 4.14.
+ col=couleurs[1])
> fr<-function(x) {pchisq(x,3)}
> curve(fr,from=-1,to=-0.000001,ylab="",xlab="",lty=1,lwd=3,
+ col=couleurs[3],add=T)
> curve(fr,from=0.000001,to=9,ylab="",xlab="",lty=4,lwd=3,
+ col=couleurs[3],add=T)
> fr<-function(x) {pchisq(x,2)}
> curve(fr,from=-1,to=-0.000001,ylab="",xlab="",lty=2,lwd=3,add=T,
+ col=couleurs[2])
> curve(fr,from=0.000001,to=9,ylab="",xlab="",lty=2,lwd=3,add=T,
+ col=couleurs[2])
> fr<-function(x) {pchisq(x,6)}
> curve(fr,from=-1,to=-0.000001,ylab="",xlab="",lty=4,lwd=3,add=T,
+ col=couleurs[1])
> curve(fr,from=0.000001,to=9,ylab="",xlab="",lty=1,lwd=3,add=T,
212 4 • Lois de probabilités usuelles
+ col=couleurs[4])
> legtxt<-c(expression(paste(italic(p)," = 1",sep="")),expression(
+ paste(italic(p)," = 2",sep="")),expression(paste(italic(p)," = 3",
+ sep="")),expression(paste(italic(p)," = 6",sep="")))
> legend("bottomright",legtxt,lty=c(5,2,4,1),lwd=3,col=c(couleurs[1],
+ couleurs[2],couleurs[3],couleurs[4]),cex=2,bg="white",inset=.0375)
4) La figure 4.15.
La fonction curve et l’option add=TRUE qui permet de tracer les représentations de plusieurs
B fonctions sur le même graphique.
S
U
Exercice 4.2 dnorm(0) se traduit par : quelle est la valeur de f m,s (0) ? Rappelez-vous que
la formule de la densité de probabilité pour la loi normale centrée et réduite a été énoncée dans
1 1
le cours et par conséquent que f 0,1 (0) = √ exp(0) = √ ·
2×p 2p
> dnorm(0)
[1] 0.3989423
Solution des exercices 213
1
Remarque : si vous cherchez à calculer √ avec R, tapez la ligne de commande
2×p
suivante :
> 1/sqrt(2*pi)
[1] 0.3989423
> pnorm(2.58)
[1] 0.99506
qnorm(0.975) se traduit par : quelle est la valeur de x de telle sorte que : P (X x) = 0, 975 ?
> qnorm(0.975)
[1] 1.959964
rnorm(50) va vous donner 50 réalisations issues d’une variable aléatoire qui suit la loi normale
centrée et réduite.
Remarque : ces 50 valeurs étant tirées au hasard selon la loi normale centrée et réduite,
celle que vous avez obtenues sont différentes de celles reproduites dans ce livre.
> rnorm(50)
> rnorm(20,mean=10,sd=2)
214 4 • Lois de probabilités usuelles
Remarque : là encore ces 20 valeurs sont tirées au hasard, celles que vous avez obtenues
sont encore différentes de celles du livre.
Figure 4.23
> runif(10)
Remarque : ces 10 valeurs ayant été tirées aléatoirement, celles que vous avez obtenues
sont différentes de celles du livre.
Solution des exercices 215
> rt(10,20)
Remarque : ces 10 valeurs ayant été tirées aléatoirement, celles que vous avez obtenues
sont différentes de celles du livre.
Exercice 4.3 Soit X le nombre mensuel de pannes. Comme aucun ordinateur ne tombe deux
fois en panne dans le même mois, X suit la loi binomiale de paramètres n = 150 et p = 0, 02.
1)
– Calculez la probabilité que le nombre mensuel de pannes est égal à 5. Pour cela il faut
déterminer P(X = 5). Vous allez calculer cette probabilité avec R. Pour cela, vous utilisez
la fonction dbinom, d pour la fonction de probabilité, dans le cas d’une loi discrète, et
binom car le nombre de pannes X suit une loi binomiale comme cela a été mentionné
ci-dessus.
> dbinom(5,150,0.02)
[1] 0.1011484
– Calculez la probabilité que le nombre mensuel de pannes est au plus égal à 3. Pour cela, il
faut déterminer P (X 3). Vous allez calculer cette probabilité avec R. Pour cela, il faut
utiliser la fonction pbinom, car ici il faut cumuler les probabilités de 0 à 3.
216 4 • Lois de probabilités usuelles
> pbinom(3,150,0.02)
[1] 0.6472395
> qbinom(0.99,150,0.02)
[1] 8
Exercice 4.4 Soit N le nombre de pieds de glycine blanche qui fleurissent. N suit la loi
binomiale de paramètres n ici inconnu et p égal à 0,85.
1) Vous devez déterminer le nombre minimal de sachets que le jardinier doit acheter
pour voir pousser au moins 200 pieds de glycine dans son jardin avec une probabilité
supérieure ou égale à 0,95. En fait, vous cherchez non pas un k comme dans l’exercice
précédent, mais le plus petit paramètre n tel que P (N 200) 0, 95 ou de manière
équivalente, car la loi binomiale est discrète, P(N > 199) 0, 95. Pour cela, vous allez
procéder par tâtonnement. Il est certain que n doit être plus grand que 200. Donc, tapez la
commande qbinom(0.95,n,0.85,lower.tail=FALSE) en remplaçant n par des valeurs
plus grandes que 200. L’option lower.tail=FALSE permet de calculer la probabilité d’excès
Solution des exercices 217
P(N > x) = 1 − FN (x) ou le quantile d’ordre a associé et défini par le plus petit x tel que
P(N x) a. Ainsi vous cherchez le plus petit n tel que : qbinom(0.95,n,0.85).
Par exemple, en remplaçant n par 230 :
> qbinom(0.95,230,0.85,lower.tail=FALSE)
et vous obtenez :
[1] 186
ce qui est inférieur à 200. Ceci signifie que P(N 186) 0,95 et P(N 187) < 0,95 donc a
fortiori P(N 200) < 0,95. Il faut donc augmenter n. Vous recommencez avec :
> qbinom(0.95,240,0.85,lower.tail=FALSE)
et vous obtenez :
[1] 195
> qbinom(0.95,246,0.85,lower.tail=FALSE)
et vous obtenez :
[1] 200
© Dunod – La photocopie non autorisée est un délit.
Donc, le jardinier doit acheter 246 graines de glycine blanche, soit 17 sachets puisque 15*17 =
255.
Vous auriez également pu procéder graphiquement en exécutant les lignes de commande sui-
vantes :
> plot(230:250,qbinom(0.95,230:250,0.85,lower.tail=FALSE))
> abline(h=200)
> abline(v=246)
Avec les deux dernières lignes, vous tracez la ligne horizontale d’ordonnée 200 et la ligne
verticale d’abscisse 246. Vous devinez donc sur le graphique que 246 semble être la solution
de notre problème. Si vous voulez le confirmer, il faut faire le dernier calcul ci-dessus et vous
devrez exécuter la commande qbinom(0.95,246,0.85,lower.tail=FALSE).
218 4 • Lois de probabilités usuelles
2) Avec 100 euros, il peut acheter 22 sachets. En effet, 22 sachets à 4,50 euros donnent un
montant de 99 euros. Il restera au jardinier un euro. Avec ces 22 sachets, il a (22*15=) 330
graines de glycine à sa disposition. Comme N , qui représente le nombre de pieds de glycine
blanche qui fleurissent, suit la loi binomiale de paramètres n = 330 et p = 0, 85 , le jardinier
peut s’attendre à voir pousser une moyenne (une espérance) égale à (330*0,85=) 280,5 pieds de
glycine blanche ou encore 280 pieds de glycine blanche dans son jardin.
Si l’utilisation de la moyenne peut sembler pertinente, ce qui nous fait nous interroger dans ce
cas est la valeur non entière de 280,5 que nous obtenons et qui ne représente rien de réel car le
jardinier n’aura jamais 280,5 pieds de glycines fleuris dans son jardin. Lorsque nous cherchons
à prédire une seule valeur d’une variable, une information plus pertinente est apportée par le
ou les modes de la loi de cette variable. En effet, un mode d’une variable aléatoire correspond
à une valeur que cette variable aura le plus de chances de prendre (soit la probabilité la plus
élevée pour une variable aléatoire discrète, soit la densité de probabilité la plus élevée pour une
variable aléatoire continue). Pour déterminer le ou les modes de la loi binomiale de paramètres
n = 330 et p = 0,85, exécutons la commande suivante qui donne l’indice du vecteur contenant
les valeurs de densité P(X = k) de la loi binomiale de paramètres n = 330 et p = 0,85 pour k
allant de 0 à 330.
> which.max(dbinom(0:330,330,.85))
[1] 282
Il faut alors faire attention car les valeurs de k vont de 0 à 330 et celles des indices du
vecteur vont de 1 à 331. Par conséquent, l’élément à l’indice 282 correspond à une valeur de
k = 282 − 1 = 281. Le mode de la distribution est 281 : le nombre de pieds de glycines fleuris
que le jardinier a la plus grande probabilité d’observer est donc 281.
Les deux lignes de commande suivantes permettent d’obtenir ce résultat par une lecture
graphique.
> plot(0:330,dbinom(0:330,330,.85),xlab="n",ylab="Probabilité",lwd=2)
> plot(270:285,dbinom(270:285,330,.85),xlab="n",ylab="Probabilité",lwd=2)
> abline(v=281)
Solution des exercices 219
Figure 4.24
La fonction qbinom.
B
S
U
Exercice 4.5
1) Soit X la variable aléatoire égale à la longueur en cm de la tige d’un chrysanthème pris
au hasard. La fleur est classée en catégorie extra si X 80. Comme X suit la loi normale
d’espérance m = 92 et d’écart-type s = 8, vous devez calculer P (X 80). Pour cela, vous
allez utiliser R en vous rappelant que R ne calcule que des probabilités égales à P (X x). Vous
allez donc faire la transformation classique qui consiste à écrire que :
∀x ∈ R, P (X > x) = 1 − P (X x) .
Vous allez donc taper la ligne de commande suivante pour obtenir le résultat souhaité :
> 1-pnorm(80,92,8)
[1] 0.9331928
La probabilité pour qu’une fleur soit classée en catégorie extra est égale à 0, 9331928.
2) Vous devez déterminer l’espérance mathématique du nombre de fleurs qui seront classées en
catégorie extra sur les 6 000 fleurs de la production de décembre. Soit N le nombre de fleurs
220 4 • Lois de probabilités usuelles
classées extra qui suit la loi binomiale de paramètres n = 6 000 et p = 0, 9331928. L’espérance
mathématique de N est donc égale à :
Vous tapez la ligne de commande suivante afin d’être certain de ne pas commettre d’erreur
d’arrondi :
> (1-pnorm(80,92,8))*6000
[1] 5599.157
La fonction pnorm. Il est possible que vous ayez à calculer le paramètre p d’une loi binomiale
B à partir d’une autre distribution. Par exemple, lorsque vous transformez une caractéristique
S
U
continue, la taille, en une qualité binaire, dépasser une taille de référence ou non.
[1] 5601
Il faut alors faire attention car les valeurs de k vont de 0 à 6 000 et celles des indices du
vecteur vont de 0 à 6 001. Par conséquent, l’élément à l’indice 5 601 correspond à une valeur
de k = 5 601 − 1 = 5 600. Le mode de la distribution est 5 600 : le nombre de fleurs que le
jardinier a la plus grande probabilité d’observer est donc 5 600.
Les lignes de commande suivantes permettent d’obtenir ce résultat par une lecture graphique
puis par une évaluation des probabilités pour k = 5 599 et k = 5 600 car celles-ci sont
indiscernables sur le graphique :
> plot(0:6000,dbinom(0:6000,6000,.9331928),xlab="n",ylab="Probabilité"
+ ,lwd=2)
> plot(5500:5700,dbinom(5500:5700,6000,.9331928),xlab="n",
+ ylab="Probabilité",lwd=2)
> plot(5590:5610,dbinom(5590:5610,6000,.9331928),xlab="n",
+ ylab="Probabilité",lwd=2)
> dbinom(5599,6000,.9331928)
Solution des exercices 221
[[1] 0.02061832
> dbinom(5600,6000,.9331928)
[1] 0.02062328
Figure 4.25
Chapitre 5
Do not put your faith in what statistics say until you have carefully considered what they do
not say.
De William W. Watt.
Objectifs de ce chapitre
➤ décrire une série statistique à double entrée
➤ faire des représentations graphiques d’une série statistique à double entrée
➤ donner des résumés numériques d’une série statistique à double entrée
➤ présenter les différents types de liaison qui peuvent exister entre deux variables
X Y
Individu 1 X1 Y1
Individu 2 X2 Y2
... ... ...
Individu N XN YN
Définition 5.1 L’effectif du couple (xi , y j ) est égal au nombre n i, j de couples de valeurs égaux
à (xi , y j ), c’est à dire le cardinal de (X , Y )−1 (xi , y j ).
n i, j
Définition 5.2 La fréquence du couple (xi , y j ) est égal au nombre f i, j = ·
N
Définition 5.3 (xi , y j ), n i, j i=1,..., p et (xi , y j ), f i, j i=1,..., p sont la distribution des effectifs
j=1,...,q j=1,...,q
et la distribution des fréquences du couple (X , Y ).
Définition 5.4 Le tableau de contingence est un tableau qui croise les différentes modalités
des deux variables.
X /Y y1 ... y j ... yq Total
x1 n 1,1 ... n 1, j ... n 1,q n 1,•
: : : : : : :
xi n i,1 ... n i, j ... n i,q n i,•
© Dunod – La photocopie non autorisée est un délit.
: : : : : : :
xp n p,1 ... n p, j ... n p,q n p,•
Total n •,1 ... n •, j ... n •,q N
espece
graines bignone glycine blanche glycine violette laurier rose
1 0 7 4 0
2 0 19 22 0
3 0 11 16 0
4 0 10 6 0
5 0 5 5 0
6 0 1 1 0
7 0 1 2 0
Avec R 3.4.0, des changements ont été apportés à la gestion des valeurs manquantes par la
fonction table. L’argument useNA permet de préciser à R s’il doit reporter le nombre de
valeurs manquantes. Si useNA="no" alors le nombre de valeurs manquantes n’est jamais
reporté ; si useNA="ifany" alors le nombre de valeurs manquantes est reporté s’il est
non nul, c’est-à-dire en présence de valeurs manquantes ; si useNA="always" alors les
valeurs manquantes sont toujours reportées. Par exemple dans notre cas :
> table(graines,espece,useNA="ifany")
espece
graines bignone glycine blanche glycine violette laurier rose
1 0 7 4 0
2 0 19 22 0
3 0 11 16 0
4 0 10 6 0
5 0 5 5 0
6 0 1 1 0
7 0 1 2 0
<NA> 70 0 0 72
Notez que vous avez utilisé ci-dessus la fonction attach que vous avez découverte dans
l’exercice 3 du chapitre 3. N’oubliez pas que lorsque vous utilisez cette commande,
vous mettez le fichier en mémoire dans R. Ensuite, pour l’annuler, il faut utiliser la
fonction detach, rencontrée elle aussi dans le même exercice.
Mais les deux colonnes où figurent les zéros sont inutiles. Donc pour les enlever, vous
devez procéder comme vous l’avez déjà fait dans le chapitre 2.
> (table.cont<-table(factor(graines),espece,dnn=c("nbr.graines",
+ "espece"),exclude=c("bignone","laurier rose")))
5.2 Distributions conjointe, marginale et conditionnelle 225
espece
nbr.graines glycine blanche glycine violette
1 7 4
2 19 22
3 11 16
4 10 6
5 5 5
6 1 1
7 1 2
<NA> 0 0
Le nombre de valeurs manquantes présentes apparaît dans cette sortie car nous avons
utilisé l’argument exclude qui par défaut les exclut. Pour les supprimer nous pouvons
soit ajouter l’argument useNA="no", soit ajouter NA au vecteur des niveaux qui doivent
être exclus de l’analyse exclude=c("bignone","laurier rose",NA).
> (table.cont<-table(factor(graines),espece,dnn=c("nbr.graines",
+ "espece"),exclude=c("bignone","laurier rose"),useNA="no"))
espece
nbr.graines glycine blanche glycine violette
1 7 4
2 19 22
3 11 16
4 10 6
5 5 5
6 1 1
7 1 2
© Dunod – La photocopie non autorisée est un délit.
> library(ggplot2)
> ggplot(Mesures,aes(x=masse,y=taille,color=espece))+geom_{}point(size=3,
+ shape=19)+ggtitle("Taille en fonction de la masse par espèce")
> ggplot(Mesures,aes(x=masse,y=taille,shape=espece))+geom_{}point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_{}bw()
226 5 • Statistiques descriptives bivariées
Espèce
Taille
Masse
Figure 5.1A
Vous pouvez ajouter les totaux des lignes et des colonnes dans les marges du tableau de
la manière suivante :
> addmargins(table.cont)
espece
nbr.graines glycine blanche glycine violette Sum
1 7 4 11
2 19 22 41
3 11 16 27
4 10 6 16
5 5 5 10
6 1 1 2
7 1 2 3
Sum 54 56 110
5.2 Distributions conjointe, marginale et conditionnelle 227
La fonction addmargins permettra d’ajouter à ce tableau, dans les marges, les totaux
B des fréquences de chaque ligne et de chaque colonne.
S
U
Pour calculer la distribution des fréquences et l’afficher avec une précision minimale de
trois chiffres, il suffit de taper la commande suivante :
> print(prop.table(table.cont),digits=3)
espece
nbr.graines glycine blanche glycine violette
1 0.06364 0.03636
2 0.17273 0.20000
3 0.10000 0.14545
4 0.09091 0.05455
5 0.04545 0.04545
6 0.00909 0.00909
7 0.00909 0.01818
p
p
q
q
p
q
I
J
n i,• = n i, j = n i, j = n •, j = N et f i,• = f •, j = 1.
i=1 i=1 j=1 j=1 i=1 j=1 i=1 j=1
Définition 5.8 (xi , n i,• )i=1,..., p et (y j , n •, j ) j=1,...,q (respectivement (xi , f i,• )i=1,..., p et
(y j , f •, j ) j=1,...,q ) sont appelées les distributions marginales des effectifs (respectivement des
fréquences) de X et de Y .
Exemple : pour calculer les effectifs marginaux de la variable graines puis de la variable
espece du jeu de données Mesures5, vous allez utiliser la fonction margin.table.
Tapez donc la ligne de commande suivante :
> margin.table(table.cont,1)
228 5 • Statistiques descriptives bivariées
nbr.graines
1 2 3 4 5 6 7
11 41 27 16 10 2 3
> margin.table(table.cont,2)
espece
glycine blanche glycine violette
54 56
Pour obtenir les distributions marginales des fréquences de la variable graines puis de
la variable espece du jeu de données Mesures5, exécutez les deux lignes de commande
suivantes :
> margin.table(prop.table(table.cont),1)
nbr.graines
1 2 3 4 5
0.10000000 0.37272727 0.24545455 0.14545455 0.09090909
6 7
0.01818182 0.02727273
> margin.table(prop.table(table.cont),2)
espece
glycine blanche glycine violette
0.4909091 0.5090909
Dans le cas où vous observez des caractères quantitatifs, il peut s’avérer intéressant de résu-
mer l’information des distributions marginales à l’aide des caractéristiques usuels de position
(moyenne, médiane. . .) et de dispersion (écart-type, étendue. . .) d’une variable unidimension-
nelle.
Définition 5.9 Les moyennes marginales des variables X et Y sont les quantités respectivement
définies par :
1 1
p p q q
m(X ) = n i,• xi = f i,• xi et m(Y ) = n •, j y j = f •, j y j .
N N
i=1 i=1 j=1 j=1
5.2 Distributions conjointe, marginale et conditionnelle 229
Définition 5.10 Les variances marginales des variables X et Y sont les quantités respective-
ment définies par :
1
p p
2
s (X ) = n i,• (xi − m(X )) =
2
f i,• xi2 − m2 (X )
N
i=1 i=1
et :
1
q q
s2 (Y ) = n •, j (y j − m(Y ))2 = f •, j y 2j − m2 (Y ).
N
j=1 j=1
espece
nbr.graines glycine blanche glycine violette
1 0.6363636 0.3636364
2 0.4634146 0.5365854
3 0.4074074 0.5925926
4 0.6250000 0.3750000
5 0.5000000 0.5000000
6 0.5000000 0.5000000
7 0.3333333 0.6666667
230 5 • Statistiques descriptives bivariées
> prop.table(table.cont,2)
espece
nbr.graines glycine blanche glycine violette
1 0.12962963 0.07142857
2 0.35185185 0.39285714
3 0.20370370 0.28571429
4 0.18518519 0.10714286
5 0.09259259 0.08928571
6 0.01851852 0.01785714
7 0.01851852 0.03571429
Pour chacune des distributions conditionnelles, vous pouvez avoir besoin, comme pour les
distributions marginales, de résumer l’information via les caractéristiques usuelles de position
et de dispersion d’un caractère unidimensionnel.
Définition 5.14 La moyenne conditionnelle et la variance conditionnelle de la variable X
sachant que Y = y j , sont les quantités respectivement définies par :
1
p p
m j (X ) = n i, j xi = f i/ j xi ,
n •, j
i=1 i=1
et :
1
p p
s2j (X ) = n i, j (xi − m j (X ))2 = f i/ j xi2 − m j (X )2 .
n •, j
i=1 i=1
Remarque : vous pouvez aussi définir la moyenne conditionnelle et la variance condi-
tionnelle de la variable Y sachant que X = xi .
– Distribution conjointe
Lorsque vous disposez d’un tableau de contingence, la représentation graphique de la loi
jointe est réalisée à l’aide d’un stéréogramme (représentation en 3D). Dans le cas de
données brutes, vous représentez le diagramme de dispersion : dans un repère cartésien,
chaque observation (xk ; yk ) est représentée par un point Mk de coordonnées (xk ; yk ).
Ce type de graphique est particulièrement important pour l’étude d’une éventuelle liaison
entre les deux variables.
Remarque : lorsque vous disposez d’un tableau de contingence croisant deux variables
quantitatives, il est possible de représenter le diagramme de dispersion.
Pour cela, vous remplacez les données brutes par les centres de classes, puis vous repré-
sentez, pour chaque point, un cercle coloré centré sur le point dont le diamètre est propor-
tionnel à la fréquence f i, j .
232 5 • Statistiques descriptives bivariées
f i, j = f i,• × f •, j .
La fonction cov vous permet de calculer la covariance entre deux variables quantitatives.
B
S
U
Proposition 5.19 Si les deux variables aléatoires X et Y sont indépendantes, alors la covariance
du couple (X , Y ) est nulle.
La réciproque de cette proposition est fausse. Il existe des exemples pour lesquels Cov(X, Y) = 0
sans que les variables aléatoires soient indépendantes. Par conséquent, la covariance n’est pas
une mesure de la dépendance. En fait, la covariance mesure uniquement la dépendance linéaire.
L’intensité de cette dépendance s’effectue via un nombre sans dimension : le coefficient de
corrélation linéaire.
Définition 5.22 Le coefficient de corrélation linéaire observé est le nombre défini par :
n
(xi − x n )(yi − y n )
Cov(x, y) i=1
r (x, y) = =
n ·
s(x)s(y)
n
(xi − x n )2 (yi − y n )2
i=1 i=1
[1] 24.80598
Vous souhaitez calculer la corrélation entre la variable masse et la variable taille. Pour
cela, tapez la ligne de commande suivante :
> cor(masse,taille)
[1] 0.7520708
Les fonctions cov et cor peuvent s’utiliser sur des objets de classe tableau de données ou
B matrice. Le résultat obtenu est alors la matrice des covariances, ou des corrélations, entre les
S
U
différentes variables prises deux par deux.
234 5 • Statistiques descriptives bivariées
Proposition 5.24 Si les deux variables aléatoires X et Y sont indépendantes, alors le rapport
de corrélation théorique h2Y |X est nul.
Remarque :
1. Ce coefficient est parfois appelé le rapport de corrélation théorique en opposition avec
le rapport de corrélation empirique qui va être défini ci-dessous.
2. Ne confondez pas ce coefficient avec le coefficient de corrélation linéaire théorique.
p
2
ni yi − y n
i=1
h2Y |X ,obs = ,
ns y2
où :
p # 2 $
ns y2 = ni yi − yn + si2
i=1
et les si2 sont les variances de la variable quantitative Y à l’intérieur de chaque modalité.
1
p
2
Définition 5.26 n i y i − y n est appelée la variance inter-modalités (variance expli-
n
i=1
1 2
p
quée par la variable qualitative) et n i si est appelée la variance intra-modalités (variance
n
i=1
résiduelle).
5.5 Liaison entre deux variables 235
> eta2(Mesures5$taille,Mesures5$espece)
[1] 0.1195181
Remarque :
1. Le coefficient d’association x2 a été défini ci-dessus dans le cas d’un échantillon. Il
© Dunod – La photocopie non autorisée est un délit.
> plot(taille~masse,col=rainbow(4)[espece],pch=19,data=Mesures)
> legend("bottomright",levels(Mesures$espece),pch=19,col=rainbow(4))
> title("Taille en fonction de la masse par espèce")
Dans un document en noir et blanc, il est préférable de distinguer les individus à l’aide de
symboles différents grâce à l’option pch de la fonction plot :
> plot(taille~masse,pch=1:4,data=Mesures)
> legend("bottomright",levels(Mesures$espece),pch=1:4)
> title("Taille en fonction de la masse par espèce")
Masse
Figure 5.1B
5.6 Et si vous avez plus que deux variables 237
La bibliothèque lattice permet d’obtenir cette même représentation ainsi que d’autres plus
complexes que vous allez découvrir maintenant. Les symboles et couleurs utilisés par défaut par
la bibliothèque lattice peuvent être affichés en exécutant les lignes de commande suivantes :
> library(lattice)
> show.settings()
Figure 5.2
Vous constatez que les graphiques qui sont réalisés par la bibliothèque lattice sont en couleurs.
© Dunod – La photocopie non autorisée est un délit.
Il est toutefois très facile de spécifier que la création des graphiques doit se faire en noir et blanc
en modifiant le thème utilisé par la bibliothèque lattice. Dans ce cas, les symboles et niveaux
de gris sont :
> show.settings(x=standard.theme(color=FALSE))
> lattice.options(default.theme=standard.theme(color=FALSE))
238 5 • Statistiques descriptives bivariées
Figure 5.3
> lattice.options(default.theme=NULL)
> trellis.device(theme=standard.theme(color=FALSE))
> trellis.device(color=FALSE)
Dans la suite de ce chapitre, les graphiques ont tous été créés en noir et blanc après l’exécution
de la commande :
> lattice.options(default.theme=standard.theme(color=FALSE))
5.6 Et si vous avez plus que deux variables 239
> xyplot(taille~masse,groups=espece,auto.key=list(corner=c(1,0)),
+ main="Taille en fonction de la masse par espèce",data=Mesures)
Masse
Figure 5.4
© Dunod – La photocopie non autorisée est un délit.
Il est également possible de représenter séparément les nuages de points associé à chacune des
espèces.
> xyplot(taille~masse|espece,groups=espece,data=Mesures)
> xyplot(taille~masse|espece,groups=espece,scales="free",data=Mesures)
Taille
Figure 5.5
Masse
Taille
Figure 5.6
Masse
5.6 Et si vous avez plus que deux variables 241
Pour vous faire une idée de la nature de la relation entre la taille et la masse pour chacune des
espèces, vous allez ajouter un nouvel élément1 à chacun des panneaux du graphique.
> xyplot(taille~masse|espece,data=Mesures,groups=espece,
+ prepanel=function(x,y) prepanel.loess(x,y,span=1),
+ panel=function(x,y,subscripts,groups) {
+ panel.grid(h=-1,v=2)
+ panel.xyplot(x,y,pch=groups[subscripts])
+ panel.loess(x,y,span=1,lwd=2,
+ pch=groups[subscripts])})
Masse
Figure 5.7
> xyplot(taille~masse|espece,data=Mesures,groups=espece,scales="free",
+ prepanel=function(x,y) prepanel.loess(x,y,span=1),
+ panel=function(x,y,subscripts,groups) {
1. Plus précisément, il s’agit d’une courbe de régression obtenue par une régression polynomiale locale.
242 5 • Statistiques descriptives bivariées
+ panel.grid(h=-1,v=2)
+ panel.xyplot(x,y,pch=groups[subscripts])
+ panel.loess(x,y,span=1,lwd=2,pch=groups[subscripts])})
Masse
Figure 5.8
Enfin, voici comment représenter simultanément, en fonction d’une même variable, plusieurs
autres variables.
> xyplot(masse+masse_sec~taille|espece,data=Mesures5,scales="free",
+ layout=c(2,2),auto.key=list(x=-.01,y=.37,corner=c(0,0)))
> xyplot(masse+masse_sec~taille|espece,data=Mesures5,scales="free",
+ layout=c(2,2),auto.key=list(x=-.01,y=.37,points=FALSE,
+ col=c("black","grey50"),font=2,corner=c(0,0)),
+ panel=function(x,y,subscripts,groups) {
5.6 Et si vous avez plus que deux variables 243
+ panel.grid(h=-1,v= 2)
+ panel.xyplot(x,y,pch=19,col=c("black",
+ "grey50")[groups[subscripts]])})
> dev.off()
> lattice.options(default.theme=NULL)
> xyplot(taille~masse|espece,groups=espece,data=Mesures,pch=19)
> xyplot(taille~masse|espece,groups=espece,scales="free",data=Mesures
+ ,pch=19)
> xyplot(taille~masse|espece,data=Mesures,groups=espece,
+ prepanel=function(x,y) prepanel.loess(x,y,span=1),
+ panel=function(x,y,subscripts,groups) {
+ panel.grid(h=-1,v=2)
+ panel.xyplot(x,y,pch=19,col=groups[subscripts])
+ panel.loess(x,y,span=1,lwd=2,col=groups[subscripts])})
> xyplot(taille~masse|espece,data=Mesures,groups=espece,scales="free",
+ prepanel=function(x,y) prepanel.loess(x,y,span=1),
+ panel=function(x,y,subscripts,groups) {
+ panel.grid(h=-1,v=2)
© Dunod – La photocopie non autorisée est un délit.
+ panel.xyplot(x,y,pch=19,col=groups[subscripts])
+ panel.loess(x,y,span=1,lwd=2,col=groups[subscripts])})
> xyplot(masse+masse_sec~taille|espece,data=Mesures5,scales="free",
+ layout=c(2,2),auto.key=list(x=-.01,y=.37,corner=c(0,0)))
> xyplot(masse+masse_sec~taille|espece,data=Mesures5,scales="free",
+ layout=c(2,2),auto.key=list(x=-.01,y=.37,points=FALSE,
+ col=c("black","red"),corner=c(0,0)),
+ panel=function(x,y,subscripts,groups) {
+ panel.grid(h=-1,v= 2)
+ panel.xyplot(x,y,pch=19,col=groups[subscripts])})
244 5 • Statistiques descriptives bivariées
Masse + masse_sec
Figure 5.9
Taille
Masse + masse_sec
Figure 5.10
Taille
5.6 Et si vous avez plus que deux variables 245
Voici à titre d’exemple, les codes permettant de construire les figures précédentes avec la
bibliothèque ggplot2. Tout d’abord en noir et blanc.
> ggplot(Mesures,aes(x=masse,y=taille,shape=espece))+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()+
+ theme(legend.position="bottom")
> ggplot(Mesures,aes(x=masse,y=taille,shape=espece))+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()+
+ facet_wrap(~espece)
> ggplot(Mesures,aes(x=masse,y=taille,shape=espece))+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()+
+ facet_wrap(~espece,scales = "free")
> ggplot(Mesures,aes(x=masse,y=taille,shape=espece))+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()+
+ facet_wrap(~espece)+ stat_smooth(color="grey50")
> ggplot(Mesures,aes(x=masse,y=taille,shape=espece))+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()+
+ facet_wrap(~espece,scales = "free")+stat_smooth(color="grey50")
> ggplot(Mesures5,aes(x=taille,y=masse,shape=espece))+
+ geom_point(aes(x=taille,y=masse_sec),color="gray50")+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()+
+ facet_wrap(~espece,scales = "free")+stat_smooth(color="black")+
+ stat_smooth(aes(x=taille,y=masse_sec),color="grey50")
Remarque : notez que les deux orthographes de « grey » sont acceptées par R : grey ou
gray !
Pour faire apparaître les deux variables dans la légende en plus des groupes liés aux espèces,
utilisons la bibliothèque reshape.
© Dunod – La photocopie non autorisée est un délit.
> library(reshape)
> Mesures5.long <- melt(Mesures5, id = c("taille","espece"),
+ measure = c("masse", "masse_sec"))
> ggplot(Mesures5.long,aes(x=taille,y=value,shape=espece,
+ color=variable))+geom_point()+ggtitle("Taille en fonction de la
+ masse par espèce")+theme_bw()+facet_wrap(~espece,scales = "free")+
+ stat_smooth(aes(color=variable))+scale_color_grey(start=.1,end=.5)
246 5 • Statistiques descriptives bivariées
Figure 5.11
En couleur maintenant.
> ggplot(Mesures,aes(x=masse,y=taille,color=espece))+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()
> ggplot(Mesures,aes(x=masse,y=taille,color=espece))+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()+
+ facet_wrap(~espece)
> ggplot(Mesures,aes(x=masse,y=taille,color=espece))+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()+
+ facet_wrap(~espece,scales = "free")
> ggplot(Mesures,aes(x=masse,y=taille,color=espece))+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()+
+ facet_wrap(~espece)+stat_smooth()
> ggplot(Mesures,aes(x=masse,y=taille,color=espece))+geom_point()+
+ ggtitle("Taille en fonction de la masse par espèce")+theme_bw()+
+ facet_wrap(~espece,scales = "free")+stat_smooth()
> ggplot(Mesures5,aes(x=taille,y=masse,color=espece))+
+ geom_point(aes(x=taille,y=masse_sec,color=espece),shape=22)+
+ geom_point(shape=19)+ggtitle("Taille en fonction de la masse
+ par espèce")+theme_bw()+facet_wrap(~espece,scales = "free")+
+ stat_smooth()+stat_smooth(aes(x=taille,y=masse_sec))
Exercices 247
Pour faire apparaître les deux variables dans la légende en plus des groupes liés aux espèces,
utilisons la bibliothèque reshape.
> library(reshape)
> ggplot(Mesures5.long,aes(x=taille,y=value,color=variable,
+ shape=espece))+geom_point()+ggtitle("Taille en fonction de la
+ masse par espèce")+theme_bw()+facet_wrap(~espece,scales =
+ "free")+stat_smooth(aes(color=variable))
EN RÉSUMÉ
Commande Description
attach(s) Attache le tableau de données s en mémoire.
Les colonnes de s sont alors directement accessibles.
detach(s) Détache le tableau de données s en mémoire.
Les colonnes de s ne sont alors plus directement accessibles.
addmargins(s) Ajoute au tableau de contingence les distributions
marginales des effectifs.
margin.table(s) Calcule l’effectif total du tableau.
prop.table(s) Calcule la distribution des fréquences associée
au tableau de contingence.
margin.table(s, 1) Calcule la distribution marginale des effectifs
des lignes du tableau de contingence.
prop.table(s, 1) Calcule la distribution marginale des fréquences
des lignes du tableau de contingence.
margin.table(s, 2) Calcule la distribution marginale des effectifs
© Dunod – La photocopie non autorisée est un délit.
EXERCICES
> outer(1:6,1:6,"+")
> outer(1:6,1:6,pmin)
> (effs<-table(outer(1:6,1:6,"+"),outer(1:6,1:6,pmin)))
Du mal à démarrer 249
1 2 3 4 5 6
2 1 0 0 0 0 0
3 2 0 0 0 0 0
4 2 1 0 0 0 0
5 2 2 0 0 0 0
6 2 2 1 0 0 0
7 2 2 2 0 0 0
8 0 2 2 1 0 0
9 0 0 2 2 0 0
10 0 0 0 2 1 0
11 0 0 0 0 2 0
12 0 0 0 0 0 1
Le but de cet exercice est de vous faire calculer des covariances, des corrélations linéaires de
Bravais-Pearson entre des variables quantitatives.
1) Calculez les covariances et les corrélations linéaires de Bravais-Pearson entre toutes les
variables quantitatives du tableau de données Mesures5. Que constatez-vous ?
2) Ajoutez l’option na.rm=pairwise.complete.obs lorsque vous exécutez les fonctions cov
© Dunod – La photocopie non autorisée est un délit.
DU MAL À DÉMARRER
➩ Exercice 5.1
1) Consultez l’aide de la fonction plotcdf2 en tapant help(plotcdf2).
2) Utilisez l’option f de la fonction plotcdf2.
3) Relisez l’utilisation de la fonction margin.table dans l’exemple du cours.
4) Relisez l’utilisation de la fonction prop.table dans l’exemple du cours.
250 5 • Statistiques descriptives bivariées
➩ Exercice 5.2
1) Appliquez les fonctions cov et cor aux quatre premières colonnes du tableau de
données.
2) Recommencez en suivant l’indication de l’énoncé.
Exercice 5.1
1)
> plotcdf2(Mesures5$taille,Mesures5$masse,f=0,"taille","poids",theme="bw")
Po
ids
ill e
Ta
Figure 5.12
Solution des exercices 251
> margin.table(effs)
[1] 36
Va
le
ur
du
plu
dés
sp
d es
me
eti
Som
t
Figure 5.13
> margin.table(effs,1)
252 5 • Statistiques descriptives bivariées
2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 5 4 3 2 1
> margin.table(effs,2)
1 2 3 4 5 6
11 9 7 5 3 1
> print(prop.table(margin.table(effs,1)),3)
2 3 4 5 6 7 8
0.0278 0.0556 0.0833 0.1111 0.1389 0.1667 0.1389
9 10 11 12
0.1111 0.0833 0.0556 0.0278
> print(prop.table(margin.table(effs,2)),3)
1 2 3 4 5 6
0.3056 0.2500 0.1944 0.1389 0.0833 0.0278
4)
> print(prop.table(effs,1),digit=3)
1 2 3 4 5 6
2 1.000 0.000 0.000 0.000 0.000 0.000
3 1.000 0.000 0.000 0.000 0.000 0.000
4 0.667 0.333 0.000 0.000 0.000 0.000
5 0.500 0.500 0.000 0.000 0.000 0.000
6 0.400 0.400 0.200 0.000 0.000 0.000
7 0.333 0.333 0.333 0.000 0.000 0.000
8 0.000 0.400 0.400 0.200 0.000 0.000
9 0.000 0.000 0.500 0.500 0.000 0.000
10 0.000 0.000 0.000 0.667 0.333 0.000
11 0.000 0.000 0.000 0.000 1.000 0.000
12 0.000 0.000 0.000 0.000 0.000 1.000
Solution des exercices 253
> print(prop.table(effs,2),digit=3)
1 2 3 4 5 6
2 0.091 0.000 0.000 0.000 0.000 0.000
3 0.182 0.000 0.000 0.000 0.000 0.000
4 0.182 0.111 0.000 0.000 0.000 0.000
5 0.182 0.222 0.000 0.000 0.000 0.000
6 0.182 0.222 0.143 0.000 0.000 0.000
7 0.182 0.222 0.286 0.000 0.000 0.000
8 0.000 0.222 0.286 0.200 0.000 0.000
9 0.000 0.000 0.286 0.400 0.000 0.000
10 0.000 0.000 0.000 0.400 0.333 0.000
11 0.000 0.000 0.000 0.000 0.667 0.000
12 0.000 0.000 0.000 0.000 0.000 1.000
La fonction plotcdf2 permet de construire des stéréogrammes. Vous pouvez modifier les
B couleurs du stéréogramme grâce aux options col et theme.
S
U
Exercice 5.2
1) Seules les quatre premières colonnes du tableau de données sont quantitatives.
> cov(Mesures5[,1:4])
> cor(Mesures5[,1:4])
Vous constatez que la présence de valeurs manquantes dans les variables graines et masse_sec
rend impossible le calcul des covariances et des corrélations linéaires avec ces variables.
2) L’option na.rm=pairwise.complete.obs demande à R de calculer les covariances et les
corrélations en ne considérant que les couples d’observations pour lesquels il n’y a pas de valeurs
manquantes.
> cov(Mesures5[,1:4],use="pairwise.complete.obs")
> cor(Mesures5[,1:4],use="pairwise.complete.obs")
L’option use des fonctions cov et cor permet d’indiquer à R comment tenir compte des valeurs
B manquantes présentes dans l’échantillon.
S
U
Chapitre 6
Échantillonnage.
Estimation d’un paramètre.
Estimation par intervalle de confiance
There are three kinds of lies: lies, damned lies and statistics.
De Benjamin Disraëli (1804-1881), premier ministre de la Reine Victoria.
Objectifs de ce chapitre
➤ introduire le vocabulaire de la théorie de l’échantillonnage
➤ présenter les principaux estimateurs de certaines caractéristiques ou de certains paramètres
comme la moyenne, la variance ou la proportion
➤ donner les formules des intervalles de confiance pour ces paramètres
Souvent, les analyses, en biologie par exemple, portent sur l’étude de caractères d’une popu-
lation donnée pour laquelle vous n’avez pas accès à toute l’information.
Exemple :
– Population étudiée : l’ensemble des manchots empereurs en Terre Adélie.
– Caractères étudiés : le nombre de plongeons quotidiens, la durée d’un plongeon, la
longueur du bec, la taille des ailes.
Vous allez donc souvent avoir recours au processus d’échantillonnage pour obtenir une
approximation des informations que vous cherchez.
256 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
6.1 ÉCHANTILLONNAGE
6.1.1 Introduction
Si vous procédez à plusieurs tirages dans la population, qui ne sont pas forcément réalisés
simultanément, vous disposerez de plusieurs échantillons de même taille notée n (souvent elle
sera fixée à l’avance) et les résultats que vous produirez varieront d’un échantillon à l’autre.
C’est ce qui est appelé, en statistique, les fluctuations d’échantillonnage. Il faut donc retenir
qu’à partir d’un unique échantillon (car souvent vous n’aurez accès qu’à un seul échantillon
pour des raisons faciles à comprendre), vous aurez une estimation du paramètre de la population
que vous étudiez et non pas de certitudes ! Il faut distinguer quatre types d’échantillonnage :
– l’échantillonnage aléatoire exhaustif,
– l’échantillonnage aléatoire non-exhaustif,
– l’échantillonnage non aléatoire exhaustif,
– l’échantillonnage non aléatoire non-exhaustif.
Définition 6.1 Un échantillon probabiliste est un échantillon qui est construit à partir d’une
méthode d’échantillonnage où chaque unité statistique de la population a une chance d’être
sélectionnée. Il est parfois nommé échantillon aléatoire1 en raison de la manière aléatoire dont
les unités statistiques sont choisies afin de garantir une représentation sans biais de l’ensemble
de la population.
Remarque : la propriété d’être sans biais sera détaillée par la suite dans ce chapitre.
Définition 6.2 Un échantillon non aléatoire est un échantillon sélectionné par une méthode
non probabiliste.
Exemple : les manchots empereurs en captivité ou d’un zoo donnerait un échantillon non
aléatoire.
Il est recommandé d’effectuer un tirage aléatoire pour produire un échantillon. Les méthodes
aléatoires existantes ne seront pas présentées ici. Il vous est conseillé de consulter des
ouvrages spécialisés sur la question pour de plus amples détails.
Définition 6.3 Un échantillon exhaustif est un échantillon pour lequel le tirage a été réalisé
sans remise.
1. Dans la suite de ce livre, le terme échantillon aléatoire a un autre sens que celui d’échantillon probabiliste. Ce
second sens est introduit à la définition 6.8.
6.2 Estimation d’un paramètre 257
puisqu’une fois ramassé sur le terrain, le haricot a été numéroté et mis de côté.
Définition 6.4 Un échantillon non-exhaustif est un échantillon pour lequel le tirage a été
réalisé avec remise.
Remarque : dans la pratique, la taille de l’échantillon est très souvent petite devant la
taille de la population étudiée. C’est pour cela que les tirages effectués, en général sans
remise, vont être assimilés à des tirages avec remise.
Définition 6.7 Si les K 2 échantillons que vous étudiez sont composés de la même série
© Dunod – La photocopie non autorisée est un délit.
– soit calculer un seul nombre, dans ce cas vous donnez une estimation ponctuelle du para-
mètre,
– soit proposer un ensemble de valeurs plausibles, dans ce cas vous donnez une estimation
ensembliste, par région de confiance, du paramètre.
Maintenant, la question que vous vous posez est : Comment dois-je estimer ? c’est-à-dire
Quelle méthode vais-je choisir ? . Ce choix déterminera les formules que vous aurez à appli-
quer. La réponse n’est pas simple car il existe plusieurs méthodes statistiques pour estimer un
paramètre. Voici les plus connues :
– la méthode des moments,
– la méthode du maximum de vraisemblance,
– la méthode des moindres carrés ordinaires ou généralisés,
– l’estimation bayésienne.
Pour guider votre choix entre ces différentes méthodes, vous pouvez vous poser une nouvelle
question : Quelles sont les propriétés que devrait posséder l’estimateur que je vais sélection-
ner ? . En fonction des propriétés recherchées, vous pouvez avoir à votre disposition plusieurs
estimateurs d’un même paramètre, c’est-à-dire devoir choisir entre plusieurs formules.
Entre deux estimateurs non biaisés de u, vous choisissez le plus précis des deux, c’est-à-dire
celui de plus petite variance.
Définition 6.16 Si &
un est un estimateur de u, la précision de &
un est mesurée par l’écart qua-
dratique moyen, noté E Q M :
2 2
& &
E Q M un = E un − u un + B &
= Var & un .
un = Var &
un est un estimateur sans biais, alors E Q M &
Remarque : si & un .
© Dunod – La photocopie non autorisée est un délit.
Proposition 6.17 Entre deux estimateurs de u, vous choisissez celui dont l’écart quadratique
moyen est le plus faible.
Définition 6.18 Un estimateur &
u1n est relativement plus efficace qu’un estimateur &
u2n s’il est
plus précis que le second, c’est-à-dire si :
E QM & u1n E Q M &
u2n .
Définition 6.19 Un estimateur sans biais optimal parmi les estimateurs sans biais est un
estimateur &un préférable à tout autre au sens de la variance c’est-à-dire l’estimateur le plus
efficace parmi tous les estimateurs sans biais.
Proposition 6.20 Si un estimateur est sans biais et que sa variance tend vers zéro quand n tend
vers l’infini, alors cet estimateur est convergent.
260 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
1
n
&n =
m Xi .
n
i=1
Exemple : soit l’échantillon des 54 glycines blanches. Vous cherchez à calculer une esti-
mation de l’espérance de la variable taille des glycines blanches. Pour cela, il faut
d’abord extraire les 54 données des glycines blanches des 252 données des quatre espèces.
Vous obtenez ce nouveau tableau de données en tapant la ligne de commande suivante :
> glycine.blanche<-subset(Mesures,subset=(Mesures$espece==
+ "glycine blanche"))
Puis vous calculez une estimation de l’espérance de la variable taille en tapant la ligne
de commande suivante :
> mean(glycine.blanche$taille)
[1] 14.77222
Remarque : vous ne pouvez pas vérifier cette égalité dans la pratique car il faudrait relever
la moyenne sur tous les échantillons possibles et dans ce cas vous auriez observé toute la
population ce qui rend inutile le recours à la statistique inférentielle !
1
n
Sn2 = (X i − m
& n )2 .
n
i=1
Remarque :
1. Il faut noter que cet estimateur est construit sur l’hypothèse que l’espérance m de la
variable X est inconnue. Pourtant il peut arriver que l’espérance m soit connue, il faut
alors changer d’estimateur. Cet estimateur sera alors égal à :
1
n
& 2n =
s (X i − m)2 .
n
i=1
Exemple : soit l’échantillon des 54 glycines blanches. Vous cherchez à calculer une esti-
mation de la variance s2 de la variable taille des glycines blanches dont l’espérance est
connue. Vous calculez une estimation de la variance s2 de la variable taille en tapant
la ligne de commande suivante :
> var(glycine.blanche$taille)
[1] 10.91412
Proposition 6.24 Sn2 est un estimateur biaisé de la variance s2 et le biais B Sn2 est égal à
−s2 /n. Sn2 est donc un estimateur asymptotiquement sans biais.
262 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
2
Définition 6.25 L’estimateur corrigé Sn,c de la variance s2 est égal à :
1
n
nSn2
2
Sn,c = = (X i − m
& n )2 .
n−1 n−1
i=1
2
Proposition 6.26 Sn,c est un estimateur sans biais de la variance s2 , c’est-à-dire E(Sn,c
2
) = s2 .
Exemple : soit l’échantillon des 54 glycines blanches. Vous cherchez à calculer une esti-
mation sans biais de la variance s2 de la variable taille des glycines blanches. Vous
calculez une estimation sans biais de la variance s2 de la variable taille en tapant la
ligne de commande suivante :
> (var(glycine.blanche$taille))*((length(glycine.blanche$taille)-1)
+ /length(glycine.blanche$taille))
[1] 10.71201
Exemple : soit l’échantillon des 54 glycines blanches. Vous cherchez à calculer une esti-
mation sans biais de la proportion des gousses de glycine blanche qui ont au plus trois
graines présentes dans une gousse. Pour cela, vous allez taper la ligne de commande
suivante :
> glycine.blanche<-subset(Mesures5,subset=(Mesures5$espece==
+ "glycine blanche"))
6.3 Estimation par intervalle de confiance 263
Elle vous permet de prélever dans le fichier Mesures5 les données qui ne concernent que
les glycines blanches. Puis, vous tapez les deux lignes de commandes suivantes :
> effectif.cumule<-cumsum(table(glycine.blanche$graines))
> effectif.cumule
1 2 3 4 5 6 7
7 26 37 47 52 53 54
Une estimation de la proportion des gousses de glycine blanche qui ont au plus trois
graines présentes dans une gousse est donc égale à 37/54, soit environ 69 % puisque :
> 37/54
donne :
[1] 0.6851852
6.3.1 Introduction
Lorsqu’une estimation est souhaitée, il est plus pertinent de fournir un intervalle u1 < u < u2
© Dunod – La photocopie non autorisée est un délit.
plutôt que simplement une estimation ponctuelle, c’est-à-dire d’écrire uniquement & un = c. Un
tel intervalle ]u1 ; u2 [ s’appelle une estimation par intervalle de confiance du paramètre u ou
estimation ensembliste du paramètre u.
• Intervalle de confiance
L’intervalle de confiance pour l’espérance m au niveau de confiance (1 − a) est égal à :
s s
& n (obs) − u 1−a/2 √ < m < m
m & n (obs) + u 1−a/2 √ ,
n n
Remarque :
1. Vous pourrez désormais calculer le quantile u 1−a/2 à l’aide de R sans avoir recours à
la table de la loi normale. Rappelez-vous que vous devez utiliser la fonction qnorm().
2. Souvent 1 − a sera fixé à 0, 95 et par conséquent u 1−a/2 sera approximativement égal à
1, 96. Vous obtenez la valeur exacte de u 0,975 en tapant la ligne de commande suivante :
> qnorm(0.975)
[1] 1.959964
Ce cas qui vient d’être présenté est extrêmement rare dans la pratique. En effet, la variance
s2 de la population est généralement inconnue. Par conséquent, le cas ci-dessous vous servira
la plupart du temps dans vos analyses.
Sn (obs) Sn (obs)
& n (obs) − tn−1;1−a/2 √
m & n (obs) + tn−1;1−a/2 √
<m<m ,
n−1 n−1
Remarque :
1. Vous pourrez désormais calculer le quantile tn−1;1−a/2 à l’aide de R sans avoir recours
à une table de la loi de Student. Rappelez-vous que vous devez utiliser la fonction qt()
qui prend comme premier argument 1 − a/2 et comme deuxième argument n − 1 ou
encore ce qu’appelle R le df, degree of freedom, traduit par degré de liberté.
2. Notez que la formule ci-dessus de l’intervalle de confiance est donnée avec l’écart-type
Sn (obs) et non l’écart-type corrigé Sn,c (obs). Or il serait préférable que vous ayez la
formule avec l’écart-type corrigé Sn,c (obs) car R ne calcule que cet écart-type. Il faut
Sn (obs) Sn,c (obs)
donc remplacer la quantité √ par la quantité √ .
n−1 n
Maintenant, il faut savoir si ces données, qui forment un échantillon d’effectif égal à 54,
proviennent d’une loi normale de paramètres m et s, tous deux inconnus. Pour cela, vous
allez réaliser un test de normalité, le test de Shapiro-Wilk. Pour avoir la définition d’un
test, reportez-vous au chapitre 7. Comme tout test, ce test confronte deux hypothèses :
data: glycine.blanche$taille
W = 0.9798, p-value = 0.4906
présent mais il est considéré comme satisfaisant car l’effectif de l’échantillon, auquel le
test de Shapiro-Wilk est appliqué, vaut 54 et donc dépasse 30. En effet :
> length(glycine.blanche$taille)
[1] 54
En plus du test, il est souvent intéressant de représenter les données que nous soumettons
à un test de normalité.
> qqnorm(glycine.blanche$taille)
> qqline(glycine.blanche$taille)
Figure 6.1A
Figure 6.1B
Remarque : le graphique de la figure 6.1B que nous venons de tracer est utile
pour pouvoir vérifier graphiquement l’ajustement ou le non ajustement avec la loi
normale mais aussi avec une autre loi. Par exemple, nous allons maintenant étudier
avec le test de Shapiro-Wilk la normalité ou l’absence de normalité de la variable
« taille » pour l’espèce « laurier rose ».
> lauriers.roses<-subset(Mesures,subset=
© Dunod – La photocopie non autorisée est un délit.
+(Mesures$espece=="laurier rose"))
> shapiro.test(lauriers.roses$taille)
Dans ce cas, nous rejetons la normalité de la variable « taille » pour l’espèce « lau-
rier rose ». D’ailleurs vous pouvez constater graphiquement la même conclusion
en tapant la ligne de commande suivante :
> gg_qqplot(lauriers.roses,"taille")
268 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
Nous aurons besoin de la bibliothèque MASS et de la fonction fitdistr qui sert à estimer
les paramètres inconnus des lois de probabilité de Student puis du Khi-deux.
> library(MASS)
> params <- as.list(fitdistr(lauriers.roses$taille, "t")$estimate)
> gg_qqplot(lauriers.roses,"taille",qt,list(df=params$df))
Le résultat de ces deux lignes de commande est reproduit à gauche sur la figure 6.1C.
> params <- list(df=fitdistr(lauriers.roses$taille,"chi-squared",
+ start=list(df=5),method="Brent",lower=1,upper=40)$estimate)
> gg_qqplot(lauriers.roses,"taille",qchisq,params)
Le résultat de ces deux lignes de commande est reproduit à droite sur la figure 6.1C.
Figure 6.1C
Malheureusement aucune de ces deux distributions ne semble compatible avec les obser-
vations.
Maintenant, vous allez calculer l’intervalle de confiance pour l’espérance m à 95 %. Pour
cela, vous procédez en plusieurs étapes :
1. Calcul de l’estimation sans biais de la moyenne de la population.
2. Calcul du quantile d’ordre 0,975 de la loi de Student à 53 degrés de liberté.
3. Calcul de l’estimation de l’écart-type de la population.
Pour calculer l’estimation sans biais de la moyenne, vous tapez la ligne de commande
suivante que vous avez vue dans le paragraphe précédent :
> (moyenne<-mean(glycine.blanche$taille))
6.3 Estimation par intervalle de confiance 269
[1] 14.77222
Pour calculer le quantile d’ordre 0,975 de la loi de Student à 53 (=54-1) degrés de liberté,
vous tapez la ligne de commande suivante (vous l’avez déjà vue dans le chapitre 4) :
> (quantile<-qt(0.975,53))
[1] 2.005746
[1] 3.303652
Maintenant, vous avez tous les éléments pour calculer les deux bornes de l’intervalle.
Vous commencez par la borne inférieure en tapant la ligne de commande suivante :
> moyenne-quantile*(ecart.type/sqrt(length(glycine.blanche$taille)))
[1] 13.8705
[1] 15.67395
Remarque : il y a une fonction de R qui vous donne ces deux bornes en une ligne de
commande. Voici cette ligne de commande :
> t.test(glycine.blanche$taille)
Dans cette sortie, vous voyez apparaître la ligne 95 percent confidence interval
qui signifie l’intervalle de confiance à 95 %. La ligne suivante vous donne les deux bornes
de l’intervalle. Vous remarquez que vous retrouvez bien les deux valeurs que vous venez
d’obtenir. Le problème temporaire de cette fonction c’est qu’elle fait appel à la théorie
des tests que vous verrez au chapitre 7.
Exemple : vous pouvez prendre k1 égal au quantile d’ordre a/2 de la loi du Khi-deux
x2 (n) et k2 égal au quantile d’ordre 1 − a/2 de la loi du Khi-deux x2 (n).
• Intervalle de confiance
L’intervalle de confiance pour la variance s2 au niveau de confiance (1 − a) est égal à
où l1 et l2 sont les quantiles de la loi du Khi-deux x2 (n − 1), d’ordre qui reste à déterminer
en fonction de ce que vous souhaitez.
Exemple : vous pouvez prendre l1 égal au quantile d’ordre a/2 de la loi du Khi-deux
x2 (n − 1) et l2 égal au quantile d’ordre 1 − a/2 de la loi du Khi-deux x2 (n − 1).
Maintenant, il faut savoir si ces données qui forment un échantillon de taille 54 pro-
viennent d’une loi normale de paramètres m et s, tous deux inconnus. Pour cela, vous
allez réaliser un test de normalité, le test de Shapiro-Wilk, pour avoir la définition d’un
test, reportez-vous au chapitre 7, en tapant la ligne de commande suivante :
> shapiro.test(glycine.blanche$taille)
data: glycine.blanche$taille
W = 0.9798, p-value = 0.4906
[1] 54
272 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
Maintenant, vous allez calculer l’intervalle de confiance pour s2 à 95 %. Pour cela, vous
procédez en plusieurs étapes :
1. Calcul de l’estimation sans biais de la variance de la population.
2. Calcul des quantiles d’ordres 0,975 et 0,025 de la loi du Khi-deux à 53 degrés de
liberté.
Pour calculer l’estimation sans biais de la variance, vous tapez la ligne de commande
suivante :
> (variance<-var(glycine.blanche$taille))
[1] 10.91412
Pour calculer les quantiles d’ordres 0,975 et 0,025 de la loi du Khi-deux à 53 (=54-1)
degrés de liberté, vous tapez les deux lignes de commande suivantes (vous les avez déjà
vues dans le chapitre 4) :
> qchisq(0.975,53)
[1] 75.00186
> qchisq(0.025,53)
[1] 34.77633
Maintenant, vous avez tous les éléments pour calculer les deux bornes de l’intervalle.
Vous commencez par la borne inférieure en tapant la ligne de commande suivante :
> ((length(glycine.blanche$taille)-1)*variance)/qchisq(0.975,53)
[1] 7.712453
[1] 16.63339
6.3 Estimation par intervalle de confiance 273
6.3.4 Proportion
Vous souhaitez construire un intervalle de confiance pour la proportion p A d’individus de
la population qui possèdent un certain caractère A. Pour estimer p A , vous allez vous servir de
l’estimateur p & n,A , qui a été défini auparavant, à partir du moment où vous faites l’hypothèse que
le tirage est aléatoire avec remise, ce qui correspond à une population infinie. D’autre part, vous
pouvez montrer que n p & n,A suit la loi binomiale de paramètres n et p A .
À partir de ce résultat, vous pouvez construire un intervalle de confiance pour la proportion p A .
Les trois méthodes pour construire un intervalle de confiance pour la proportion p A que vous
rencontrerez le plus souvent sont :
– la méthode exacte ou encore appelée la méthode de Clopper-Pearson qui maintenant est
réalisable puisque vous avez le logiciel R,
– la méthode du score également appelée la méthode de Wilson ou encore la méthode de
l’ellipse,
– la méthode asymptotique ou encore appelée la méthode de Wald.
Des études statistiques ont montré que, parmi ces trois méthodes, celle à privilégier est la
méthode du score. Néanmoins, la méthode de Wald reste très utilisée et présentée dans de
nombreux manuels alors qu’elle ne permet généralement pas d’obtenir des intervalles de
confiance de qualité convenable.
Donc attendez-vous à ne pas obtenir les mêmes résultats, comme l’exemple ci-dessous va vous
le montrer puisque ce ne sont pas les mêmes méthodes de construction comme vous venez de le
voir ci-dessus. Les formules pour calculer ces intervalles vous seront données après l’exemple.
Exemple : tapez la ligne de commande suivante :
> binom.test(x=5,n=10,p=0.5,alternative=c("two.sided","less",
+ "greater"),conf.level=0.95)
274 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
data: 5 and 10
number of successes = 5, number of trials = 10, p-value = 1
alternative hypothesis: true probability of success is not equal
to 0.5
95 percent confidence interval:
0.1870860 0.8129140
sample estimates:
probability of success
0.5
Avec cette fonction, l’intervalle de confiance est égal à : ]0, 1870860; 0, 8129140[.
Remarque : vous pouvez aussi obtenir cet intervalle avec la fonction binom.ci du
package BioStatR. Tapez la ligne de commande suivante :
> binom.ci(x=5,n=10,conf.level=0.95,method="exact")
Elle vous donne le deuxième intervalle de confiance dans la liste ci-dessus, c’est-à-dire
celui construit à l’aide de la méthode du score. Cet intervalle de confiance est égal à :
]0,2365931; 0,7634069[.
6.3 Estimation par intervalle de confiance 275
Remarque :
1. Vous pouvez aussi obtenir cet intervalle avec la fonction binom.ci du package
BioStatR. Tapez la ligne de commande suivante :
> binom.ci(x=5,n=10,conf.level=0.95,method="Wilson")
2. Ce dernier intervalle est plus petit que le précédent ou autrement dit il est
contenu dans le précédent.
Pour finir, vous pouvez obtenir le troisième intervalle mentionné dans la liste ci-dessus,
c’est-à-dire celui construit à l’aide de la méthode asymptotique. Pour cela, tapez la ligne
de commande suivante :
> binom.ci(x=5,n=10,conf.level=0.95,method="Wald")
'
2
1 & n,A (obs)(1 − p
p & n,A (obs)) u 1−a/2
& n,A (obs) + u 21−a/2 − u 1−a/2 ×
p +
2n n 4n 2
< pA
1
1 + u 21−a/2
n '
2
1 2 & n,A (obs)(1 − p
p & n,A (obs)) u 1−a/2
& n,A (obs) +
p u + u 1−a/2 × +
2n 1−a/2 n 4n 2
< ,
1
1 + u 21−a/2
n
Remarque :
1. Il existe pour ces deux intervalles une formule avec une correction de continuité de
Yates pour tenir compte du passage d’une loi discrète à une loi continue. Donc, parfois,
vous pouvez constater un léger écart entre le calcul de cette formule si vous le réalisez
à la main et le calcul donné par un logiciel de statistique. Donc pensez à regarder ce
qui est programmé dans le manuel du logiciel que vous utilisez. R indique toujours
dans l’aide s’il utilise par défaut ou pas cette correction de continuité.
Exemple : dans la fonction prop.test, R applique par défaut cette correction de
continuité. Donc si vous ne souhaitez pas qu’il la fasse, vous devez indiquer comme
argument correct = FALSE dans la fonction prop.test.
Remarque : il est tout à fait normal de retrouver la moyenne empirique, car c’est le
meilleur estimateur possible pour l’espérance mathématique d’une loi de Poisson qui est
justement égale au paramètre l de la loi de Poisson.
Maintenant la question est : Quelle est la loi de & ln ? En fait, il faut raisonner sur la loi de
la variable n &
ln qui suit la loi de Poisson de paramètre nl car n & ln est la somme de n variables
aléatoires indépendantes qui suivent la loi de Poisson de paramètre l. Cette propriété a été
établie dans le chapitre 4.
Remarquez également que vous êtes en présence d’une loi discrète : la loi de Poisson. Il faut
donc vous poser la question : Dois-je utiliser les quantiles de la loi de Poisson pour établir un
intervalle de confiance exact ou dois-je approcher la loi de Poisson par une loi continue pour
établir un intervalle de confiance pour l ? C’est la même question que lorsque vous avez étudié
l’estimateur d’une proportion ci-dessus. La réponse est en deux temps :
– longtemps, l’approximation de la loi de Poisson par la loi du Khi-deux a été utilisée, puisque
les utilisateurs avaient plus souvent à leur disposition les tables de la loi du Khi-deux,
– actuellement, avec des logiciels comme le logiciel R, vous pouvez construire un intervalle
de confiance exact mais cet intervalle, comme pour la proportion est très conservatif.
• Intervalle de confiance approché
L’intervalle de confiance pour le paramètre l au niveau de confiance (1 − a) est égal à :
1 2 1 2
x <l< x ,
2n 2n &ln ;a/2 2n 2 n &ln +1 ;1−a/2
où x22n &l est le quantile d’ordre a/2 de la loi du Khi-deux à 2n &ln degrés de liberté et
n ;a/2
x2 est le quantile d’ordre 1 − a/2 de la loi du Khi-deux à 2 n &
ln + 1 degrés
2 n&
ln +1 ;1−a/2
© Dunod – La photocopie non autorisée est un délit.
de liberté.
La fonction poi.ci du package BioStatR calcule pour vous cet intervalle. Il vous suffit de lui
rentrer l’échantillon sur lequel vous travaillez.
Exemple : pour un exemple d’utilisation de cette fonction et de calcul de cet intervalle,
vous êtes renvoyé à l’exercice 3 de ce chapitre.
278 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
EN RÉSUMÉ
Commande Description
subset Permet d’extraire une partie d’un tableau de données.
shapiro.test Permet de réaliser un test de normalité de Shapiro-Wilk.
t.test Permet de calculer un intervalle de confiance pour une moyenne.
binom.test Permet de calculer un intervalle de confiance exact pour une proportion.
prop.test Permet de calculer un intervalle de confiance pour une proportion
avec la méthode du score.
binom.ci Permet de calculer un intervalle de confiance pour une proportion
avec les trois méthodes du cours.
poi.ci Permet de calculer un intervalle de confiance pour le paramètre l
de la loi de Poisson.
EXERCICES
Le but de cet exercice est de mettre en application les formules d’estimation ponctuelle de
l’espérance et de l’écart-type puis de les calculer avec R en se servant des fonctions qui
existent sous cet environnement. Il vous sera aussi demandé de calculer des intervalles de
confiance pour chacune de ces estimations avec les fonctions de R qui s’y rapportent.
Un étudiant en deuxième année de licence de biologie s’intéresse à un type d’algue qui attaque
les plantes marines. La toxine contenue dans cette algue est obtenue sous forme d’une solution
organique. Il mesure la quantité de toxine par gramme de solution. Il a obtenu les neuf mesures
suivantes, exprimées en milligrammes :
1, 2; 0, 8; 0, 6; 1, 1; 1, 2; 0, 9; 1, 5; 0, 9; 1, 0.
Des expériences précédentes ont permis de montrer que ces valeurs sont les réalisations de
variables aléatoires indépendantes et identiquement distribuées suivant la loi normale d’espé-
rance m et d’écart-type s > 0.
1) Donnez une estimation ponctuelle de l’espérance m et de l’écart-type s de la quantité de
toxine par gramme de solution.
Exercices 279
Cet exercice pose une question très intéressante et qui revient très souvent : le calcul de la
taille d’un échantillon avant enquête. Il est très difficile de calculer la taille d’un échantillon
pour diverses raisons. En particulier, si vous cherchez à résoudre l’équation, vous verrez que
très vite, vous êtes en présence de plusieurs inconnues. Donc il faut que vous fassiez plusieurs
hypothèses, ce qui amène souvent à des discussions. Il vous est conseillé de consulter des
ouvrages spécialisés si le sujet vous intéresse. Ici, le cadre de l’exercice vous permet de
calculer une taille mais uniquement parce que vous avez à disposition plusieurs informations
a priori, ce qui ne sera pas toujours le cas.
Depuis 1982, l’infection par le virus de l’hépatite B peut être évitée grâce à un vaccin. Le
vaccin ne guérit pas les porteurs chroniques, mais il est efficace de 90 à 95 % pour prévenir
l’apparition de cet état. Par conséquent, le pourcentage d’échecs est compris entre 5 et 10 %. Un
laboratoire de recherche prépare une nouvelle expérience pour connaître à ±1 %, le pourcentage
de sujets non immunisés en acceptant un coefficient de risque a égal à 5 %. Combien de sujets
© Dunod – La photocopie non autorisée est un délit.
Cet exercice est un exercice moins classique que les précédents. En effet, son but est de vous
faire calculer un intervalle de confiance autour du paramètre inconnu l de la loi de Poisson.
Lors du comptage des graines qui sont à l’intérieur des gousses de glycine blanche et de
glycine violette, le jardinier suppose que le nombre de graines de chaque gousse de glycine aussi
bien blanche que violette suit la loi de Poisson de paramètre inconnu l. Le jardinier aimerait bien
estimer ce paramètre l. Pour cela, le jardinier décide d’aller consulter un étudiant en première
280 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
k 0 1 2 3 4 5 6 7 8 et +
nk 0 11 41 27 16 10 2 3 0
PROBLÈME
3. Comme vous pouvez le constater, la méthode des moments et la méthode du maximum de vraisemblance (voir
paragraphe 6.3.5) permettent de construire le même estimateur, qui s’avère être sans biais, pour le paramètre l de la
loi de Poisson.
Problème 281
les lignes de commande que l’étudiant doit taper pour obtenir les représentations graphiques
attendues ?
3) À partir des représentations graphiques obtenues précédemment, l’étudiant en première année
de licence de biologie et le jardinier font les deux constats suivants :
– la taille d’une gousse de glycine blanche est comprise entre 8 et 22 centimètres,
– la distribution de la variable taille d’une gousse de glycine blanche semble être symé-
trique. Donc la supposition du jardinier qui est celle que la taille d’une gousse de glycine
blanche suit la loi normale d’espérance m et d’écart-type s > 0 ne semble pas être
déraisonnable.
Êtes-vous d’accord avec les deux constats qu’ont fait l’étudiant et le jardinier ?
4) L’étudiant suggère au jardinier de procéder à un test de normalité sur la variable taille du
jeu de données glycine pour vérifier cette hypothèse avancée. Pour cela, l’étudiant retourne
aux rappels de cours de ce chapitre et trouve comment réaliser un test de normalité. Quelle est la
commande qu’a tapée l’étudiant ? Exécutez-la. Quel résultat obtenez-vous et que concluez-vous
sur l’hypothèse qu’a faite le jardinier, à savoir la taille d’une gousse de glycine blanche dans
la population des glycines blanches suit une loi normale ?
5) Maintenant, il va étudier la variable taille d’une gousse de glycine blanche en la regroupant
par classes comme il a appris dans son cours. Il va utiliser le logiciel R et en particulier le
groupement par classes par défaut que propose R car il n’a pas d’idée précise du groupement
par classes qu’il pourrait proposer. Comment procède-t-il à votre avis ? Quel est le résultat qu’il
obtient ?
À l’issue de cette analyse préliminaire, voici les questions que se pose maintenant l’étudiant :
6) Comment puis-je calculer à partir de ces données, une estimation ponctuelle de l’espérance
m et de l’écart-type s > 0 de la variable taille ?
7) Comment puis-je construire un intervalle de confiance à 95 % pour l’espérance m de la
© Dunod – La photocopie non autorisée est un délit.
DU MAL À DÉMARRER
➩ Exercice 6.1
1) Relisez les paragraphes 6.2.4 et 6.2.5.
2) Relisez le paragraphe 6.3.2.
3) Étudiez l’influence de la variation de l’effectif de l’échantillon sur la largeur de l’inter-
valle de confiance.
4) Relisez le paragraphe 6.3.3. Utilisez le lien entre l’écart-type et la variance.
➩ Exercice 6.2
Relisez le paragraphe 6.3.4.
➩ Exercice 6.3
1) Relisez le paragraphe 6.3.5.
2) Relisez le paragraphe 6.3.5.
➩ Problème 6.1
1) Utilisez la fonction subset.
2) Utilisez la fonction hist.
3) L’histogramme paraît-il symétrique ?
4) Utilisez la fonction shapiro.test.
5) Utilisez les résultats breaks et counts obtenus à l’aide de la fonction hist.
6) Utilisez les fonctions mean et sd.
7) Utilisez la fonction t.test.
8) Servez-vous du résultat de la question 7 puis relisez le paragraphe 6.3.2.a.
Solution des exercices 283
Exercice 6.1
1) Vous commencez par rentrer le vecteur des données :
> toxine<-c(1.2,0.8,0.6,1.1,1.2,0.9,1.5,0.9,1.0)
> str(toxine)
num [1:9] 1.2 0.8 0.6 1.1 1.2 0.9 1.5 0.9 1
Ensuite, vous pouvez commencer à répondre aux deux questions. La première en tapant la ligne
de commande suivante :
> mean(toxine)
[1] 1.022222
Donc une estimation ponctuelle non biaisée de l’espérance m est égale à 1,022222 mg.
Pour obtenir une estimation ponctuelle de l’écart-type s, vous tapez la ligne de commande
suivante :
> sd(toxine)
© Dunod – La photocopie non autorisée est un délit.
[1] 0.2635231
> t.test(toxine)
data: toxine
t = 11.6372, df = 8, p-value = 2.708e-06
284 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
Donc l’intervalle de confiance à 95 % pour l’espérance m est égal à : ]0,8196604 mg; 1,2247840 mg[.
3) L’étudiant en deuxième année de licence de biologie doit augmenter la taille de l’échantillon.
4) Pour calculer l’intervalle de confiance à 95 % pour la variance s2 de la quantité de toxine
(sous l’hypothèse de normalité qui est valide dans ce cas car prouvée lors d’expériences anté-
rieures), tapez les lignes de commande suivantes :
> variance<-var(toxine)
> ((length(toxine)-1)*variance)/qchisq(0.975,8)
[1] 0.03168349
> ((length(toxine)-1)*variance)/qchisq(0.025,8)
[1] 0.2548735
> sqrt(((length(toxine)-1)*variance)/qchisq(0.975,8))
[1] 0.1779986
Solution des exercices 285
> sqrt(((length(toxine)-1)*variance)/qchisq(0.025,8))
[1] 0.50485
B
– La fonction t.test pour construire des intervalles de confiance d’une espérance d’une loi
S normale.
U
– Comment construire un intervalle de confiance pour l’écart-type d’une loi normale.
Exercice 6.2 Soit p le pourcentage de sujets non immunisés après la vaccination dans la
population. Vous souhaitez construire un intervalle de confiance pour la proportion p au risque
a = 5 %, dont l’amplitude soit égale au maximum à 2 %. Si la taille de l’échantillon dépasse
30, alors vous pouvez appliquer l’approximation
√ de la loi binomiale de paramètres n et p par la
loi normale de paramètres np et np(1 − p). Vous devez donc résoudre l’inéquation suivante :
(
p(1 − p)
2 × u 0,975 × 0, 02,
n
où u 0,975 est égal à 1, 959964, que vous arrondirez à 1,96. Cette inégalité se transforme alors :
Pour p dans [0, 05; 0, 1], la fonction f qui à p associe p(1 − p), est strictement croissante sur
cet intervalle. En effet, vous avez que f ( p) = −2 p + 1 qui s’annule et change de signe en
p = 0, 5. Donc sur l’intervalle [0; 0, 5], f est strictement croissante et sur l’intervalle [0, 5; 1],
f est strictement décroissante. Donc f ( p) f (0, 1) avec f (0, 1) = 0, 1 × 0, 9 = 0, 09. Donc il
faut que n vérifie :
n 38 416 × 0, 09,
ou encore :
n 3 458.
Exercice 6.3
1) Calculez l’estimation ponctuelle sans biais de l en tapant les deux lignes de commande
suivantes :
> lambda_n<-((1*11+2*41+3*27+4*16+5*10+6*2+7*3)/110)
> lambda_n
[1] 2.918182
Donc une estimation du paramètre l est égale à 2, 918182, ce qui peut s’interpréter comme, en
moyenne, il y a trois graines dans une gousse de glycine.
2) Oui, l’étudiant peut construire un intervalle de confiance pour le paramètre l. Il peut utiliser
l’approximation mentionnée dans les rappels de cours, à savoir l’approximation par une loi du
x2 . En tapant les deux lignes de commande suivantes :
> echantillon<-rep(0:8,c(0,11,41,27,16,10,2,3,0))
> echantillon
[1] 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[32] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
[63] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4
[94] 4 4 5 5 5 5 5 5 5 5 5 5 6 6 7 7 7
> poi.ci(echantillon)
L’intervalle de confiance à 95 % pour le paramètre l est égal à : ]2, 607644; 3, 255524[. Remar-
quez que l’estimation ponctuelle que vous avez calculée à la question précédente appartient bien
à cet intervalle.
La fonction poi.ci.
B
S
U
Solution du problème 287
SOLUTION DU PROBLÈME
Problème 6.1
1) La ligne de commande qui permet d’extraire les 54 données sur les glycines blanches est la
suivante :
> layout(t(1:2))
> histo<-hist(glycine$taille,ylab="Nombre de gousses de glycine blanche",
+ main="Histogramme de la taille d’une gousse de glycine blanche",
+ xlab="Taille d’une gousse de glycine blanche en cm")
L’étudiant doit taper les deux lignes de commande suivantes pour dessiner la boîte à mous-
taches des 54 données à droite de l’histogramme :
Il obtient alors la figure 6.2. Dans ces lignes de commande, vous pouvez noter l’introduction
d’une nouvelle fonction layout. Cette dernière modifie la fenêtre graphique. Elle permet de
juxtaposer plusieurs graphiques aux endroits que vous indiquez et le tout sur la même fenêtre.
Enfin, n’oubliez pas de taper layout(1) pour supprimer la partition de la fenêtre graphique
que vous aurez mise en place.
288 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
Figure 6.2
> shapiro.test(glycine$taille)
data: glycine$taille
W = 0.9798, p-value = 0.4906
Solution du problème 289
> length(glycine$taille)
[1] 54
L’étudiant peut donc continuer de penser que l’hypothèse du jardinier n’est pas déraisonnable.
5) L’étudiant a tapé la ligne de commande que vous commencez à bien connaître :
> classes<-histo$breaks
> classes
[1] 8 10 12 14 16 18 20 22
> effectifs<-histo$counts
> effectifs
Il a obtenu :
© Dunod – La photocopie non autorisée est un délit.
[1] 4 7 11 13 9 7 3
6) Pour calculer une estimation ponctuelle non biaisée de l’espérance m de la variable taille,
il vous suffit de taper la ligne de commande suivante :
> mean(glycine$taille)
[1] 14.77222
Donc une estimation ponctuelle non biaisée de l’espérance m est égale à 14,77222 cm.
Pour calculer une estimation ponctuelle de l’écart-type s de la variable taille, il vous suffit de
taper la ligne de commande suivante :
290 6 • Échantillonnage. Estimation d’un paramètre. Estimation par intervalle de confiance
> sd(glycine$taille)
[1] 3.303652
> t.test(glycine$taille)
data: glycine$taille
t = 32.8585, df = 53, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
13.87050 15.67395
sample estimates:
mean of x
14.77222
> 15.67395-13.87050
ce qui donne :
[1] 1.80345
Solution du problème 291
Ce qui est demandé c’est que cette précision doit être deux fois plus petite, donc égale à :
> 1.80345/2
[1] 0.901725
4
Donc, vous souhaitez que 2 × 1, 96 × √ soit égal à 0,901725. Par conséquent, n doit être égal
n
2
8 × 1, 96
à , ou encore :
0, 901725
> ((8*1.96)/((15.67395-13.87050)/2))12
ou encore :
[1] 302.3736
Donc l’étudiant en première année de licence de biologie doit ramasser 249 gousses en plus des
54 qu’il possède déjà.
– La fonction shapiro.test.
B
S
U – Comment évaluer l’effectif de l’échantillon à constituer en fonction de la précision souhaitée
de l’estimation.
Chapitre 7
Tests paramétriques
et non paramétriques
How often have I said to you that when you have eliminated the impossible, whatever remains,
however improbable, must be the truth.
De Sir Arthur Conan Doyle, The Sign of the Four, chapitre 6, 1890.
Objectifs de ce chapitre
➤ présenter la méthodologie des tests statistiques
➤ tests paramétriques
➤ tests non paramétriques
➤ puissance d’un test statistique
Définition 7.1 Un test d’hypothèse, ou test statistique, est un mécanisme qui permet de tran-
cher entre deux hypothèses à la vue des résultats d’un échantillon, en cherchant à quantifier le
risque associé à la décision prise.
Soient H0 et H1 deux hypothèses, dont une et une seule est vraie. L’hypothèse nulle H0
joue le plus souvent un rôle prédominant par rapport à l’hypothèse alternative H1 . Cela est
7.1 Introduction à la notion de tests 293
la conséquence du fait que l’hypothèse nulle H0 est l’hypothèse de référence et que toute la
démarche du test s’effectue en considérant cette hypothèse comme vraie.
Exemple : vous pouvez avoir comme hypothèse nulle H0 : m = m0 et, dans ce cas, une
hypothèse alternative pourrait être H1 : m = m0 .
La décision d’un test consiste à choisir entre H0 et H1 . Il y a donc quatre cas possibles qui
sont détaillés dans le tableau ci-dessous :
H0 vraie H1 vraie
H0 décidée 1−a b
H1 décidée a 1−b
1 %. Le fait d’imposer a faible conduit à une règle de décision plus stricte. En effet, dans ce cas,
la décision consiste à abandonner l’hypothèse nulle H0 dans des cas rarissimes et à conserver
plus souvent à tort, l’hypothèse nulle H0 .
Définition 7.4 La puissance d’un test statistique est égale à 1 − b ou encore la puissance est
la probabilité de rejeter l’hypothèse nulle H0 à raison.
Vous pouvez calculer la puissance à l’aide de différentes fonctions, chacune d’entre elles étant
associée aux tests que vous venez de réaliser.
Exemple : vous trouverez power.t.test et power.prop.test dans le package
stats, installé de base dans R. En installant le package pwr, vous trouverez alors
pwr.norm.test, pwr.r.test, pwr.chisq.test et pwr.anova.test. Vous trouverez
également dans ce package pwr.t2n.test qui travaille sur deux échantillons de taille
différente, ce que ne fait pas power.t.test.
294 7 • Tests paramétriques et non paramétriques
Généralement la puissance 1 − b doit au moins être égale à 0,80 pour être considérée comme
B satisfaisante.
S
U
Exemple : certains tests comme les tests du Khi-deux (chapitre 8) ou le test de Fisher
dans une analyse de la variance (chapitre 10) sont pratiquement toujours unilatéraux.
Définition 7.7 La région critique du test notée W (W pour wrong), ou encore appelée zone
de rejet du test est égale à l’ensemble des valeurs de la variable de décision qui conduisent à
écarter H0 au profit de H1 . La région critique du test correspond donc aux intervalles dans
lesquels les différences sont trop grandes pour être le fruit du hasard d’échantillonnage.
Remarque : dans la plupart des situations que vous rencontrerez dans la suite, la région
critique W peut être reliée au risque d’erreur de première espèce a par PH0 (W ) = a.
Définition 7.8 La région d’acceptation du test notée W , ou encore appelée zone d’accepta-
tion du test, est la région complémentaire de la région critique W . Elle correspond à l’intervalle
dans lequel les différences observées entre les réalisations et la théorie sont attribuables aux
fluctuations d’échantillonnage.
7.1 Introduction à la notion de tests 295
Remarque : dans la plupart des situations que vous rencontrerez dans la suite, la
région
d’acceptation
W peut être reliée au risque d’erreur de première espèce a par
PH0 W = 1 − a.
1. Pour une définition de la p-valeur, nous renvoyons le lecteur au livre Mathématiques pour les sciences de
l’ingénieur de F. Bertrand et M. Maumy-Bertrand, Dunod, 2013, et en particulier à la p. 460.
296 7 • Tests paramétriques et non paramétriques
Définition 7.9 Le test le plus puissant est le test qui fournit l’erreur b la plus petite, pour une
même valeur du seuil a ou encore qui fournit la plus grande valeur de la puissance 1 − b.
En effet, il peut détecter les plus petites différences entre les populations sans pour autant
augmenter le seuil a.
La majorité des tests statistiques repose sur le respect d’un certain nombre de conditions.
Selon le degré de respect de ces conditions d’utilisation, la validité des résultats se trouve plus
ou moins affectée et elle l’est d’autant plus que le test est moins robuste.
Définition 7.10 La robustesse d’un test équivaut à sa tolérance vis-à-vis du non-respect des
conditions d’application du test.
Vous pouvez disposer de plusieurs tests pour vérifier une même hypothèse. En fonction du
B contexte, il faudra penser à utiliser le plus puissant d’entre eux. Vous apprendrez bientôt les
S
U
différentes caractéristiques des tests les plus fréquemment utilisés.
Remarque :
1. Les tests peu puissants augmentent la probabilité de commettre une erreur de deuxième
espèce. Or, cette erreur peut s’avérer particulièrement grave.
Exemple : en effet, en médecine, considérez une analyse statistique qui permettrait de
décider si un patient est sain (H0 ) ou malade (H1 ). Classer comme malade un sujet
bien portant (risque d’erreur de première espèce), peut avoir des conséquences aussi
graves que classer comme bien portant un sujet malade (risque d’erreur de deuxième
espèce).
2. Pour évaluer la puissance d’un test, vous pourrez être amené à utiliser des courbes de
puissance ou encore appelées abaques.
7.2 Tests de comparaison avec une norme 297
Exemple : dans l’atmosphère, le taux d’un gaz nocif, pour un volume donné, suit la loi
normale d’espérance m et de variance s2 égale à 100. 30 prélèvements ont été effectués
et les valeurs de ces 30 prélèvements sont les suivantes :
52, 0; 60, 2; 68, 8; 46, 8; 62, 2; 53, 5; 50, 9; 44, 9; 73, 2; 60, 4;
61, 9; 67, 8; 30, 5; 52, 5; 40, 4; 29, 6; 58, 3; 62, 6; 53, 6; 64, 6;
54, 4; 53, 8; 49, 8; 57, 4; 63, 1; 53, 4; 59, 4; 48, 6; 40, 7; 51, 9.
Pouvez-vous conclure, avec un risque a = 5 %, que l’espérance m est inférieure à 50, qui
est le seuil tolérable admis ?
La marche à suivre pour répondre à cette question est la suivante :
1. réaliser le test de normalité de Shapiro-Wilk au seuil a = 5 % sur l’échantillon des 30
prélèvements,
2. puis vous avez le choix entre faire le calcul à la main de la statistique associée au
test unilatéral que vous avez choisi pour répondre à cette question ou raisonner avec la
p-valeur.
H0 : m = 50
contre
H1 : m > 50.
Les deux lignes de commande à taper sont donc les suivantes :
> gaz<-c(52.0,60.2,68.8,46.8,62.2,53.5,50.9,44.9,73.2,60.4,61.9,
+ 67.8,30.5,52.5,40.4,29.6,58.3,62.6,53.6,64.6,54.4,53.8,49.8,
+ 57.4,63.1,53.4,59.4,48.6,40.7,51.9)
> shapiro.test(gaz)
data: gaz
W = 0.9599, p-value = 0.3077
[1] 30
300 7 • Tests paramétriques et non paramétriques
1re méthode :
Pour réaliser le test « à la main » qui a été présenté ci-dessus, vous allez taper la ligne de
commande suivante :
> (z<-(sqrt(30)*(mean(gaz)-50))/10)
[1] 2.322344
Il ne vous reste plus qu’à comparer cette valeur avec le quantile de la loi normale centrée
et réduite. Pour récupérer la valeur de ce quantile, tapez la ligne de commande suivante :
> qnorm(0.95)
[1] 1.644854
Il s’agit ici d’un test unilatéral, donc la zone d’acceptation en est affectée.
Maintenant que la bibliothèque est installée, vous allez pouvoir réaliser le test en tapant
la ligne de commande suivante :
> z.test(gaz,mu=50,sd=10,alternative="greater",conf.level=0.95)
inconnues.
• Test unilatéral
Le test unilatéral se déduit aisément du test bilatéral présenté ci-dessous.
• Test bilatéral
Hypothèses du test :
ce sont les mêmes que précédemment.
Conditions d’application du test :
il faut que l’échantillon x1 , . . . , xn soit des réalisations indépendantes de la variable aléa-
toire X qui suit la loi normale N (m; s).
Statistique du test :
& n − m0
m
si l’hypothèse nulle H0 est vérifiée, alors la variable aléatoire Tn−1 = √ suit la loi
Sn,c / n
de Student t(n − 1).
302 7 • Tests paramétriques et non paramétriques
La fonction sous R qui permet de réaliser le test des rangs signés de Wilcoxon est la fonction
B wilcox.test.
S
U
Exemple : le jardinier aimerait savoir si les glycines blanches qu’il a plantées sur son
terrain suivent bien les spécificités de la notice qu’il a reçu lorsqu’il a commandé ses
graines sur internet. Il était indiqué sur la notice que chaque gousse de glycines blanches
à maturité doit mesurer 15 cm de long. Comment peut-il s’assurer que les gousses qu’il
a dans son jardin suivent bien cette spécificité ? Il contacte un étudiant en licence de
biologie pour l’aider à répondre à sa question. L’étudiant lui propose de faire un test de
Student sur ses données. La procédure est la suivante :
1. Réaliser le test de normalité de Shapiro-Wilk (qui a été introduit au chapitre 6) sur
l’échantillon.
2. Puis réaliser le test de Student bilatéral puisque l’étudiant n’a aucune information sur
la variance s2 > 0 de la population qui est donc inconnue.
Les deux lignes de commande à taper sont les suivantes :
> glycine<-subset(Mesures,subset=(Mesures$espece=="glycine blanche"))
> shapiro.test(glycine$taille)
data: glycine$taille
W = 0.9798, p-value = 0.4906
[1] 54
Vous pouvez donc effectuer le test de Student comme le suggère l’étudiant en licence de
biologie. Pour cela, vous tapez la ligne de commande suivante en spécifiant m0 = 15 cm :
> t.test(glycine$taille,mu=15)
data: glycine$taille
t = -0.5067, df = 53, p-value = 0.6145
alternative hypothesis: true mean is not equal to 15
95 percent confidence interval:
13.87050 15.67395
sample estimates:
mean of x
14.77222
risque d’erreur associé à cette décision est un risque d’erreur de deuxième espèce b. Il
vous reste donc à le calculer. Pour cela, vous tapez la ligne de commande suivante :
> power.t.test(n=54,delta=mean(glycine$taille)-15,
+ sd=sd(glycine$taille),type="one.sample",alternative="two.sided")
n = 54
delta = 0.2277778
sd = 3.303652
sig.level = 0.05
power = 0.07181315
alternative = two.sided
304 7 • Tests paramétriques et non paramétriques
Cette puissance est faible. Une puissance convenable serait de l’ordre de 0,8. Mais quelle
serait donc la taille de l’échantillon à prélever sur le terrain du jardinier ? Pour répondre à
cette question, tapez la ligne de commande suivante :
> power.t.test(power=.8,delta=mean(glycine$taille)-15,
+ sd=sd(glycine$taille),type="one.sample",alternative="two.sided")
Il faudrait que le jardinier prélève 1 654 gousses de glycines blanches pour obtenir une
puissance supérieure ou égale à 0,8.
au seuil a et vous décidez que H1 est vraie au seuil a avec un risque d’erreur de première
espèce a. Si la valeur de la statistique du test calculée sur l’échantillon, notée x2n (obs)
appartient à ]ca/2 ; c1−a/2 [, alors le test n’est pas significatif au seuil a. Vous conservez H0
au seuil a avec un risque d’erreur de deuxième espèce b à déterminer.
Ce cas arrive extrêmement peu souvent dans la pratique. Mais vous pouvez trouver ce test
B dans la bibliothèque TeachingDemos précédemment présentée.
S
U
n’appartient pas à ]ca/2 ; c1−a/2 [, alors le test est significatif au seuil a. Vous rejetez H0
au seuil a et vous décidez que H1 est vraie au seuil a avec un risque d’erreur de première
espèce a. Si la valeur de la statistique du test calculée sur l’échantillon, notée x2n−1,c (obs)
appartient à ]ca/2 ; c1−a/2 [, alors le test n’est pas significatif au seuil a. Vous conservez
H0 au seuil a avec un risque d’erreur de deuxième espèce b à déterminer.
Exemple : vous venez d’acquérir dans votre laboratoire une nouvelle balance et vous sou-
haitez comparer la régularité du travail de cette dernière pour des très petites pesées à la
norme habituelle du descriptif pour laquelle la variance s20 est égale à 4g 2 . Vous prélevez un
échantillon d’effectif égal à 30 masses dont les valeurs sont données ci-dessous :
2, 53; 1, 51; 1, 52; 1, 44; 4, 32; 2, 36; 2, 41; 2, 06; 1, 57; 1, 68;
3, 09; 0, 54; 2, 32; 0, 19; 2, 66; 2, 20; 1, 04; 1, 02; 0, 74; 1, 01;
0, 35; 2, 42; 2, 66; 1, 11; 0, 56; 1, 75; 1, 51; 3, 80; 2, 22; 2, 88.
306 7 • Tests paramétriques et non paramétriques
> pesee<-c(2.53,1.51,1.52,1.44,4.32,2.36,2.41,2.06,1.57,1.68,
+ 3.09,0.54,2.32,0.19,2.66,2.20,1.04,1.02,0.74,1.01,
+ 0.35,2.42,2.66,1.11,0.56,1.75,1.51,3.80,2.22,2.88)
> shapiro.test(pesee)
data: pesee
W = 0.9716, p-value = 0.5848
> length(pesee)
[1] 30
Vous pouvez donc maintenant effectuer le calcul de la statistique de test à la main .
Pour cela, vous tapez la ligne de commande suivante :
> ((length(pesee)-1)*var(pesee))/4
7.2 Tests de comparaison avec une norme 307
[1] 7.135268
Maintenant, il ne vous reste plus qu’à calculer le quantile de la loi du Khi-deux x2 (29) :
> qchisq(0.95,29)
[1] 42.55697
> library(TeachingDemos)
> sigma.test(pesee,sigma=2,alternative="greater")
var of pesee
0.9841748
> library(OneTwoSamples)
> var_test1(pesee,sigma2=4)
contre
H1 : p A = p0 .
Conditions d’application du test :
il faut que l’échantillon x1 , . . . , xn soit des réalisations indépendantes d’une variable aléa-
toire X qui suit la loi de Bernoulli B(1, p A ).
Statistique du test :
si l’hypothèse nulle H0 est vérifiée, alors la variable aléatoire n p & n,A = n A (&
pn,A a été
défini dans le chapitre 6) suit la loi binomiale B(n; p0 ).
Décision et conclusion du test :
les valeurs critiques du test, notées ca/2 et c1−a/2 , sont lues dans une table de la loi bino-
miale. Si la valeur de la statistique calculée sur l’échantillon, notée n A (obs), n’appartient
pas à ]ca/2 ; c1−a/2 [, alors le test est significatif au seuil a. Vous rejetez H0 au seuil a et
vous décidez que H1 est vraie au seuil a avec un risque d’erreur de première espèce a. Si la
valeur de la statistique calculée sur l’échantillon, notée n A (obs), appartient à ]ca/2 ; c1−a/2 [,
alors le test n’est pas significatif au seuil a. Vous conservez H0 au seuil a avec un risque
d’erreur de deuxième espèce b à évaluer.
Vous pouvez trouver dans la littérature une variation de ce test, qui va être présentée ci-dessous,
avec cette fois-ci d’autres conditions d’application et une autre statistique que celle présentée
précédemment. Cette variation utilise l’approximation de la loi binomiale par la loi normale.
Cette approximation a longtemps été utilisée mais avec les logiciels comme R, il est préférable
d’avoir recours au test exact présenté ci-dessus.
• Test unilatéral
Le test unilatéral se déduit aisément du test bilatéral.
• Test bilatéral
Hypothèses du test :
ce sont les mêmes que précédemment.
Conditions d’application du test :
il faut que l’échantillon x1 , . . . , xn soit des réalisations indépendantes d’une variable aléa-
toire X qui suit la loi de Bernoulli B(1, p A ). De plus, il faut que les trois inégalités n 50,
np0 16 et n(1 − p0 ) 16 soient vérifiées.
7.2 Tests de comparaison avec une norme 309
Statistique du test :
p& n,A − p0
si l’hypothèse nulle H0 est vérifiée, alors la variable aléatoire Z = ( suit la
p0 (1 − p0 )
n
loi normale N (0; 1).
Décision et conclusion du test :
la valeur critique du test, notée c1−a/2 , est lue dans une table de la loi normale centrée et
réduite. Si la valeur absolue de la statistique calculée sur l’échantillon, notée Z (obs), est
supérieure ou égale à c1−a/2 , alors le test est significatif au seuil a. Vous rejetez H0 au
seuil a et vous décidez que H1 est vraie au seuil a avec un risque d’erreur de première
espèce a. Si la valeur absolue de la statistique calculée sur l’échantillon, notée Z (obs), est
strictement inférieure à c1−a/2 , alors le test n’est pas significatif au seuil a. Vous conservez
H0 au seuil a avec un risque d’erreur de deuxième espèce b à évaluer.
Remarque : la correction de continuité de Yates, déjà évoquée dans le chapitre 6 et qui
permet le passage d’une loi discrète à une loi continue, dans le calcul de la statistique
de test Z peut être appliquée. Elle permet un meilleur ajustement de la fluctuation de la
statistique de test à la loi normale et en particulier lorsque la taille n de l’échantillon est
faible.
Il existe donc deux fonctions sous R pour réaliser ce test de comparaison à une norme.
B
S – La fonction sous R qui utilise la variable aléatoire nA est la fonction binom.test. Cette
U
fonction travaille toujours avec la loi binomiale et n’utilise pas l’approximation de la loi
binomiale par la loi normale. Elle fournit une p-valeur exacte du test. Cette fonction est
donc préférable, d’autant plus que la taille n de l’échantillon est faible.
– La fonction sous R qui utilise la variable aléatoire Z est la fonction prop.test. La fonction
applique la correction de continuité de Yates par défaut.
contre 481 fillettes, les naissances masculines sont toujours plus nombreuses. Pensez-
vous que les garçons sont plus nombreux significativement que les filles, au seuil de
a = 5 %?
Pour répondre à cette question, vous allez utiliser le test présenté ci-dessus, dans sa
version exacte puisque vous avez R sous la main. Tapez la ligne de commande suivante :
> binom.test(507,988,0.5)
to 0.5
95 percent confidence interval:
0.4814855 0.5447516
sample estimates:
probability of success
0.5131579
contre
H1 : m1 = m2 .
Conditions d’application du test :
il faut que l’échantillon x1 , . . . , xn 1 soit des réalisations indépendantes de la variable aléa-
toire X qui suit la loi normale N (m1 ; s1 ) et que le second échantillon y1 , . . . , yn 2 soit des
réalisations indépendantes de la variable aléatoire Y qui suit la loi normale N (m2 ; s2 ) avec
les variances s21 et s22 connues. De plus, les effectifs n 1 et n 2 peuvent ne pas être égaux.
7.3 Test de comparaison entre deux populations indépendantes 311
Statistique du test :
m&1 − m&2
si l’hypothèse nulle H0 est vérifiée, alors la variable aléatoire Z = 2 suit la loi
s
1 s22
+
n1 n2
normale N (0; 1).
Décision et conclusion du test :
la valeur critique du test, notée c1−a/2 , est lue dans une table de la loi normale centrée
et réduite. Si la valeur absolue de la valeur de la statistique calculée sur l’échantillon,
notée Z (obs) est supérieure ou égale à c1−a/2 , alors le test est significatif au seuil a.
Vous rejetez H0 au seuil a et vous décidez que H1 est vraie au seuil a avec un risque
d’erreur de première espèce a. Si la valeur absolue de la valeur de la statistique calculée
sur l’échantillon, notée Z (obs) est strictement inférieure à c1−a/2 , alors le test n’est pas
significatif au seuil a. Vous conservez H0 au seuil a avec un risque d’erreur de deuxième
espèce b à évaluer.
Une question que vous devez vous poser est : comment vérifier cette hypothèse ?
Pour tester cette hypothèse, vous allez utiliser le test de Fisher-Snedecor qui est présenté
plus loin.
312 7 • Tests paramétriques et non paramétriques
Statistique du test :
& −m
m &2
si l’hypothèse nulle H0 est vérifiée, alors la variable aléatoire Tn 1 +n 2 −2 = (1
1 1
' &
s +
' n1 n2
n 1 Sn21 + n 2 Sn22 (n 1 − 1)Sn21,c + (n 2 − 1)Sn22,c
où s & = = suit la loi de Student
n1 + n2 − 2 n1 + n2 − 2
t(n 1 + n 2 − 2).
Décision et conclusion du test :
la valeur critique du test, notée c1−a/2 , est lue dans une table de la loi de Student. Si la
valeur absolue de la valeur de la statistique calculée sur l’échantillon, notée Tn 1 +n 2 −2 (obs)
est supérieure ou égale à c1−a/2 , alors le test est significatif au seuil a. Vous rejetez H0
au seuil a et vous décidez que H1 est vraie au seuil a avec un risque d’erreur de première
espèce a. Si la valeur absolue de la valeur de la statistique calculée sur l’échantillon,
notée Tn 1 +n 2 −2 (obs) est strictement inférieure à c1−a/2 , alors le test n’est pas significatif
au seuil a. Vous conservez H0 au seuil a avec un risque d’erreur de deuxième espèce b
à évaluer.
La fonction sous R qui permet de réaliser ce test est la fonction t.test avec les
B arguments paired=FALSE et var.equal=TRUE.
S
U
Une question que vous devez vous poser est : comment vérifier cette hypothèse ?
Pour tester cette hypothèse, vous allez utiliser le test de Fisher-Snedecor qui est présenté
au paragraphe 7.3.4.
Statistique du test :
&1 − m
m &2
si l’hypothèse nulle H0 est vérifiée, alors la variable aléatoire Tn = =
Sn2 Sn22
1
+
n1 − 1 n2 − 1
m&1 − m&2
2 suit approximativement la loi de Student t(n), où n est l’entier le plus
S Sn22,c
n 1,c
+
n1 n⎛2 ⎞2 ⎛ ⎞2
⎜
Sn21 Sn22 ⎟ S2
⎜ n 1 ,c
Sn22 ,c ⎟
⎝ + ⎠ ⎝ + ⎠
n1 − 1 n2 − 1 n1 n2
proche de = ·
Sn41 Sn42 Sn41 ,c Sn42 ,c
+ +
(n 1 − 1)3 (n 2 − 1)3 n 21 (n 1 − 1) n 22 (n 2 − 1)
Décision et conclusion du test :
la valeur critique du test, notée c1−a/2 , est lue dans une table de la loi de Student. Si la
7.3 Test de comparaison entre deux populations indépendantes 313
valeur absolue de la valeur de la statistique calculée sur l’échantillon, notée Tn (obs) est
supérieure ou égale à c1−a/2 , alors le test est significatif au seuil a. Vous rejetez H0 au
seuil a et vous décidez que H1 est vraie au seuil a avec un risque de première espèce
a. Si la valeur absolue de la valeur de la statistique calculée sur l’échantillon, notée
Tn (obs) est strictement inférieure à c1−a/2 , alors le test n’est pas significatif au seuil a.
Vous conservez H0 au seuil a avec un risque d’erreur de deuxième espèce b à évaluer.
La fonction sous R qui permet de réaliser ce test est la fonction t.test avec les arguments
B paired=FALSE et var.equal=FALSE.
S
U
Remarque : parfois le degré de liberté est arrondi à l’entier inférieur. Ce n’est pas le cas
avec la fonction t.test dans R.
Le test de Student est assez robuste mais si vous vous éloignez trop de la condition de
normalité qui est nécessaire pour procéder à ce test, il est préférable d’utiliser un test non
paramétrique, comme par exemple le test de Mann-Whitney-Wilcoxon qui a aussi certaines
conditions d’application à savoir que les deux échantillons (X1 , . . . , Xn1 ) et (Y1 , . . . , Yn2 ) sont
aléatoires. De plus, les deux distributions des deux variables doivent avoir la même forme.
Cette dernière condition est très importante. En effet, dans le cas où elle ne serait pas respectée,
le test de Mann-Whitney-Wilcoxon peut aboutir à des conclusions inexactes. Il vous est donc
conseillé de faire une analyse graphique des deux distributions avant d’appliquer ce test.
La fonction sous R qui permet de réaliser ce test est la fonction var.test. Faites attention, car
cette fonction ne porte pas le nom du test dont elle provient comme les autres précédemment.
Or vous verrez dans le paragraphe suivant qu’il existe pourtant une fonction fisher.test et
qui calcule une autre statistique de test. Donc ne vous trompez pas quand vous tapez votre
ligne de commande !
Remarque : vous pouvez constater qu’il manque un cas : comparaison de deux variances
de lois normales d’espérances connues. Ce cas est extrêmement rare dans la pratique.
C’est pourquoi il ne sera pas exposé dans le cadre de cet ouvrage. Si jamais vous devez
l’utiliser, il vous faudra donc le faire vous-même avec une ligne de commande en vous
inspirant du cas où les espérances sont inconnues.
Exemple : le Coucou gris2 est un oiseau qui fait couver ses œufs par des oiseaux d’autres
espèces que la sienne, de tailles très différentes. Une hypothèse a été émise comme
quoi le Coucou gris puisse adapter la taille de ses œufs à la taille du nid dans lequel il
pond. Une étude faite par le biologiste O.H. Latter et publiée sous le titre The Egg Of
Cuculus Canorus : An Enquiry Into The Dimensions Of The Cuckoo’S Ego And The
Relation Of The Variations To The Size Of The Eggs Of The Foster-Parent, With Notes
On Coloration. dans la revue Biometrica, 1902, Volume 1, pages 164-176 sur la largeur
des œufs déposés dans les nids de petite taille (pipit farlouse) ou de plus grande taille
(fauvette) a donné les valeurs (en millimètres) suivantes :
– Dans les nids de pipit farlouse : 17,0 ; 16,9 ; 16,9 ; 17,3 ; 16,8 ; 16,8 ; 17,0 ; 16,5 ; 16,9 ;
16,5 ; 17,0 ; 17,0 ; 16,8 ; 17,0 ; 16,9 ; 17,0 ; 17,0 ; 17,3 ; 16,8 ; 17,1 ; 16,9 ; 16,8 ; 17,1 ;
17,0 ; 17,1 ; 17,2 ; 16,7 ; 16,6 ; 17,2 ; 17,0 ; 17,0.
– Dans les nids de fauvette : 16,0 ; 16,1 ; 16,3 ; 16,5 ; 16,2 ; 15,2 ; 15,6 ; 15,6 ; 16,6 ; 16,0 ;
16,2 ; 16,8 ; 16,0 ; 17,0 ; 17,9 ; 16,0 ; 16,4 ; 16,3 ; 16,9 ; 17,1 ; 17,0 ; 16,1 ; 16,5 ; 16,5 ;
16,1 ; 16,5 ; 17,9 ; 16,5 ; 16,7 ; 16,8.
© Dunod – La photocopie non autorisée est un délit.
2. Le Coucou gris, Cuculus Canorus, est une espèce de coucous très répandue en Eurasie.
316 7 • Tests paramétriques et non paramétriques
> pipit<-c(17.0,16.9,16.9,17.3,16.8,16.8,17.0,16.5,16.9,16.5,
+ 17.0,17.0,16.8,17.0,16.9,17.0,17.0,17.3,16.8,17.1,16.9,16.8,
+ 17.1,17.0,17.1,17.2,16.7,16.6,17.2,17.0,17.0)
> fauvette<-c(16.0,16.1,16.3,16.5,16.2,15.2,15.6,15.6,16.6,16.0,
+ 16.2,16.8,16.0,17.0,17.9,16.0,16.4,16.3,16.9,17.1,17.0,16.1,
+ 16.5,16.5,16.1,16.5,17.9,16.5,16.7,16.8)
> shapiro.test(pipit)
[1] 31
> shapiro.test(fauvette)
[1] 30
7.3 Test de comparaison entre deux populations indépendantes 317
Maintenant, vous allez réaliser le test de Fisher-Snedecor puisque les conditions d’appli-
cation sont vérifiées. Pour cela vous tapez la ligne de commande suivante :
> var.test(pipit,fauvette)
Notons que la fonction var.test nous donne un intervalle de confiance pour le rapport
des variances des deux populations. Par défaut, cet intervalle est construit avec un niveau
de confiance de 95 %.
La p-valeur du test de Fisher-Snedecor étant inférieure ou égale à a = 5 %, le test de
Fisher-Snedecor est significatif au seuil a = 5 %. Vous conservez H0 au seuil a = 5 %
et vous décidez que H1 est vraie au seuil a = 5 % avec un risque d’erreur de première
espèce a = 5 % à évaluer.
Il ne reste plus qu’à faire le test de Student dans le cas où les deux variances des deux
populations ne sont pas égales. Pour cela, tapez la ligne de commande suivante :
> t.test(pipit,fauvette,var.equal=FALSE)
La valeur par défaut de l’argument var.equal est FALSE. Par conséquent, nous aurions
pu écrire plus simplement :
© Dunod – La photocopie non autorisée est un délit.
> t.test(pipit,fauvette)
Notons que la fonction t.test, nous donne un intervalle de confiance pour la différence
des moyennes des deux populations. Par défaut, cet intervalle est construit avec un niveau
de confiance de 95 %.
La p-valeur du test de Student étant inférieure ou égale à a = 5 %, le test est significatif
au seuil a = 5 %. Vous rejetez H0 au seuil a = 5 % et vous décidez que H1 est vraie au
seuil a = 5 % avec un risque de première espèce a = 5 %. Vous pouvez donc affirmer
que le Coucou gris adapte la largeur de ses œufs en fonction de la taille du nid dans lequel
il pond. Il semble qu’il s’agisse d’un phénomène de mimétisme qui permet aux œufs de
Coucou gris de passer plus facilement inaperçus dans le nid dans lequel ils se trouvent !
contre
H1 : p A,1 = p A,2 .
Conditions d’application du test :
les effectifs n 1 et n 2 peuvent ne pas être égaux.
7.3 Test de comparaison entre deux populations indépendantes 319
Statistique du test :
si l’hypothèse
nulle H0est vérifiée, alors la variable aléatoire n A,1 suit la loi hypergéomé-
n A,•
trique H n; n •,1 ; .
n
Décision et conclusion du test :
il faut raisonner ici avec la p-valeur. Donc il faut avoir recours pour ce test au logiciel R.
Vous pouvez trouver dans la littérature une variation de ce test, qui va être présentée ci-dessous,
avec cette fois-ci d’autres conditions d’application et une autre statistique que celle présentée
précédemment. Cette variation utilise l’approximation de la loi hypergéométrique par la loi
normale. Cette approximation a longtemps été utilisée mais avec des logiciels comme R, il est
préférable d’avoir recours au test exact de Fisher présenté ci-dessus.
• Test unilatéral
Le test unilatéral se déduit aisément du test bilatéral.
• Test bilatéral
Hypothèses du test :
ce sont les mêmes que précédemment.
Conditions d’application du test :
les effectifs n 1 et n 2 peuvent ne pas être égaux. De plus, chaque case du tableau de
contingence doit présenter un effectif théorique supérieur ou égal à 5.
Statistique du test :
n A,• × n •,1
n A,1 −
la variable aléatoire Z = ( n suit la loi normale N (0; 1) si
n •,1 × n •,2 × n A,• × n A,•
n 2 (n − 1)
l’hypothèse nulle H0 est vérifiée.
Décision et conclusion du test :
la valeur critique du test, notée c1−a/2 , est lue dans une table de la loi normale centrée
et réduite. Si la valeur absolue de la valeur de la statistique calculée sur l’échantillon,
notée Z (obs), est supérieure ou égale à c1−a/2 , alors le test est significatif au seuil a. Vous
rejetez H0 au seuil a et vous décidez que H1 est vraie au seuil a avec un risque de première
espèce a. Si la valeur absolue de la valeur de la statistique calculée sur l’échantillon, notée
Z (obs), est strictement inférieure à c1−a/2 , alors le test n’est pas significatif au seuil a.
Vous conservez H0 au seuil a avec un risque d’erreur de deuxième espèce b à évaluer.
• Test unilatéral
Le test unilatéral se déduit aisément du test bilatéral.
• Test bilatéral
Hypothèses du test :
vous souhaitez choisir entre les deux hypothèses
H0 : m1 = m2 (ou m D = 0)
contre
H1 : m1 = m2 (ou m D = 0).
Conditions d’application du test :
il faut que l’échantillon d1 , . . . , dn soit des réalisations indépendantes de la variable aléa-
toire D qui suit la loi normale N (m D ; s D ).
Statistique du test :
&D
m
si l’hypothèse nulle H0 est vérifiée, alors la variable aléatoire Tn−1 = √ suit la loi
S D,c / n
1 1
n n
de Student t(n − 1), où m &D = 2
Di et S D,c = & D )2 .
(Di − m
n n−1
i=1 i=1
Décision et conclusion du test :
la valeur critique du test, notée ca , est lue dans une table de la loi de Student. Si la valeur
absolue de la valeur de la statistique calculée sur l’échantillon, notée Tn−1 (obs) est supé-
rieure ou égale à ca , alors le test est significatif au seuil a. Vous rejetez H0 au seuil a
et vous décidez que H1 est vraie au seuil a avec un risque de première espèce a. Si la
valeur absolue de la valeur de la statistique calculée sur l’échantillon, notée Tn−1 (obs) est
strictement inférieure à ca , alors le test n’est pas significatif au seuil a. Vous conservez H0
au seuil a avec un risque d’erreur de deuxième espèce b à évaluer.
La fonction sous R qui permet de réaliser ce test est la fonction t.test, c’est-à-dire celle qui
B est utilisée pour le test qui compare l’espérance avec une norme.
S
U
Exercices 321
Exemple : vous trouverez un exemple qui illustre le cas qui vient d’être présenté dans
l’exercice 2 de ce chapitre.
EN RÉSUMÉ
Commande Description
t.test(x) Permet de réaliser un test de Student de comparaison d’une espérance
inconnue à une valeur de référence, où la variance est inconnue.
pwr.t.test Calcule la puissance pour un test de Student à un, deux échantillons
indépendants ou non, à effectifs égaux.
binom.test(x) Permet de réaliser un test exact de comparaison d’une proportion
à une valeur de référence.
prop.test(x) Permet de réaliser un test de comparaison d’une proportion
à une valeur de référence.
pwr.p.test(x) Calcule la puissance pour un test de comparaison d’une proportion
à une valeur de référence.
pwr.norm.test(x) Calcule la puissance pour un test de comparaison d’une espérance
inconnue à une valeur de référence, où la variance est connue.
t.test(x,y) Permet de réaliser un test de comparaison de deux espérances inconnues
où les variances sont égales (Test de Student) ou inégales (Test de Welch)
et sur des populations indépendantes ou non.
pwr.t2n.test(x,y) Calcule la puissance pour un test de comparaison de deux espérances
(Test de Student) de deux populations à effectifs inégaux.
var.test(x,y) Permet de réaliser un test de comparaison de deux variances inconnues
(Test de Fisher-Snedecor).
© Dunod – La photocopie non autorisée est un délit.
EXERCICES
Le but de cet exercice est de mettre en œuvre le test de Student de comparaison entre deux
espérances de lois normales de variances inconnues mais égales.
Le but de cet exercice est de mettre en place une procédure de test de Student sur deux
populations appariées.
Sujet n° 1 2 3 4 5 6 7 8 9 10 11 12 13
Avant traitement 15 18 17 20 21 18 17 15 19 16 19 17 19
Après traitement 12 16 17 18 17 15 18 14 16 18 20 16 15
Sujet n° 14 15 16 17 18 19 20 21 22 23 24 25 26
Avant traitement 15 14 16 21 20 21 18 17 17 17 15 17 18
Après traitement 17 18 16 15 14 11 13 13 15 14 15 19 14
Sujet n° 27 28 29 30 31 32 33 34 35 36 37
Avant traitement 16 10 17 18 14 15 15 17 17 20 17
Après traitement 16 14 14 15 19 19 16 19 15 17 16
aprs. Quels sont les modes de chacun des deux vecteurs ? Quelles sont les tailles de chacun des
deux vecteurs ? Savez-vous pourquoi cette question vous est posée ?
2) Créez un vecteur diff en faisant la différence entre le vecteur aprs et le vecteur avnt
et affichez à l’écran le vecteur diff. L’ordre dans lequel vous calculez la différence n’a pas
d’importance. Vous pouvez faire avnt moins aprs ou aprs moins avnt.
3) La variable aléatoire que vous étudierez ici est la différence des tensions artérielles. Savez-
vous pourquoi vous allez étudier la variable aléatoire diff ?
4) Avant d’appliquer le test paramétrique adéquat, il vous faut vérifier que le vecteur diff suit
une loi normale. Comment procédez-vous ? Quel test appliquez-vous ? Est-ce que l’hypothèse
de normalité est vérifiée sur le vecteur diff ?
5) Pour répondre à la question initialement posée, quel est le test que vous allez utiliser ? Quel
type de test choisissez-vous ? Test unilatéral ou bilatéral ?
324 7 • Tests paramétriques et non paramétriques
6) Réalisez le test en précisant les deux hypothèses et la statistique du test. Puis concluez,
c’est-à-dire répondez à la question : le traitement a-t-il une action significative, au risque
a = 5 % ?
PROBLÈMES
> tapply(glycines$taille,glycines$espece,summary)
> tapply(glycines$taille,glycines$espece,sd)
3) À cette étape, il vous est suggéré de faire des représentations graphiques. Quel(s) type(s) de
représentation envisagez-vous ?
4) Que font les lignes de commande suivantes ? Tapez-les, les unes à la suite des autres.
> layout(matrix(c(1,2,1,3),nrow=2,ncol=2,byrow=F))
> boxplot(taille~espece,data=glycines)
> glycine_blanche<-glycines[glycines$espece=="glycine blanche",]
> qqnorm(glycine_blanche$taille,ylab="Taille des glycines blanches")
> qqline(glycine_blanche$taille)
> glycine_violette<-glycines[glycines$espece=="glycine violette",]
> qqnorm(glycine_violette$taille,ylab="Taille des glycines violettes")
> qqline(glycine_violette$taille)
Remarque :
1. Dans ces lignes de commande, vous pouvez noter l’introduction d’une nouvelle fonc-
tion layout. Cette dernière modifie la fenêtre graphique. Elle permet de juxtaposer
plusieurs graphiques aux endroits que vous indiquez et le tout sur la même fenêtre.
Enfin, n’oubliez pas de taper layout(1) pour supprimer la partition de la fenêtre
graphique que vous aurez mise en place.
2. Dans ces lignes de commande, vous pouvez noter la présence de deux nouvelles
fonctions qqnorm et qqline. La fonction qqnorm permet de tracer un QQPlot avec la
loi normale comme distribution théorique de référence.
Définition 7.11 Le QQPlot (ou Quantile to Quantile Plot) est un graphique dont
l’objectif est de tester la conformité entre la distribution empirique d’une variable et
une distribution théorique donnée. Souvent, vous appliquerez ce type de représentation
© Dunod – La photocopie non autorisée est un délit.
5) À cette étape et en vous aidant des graphiques que vous venez de tracer, est-ce que vous
envisagez toujours le test que vous avez suggéré ci-dessus ?
6) Les conditions d’application du test que vous souhaitez utiliser sont-elles vérifiées ? Vous
réaliserez un test de Shapiro-Wilk sur les deux échantillons pour conclure au seuil a = 5 %.
Pourquoi vous est-il suggéré un test non paramétrique ?
7) Quel est l’équivalent non paramétrique du test de Student ?
8) Lorsque vous exécutez un test de Mann-Whitney-Wilcoxon, quelle est la différence principale
avec un test de Student qu’il faut noter ?
326 7 • Tests paramétriques et non paramétriques
> wilcox.test(taille~espece,data=glycines,conf.int=TRUE)
Que fait-elle ?
10) Concluez avec un risque d’erreur de première espèce a = 5 %.
Problème 7.2 Comparaison des masses des follicules des lauriers roses :
avant et après séchage
Le jardinier souhaite comparer la masse d’un follicule de laurier rose à la masse sèche de ce
même follicule. Pour cela, il retourne voir l’étudiant en licence de biologie et lui soumet son
problème.
1) Pour commencer l’étudiant isole les données sur les lauriers roses du tableau de données
Mesures5. Comment procède-t-il ? Vous nommerez le nouveau tableau de données lauriers.
2) Combien de lignes et de colonnes a ce nouveau tableau de données ? Quel est le type de
chacune des colonnes ?
3) Exécutez les lignes de commande suivantes :
> la_masse<-lauriers$masse
> la_masse_sec<-lauriers$masse_sec
> diff_laurier<-(la_masse-la_masse_sec)
Que font-elles ?
4) Sur le même graphique :
– dessinez une boîte à moustaches de la variable diff_laurier,
– mettez une légende Différence entre la masse et la masse sèche pour une graine de
laurier sur l’axe des ordonnées,
– mettez un titre Boîte à moustaches ,
– tracez une ligne horizontale d’équation y = 0 dans cette représentation Boîte à
moustaches , à l’aide de la commande suivante :
> abline(h=0, lty=2)
> shapiro.test(diff_laurier)
> t.test(diff_laurier)
> wilcox.test(diff_laurier)
> t.test(lauriers$masse,lauriers$masse_sec,paired=TRUE)
© Dunod – La photocopie non autorisée est un délit.
et :
> wilcox.test(lauriers$masse,lauriers$masse_sec,paired=TRUE)
DU MAL À DÉMARRER
➩ Exercice 7.1
1) Utilisez la fonction c.
2) Utilisez la fonction shapiro.test.
328 7 • Tests paramétriques et non paramétriques
➩ Exercice 7.2
1) Utilisez les fonctions c, mode et length.
2) Créez le vecteur diff des différences.
3) Les échantillons sont-ils appariés ou indépendants ?
4) Utilisez la fonction shapiro.test.
5) Relisez le paragraphe 7.4.
6) Relisez le paragraphe 7.4 et utilisez la fonction t.test.
➩ Problème 7.1
1) Relisez le paragraphe 7.3.
2) Lisez l’aide de la fonction tapply.
3) Quelle est la nature de la variable taille ?
4) Rien à signaler.
5) Étudiez la normalité des deux variables.
6) Utilisez la fonction shapiro.test.
7) Relisez le paragraphe 7.3.1.
8) Quelles sont les hypothèses testées par le test de Mann-Whitney-Wilcoxon ?
9) Consultez l’aide de la fonction wilcox.test.
10) Utilisez la p-valeur calculée à la question précédente.
➩ Problème 7.2
1) Utilisez la fonction subset.
2) Utilisez les fonctions dim ou str.
3) Affichez le vecteur diff_laurier.
4) Consultez l’aide de la fonction boxplot.
5) Les échantillons sont-ils liés ou indépendants ? En fonction de la réponse, relisez le
paragraphe 7.3 ou 7.4.
6) Consultez l’aide de la fonction shapiro.test.
Solution des exercices 329
Exercice 7.1
1)
> jus_orange=c(8.2,9.4,9.6,9.7,10.0,14.5,15.2,16.1,17.6,21.5,14.0,13.8,
+ 12.8,15.0,9.5,10.9,12.4,14.7,10.7,11.1,13.8,13.1,8.6,13.9,15.2,13.6,13.4,
+ 12.3,15.2,11.2,19.6,7.8,14.1,12.5,14.1,17.6,13.5,12.4,12.6,14.6,15.5,11.6,
+ 11.8,12.9,8.1,11.8,18.7,12.6,16.0,15.8,17.2,16.4,11.2,10.2,13.6,13.2,15.9,
+ 9.8,8.8,12.0)
> acide_ascorbique=c(4.2,5.2,5.8,6.4,7.0,7.3,10.1,11.2,11.3,11.5,7.1,9.8,
+ 5.3,4.8,11.9,10.1,12.5,14.6,4.9,9.7,7.0,3.8,5.0,9.3,8.7,8.7,8.7,9.5,2.5,
+ 6.6,13.6,6.6,9.4,12.1,13.1,4.1,12.1,8.8,7.0,7.5)
> shapiro.test(jus_orange)
data: jus_orange
W = 0.98357, p-value = 0.5962
et vous concluez avec la p-valeur obtenue. La p-valeur du test de Shapiro-Wilk étant strictement
supérieure à a = 5 %, le test n’est pas significatif au seuil a = 5 %. Vous conservez H0 au seuil
a = 5 %. Le risque d’erreur associé à cette décision est un risque d’erreur de deuxième espèce
b. Vous ne pouvez pas l’évaluer dans le cas présent mais il est considéré comme satisfaisant car
l’effectif de l’échantillon, auquel le test de Shapiro-Wilk est appliqué, vaut 60 et donc dépasse
30. En effet :
> length(jus_orange)
[1] 60
330 7 • Tests paramétriques et non paramétriques
> shapiro.test(acide_ascorbique)
et vous concluez avec la p-valeur obtenue. La p-valeur du test de Shapiro-Wilk étant strictement
supérieure à a = 5 %, le test n’est pas significatif au seuil a = 5 %. Vous conservez H0 au seuil
a = 5 %. Le risque d’erreur associé à cette décision est un risque d’erreur de deuxième espèce
b. Vous ne pouvez pas l’évaluer dans le cas présent mais il est considéré comme satisfaisant car
l’effectif de l’échantillon, auquel le test de Shapiro-Wilk est appliqué, vaut 40 et donc dépasse
30. En effet :
> length(acide_ascorbique)
[1] 40
3) Comme les conditions d’application sont vérifiées, vous pouvez envisager de réaliser le test
de Student pour deux populations indépendantes. Mais attention à la formulation de la question :
ici il s’agit d’un test unilatéral.
4) Maintenant la question qui reste à résoudre est de savoir si les deux variances des deux
populations sont égales ou pas. Pour répondre à cette question, il suffit de réaliser le test de
Fisher-Snedecor. Vous devez taper la ligne de commande suivante :
> var.test(jus_orange,acide_ascorbique)
Comme la p-valeur est strictement supérieure à a = 5 %, le test n’est pas significatif au seuil
a = 5 %. Vous conservez H0 au seuil a = 5 %. Le risque d’erreur associé à cette décision est
un risque d’erreur de deuxième espèce b que nous n’évaluerons pas ici.
5) Il ne vous reste plus qu’à effectuer un test de Student dans le cas où les deux variances des
deux populations sont égales. Pour cela, tapez la ligne de commande suivante :
> t.test(jus_orange,acide_ascorbique,alternative="greater",var.equal=TRUE)
Exercice 7.2
1)
> avnt<-c(15,18,17,20,21,18,17,15,19,16,19,17,19,15,14,16,21,20,21,18,17,17,
+ 17,15,17,18,16,10,17,18,14,15,15,17,17,20,17)
> aprs<-c(12,16,17,18,17,15,18,14,16,18,20,16,15,17,18,16,15,14,11,13,13,15,
+ 14,15,19,14,16,14,14,15,19,19,16,19,15,17,16)
> mode(avnt)
[1] "numeric"
332 7 • Tests paramétriques et non paramétriques
> mode(aprs)
[1] "numeric"
> length(avnt)
[1] 37
> length(aprs)
[1] 37
Cette question vous a été posée afin de vérifier que les deux vecteurs avnt et aprs sont bien de
même taille, afin d’être certain que R ne recycle pas l’un des deux et dans ce cas cette mesure
affectée par défaut ne correspondrait plus au même patient.
2)
> diff<-aprs-avnt
> diff
[1] -3 -2 0 -2 -4 -3 1 -1 -3 2 1 -1 -4 2 4 0
[17] -6 -6 -10 -5 -4 -2 -3 0 2 -4 0 4 -3 -3 5 4
[33] 1 2 -2 -3 -1
3) Vous étudiez la variable aléatoire diff qui est la différence entre les deux séries de mesures
car les deux échantillons Avant traitement et Après traitement sont des échantillons
appariés et donc non indépendants. En effet, les mesures effectuées ont été faites sur les mêmes
patients.
4) Il faut que vous procédiez à un test de normalité. Le seul que vous connaissez, tout du moins
le seul qui a été présenté dans ce cours est le test de Shapiro-Wilk. Il en existe d’autres que vous
découvrirez peut-être par la suite mais pas dans le cadre de cet ouvrage. Pour réaliser ce test,
vous tapez la ligne de commande suivante :
> shapiro.test(diff)
Solution des exercices 333
data: diff
W = 0.9242, p-value = 0.3937
Comme la p-valeur est strictement supérieure à a = 5 %, le test n’est pas significatif au seuil
a = 5 %. Vous conservez H0 au seuil a = 5 % avec un risque d’erreur de deuxième espèce b.
Vous ne pouvez pas l’évaluer dans le cas présent mais il est considéré comme satisfaisant car
l’effectif de l’échantillon, auquel le test de Shapiro-Wilk est appliqué, vaut 37 et donc dépasse
30. En effet :
> length(diff)
[1] 37
Vous pouvez envisager d’appliquer un test paramétrique sur le vecteur diff puisque les
données n’ont pas permis de refuser l’hypothèse de normalité.
5) Le test paramétrique que vous allez utiliser est le test de Student, puisque la variance est
inconnue.
6) Hypothèses du test :
les deux hypothèses que vous testez sont :
H0 : mavnt = maprs
contre
H1 : mavnt = maprs .
© Dunod – La photocopie non autorisée est un délit.
Statistique du test :
&D
m
la variable aléatoire √ est la statistique du test.
S D,c / n
Pour réaliser le test, tapez la ligne de commande suivante :
> t.test(diff)
data: diff
t = -2.3931, df = 36, p-value = 0.02205
alternative hypothesis: true mean is not equal to 0
334 7 • Tests paramétriques et non paramétriques
La fonction t.test.
B
S
U
Problème 7.1
1) Le test de Student de comparaison entre deux espérances de lois normales de variances
inconnues semble être adapté.
2) La première ligne de commande :
> tapply(glycines$taille,glycines$espece,summary)
$‘glycine blanche‘
Min. 1st Qu. Median Mean 3rd Qu. Max.
8.20 12.33 14.60 14.77 16.88 21.10
$‘glycine violette‘
Min. 1st Qu. Median Mean 3rd Qu. Max.
7.80 10.67 12.00 13.77 14.65 27.00
>tapply(glycines$taille,glycines$espece,sd)
Solution des problèmes 335
3) Le type de représentation graphique que vous pouvez envisager de réaliser est une boîte à
moustaches pour la variable taille dans chacune des deux espèces.
4) Les six lignes de commande exécutent un graphique qui met en place les deux boîtes à
moustaches et les QQPlot pour chacune des deux espèces. Ces deux derniers graphiques vous
permettent de voir si la distribution des données au sein de la population est en adéquation avec
la loi normale.
© Dunod – La photocopie non autorisée est un délit.
Figure 7.1
5) En observant les QQPlot, vous vous apercevez que la distribution de la variable taille des
glycines violettes ne semble pas suivre une loi normale puisqu’un certain nombre de points
s’échappent de la ligne droite. Donc, il semblerait que le test de Student ne soit pas envisageable
car la condition de normalité ne va peut-être pas être vérifiée.
336 7 • Tests paramétriques et non paramétriques
6) Vérifiez que les deux échantillons proviennent bien chacun d’une distribution normale. Pour
cela, effectuez les deux tests de Shapiro-Wilk sur chacun des deux échantillons.
> tapply(glycines$taille,glycines$espece,shapiro.test)
$‘glycine blanche‘
Shapiro-Wilk normality test
data: X[[i]]
W = 0.97977, p-value = 0.4906
$‘glycine violette‘
Shapiro-Wilk normality test
data: X[[i]]
W = 0.83629, p-value = 2.386e-06
Pour les glycines blanches, la p-valeur étant strictement supérieure à a = 5 %, le test n’est pas
significatif au seuil a = 5 %. Donc vous acceptez H0 au seuil a = 5 % avec un risque d’erreur
de deuxième espèce b. Vous ne pouvez pas l’évaluer dans le cas présent mais il est considéré
comme satisfaisant car l’effectif de l’échantillon, auquel le test de Shapiro-Wilk est appliqué,
vaut 54 et donc dépasse 30. En effet :
> tapply(glycines$taille,glycines$espece,length)
Pour les glycines violettes, la p-valeur étant inférieure ou égale à a = 5 %, le test est
significatif. Donc vous rejetez H0 au seuil a = 5 % et vous décidez que H1 est vraie au seuil
a = 5 % avec un risque de première espèce a = 5 %.
Donc une des deux hypothèses de normalité, condition d’application du test de Student, n’est
pas vérifiée. Il faut donc que vous envisagiez de réaliser un test non paramétrique, équivalent au
test de Student.
7) Le test non paramétrique, équivalent du test paramétrique de Student, est le test de Mann-
Whitney-Wilcoxon.
8) Une première différence entre les deux tests est au niveau de la formulation des hypothèses
du test. Le test de Mann-Whitney-Wilcoxon teste les deux hypothèses suivantes :
H0 : L(X ) = L(Y )
contre
H1 : L(X ) = L(Y ).
Solution des problèmes 337
9) La ligne de commande :
> wilcox.test(taille~espece,data=glycines,conf.int=TRUE)
Problème 7.2
1) Pour isoler les données sur les lauriers roses du tableau de données Mesures5, l’étudiant doit
taper la ligne de commande suivante :
2) Pour répondre aux questions qui vous sont posées, tapez la ligne de commande suivante :
> str(lauriers)
qui renvoie :
Ce nouveau tableau de données a 72 lignes et 5 colonnes. Quatre colonnes sont des variables
quantitatives, trois d’entre elles sont de type numérique et la quatrième est de type entier. Enfin,
la dernière colonne est une variable qualitative puisqu’elle est mentionnée comme Factor.
3) Les lignes de commande donnent lieu à la création d’une nouvelle variable diff_laurier
qui est la différence entre la masse d’un follicule et la masse sèche de ce même follicule de
laurier rose.
4) Le graphique que vous êtes censé obtenir si vous avez suivi les instructions à la lettre est
représenté à la figure 7.2.
Figure 7.2
5) D’après les deux graphiques de la figure 7.2, il semblerait que l’hypothèse de normalité
nécessaire au test paramétrique de Student soit vérifiée. Vous le confirmez par un test de
normalité à la question suivante.
Solution des problèmes 339
> shapiro.test(diff_laurier)
data: diff_laurier
W = 0.9764, p-value = 0.2149
Comme la p-valeur est strictement supérieure à a = 5 %, le test n’est pas significatif au seuil
a = 5 %. Vous conservez H0 au seuil a = 5 % avec un risque d’erreur de deuxième espèce b.
Vous ne pouvez pas l’évaluer dans le cas présent mais il est considéré comme satisfaisant car
l’effectif de l’échantillon, auquel le test de Shapiro-Wilk est appliqué, vaut 72 et donc dépasse
30. En effet :
> length(diff_laurier)
[1] 72
> t.test(diff_laurier)
data: diff_laurier
t = 35.3424, df = 68, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
3.240851 3.628714
sample estimates:
mean of x
3.434783
8) L’équivalent du test de Student en non paramétrique est le test des rangs signés de Wilcoxon.
9) La ligne de commande
> wilcox.test(diff_laurier)
data: diff_laurier
V = 2415, p-value = 5.28e-13
alternative hypothesis: true location is not equal to 0
> t.test(lauriers$masse,lauriers$masse_sec,paired=TRUE)
Paired t-test
data: lauriers$masse and lauriers$masse_sec
t = 35.342, df = 68, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
3.240851 3.628714
sample estimates:
mean of the differences
3.434783
> wilcox.test(lauriers$masse,lauriers$masse_sec,paired=TRUE)
Tests du Khi-deux
The combination of some data and an aching desire for an answer does not ensure that a
reasonable answer can be extracted from a given body of data.
De John W. Tukey, Sunset salvo , The American Statistician, Vol. 40, No. 1, 1986.
Objectifs de ce chapitre
➤ étudier les liens entre deux variables qualitatives
➤ étudier l’adéquation entre la distribution d’une variable au sein d’une population et une
distribution théorique
➤ présenter les tests du x2 d’indépendance et d’adéquation
➤ présenter le test exact de Fisher
➤ présenter le test de Mac-Nemar
Si l’hypothèse nulle H0 est vérifiée et lorsque les conditions d’application du test du x2 sont
remplies, x2 (obs) est une réalisation d’une variable aléatoire qui suit approximativement la loi
du Khi-deux à ( p − 1)(q − 1) degrés de liberté.
Décision et conclusion du test :
pour un seuil fixé a, les tables de la loi du Khi-deux
à ( p − 1)(q − 1) degrés de liberté vous
fournissent une valeur critique ca telle que : P x2 (( p − 1)(q − 1)) ca = 1 − a. Alors vous
décidez :
si x2 (obs) < ca H0 est vraie,
si x2 (obs) ca H1 est vraie.
Dans le cas où vous ne pouvez pas rejeter H0 au seuil a et par conséquent vous l’acceptez au
seuil a par défaut, vous devriez calculer le risque d’erreur de deuxième espèce b du test. Dans le
cadre de ce livre, la formule pour calculer le risque d’erreur ne sera pas donnée et par conséquent
vous ne pourrez pas calculer la puissance du test.
Remarque : ce test, tel qu’il est exposé, ne peut pas être appliqué à des échantillons
appariés. Le test de Mac-Nemar peut s’utiliser dans ce cas. Ce dernier sera présenté à la
fin de ce chapitre.
+ n i,• × n •, j ++ 1
+
p
q +n i, j − n •,• + 2
−
x2 (obs) = n i,• × n •, j ·
i=1 j=1
n •,•
2. Il existe également le test exact de Fisher dans le cas de deux variables qualitatives à deux
modalités. La fonction sous R qui permet de réaliser ce test est la fonction fisher.test.
Vous trouverez un exemple qui illustre ce cas dans l’exercice 1 de ce chapitre.
3. R permet de s’affranchir de ces conditions si vous le demandez au langage grâce à l’option
simulate.p.value=TRUE, qui calcule alors la valeur exacte de la p-valeur en utilisant la
méthode de Monte-Carlo.
4. S’il y a plus de deux modalités, vous pouvez essayer d’en regrouper si cela est possible,
c’est-à-dire si cela a un sens.
344 8 • Tests du Khi-deux
Enfin, il faut faire une étude de résidus. Lorsque l’hypothèse d’indépendance H0 est vérifiée,
les termes dont les carrés sont les contributions à la valeur x2 (obs) et qui sont définis par :
n i,• × n •, j
n i, j −
n •,•
' ,
n i,• × n •, j
n •,•
sont des réalisations de variables aléatoires qui suivent approximativement la loi normale centrée
et réduite.
Vous pouvez montrer qu’une meilleure approximation de la loi normale centrée et réduite est
obtenue si vous considérez les valeurs ci-dessus et que vous les divisez par des estimations des
écarts-types correspondants :
'
n i,• n •, j
1− 1− .
n •,• n •,•
Vous pouvez alors étudier les écarts réduits comme vous le ferez pour des résidus obtenus après
une régression linéaire simple (chapitre 9) ou une analyse de la variance (chapitre 10).
Si l’hypothèse nulle H0 est vérifiée et lorsque les conditions d’application du test du x2 sont
remplies, x2 (obs) est une réalisation d’une variable aléatoire qui suit approximativement la loi
du Khi-deux à (K − 1) degrés de liberté.
Décision et conclusion du test :
pour un seuil fixé a, les tables de laloi du Khi-deux à(K − 1) degrés de liberté vous fournissent
une valeur critique ca telle que : P x2 (K − 1) ca = 1 − a. Alors vous décidez :
si x2 (obs) < ca H0 est vraie,
si x2 (obs) ca H1 est vraie.
La fonction sous R qui permet de réaliser ce test est la fonction chisq.test.
B
S
U
Exemple : vous trouverez un exemple qui illustre ce cas dans l’exercice 3 de ce chapitre.
Pour présenter le principe du test exact de Fisher (1922), vous commencez par étudier le cas de
deux variables X et Y , ayant deux modalités. Vous traiterez ensuite le cas général.
Y
X\ 1 2 Totaux
1 n 1,1 n 1,2 n 1,•
2 n 2,1 n 2,2 n 2,•
Totaux n •,1 n •,2 n •,•
346 8 • Tests du Khi-deux
Dans ce tableau, les marges (n 1,• , n 2,• , n •,1 , n •,2 ) n’apportent pas d’information sur l’éventuelle
dépendance de X et de Y . Ce sont les valeurs prisent par n 1,1 , n 1,2 , n 2,1 et n 2,2 qui servent pour
étudier la dépendance de X et de Y .
Hypothèses du test :
Exemple : vous cherchez à savoir s’il existe une association entre la couleur des yeux,
clairs ou foncés, et la couleur des cheveux, blonds ou bruns, chez les êtres humains. Un
groupe de 20 individus de sexe féminin ou masculin ont été observés et voici les résultats :
Blonds 5 1 6
Bruns 0 14 14
Totaux 5 15 20
contre
Pour choisir entre les deux hypothèses, vous allez réaliser un test exact de Fisher. Pour
cela, tapez la ligne de commande suivante :
> fisher.test(matrix(c(5,1,0,14),ncol=2,byrow=TRUE))
Y
X\ y1 ··· yj ··· yq Totaux
x1 n 1,1 ··· n 1, j ··· n 1,q n 1,•
.. .. .. .. ..
. . . . .
xi n i,1 ··· n i, j ··· n i,q n i,•
.. .. .. .. ..
. . . . .
xp n p,1 ··· n p, j ··· n p,q n p,•
Totaux n •,1 ··· n •, j ··· n •,q n •,•
Dans ce tableau, les marges (n 1,• , . . . , n p,• , n •,1 , . . . , n •,q ) n’apportent pas d’information sur
l’éventuelle dépendance entre X et Y . Ce sont les valeurs prisent par n 1,1 , n 1,2 , . . ., n 1,q , n 2,1 ,
. . ., n 2,q , . . ., n i, j , . . ., n p,q−1 et n p,q qui servent pour étudier la dépendance entre X et Y .
Vous souhaitez choisir entre les deux hypothèses suivantes :
Y
X\ A B Totaux
A n 1,1 n 1,2 n 1,•
B n 2,1 n 2,2 n 2,•
Totaux n •,1 n •,2 n •,•
8.4 Test de Mac-Nemar 349
Hypothèses du test :
l’hypothèse H0 que vous cherchez à tester est que les totaux marginaux de chaque réponse sont
les mêmes pour chacun des deux tests :
n 1,1 + n 1,2 = n 1,1 + n 2,1 et n 2,1 + n 2,2 = n 1,2 + n 2,2 .
Ainsi le jeu d’hypothèses auquel le test permet de s’intéresser est :
H0 : n 1,2 = n 2,1
contre
H1 : n 1,2 = n 2,1 .
Si l’hypothèse nulle H0 est vérifiée et lorsque les conditions d’application du test sont remplies,
la statistique McN suit approximativement la loi du Khi-deux à 1 degré de liberté.
Décision et conclusion du test :
vous utiliserez la p-valeur donnée par R ou par un autre logiciel de statistique pour conclure.
Remarque :
1. Ce test permet de comparer deux proportions sur deux populations dans le cas où les
deux échantillons sont appariés.
2. Le test d’homogénéité marginale est une extension du test de Mac-Nemar dans
le cas des variables qualitatives à plus de deux modalités. Il permet de comparer des
proportions, au nombre de deux ou plus, sur des populations, au nombre de deux ou
plus, lorsque les échantillons sont appariés.
Exemple : vous trouverez un exemple qui illustre le cas qui vient d’être présenté dans
l’exercice 4 de ce chapitre.
EN RÉSUMÉ
Commande Description
chisq.test Permet de réaliser un test du Khi-deux d’indépendance ou d’adéquation.
fisher.test Permet de réaliser un test exact de Fisher d’indépendance.
mcnemar.test Permet de réaliser un test d’homogénéité marginale de Mac-Nemar.
EXERCICES
> Rhesus<-as.table(as.matrix(Rhesus))
> plot(Rhesus,main="Dénombrements")
Exercices 351
Figure 8.1
> chisq.test(Rhesus,simulate.p.value=FALSE)
> chisq.test(Rhesus,simulate.p.value=TRUE,B=50000)
> fisher.test(Rhesus)
> fisher.test(Rhesus,simulate.p.value=TRUE,B=50000)
> chisq.test(flor)
> chisq.test(flor,simulate.p.value=T,B=100000)
6) Calculez les résidus associés à ce modèle. Pour cela, exécutez la ligne de commande suivante :
> chisq.test(flor)$residuals
À quoi les résidus peuvent-ils vous être utiles lorsque vous effectuez un test du x2 d’indépen-
dance ?
7) Une représentation graphique de ces résidus est appelée association plot . Pour la
construire, il faut charger en mémoire, et donc éventuellement télécharger, le package vcd pour
accéder à la fonction assoc. Ensuite, exécutez la ligne de commande suivante et commentez le
graphique obtenu :
Exercices 353
> assoc(t(flor),shade=TRUE)
Fleuri
Figure 8.2
© Dunod – La photocopie non autorisée est un délit.
À partir de cet échantillon, vous voulez savoir s’il est possible que la répartition des couleurs
dans l’urne soit de 9/16 de boules noires, 3/16 de boules rouges, 3/16 de boules jaunes et 1/16
de boules vertes.
354 8 • Tests du Khi-deux
> mcnemar.test(radio)
> binom.test(radio[2],n=sum(radio[c(2,3)]))
Que fait-elle ?
DU MAL À DÉMARRER
➩ Exercice 8.1
1) Utilisez la fonction matrix.
2) Affichez l’objet Rhesus.
3) Utilisez la fonction class.
4) Que représente le graphique ?
Du mal à démarrer 355
➩ Exercice 8.2
➩ Exercice 8.4
Exercice 8.1
1) Pour introduire les données dans R, tapez les lignes de commande suivantes :
> Rhesus<-matrix(c(3620,3805,934,172,631,676,165,30),nrow=2,byrow=TRUE)
> rownames(Rhesus)<-c("Rh+","Rh-")
> colnames(Rhesus)<-c("O","A","B","AB")
2) Pour vérifier que les données sont celles de l’énoncé, tapez la ligne de commande suivante :
> Rhesus
O A B AB
Rh+ 3620 3805 934 172
Rh- 631 676 165 30
> class(Rhesus)
[1] "matrix"
Donc, Rhesus n’est pas un objet de classe table. Pour remédier à cela, tapez la ligne de
commande suggérée par l’énoncé :
> Rhesus<-as.table(as.matrix(Rhesus))
> class(Rhesus)
Vous obtenez bien ce qui est attendu à savoir que l’objet Rhesus est de classe :
[1] "table"
4) Les largeurs des deux barres indiquent qu’il y a beaucoup plus de personnes avec un Rhésus
positif qu’avec un Rhésus négatif dans l’échantillon. Les groupes sanguins A et O sont de loin
Solution des exercices 357
les plus représentés dans l’échantillon, B est plus rare et AB l’est encore plus. La répartition des
groupes sanguins ne semble pas dépendre du Rhésus car les subdivisions verticales sont situées
au même niveau pour les deux colonnes Rhésus + et Rhésus -.
5) Les marges du tableau de données sont calculées par les lignes de commande :
> margin.table(Rhesus)
> margin.table(Rhesus,margin=1)
> margin.table(Rhesus,margin=2)
> chisq.test(Rhesus,simulate.p.value=FALSE)$expected
O A B AB
Rh+ 3614.5999 3810.1675 934.4731 171.75939
Rh- 636.4001 670.8325 164.5269 30.24061
Tous les effectifs attendus sont supérieurs à 5 et l’effectif total de l’échantillon est supérieur
à 50, vous pouvez donc réaliser un test du x2 d’indépendance en utilisant les approximations
classiques.
data: Rhesus
X-squared = 0,10456 df = 3, p-value = 0,9913
Comme la p-valeur est égale à 0,9913, le test n’est pas significatif au niveau a = 5 %. Vous
n’avez pas mis en évidence de lien significatif entre le groupe sanguin et le Rhésus. Le risque
d’erreur associé à cette décision est un risque d’erreur de deuxième espèce b. Pour l’évaluer, il
faudrait calculer la puissance du test, ce qui n’est pas présenté dans ce livre.
7)
> chisq.test(Rhesus,simulate.p.value=TRUE,B=50000)
data: Rhesus
X-squared = 0,10456 df = NA, p-value = 0,9914
8)
> fisher.test(Rhesus)
data: Rhesus
p-value = 0,991
alternative hypothesis: two.sided
9)
> fisher.test(Rhesus,simulate.p.value=TRUE,B=50000)
data: Rhesus
p-value = 0,9909
alternative hypothesis: two.sided
Tous les tests réalisés aux questions 6), 7), 8) et 9) aboutissent à la même conclusion.
Exercice 8.2
1) Pour introduire les données dans R, tapez les lignes de commande suivantes :
> flor<-matrix(c(34,73,63,16,12,12),nrow=2,byrow=T)
> rownames(flor)<-c("Fleuri","Pas fleuri")
> colnames(flor)<-c("Engrais A","Engrais B","Engrais C")
> flor<-as.table(flor)
> flor
> dim(flor)
[1] 2 3
> plot(flor,main="Dénombrements")
5) La ligne de commande réalise un test du x2 d’indépendance entre les deux variables qualita-
tives étudiées, la p-valeur associée au test étant calculée en réalisant une approximation par la
loi du Khi-deux à 2(= (3 − 1) ∗ (2 − 1)) degrés de liberté.
> chisq.test(flor)$expected
© Dunod – La photocopie non autorisée est un délit.
Tous les effectifs attendus sont supérieurs à 5 et l’effectif total de l’échantillon est supérieur à
50, l’approximation usuelle est donc valide. Le résultat du test est :
> chisq.test(flor)
data: flor
X-squared = 7.2316, df = 2, p-value = 0.0269
360 8 • Tests du Khi-deux
Figure 8.3
> chisq.test(flor)$residuals
7) La fonction assoc permet de représenter graphiquement les résidus qui sont des indicateurs
de liaisons entre les modalités des deux variables. Les couples de modalités représentés en gris
sont à considérer comme neutres et seuls ceux qui apparaissent en bleu ou en rouge sont à
interpréter. Dans cet exemple, un seul couple de modalités est mis en avant : Engrais A et Pas
fleuri. Compte tenu du signe positif du résidu, vous concluez que l’utilisation de l’Engrais A
tend à augmenter de manière importante l’absence de floraison.
> res.test<-chisq.test(c(100,18,24,18),p=c(90,30,30,10),
+ rescale.p=TRUE)
> res.test$expected
[1] 90 30 30 10
Pour procéder au test d’adéquation, vous pouvez utiliser l’approximation par la loi du Khi-deux
à 3 = (4 − 1) degrés de liberté car tous les effectifs attendus sont supérieurs à 5 et que l’effectif
total de l’échantillon est supérieur à 50. Vous pouvez donc consulter les résultats calculés par
défaut par R.
© Dunod – La photocopie non autorisée est un délit.
> res.test
R permet de calculer une p-valeur par simulation qui vous permettra d’utiliser le test même
lorsque l’approximation par la loi du Khi-deux n’est plus valable.
> chisq.test(c(100,18,24,18),p=c(90,30,30,10),rescale.p=TRUE,
+ simulate=TRUE)
362 8 • Tests du Khi-deux
Exercice 8.4
1) Pour introduire les données dans R, tapez les lignes de commande suivantes :
> radio<-matrix(c(103,12,18,35),nrow=2,byrow=T)
> rownames(radio)<-c("Bras cassé","Bras normal")
> colnames(radio)<-c("Bras cassé","Bras normal")
> radio<-as.table(radio)
> radio
3) Les données sont appariées, il n’est pas possible d’utiliser un test du x2 . Le test de Mac-Nemar
est par contre approprié. Vous observez que n 1,2 + n 2,1 = 18 + 12 = 30 20 et vous considérez
que n 1,2 et n 2,1 sont suffisamment grands. Les conditions de l’utilisation de l’approximation par
la loi du Khi-deux à 1 degré de liberté pour le test de Mac-Nemar sont donc vérifiées.
4) La ligne de commande suivante exécute un test de Mac-Nemar avec correction de continuité,
choix par défaut dans R. L’option correct permet d’utiliser ou non la correction de continuité.
mcnemar.test(radio)
data: radio
McNemar’s chi-squared = 0.8333, df = 1, p-value = 0.3613
5) Il est possible d’utiliser un test binomial lorsque les conditions d’application de l’approxi-
mation par la loi du Khi-deux à 1 degré de liberté pour le test de Mac-Nemar ne sont pas
remplies.
> binom.test(radio[2],n=sum(radio[c(2,3)]))
Certains logiciels ont systématiquement recours au test binomial car c’est un test exact.
Objectifs de ce chapitre
➤ introduire le vocabulaire de la théorie de la régression linéaire simple
➤ définir la méthode des moindres carrés
➤ donner les formules pour calculer les coefficients de la droite de régression
➤ donner la décomposition de la variation et la formule du coefficient de détermination
➤ établir les intervalles de confiance et les tests pour la pente de la droite et l’ordonnée à
l’origine
1. Tous les modèles décrivent imparfaitement la réalité mais certains peuvent être utiles pour la comprendre.
9.1 Ajustement linéaire en statistique descriptive 365
N
d(b0 , b1 ) = (Yk − b0 − b1 X k )2 ,
k=1
ait un minimum global sur R2 en (b0 , b1 ). C’est la raison pour laquelle cette méthode s’appelle
aussi la méthode des moindres carrés ordinaires. Le minimum de cette fonction d positive et
différentiable sur R2 est réalisé en un unique point critique, c’est-à-dire en un point où les deux
dérivées partielles de cette fonction sont nulles.
Remarque :
1. (Yk − b0 − b1 X k )2 représente le carré de la distance verticale du point (X k , Yk ) à la
droite, d’équation y = b0 + b1 x, considérée comme la meilleure.
2. b1 est le coefficient directeur de la droite, également appelé la pente de la droite, et
b0 son ordonnée à l’origine.
3. La fonction d a pour variables b0 et b1 . Les dérivées partielles seront ainsi calculées
suivant ces deux variables et les équations définissant le point critique résolues par
rapport à ces deux variables. Ici les inconnues ne sont pas les variables X k et Yk mais
les variables b0 et b1 .
4. Notez aussi que les données introduites ci-dessus sont issues d’une population. Mais
les mêmes notions peuvent être définies dans le cadre d’un échantillon. Dans la suite
du paragraphe 9.1, tout est présenté dans le cadre d’une population. Les notions
supplémentaires qui apparaissent lorsque vous travaillez avec un échantillon seront
présentées à partir du paragraphe 9.2.
Définition 9.1 La droite de régression de Y par rapport à X est la droite d’équation y = b0 +b1 x
qui rend la fonction d(b0 , b1 ) minimale.
Les valeurs des nombres réels b1 et b0 en sont déduites :
Remarque :
1. La droite de régression obtenue par la méthode des moindres carrés, notée D et
d’équation y = b0 + b1 x, passe par le centre de masse (m(X ), m(Y )) du nuage de
points (X 1 , Y1 ), . . . , (X N , Y N ).
2. En échangeant les rôles des variables X et Y , vous obtenez la régression linéaire de X
en Y . En général les deux droites de régression sont distinctes.
3. Faites attention à la définition de la covariance qui intervient dans la définition de b1 .
En effet, cette dernière a été modifiée par rapport à celle du chapitre 5 puisqu’ici la
série statistique n’est pas donnée par un tableau à double entrée mais par les points
relevés et numérotés avec un seul indice k.
4. Le langage R donne dans l’ordre suivant le coefficient b0 puis le coefficient b1 , bien
que le coefficient b0 se calcule à partir du coefficient b1 . R appelle le coefficient b0
l’intercept.
Les fonctions sous R qui permettent de réaliser le calcul de ces coefficients sont la fonction lm
B puis la fonction coef.
S
U
Exemple : vous trouverez un exemple qui illustre le calcul des deux coefficients de la
droite de régression dans l’exercice 1 de ce chapitre.
– Généralement, lorsque vous mesurez Y sur des individus avec une même valeur de X ,
vous observez encore une certaine variation. Il s’agit de la variation inexpliquée par la
régression linéaire de Y en X obtenue par la méthode des moindres carrés.
N
La somme des carrés (Yk − Y&k )2 est appelée la somme des carrés des résidus ou la
k=1
variation résiduelle et est notée SCres .
Vous avez donc l’égalité suivante :
&k − m(Y )) représente la différence expliquée par l’ajustement. (Yk − Y&k ) repré-
Définition 9.2 (Y
sente la différence inexpliquée par l’ajustement ou le résidu de l’ajustement.
Théorème 9.3 Suite à cette définition, et à l’encadré ci-dessus, la décomposition de la variation
totale se traduit mathématiquement par :
N N
2 N
2
(Yk − m(Y ))2 = Y&k − m(Y ) + Yk − Y&k .
k=1 k=1 k=1
Remarque : vous ne trouverez pas ici de démonstration de ce théorème mais sachez qu’il
s’agit d’une généralisation du théorème de Pythagore !
La fonction sous R qui permet de récupérer ces valeurs est la fonction anova. Attention, cette
B dernière ne donne que les variations (appelées Sum Sq par R) expliquée par la régression
S
U
(dénommée comme la variable explicative par R) et résiduelle (appelée Residuals par R).
Exemple : vous trouverez un exemple qui illustre le calcul de ces variations dans l’exercice
1 de ce chapitre.
Le pourcentage de la variation totale qui est expliquée par l’ajustement est évalué par le coeffi-
cient de détermination qui est défini ci-dessous.
Définition 9.4 Le coefficient de détermination, noté R 2 , est défini par :
Remarque :
1. Le coefficient de détermination R 2 prend ses valeurs entre 0 et 1.
2. Plus le coefficient de détermination R 2 est proche de 1, plus les données sont alignées
sur la droite de régression.
Exemple : vous trouverez un exemple qui illustre le calcul de ce coefficient dans l’exercice
1 de ce chapitre.
Définition 9.5 Ces caractéristiques de la régression peuvent se résumer dans un tableau appelé
tableau de l’analyse de la variance.
Sources Sommes Degrés Carrés
de Variation des carrés de liberté moyens
SCreg
Expliquée par SCreg 1 C Mreg =
1
la régression
SCres
Résiduelle SCres N −2 C Mres =
N −2
Totale SCtot N −1
Les deux paramètres b0 et b1 sont inconnus mais fixes. Les variables aléatoires ´i sont les
variables d’erreur qui sont supposées vérifier des hypothèses, appelées aussi conditions fonda-
mentales, qui sont au nombre de trois :
1. Les variables aléatoires ´i sont indépendantes.
2. Les variables ´i ont toutes la même variance inconnue s2 . C’est la condition d’homogénéité
des variances.
3. Les variables ´i suivent la loi normale centrée et de variance s2 .
Remarque :
1. Les variables ´i rendent compte des fluctuations que vous pourriez observer parmi les
yi associées aux mêmes valeurs de xi .
2. Dans la définition ci-dessus, il est mentionné que les paramètres b0 et b1 sont inconnus.
Il faudra donc les estimer. De plus la variance s2 des variables ´i est aussi inconnue.
Il faudra aussi l’estimer.
Remarque : s2 s’appelle ainsi car cela vient du fait qu’elle est liée à la variable ´, parfois
appelée aussi résidu.
observé. Soient B0 et B1 les variables aléatoires qui prennent les valeurs b0,n et b1,n . b0,n et
b1,n sont des estimations de b0 et b1 , nous les notons b ,0 et b
,1 .
Théorème 9.8 B1 et B0 sont des estimateurs sans biais de b1 et de b0 . En effet, nous avons :
E(B1 ) = b1 et E(B0 ) = b0 .
Remarque :
,1 et b
1. b ,0 sont des estimations ponctuelles sans biais de b1 et de b0 .
,1 et b
2. Vous pouvez récupérer les valeurs b ,0 avec R. Il suffit d’utiliser les fonctions lm
et coef déjà rencontrées précédemment.
370 9 • Régression linéaire simple
Pour récupérer l’estimation de la variance s2 avec R, vous pouvez procéder de deux façons :
B
S 1. utiliser la fonction summary, appliquée à la fonction lm, puis prendre la valeur qui se trouve
U
à côté de l’expression Residual standard error et l’élever au carré. En fait, la fonction
summary de R ne donne pas une estimation ponctuelle de la variance s2 mais une estimation
ponctuelle de l’écart-type s,
2. utiliser la fonction anova, appliquée au résultat de la fonction lm, et lire la valeur du carré
moyen résiduel, Residuals Mean Sq.
Vous déduisez de ce théorème la proposition suivante qui vous donne l’intervalle de confiance
pour la pente b1 .
La fonction summary appliquée à la droite de régression que vous avez ajustée vous donne la
S
B ,1 , de sB et de TB ,n−2 (obs), qui est la réalisation de TB ,n−2 .
valeur de b 1 1 1
U
Remarque : pour vérifier la condition d’application, il vous faudra réaliser un test de Shapiro-
Wilk sur les résidus. Cette procédure a été détaillée au paragraphe 9.3.1.
Exemple : vous trouverez un exemple qui illustre cette procédure dans les exercices 1 et
2 de ce chapitre.
Vous déduisez de ce théorème la proposition suivante qui vous donne l’intervalle de confiance
pour l’ordonnée à l’origine b0 .
La fonction summary appliquée à la droite de régression que vous avez ajustée vous donne la
S
B ,0 , de sB et de TB ,n−2 (obs), qui est la réalisation de TB ,n−2 .
valeur de b 0 0 0
U
Proposition 9.14 Sous la condition que les variables aléatoires ´i sont indépendantes et suivent
la loi normale centrée et de variance s2 , au risque a, l’intervalle de confiance de la valeur
moyenne prise par la variable Y est égal à :
⎤
⎡
1 (x − x ) 2 1 (x − x ) 2
⎦&y0 − tn−2;1−a/2 s R2 +
0 n
;&
y0 + tn−2;1−a/2 s R2 +
0 n ⎣.
n ns 2 (x) n ns 2 (x)
Proposition 9.15 Sous la condition que les variables aléatoires ´i sont indépendantes et suivent
la loi normale centrée et de variance s2 , au risque a, l’intervalle de prévision de la valeur prise
par la variable Y est égal à :
⎤
⎡
1 (x0 − x n ) 2 1 (x0 − x n ) ⎣2
⎦&y0 − tn−2;1−a/2 s R2 1 + + ;&
y0 + tn−2;1−a/2 s R2 1 + + .
n 2
ns (x) n ns 2 (x)
Si seule l’hypothèse de normalité n’est pas vérifiée, il est possible d’utiliser un test de
permutation pour déterminer si le test de nullité de la pente b1 de la droite est significatif au
seuil a ou non. La fonction lmp de la bibliothèque lmPerm automatise cette solution.
© Dunod – La photocopie non autorisée est un délit.
• Test unilatéral
Le test unilatéral se déduit aisément du test bilatéral présenté ci-dessous.
• Test bilatéral
Hypothèses du test :
H0 : b0 = 0
contre
H1 : b0 = 0.
374 9 • Régression linéaire simple
EN RÉSUMÉ
Commande Description
lm Permet de construire la droite de régression.
coef Donne les coefficients de la droite de régression.
summary Donne les coefficients de la droite de régression et les tests associés.
fitted Calcule les valeurs ajustées à partir de la droite de régression
pour les observations initiales.
predict Calcule les valeurs ajustées, les intervalles de confiance et les
intervalles de prévision à partir de la droite de régression
pour n’importe quelle valeur.
confint Calcule les intervalles de confiance pour la pente et l’ordonnée
à l’origine de la droite de régression.
anova Donne le tableau de l’analyse de la variance.
residuals Calcule les résidus.
lmp Utilise des tests de permutation au lieu de la théorie classique
basée sur la loi normale.
Exercices 375
EXERCICES
H0 : b0 = 0 contre H1 : b0 = 0 .
H0 : b1 = 0 contre H1 : b1 = 0 .
H0 : b0 = 0 contre H1 : b0 = 0 .
H0 : b1 = 0 contre H1 : b1 = 0 .
DU MAL À DÉMARRER
Exercice 9.1
1) Pour isoler les données sur les lauriers roses, tapez la ligne de commande suivante :
> plot(taille~masse,data=lauriers,pch=19)
378 9 • Régression linéaire simple
18
16
14
taille
12
10
3 4 5 6
masse
Figure 9.1
2) Il semblerait qu’en regardant la figure 9.1, une relation linéaire pourrait exister entre les deux
variables taille et masse d’un follicule de laurier rose.
3)
> droite_lauriers<-lm(taille~masse,data=lauriers)
> coef(droite_lauriers)
(Intercept) masse
6.413523 1.700114
> fitted(droite_lauriers)
Les ordonnées y&i se lisent sous les nombres entiers. Ils varient de 181 à 252 car ils proviennent
du tableau de données complet Mesures où ils correspondent aux numéros des lignes contenant
les observations réalisées sur les follicules de laurier rose.
5)
> abline(coef(droite_lauriers),col="red",lwd=2)
18
16
14
taille
12
10
3 4 5 6
masse
Figure 9.2
© Dunod – La photocopie non autorisée est un délit.
6)
> predict(droite_lauriers,(masse=4.8))
1
14.57407
> residuals(droite_lauriers)[lauriers$masse==4.8]
380 9 • Régression linéaire simple
> mean(lauriers$taille)
[1] 13.91528
> 6.413523+1.700114*mean(lauriers$masse)
[1] 13.91528
Pour limiter les erreurs d’arrondi, vous auriez pu utiliser la ligne de commande suivante :
> coef(droite_lauriers)[1]+coef(droite_lauriers)[2]*mean(lauriers$masse)
(Intercept)
13.91528
Vous avez donc vérifié numériquement que la droite des moindres carrés ordinaires passe par le
point moyen (x n , y n ). Il est possible de démontrer que ce résultat est vrai pour toutes les droites
des moindres carrés ordinaires.
9) Pour obtenir le coefficient de détermination, vous pouvez taper la ligne de commande suivante :
> summary(droite_lauriers)
Call:
lm(formula=taille~masse,data=lauriers)
Residuals:
Min 1Q Median 3Q Max
-2.1339 -0.8590 0.1309 0.9259 2.3060
Solution des exercices 381
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.4135 0.5924 10.83 <2e-16 ***
masse 1.7001 0.1309 12.99 <2e-16 ***
---
Residual standard error: 1.12 on 70 degrees of freedom
Multiple R-squared: 0.7068, Adjusted R-squared: 0.7026
F-statistic: 168.8 on 1 and 70 DF, p-value: < 2.2e-16
En suivant les indications du cours, vous déterminez que le coefficient de détermination R 2 est
environ égal à 70, 68 %.
10) Pour récupérer les variations, tapez la ligne de commande suivante :
> anova(droite_lauriers)
Response: taille
Df Sum Sq Mean Sq F value Pr(>F)
masse 1 211.57 211.573 168.76 < 2.2e-16 ***
Residuals 70 87.76 1.254
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Donc la variation expliquée par la variable est égale à 211, 57 cm2 et la variation totale est
égale à 211, 57 + 87, 76 = 299, 33 cm2 . Maintenant, pour retrouver la valeur du coefficient
de détermination R 2 , il faut diviser 211, 57 cm2 par 299, 33 cm2 , ce qui donne 0, 7068119 ou
© Dunod – La photocopie non autorisée est un délit.
> summary(droite_lauriers)
Call:
lm(formula = taille ~ masse, data = lauriers)
Residuals:
Min 1Q Median 3Q Max
-2.1339 -0.8590 0.1310 0.9259 2.3060
382 9 • Régression linéaire simple
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.4135 0.5924 10.83 <2e-16 ***
masse 1.7001 0.1309 12.99 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Vous prenez la valeur 1, 12 cm et vous l’élevez au carré, ce qui vous donne l’estimation de s2 :
1, 2544 cm2 .
Remarque : comme cela a été indiqué dans le cours, vous auriez pu utiliser la fonction
anova et lire la valeur du carré moyen résiduel qui est bien sûr égale à 1, 254 cm2 .
> residus<-residuals(droite_lauriers)
> shapiro.test(residus)
data: residus
W = 0.9653, p-value = 0.04439
Comme la p-valeur du test est strictement inférieure à a = 5 %, le test est significatif au seuil
a = 5 %. Donc vous rejetez H0 au seuil a = 5 % et vous acceptez H1 au seuil a = 5 % avec
un risque d’erreur de première espèce a = 5 %. Donc, vous êtes obligé(e) de stopper là car
l’hypothèse de normalité n’est pas vérifiée. Vous ne pouvez pas mettre en place le test de Student
demandé.
Solution des exercices 383
Pour vérifier l’homoscédasticité des erreurs, tracez les résidus en fonction de la masse en tapant
la ligne de commande suivante :
> plot(lauriers$masse,résidus)
●
2
● ● ●
●
●
● ●
●
● ● ● ●
● ●
●
● ●
1
● ●
●
● ●
● ● ● ● ● ●
●
●
● ●
residus
●
●
●
0
●
●
● ●
● ●
● ● ●
●
● ● ● ●
●
● ●
−1
● ●
●
● ●
● ●
● ●
● ●
● ●
●
●
−2
●
●
3 4 5 6
lauriers$masse
© Dunod – La photocopie non autorisée est un délit.
Figure 9.3
Les résidus ne montrent pas le défaut d’homoscédasticité des erreurs, ni d’effet systématique.
Donc une approche par permutation est donc envisageable (cf. question suivante).
13) En utilisant la théorie reposant sur la loi normale, nous devrions fournir la même réponse
qu’à la question précédente et donc la même conclusion. Le recours aux tests de permutation
permet de procéder au test demandé.
Installez la bibliothèque lmPerm et chargez-la en mémoire. Pour utiliser l’approche par
permutation, il suffit de remplacer l’appel de la fonction lm par lmp.
> lmp(taille~masse,lauriers)
384 9 • Régression linéaire simple
Vous constaterez que lmp travaille par défaut avec des variables centrées, et ainsi pour repro-
duire les résultats précédents de la fonction lm, vous devez utiliser l’option center=FALSE.
> (perm_lauriers~lmp(taille~masse,lauriers,center=FALSE))
> lmp(taille~masse,lauriers,center=FALSE)
[1] "Settings: unique SS "
Call:
lmp(formula=taille~masse,data=lauriers,center=FALSE)
Coefficients:
(Intercept) masse
6.414 1.700
Les résidus sont toujours les mêmes, ainsi que les estimations de b0 et de b1 ou le coefficient
de détermination R 2 . Seule change la méthode avec laquelle est évaluée la significativité du test
de Student :
H0 : b1 = 0
contre
H1 : b1 = 0.
> summary(perm_lauriers)
Call:
lmp(formula= taille~masse,data=lauriers,center=FALSE)
Solution des exercices 385
Residuals:
Min 1Q Median 3Q Max
-2.1339 -0.8590 0.1309 0.9259 2.3060
Coefficients:
Estimate Iter Pr(Prob)
masse 1.7 5000 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.12 on 70 degrees of freedom
Multiple R-Squared: 0.7068,Adjusted R-squared: 0.7026
F-statistic: 168.8 on 1 and 70 DF, p-value: < 2.2e-16 }
Le test est significatif au seuil a = 5 % car la p-valeur calculée est < 2e-16. Cette p-valeur
a été calculée sur la base de 5 000 permutations des données. Il est possible d’augmenter ce
nombre grâce à l’option maxIter. Nous rejetons H0 au seuil a = 5 % et décidons que H1 est
vraie au seuil a = 5 %. Le risque associé à cette décision est un risque d’erreur de première
espèce qui vaut 5 %.
14) À la vue de ces résultats, le jardinier semble avoir raison sur le fait qu’il existe une rela-
tion linéaire entre la taille et la masse d’un follicule de laurier rose puisque le coefficient de
détermination est égal à 70,7 % et que b1 = 0.
> confint(droite_lauriers)
© Dunod – La photocopie non autorisée est un délit.
> predict(droites_lauriers,list(masse=c(4.8)),interval="confidence")
> predict(droites_lauriers,list(masse=c(4.8)),interval="prediction")
386 9 • Régression linéaire simple
Exercice 9.2
1) Pour isoler les données sur les bignones, vous pouvez taper la ligne de commande suivante :
> bignones<-subset(Mesures5,subset=(Mesures5$espece=="bignone"))[,c(1,4)]
> plot(masse~masse_sec,data=bignones,pch=19)
35
●
30
25
●
20
masse
●
●
15
● ● ●
● ●
●
●● ● ●
●
10
●
● ●
● ● ● ●
● ●
● ●
● ●
● ●●
● ● ●
● ● ●
●
●● ●
5
●
● ● ●●
● ● ●
● ● ● ●●
● ● ●
● ●
●
● ●●
●
0
0 1 2 3 4 5 6
masse_sec
Figure 9.4
2) Il semblerait qu’en regardant la figure 9.4, une relation linéaire pourrait exister entre les deux
variables masse et masse_sec d’une gousse de bignone.
3) a-
> droite_bignones<-lm(masse~masse_sec,data=bignones)
> coef(droite_bignones)
Solution des exercices 387
(Intercept) masse_sec
-0.5391407 4.8851935
> residus<-residuals(droite_bignones)
> plot(bignones$masse_sec,residus)
b-
●
●
6
●
●
● ●
4
●
● ● ●
●
●
●
2
●
●
●
●
●●
residus
● ●
● ● ● ●
● ● ●
●
●
● ●
●
0
●
● ● ●
● ●
●● ●
● ●
●
● ●
●● ●
●
● ●
−2
● ●
● ●
●
● ●
●●
● ●
●
●
●
−4
● ●
0 1 2 3 4 5 6
© Dunod – La photocopie non autorisée est un délit.
bignones$masse_sec
Figure 9.5
Les résidus n’ont pas l’air correct car ils présentent une forme en trompette, ce qui remet en ques-
tion de l’homoscédasticité des erreurs. Vous procéderez dans la suite à un test pour vous assurer
que ce défaut est significatif au seuil de a = 5 %. Par contre, les résidus semblent être répartis
aléatoirement au-dessus ou en-dessous de l’axe des abscisses. Vous notez également l’absence
d’un effet systématique qui se traduirait par exemple par une forme de banane. L’hypothèse
d’indépendance n’est pas remise en question.
Malgré l’inhomogénéité des variances, l’estimation de la pente et de l’ordonnée à l’origine
restent sans biais. Il sera, par contre, nécessaire de tenir compte de l’hétéroscédasticité des
erreurs pour la mise en œuvre des procédures de test et la construction des intervalles de
confiance.
388 9 • Régression linéaire simple
4)
> fitted(droite_bignones)
Les ordonnées &yi se lisent sous les nombres entiers. Ils varient de 111 à 180 car ils proviennent
du tableau de données complet Mesures5 où ils correspondent aux numéros des lignes contenant
les observations réalisées sur les gousses de bignone.
5)
> abline(coef(droite_bignones),col="red",lwd=2)
35
●
30
25
●
20
masse
●
●
15
● ● ●
● ●
●
●● ● ●
●
10
●
● ●
● ● ● ●
● ●
● ●
● ●
● ● ●●
● ●
● ● ●
●
●● ●
5
●
● ● ●●
● ● ●
● ● ● ●● ● ●
●● ●
●
● ●●
●
0
0 1 2 3 4 5 6
masse_sec
Figure 9.6
6)
> predict(droite_bignones,(masse_sec=2.5))
Solution des exercices 389
1
11.67384
> residuals(droite_bignones)[bignones$masse_sec==2.5]
145
-2.673843
> mean(bignones$masse)
[1] 7.521429
> -0.5391407+4.8851935*mean(bignones$masse_sec)
[1] 7.521429
© Dunod – La photocopie non autorisée est un délit.
Pour limiter les erreurs d’arrondi, vous auriez pu utiliser la ligne de commande suivante :
> coef(droite_bignones)[1]+coef(droite_bignones)[2]*mean(bignones$masse_sec)
(Intercept)
7.521429
Vous avez donc vérifié numériquement que la droite des moindres carrés ordinaires passe par le
point moyen (x n , y n ). Il est possible de démontrer que ce résultat est vrai pour toutes les droites
des moindres carrés ordinaires.
9) Pour obtenir le coefficient de détermination, vous pouvez taper la ligne de commande sui-
vante :
390 9 • Régression linéaire simple
> summary(droite_bignones)
Call:
lm(formula=masse~masse_sec,data=bignones)
Residuals:
Min 1Q Median 3Q Max
-4.6279 -1.7444 -0.2961 1.4310 6.4295
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.5391 0.5657 -0.953 0.344
masse_sec 4.8852 0.2912 16.774 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.497 on 68 degrees of freedom
Multiple R-squared: 0.8054, Adjusted R-squared: 0.8025
F-statistic: 281.4 on 1 and 68 DF, p-value: < 2.2e-16
En suivant les indications du cours, vous déterminez que le coefficient de détermination R 2 est
environ égal à 80,54 %.
10) Pour récupérer les variations, vous pouvez taper la ligne de commande suivante :
> anova(droite_bignones)
Donc la variation expliquée par la variable est égale à 1 754,44 g2 et la variation totale est
égale à 1 754,44 + 424,01 = 2 178,45 g2 . Maintenant, pour retrouver la valeur du coefficient
de détermination R 2 , il faut diviser 1 754,44 g2 par 2 178,45 g2 , ce qui donne 0,8053 ou encore
80,53 %. Vous retrouvez bien la valeur obtenue à la question précédente.
Solution des exercices 391
11) Le modèle ne semble pas homoscédastique. L’estimation d’une variance commune pour
toutes les erreurs n’est pas pertinente.
12) et 13) Pour tester les deux jeux d’hypothèses suivants :
H0 : b0 = 0 H0 : b1 = 0
contre et contre
H1 : b0 = 0 H1 : b1 = 0.
il faut vérifier que les variables erreurs sont indépendantes et suivent la loi normale centrée et de
variance s2 . La condition d’indépendance est vérifiée compte tenu du protocole expérimental
qui a été suivi. La procédure pour vérifier les deux conditions restantes est en trois temps :
– calculer les résidus,
– faire un test de Shapiro-Wilk sur les résidus,
– faire un test de White sur les résidus si l’hypothèse de normalité des erreurs n’est pas
rejetée.
> residus<-residuals(droite_bigognes)
> shapiro.test(residus)
Les résidus sont au nombre de 70 30. Le test de normalité est donc fiable. La p-valeur du
test est strictement supérieure à a = 5 %, le test n’est pas significatif au seuil a = 5 %. Nous
© Dunod – La photocopie non autorisée est un délit.
> length(residus)
>[1] 70
Le test de White est un cas particulier du test de Breusch-Pagan qui est disponible dans la
bibliothèque lmtest. Les lignes de commande suivantes nous permettent de l’exécuter :
392 9 • Régression linéaire simple
> library(lmtest)
> bptest(droite_bignones, ~masse_sec + I(masse_sec^2), data = bignones)
Le test de White permet de s’intéresser aux deux hypothèses « H0 : les erreurs sont
homoscédastiques » contre « H1 : les erreurs sont hétéroscédastiques ». L’hypothèse de
normalité des erreurs n’a pas été remise en cause, le test de White est donc fiable. La p-valeur
du test est inférieure ou égale à a = 5 %, le test est significatif au seuil a = 5 %. Nous
rejetons l’hypothèse nulle H0 d’homoscédasticité des erreurs au seuil a = 5 % et décidons
que l’hypothèse alternative H1 d’hétéroscédasticité des erreurs est vraie au seuil a = 5 %.
Les variances des erreurs présentent un défaut d’homogénéité significatif. Les conditions
d’utilisation ne sont pas remplies et il n’est pas possible de procéder à des tests ou de construire
des intervalles de confiance avec la théorie classique.
Comme nous l’avions perçu graphiquement, les erreurs ne sont pas homoscédastiques, il faut
tenir compte de cette inhomogénéité des variances lors de l’estimation des paramètres du modèle
puis de la mise en œuvre des tests de Student ou du test global de Fisher pour la régression.
> library(sandwich)
> vcovHC(droite_bignones)
(Intercept) masse_sec
(Intercept) 0.2782291 -0.1714076
masse_sec -0.1714076 0.1397390
> coeftest(droite_bignones,df="inf",vcov=vcovHC)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.53914 0.52747 -1.0221 0.3067
masse_sec 4.88519 0.37382 13.0684 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Solution des exercices 393
Voici la ligne de commande qui permet de réaliser le test de Fisher global du modèle de
régression linéaire simple.
> waldtest(droite_bignones,vcov=vcovHC)
Wald test
Model 1: masse~masse_sec
Model 2: masse~1
Res.Df Df F Pr(>F)
1 68
2 69 -1 170.78 < 2.2e-16 ***
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Pour construire les intervalles de confiance autour des paramètres, vous pouvez utiliser la
bibliothèque hcci.
> library(hcci)
> ?hcci
L’aide de la bibliothèque hcci vous apprend qu’il existe plusieurs procédures permettant de
tenir compte de l’hétéroscédasticité. La fonction vcovHC utilise la méthode HC3 par défaut et la
fonction HC, la méthode HC4 avec le paramètre k = 0,7 par défaut. Les méthodes HC3, HC4
et HC5 sont recommandées. En comparant leurs résultats, vous constatez qu’elles aboutissent
toutes aux mêmes conclusions au seuil de a = 5 % : conservation, par défaut, de « H0 : b0 = 0 »
pour le test de l’ordonnée à l’origine et décision que « H1 : b1 = 0 » est vraie.
> HC(droite_bignones,method=3)
© Dunod – La photocopie non autorisée est un délit.
[,1] [,2]
[1,] 0.2782291 -0.1714076
[2,] -0.1714076 0.1397390
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.53914 0.52747 -1.0221 0.3067
masse_sec 4.88519 0.37382 13.0684 <2e-16 ***
394 9 • Régression linéaire simple
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> vcovHC(droite_bignones,type="HC4")
(Intercept) masse_sec
(Intercept) 0.4035131 -0.2603917
masse_sec -0.2603917 0.2022249
> coeftest(droite_bignones,df="inf",
+ vcov=vcovHC(droite_bignones,type="HC4"))
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.53914 0.63523 -0.8487 0.396
masse_sec 4.88519 0.44969 10.8634 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> vcovHC(droite_bignones,type="HC4m")
(Intercept) masse_sec
(Intercept) 0.3020561 -0.1891167
masse_sec -0.1891167 0.1526165
> coeftest(droite_bignones,df="inf",
+ vcov=vcovHC(droite_bignones,type="HC4m"))
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.53914 0.54960 -0.981 0.3266
masse_sec 4.88519 0.39066 12.505 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Solution des exercices 395
> HC(droite_bignones,method=4,k=0.7)
[,1] [,2]
[1,] 0.4035131 -0.2603917
[2,] -0.2603917 0.2022249
> coeftest(droite_bignones,
+ df="inf", vcov=HC(droite_bignones,method=4,k=0.7))
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.53914 0.63523 -0.8487 0.396
masse_sec 4.88519 0.44969 10.8634 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> vcovHC(droite_bignones,type="HC5")
(Intercept) masse_sec
(Intercept) 0.4141695 -0.2662869
masse_sec -0.2662869 0.2047638
> coeftest(droite_bignones,
© Dunod – La photocopie non autorisée est un délit.
+ df="inf", vcov=vcovHC(droite_bignones,type="HC5"))
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.53914 0.64356 -0.8377 0.4022
masse_sec 4.88519 0.45251 10.7958 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> HC(droite_bignones,method=5)
396 9 • Régression linéaire simple
[,1] [,2]
[1,] 0.4141695 -0.2662869
[2,] -0.2662869 0.2047638
> coeftest(droite_bignones,
+ df="inf", vcov=HC(droite_bignones,method=5))
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.53914 0.64356 -0.8377 0.4022
masse_sec 4.88519 0.45251 10.7958 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> y=bignones$masse
> x=bignones$masse_sec
> model=lm(y~x)
$beta
[1] -0.5391407 4.8851935
$ci_lower_simple
[1] -1.525008 4.190880
$ci_upper_simple
[1] 0.4131857 5.5959062
$ci_lower_double
logical(0)
$ci_upper_double
logical(0)
$beta
[1] -0.5391407 4.8851935
$ci_lower_simple
[1] -1.764021 3.982058
$ci_upper_simple
[1] 0.7863737 5.7994540
$ci_lower_double
logical(0)
$ci_upper_double
logical(0)
$J
[1] 1000
$K
[1] 100
Utilisez maintenant une technique de bootstrap double pour estimer plus précisément les inter-
valles de confiance. Commencez par le bootstrap percentile double.
$beta
[1] -0.5391407 4.8851935
© Dunod – La photocopie non autorisée est un délit.
$ci_lower_simple
[1] -1.496296 4.242878
$ci_upper_simple
[1] 0.3944334 5.5317251
$ci_lower_double
[1] -1.698017 4.156247
$ci_upper_double
[1] 0.7604135 5.6514974
$beta
[1] -0.5391407 4.8851935
$ci_lower_simple
[1] -1.836769 3.977175
$ci_upper_simple
[1] 0.7325968 5.8360778
$ci_lower_double
[1] -2.627933 3.836480
$ci_upper_double
[1] 1.347561 5.958359
$J
[1] 1000
$K
[1] 100
Are the effects of A and B different? They are always different — for some decimal place —
for any A and B.
De John W. Tukey, The philosophy of multiple comparisons , Statistical Science, 6, 1991.
[...] a hypothesis test tells us whether the observed data are consistent with the null hypo-
thesis, and a confidence interval tells us which hypotheses are consistent with the data.
De William C. Blackwelder, “Proving the null hypothesis” in clinical trials , Controlled
Clinical Trials, 3(4), 1982.
Objectifs de ce chapitre
➤ introduire le vocabulaire de la théorie de l’analyse de la variance
➤ présenter le modèle statistique associé à l’analyse de la variance
➤ mettre en place le test de Fisher
➤ mettre en place le test des comparaisons multiples
➤ calculer les puissances des tests
10.1 INTRODUCTION
10.1.1 Objectif
L’analyse de la variance est l’une des procédures les plus utilisées dans les applications de la
statistique ainsi que dans les méthodes d’analyse de données. Elle permet de comparer, entre
400 10 • Analyse de la variance à un facteur
plusieurs populations, les espérances de variables aléatoires indépendantes qui suivent des
lois normales de même variance.
10.1.2 Exemple
Des forestiers ont réalisé des plantations d’arbres en trois endroits. Plusieurs années plus tard,
ils souhaitent savoir si la hauteur moyenne des arbres est identique dans les trois forêts. Chacune
des forêts constitue une population et dans chacune d’entre elles, un échantillon d’arbres est tiré
au sort. Puis la hauteur de chaque arbre est mesurée en mètres.
Forêt 1 23,4 24,4 24,6 24,8 24,9 25,0 25,5 25,8 26,1 26,2
Forêt 2 18,9 21,1 21,1 21,3 21,7 22,1 22,2 22,5 22,7 23,5
Forêt 3 22,5 22,9 23,4 23,7 23,9 24,0 24,0 24,2 24,3 24,5
Cette écriture du tableau est dite désempilée . Vous pouvez l’écrire sous forme standard
( empilée ), c’est-à-dire avec deux colonnes, une pour la forêt et une pour la hauteur, et trente
lignes, une pour chaque mesure réalisée.
Remarque : les données sont saisies et traitées sous cette forme dans la plupart des
logiciels.
10.2 Modélisation statistique 401
Notations :
– La variable mesurée à l’issue d’une telle expérience est notée Y .
– Pour les observations, deux indices sont utilisés :
• le premier indice indique le numéro du groupe dans la population ( Forêt ), noté en
général i,
• le second indice indique le numéro de l’observation dans chacun des groupes qui com-
posent l’échantillon ( Arbre ), noté en général j.
– Les observations sont en général notées par yi, j où i varie de 1 à I et j de 1 à n i .
Définition 10.2 Lorsque les I échantillons sont tous de même taille, c’est-à-dire n i = J pour i
variant de 1 à I , l’expérience est dite équilibrée.
Remarque :
1. Lorsque l’expérience est équilibrée, l’effectif total n est égal à I J .
2. Lorsque les effectifs des échantillons sont très différents, les différences qu’il est
possible de détecter sont supérieures à celles d’une expérience équilibrée qui aurait le
même effectif total. L’analyse est donc moins performante.
Seul le plan équilibré sera détaillé par la suite mais les logiciels de statistique vous permettent
B d’analyser aussi des expériences déséquilibrées.
S
U
Définition 10.3 En se plaçant dans le cas équilibré, les moyennes de chaque échantillon sont
définies et notées par :
1
J
yi = yi, j , i = 1, . . . , I ,
J
j=1
402 10 • Analyse de la variance à un facteur
1
J
si2 (y) = (yi, j − y i )2 , i = 1, . . . , I .
J
j=1
Attention, cette dernière formule exprime la variance non corrigée. Très souvent, dans les
logiciels de statistique, c’est la variance corrigée qui est utilisée : au lieu d’être divisée par J,
elle est divisée par J − 1.
> foret<-rep(1:3,c(10,10,10))
> hauteur<-c(23.4,24.4,24.6,24.9,25,26.2,26.1,24.8,25.5,25.8,18.9,21.1,21.1,
+ 22.1,22.5,23.5,22.7,21.3,22.2,21.7,22.5,22.9,23.7,24,24,24.5,24.3,24.2,
+ 23.4,23.9)
> foret<-factor(foret)
> arbre<-data.frame(foret,hauteur)
> rm(foret)
> rm(hauteur)
> arbre
La sortie que R produit n’a pas été reproduite intégralement par souci de gain de place. En voici
donc un extrait :
foret hauteur
1 1 23.4
2 1 24.4
................
................
29 3 23.4
30 3 23.9
Pour obtenir les moyennes dans chaque échantillon, vous tapez les deux lignes de commande
suivantes :
> moyennes<-tapply(arbre$hauteur,arbre$foret,mean)
> moyennes
10.2 Modélisation statistique 403
R vous affiche :
1 2 3
25.07 21.71 23.74
Pour obtenir les variances corrigées dans chaque échantillon, vous tapez les deux lignes de
commande suivantes :
> variances<-tapply(arbre$hauteur,arbre$foret,var)
> variances
i=1
mi = m + ai pour i = 1, . . . , I.
Vous obtenez :
[1] 23.50667
[1] 23.50667
10.3 Test de comparaison de plusieurs espérances 405
– Deuxième propriété :
la variance de toutes les observations est la somme de la variance non corrigée des
moyennes et de la moyenne des variances non corrigées. Ceci s’écrit :
1 1 1 2
I J I I
2
s (y) = (yi, j − y n )2 = (y i − y n )2 + si (y). (10.1)
n I I
i=1 j=1 i=1 i=1
Remarque : vous pouvez faire en exercice la vérification de cette égalité en vous servant
des données de l’exemple des forêts.
> plot(arbre$foret,arbre$hauteur)
> points(1:3,moyennes,pch="@")
> abline(h=moy.g)
Figure 10.1
406 10 • Analyse de la variance à un facteur
SCtot = SC f ac + SCres
I
J
SCtot = (yi, j − y n )2 .
i=1 j=1
I
SC f ac = J (y i − y n )2 .
i=1
Elle indique la dispersion des données à l’intérieur de chaque échantillon autour de sa moyenne.
Définition 10.7 Le carré moyen dû au facteur est le terme défini par C M f ac = SC f ac /(I − 1).
Définition 10.8 Le carré moyen résiduel est le terme défini par C Mres = SCres /(n − I ). Si
les variables d’erreur ´i, j sont indépendantes et de même variance s2 , le carré moyen résiduel
est une estimation sans biais de cette variance s2 .
10.3 Test de comparaison de plusieurs espérances 407
H0 : m1 = m2 = · · · = m I
contre
H1 : les espérances mi ne sont pas toutes égales.
Ou de manière équivalente :
H0 : a1 = a2 = · · · = a I = 0
contre
H1 : les effets ai ne sont pas tous nuls.
Statistique du test :
si les trois conditions fondamentales sont satisfaites et si l’hypothèse nulle H0 est vérifiée, alors
C M f ac
la variable F(obs) = est une réalisation de la variable aléatoire F qui suit la loi de
C Mres
Fisher F(I − 1; n − I ).
Décision et conclusion du test :
pour un seuil a donné, des tables de la loi de Fisher vous fournissent une valeur critique ca telle
que P (F ca ) = 1 − a. Alors vous décidez :
H0 est vraie si F(obs) < ca ,
H1 est vraie si F(obs) ca .
Vous pouvez aussi raisonner avec la p-valeur, comme dans les autres tests vus précédemment.
Plusieurs fonctions du logiciel R permettent de réaliser ce test :
B
S – anova appliquée à un objet produit par lm,
U
– summary utilisée sur un objet produit par aov.
408 10 • Analyse de la variance à un facteur
C M f ac
Due au facteur SC f ac I −1 C M f ac ca
C Mres
> options(contrasts=c("contr.sum","contr.poly"))
Pour obtenir le tableau de l’analyse de la variance en utilisant les fonctions anova et lm, il
faut taper les deux lignes de commande suivantes :
> modele1<-lm(hauteur~foret,data=arbre)
> anova(modele1)
qui renvoient :
Response: hauteur
Df Sum Sq Mean Sq F value Pr(>F)
foret 2 57.265 28.6323 31.874 7.809e-08 ***
Residuals 27 24.254 0.8983
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Pour obtenir le tableau de l’analyse de la variance en utilisant les fonctions aov et summary,
il faut taper les deux lignes de commande suivantes :
> modele1_aov<-aov(hauteur~foret,data=arbre)
> summary(modele1_aov)
10.4 Vérification des trois conditions fondamentales et conclusion 409
Pour indiquer à R que, dans le cas équilibré, les estimations des effets ai de chaque groupe
B doivent être de somme nulle, et donc de suivre la convention indiquée au début du paragraphe
S
U
10.2.2, vous devez exécuter la commande :
> options(contrasts=c("contr.sum","contr.poly"))
Remarque : la notation & ei, j souligne que les résidus peuvent s’interpréter comme des
estimations des variables d’erreur. Vous désignez par & ´i, j la variable aléatoire dont le
résidu &
ei, j est la réalisation.
Vous désirez tester la normalité des variables d’erreur ´i, j avec le test de Shapiro-Wilk. Vous
utilisez l’échantillon formé par les résidus pour réaliser ce test.
Hypothèses du test :
> residus<-residuals(modele1)
> shapiro.test(residus)
vous obtenez :
Shapiro-Wilk normality test
data: residus
W = 0.95202, p-value = 0.1914
La p-valeur étant strictement supérieure à a = 5 %, le test n’est pas significatif au seuil a = 5 %.
Vous décidez de conservez l’hypothèse nulle H0 au seuil a = 5 %. Le risque d’erreur associé
à cette décision est un risque de deuxième espèce b. Vous ne pouvez pas l’évaluer dans le cas
présent mais il est considéré comme satisfaisant car l’effectif de l’échantillon, auquel le test de
Shapiro-Wilk est appliqué, vaut 30 et donc dépasse 30. En effet :
> length(residus)
[1] 30
Vous décidez donc que l’hypothèse de normalité des variables d’erreur est satisfaite.
10.4 Vérification des trois conditions fondamentales et conclusion 411
où
• la quantité C1 est définie par :
I
1 1 1
C1 = 1 + − ,
3(I − 1) ni − 1 n−I
i=1
• C Mres le carré moyen résiduel et sc,i
2
la variance corrigée de l’échantillon d’ordre i.
Si l’hypothèse nulle H0 est vérifiée, alors la variable Bobs est une réalisation de la variable
aléatoire B qui suit asymptotiquement la loi du x2 (I − 1).
En pratique, vous pouvez l’appliquer lorsque les effectifs n i des I échantillons sont tous au
moins égaux à trois.
Décision et conclusion du test :
pour un seuil donné a, des tables de la loi du Khi-deux vous fournissent une valeur critique ca
telle que P (B ca ) = 1 − a. Alors vous décidez
H0 est vraie si B(obs) < ca ,
H1 est vraie si B(obs) ca .
Mais comme vous utilisez le plus souvent un logiciel de statistique, vous aurez à votre disposition
la p-valeur du test pour conclure. Attention cette p-valeur est également calculée en ayant
recours à l’approximation mentionnée ci-dessus.
La fonction sous R qui permet de réaliser ce test est la fonction bartlett.test. Il vous est
B recommandé de consulter l’aide pour savoir comment il faut la paramétrer.
S
U
412 10 • Analyse de la variance à un facteur
> bartlett.test(residus~foret,data=arbre)
vous obtenez :
> coef(modele1)
1. Pour vérifier l’égalité des variances sans avoir à faire une hypothèse de normalité, vous pourrez par exemple
utiliser le test non paramétrique de Levene disponible avec la fonction levene.test dans la bibliothèque car.
10.4 Vérification des trois conditions fondamentales et conclusion 413
Vous constatez que R, comme la plupart des logiciels de statistique, ne propose pas de valeur
estimée pour l’effet a3 associé à la Forêt 3. Celle-ci se déduit des valeurs estimées des effets de
& i , sont, comme les
la Forêt 1 et de la Forêt 2 en utilisant le fait que les estimations des effets, a
&1 + a
effets ai , de somme nulle : a &2 + a& 3 = 0. Par conséquent vous tapez la commande suivante
pour déterminer une estimation du coefficient associé à la Forêt 3 :
> -sum(coef(modele1)[2:3])
[1] 0.2333333
La fonction dummy.coef permet d’obtenir directement les valeurs de tous les coefficients.
> dummy.coef(modele1)
En fait les trois conditions fondamentales sont remplies car la condition de normalité est égale-
ment vérifiée, vous pouvez donc procéder au test de Fisher de l’analyse de la variance. Comme
la p-valeur du tableau est inférieure ou égale à a = 5 %, le test est significatif au seuil a = 5 %.
Vous rejetez H0 au seuil a = 5 % et vous décidez que H1 est vraie au seuil a = 5 % avec un
risque d’erreur de première espèce a = 5 %. Il y a donc une différence entre les espérances de
la hauteur des arbres selon le type de forêts.
Vous avez décidé que les espérances sont différentes dans leur ensemble. Vous analyserez ce
cas par la suite avec un test de comparaisons multiples pour déterminer celles qui différent
les unes des autres.
> library(granova)
> granova.1w(arbre$hauteur,arbre$foret)
414 10 • Analyse de la variance à un facteur
$grandsum
Grandmean df.bet df.with MS.bet
23.51 2.00 27.00 28.63
MS.with F.stat F.prob SS.bet/SS.tot
0.90 31.87 0.00 0.70
$stats
Size Contrast Coef Wt’d Mean Mean Trim’d Mean Var. St. Dev.
2 10 -1.80 21.71 21.71 21.82 1.56 1.25
3 10 0.23 23.74 23.74 23.87 0.40 0.63
1 10 1.56 25.07 25.07 25.10 0.74 0.86
Dependent variable(response)
Figure 10.2
10.4 Vérification des trois conditions fondamentales et conclusion 415
> library(granovaGG)
> granovagg.1w(arbre$hauteur,arbre$foret)
By-group summary statistics for your input data (ordered by group means)
group group.mean trimmed.mean contrast variance
2 2 21.71 21.82 -1.80 1.56
3 3 23.74 23.87 0.23 0.40
1 1 25.07 25.10 1.56 0.74
standard.deviation group.size
2 1.25 10
3 0.63 10
1 0.86 10
Below is a linear model summary of your input data
Call:
lm(formula = score ~ group, data = owp$data)
Residuals:
Min 1Q Median 3Q Max
-2.8100 -0.4550 0.0750 0.5425 1.7900
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 23.5067 0.1730 135.844 < 2e-16 ***
group1 1.5633 0.2447 6.388 7.66e-07 ***
group2 -1.7967 0.2447 -7.342 6.75e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.9478 on 27 degrees of freedom
Multiple R-squared: 0.7025,Adjusted R-squared: 0.6804
F-statistic: 31.87 on 2 and 27 DF, p-value: 7.809e-08
416 10 • Analyse de la variance à un facteur
10
10
10
2
1
26 ●
●
●
●
25 ●
●
●
●
●
●
●
●
Dependent variable (response)
●●
● Group Means
24 ●
● ● ● ● MS−between
● MS−within
●
● ●
●
●
22 ●
● ● Grand Mean
●●
● Group Mean Line
19 ●
F = 31.87
−1.8
0.23
1.6
0
Figure 10.3
2. Le test de Tukey est initialement prévu dans le cas où le plan est équilibré, tandis que le test de Tukey-Kramer lui
est prévu dans le cas déséquilibré.
10.5 Comparaisons multiples 417
y (1) , y (2) , . . . , y (I ) ,
Hypothèses du test :
pour chaque i < i , vous considérez :
y (i ) − y (i)
Ti ,i (obs) = ' ·
s R2 1 1
+
2 ni ni
Si l’hypothèse nulle H0 est vérifiée et si les conditions d’application sont remplies, le rapport
Ti ,i (obs) est une réalisation de la variable aléatoire Ti ,i qui, suit la loi appelée étendue studen-
tisée et qui est notée T% n − I ; I .
Décision et conclusion du test :
pour un seuil a donné, des tables de l’étendue studentisée vous fournissent une valeur critique
ca telle que P (T ca ) = 1 − a. Alors vous décidez :
H0 est vraie si ti ,i (obs) < ca ,
H1 est vraie si ti ,i (obs) ca .
Vous pouvez aussi raisonner et conclure avec la p-valeur du test donnée par le logiciel de
statistique que vous utilisez, comme vous avez pris l’habitude de faire.
Remarque : la valeur critique ca ne dépend que des entiers n − I , degrés de liberté de
la somme des carrés résiduelle, et de I , nombre de groupes dont les espérances sont
comparées.
La fonction sous R qui permet de réaliser le test des comparaisons multiples est la fonction
B TukeyHSD. Mais attention, elle s’applique uniquement sur un modèle qui a été créé avec la
S
U
fonction aov.
418 10 • Analyse de la variance à un facteur
> modele2<-aov(hauteur~foret,data=arbre)
model.tables(modele2)
Tables of effects
foret
foret
1 2 3
1.5633 -1.7967 0.2333
TukeyHSD(modele2)
> plot(TukeyHSD(modele2))
10.6 Puissance des tests de l’analyse de la variance à un facteur 419
Figure 10.4
La puissance d’un test est une fonction complexe des différents paramètres de ce test. Quelques
relations à retenir :
• Les erreurs de première espèce et de deuxième espèce sont antagonistes, c’est-à-dire
qu’elles évoluent en sens contraire. Si les autres paramètres du test sont fixés, plus vous
diminuez le risque de commettre une erreur de première espèce, plus vous augmentez
celui de commettre une erreur de deuxième espèce et réciproquement, plus vous diminuez
le risque de commettre une erreur de deuxième espèce, plus vous augmentez celui de
commettre une erreur de première espèce.
• Plus les effets du facteur sont marqués, plus la puissance est grande.
• Plus la dispersion de l’erreur est faible, plus la puissance est grande.
• Plus le nombre de répétitions effectuées pour une modalité du facteur est important, plus
la puissance est grande.
420 10 • Analyse de la variance à un facteur
Parmi tous les paramètres ci-dessous, le seuil du test a étant fixé, il n’est possible pour
vous que d’agir sur le nombre de répétitions effectuées pour une modalité du facteur. C’est
pourquoi vous avez un intérêt particulier à bien choisir ce paramètre lorsque vous planifiez votre
expérience si vous souhaitez garantir un niveau de puissance correct pour les tests que vous
réaliserez.
H0 : a1 = a2 = · · · = a I = 0
contre
H1 : il existe i 0 ∈ {1, 2, . . . , I } tel que ai0 = 0.
J 2
I
l= ai .
2s2
i=1
Pour une loi de Fisher non centrale à n1 et n2 degrés de liberté et de paramètre de non-centralité
l, le paramètre de non-centralité normalisé f est défini par :
(
2l
f = .
v1 + 1
1
I
l= n i ai2 .
2s2
i=1
Vous constatez que la puissance évolue bien comme indiqué au début de cette section lorsque,
pour tout i variant de 1 à I , l’un des ai , I , n i , s et a varient, les autres étant fixés.
La fonction qui permet de calculer des puissances avec R est la fonction power.anova.test.
B
S
U
EN RÉSUMÉ
Commande Description
options(contrasts= Permet d’imposer à R l’utilisation de la contrainte
c("contr.sum", a1 + a2 + · · · + a I = 0.
"contr.poly"))
lm(y~fact) Permet de construire le modèle linéaire associé à l’analyse de
la variance de la réponse y par le facteur fact.
anova(s) Permet d’obtenir le tableau de l’analyse de la variance de
l’objet s produit par la fonction lm.
coef(s) Permet d’obtenir les coefficients de l’objet s.
aov(y~fact) Construit un modèle d’analyse de la variance de la réponse y
par le facteur fact.
summary(s) Permet d’obtenir le tableau de l’analyse de la variance de
l’objet s produit par la fonction aov.
shapiro.test Permet de réaliser un test de normalité de Shapiro-Wilk.
bartlett.test Permet de réaliser un test de Bartlett d’égalité de variance.
levene.test Permet de réaliser un test de Levene d’égalité de variance.
granova.1w(y~fact) Permet de réaliser un graphique illustrant la procédure de
l’analyse de la variance de la réponse y par le facteur fact.
granovagg.1w(y~fact) Permet de réaliser un graphique illustrant la procédure de
l’analyse de la variance de la réponse y par le facteur fact.
TukeyHSD(s) Permet de réaliser un test de comparaisons multiples de Tukey
de l’objet s produit par la fonction aov.
plot(hsd) Permet de représenter graphiquement le résultat du test de
comparaisons multiples de Tukey stocké dans l’objet hsd
produit par la fonction TukeyHSD.
power.anova.test Calcule la puissance pour un modèle d’analyse de la variance
à un facteur à effets fixes.
kruskal.test Permet de réaliser le test non paramétrique de Kruskal-Wallis.
EXERCICES
2) Quelles sont les conditions qui doivent être vérifiées pour pouvoir appliquer la théorie du
modèle linéaire ? Sont-elles remplies ?
3) Donnez le tableau de l’analyse de la variance correspondant à cette étude.
4) Réalisez le test de Fisher au seuil de significativité de 5 %. Qu’en déduisez-vous ?
5) Donnez une estimation de la variance s2 .
6) Dans le cas de cette étude, pouvez-vous faire des comparaisons multiples ? Si oui, expliquez
pourquoi puis procédez alors aux comparaisons. Que pouvez-vous conclure ?
d’urée (en décigrammes par litre de sang) après traitement. Dans chaque centre hospitalier, nous
l’avons mesuré chez sept patients.
DU MAL À DÉMARRER
Exercice 10.1
1) Le modèle statistique permettant d’étudier la relation entre le taux d’urée dans le sang et le
traitement s’écrit de la façon suivante :
© Dunod – La photocopie non autorisée est un délit.
Yi, j = m + ai + ´i, j ,
où les variables ´i, j sont indépendantes et suivent une loi normale centrée et de variance inconnue
s2 pour i variant de 1 à I et j variant de 1 à J .
Pour que le modèle ne comporte pas trop de paramètres, nous imposons aux ai la contrainte
suivante :
I
ai = 0.
i=1
Malheureusement, le langage R n’utilise pas cette contrainte par défaut. Pour le forcer à le faire
vous tapez l’instruction :
2) Nous allons vérifier que les conditions d’utilisation du modèle linéaire sont remplies.
– Indépendance. Comme les variétés de pommes sont différentes et que nous avons mesuré
la teneur en vitamine C sur 5 pommes différentes récoltées sur 5 pommiers différents, les
erreurs sont bien indépendantes.
– Normalité. Nous allons réaliser le test de Shapiro Wilk sur les 30 résidus, en tapant les
lignes de commande suivantes :
> variete<-rep(1:6,c(5,5,5,5,5,5))
> vitamine<-c(93.6,95.3,96,93.7,96.2,95.3,96.9,95.8,97.3,97.7,94.5,97,97.8,97,
98.3,98.8,98.2,97.8,97.2,97.9,94.6,97.8,98,95,98.9,93.2,94.4,93.8,95.6,94.8)
> variete<-factor(variete)
> exo1<-data.frame(variete,vitamine)
> modele1<-aov(vitamine~variete,data=exo1)
> residus1<-residuals(modele1)
> shapiro.test(residus1)
Remarque : L’instruction gl(6,5) est plus simple et donne le même résultat que la
première instruction.
Nous obtenons :
Comme la p-valeur est strictement supérieure à a = 5 %, le test n’est pas significatif au seuil
a = 5 %. Nous décidons de conserver l’hypothèse nulle H0 au seuil a = 5 %. Le risque d’erreur
associé à cette décision est un risque de deuxième espèce b. Nous ne pouvons pas l’évaluer dans
le cas présent mais il est considéré comme satisfaisant car l’effectif de l’échantillon, auquel le
test de Shapiro-Wilk est appliqué, vaut 30 et donc dépasse 30. En effet :
> length(residus1)
[1] 30
Nous décidons donc que l’hypothèse de normalité des erreurs est satisfaite.
– Homogénéité. Nous allons réaliser le test de Bartlett sur les 30 résidus en tapant la ligne de
commande suivante :
> bartlett.test(residus1~variete,data=exo1)
Solution des exercices 427
> modele1
Call:
aov(formula=vitamine~variete,data=exo1)
Terms:
variete Residuals
Sum of Squares 45.836 38.512
Deg. of Freedom 5 24
Residual standard error: 1.266754
Estimated effects may be unbalanced
> summary(modele1)
© Dunod – La photocopie non autorisée est un délit.
4) Pour répondre à l’éventuelle significativité, nous allons utiliser le test de Fisher qui a été
construit à la question précédente. Les hypothèses de ce test sont les suivantes :
> granovagg.1w(vitamine,group=variete)
By-group summary statistics for your input data (ordered by group means)
group group.mean trimmed.mean contrast variance
6 6 94.36 94.33 -1.92 0.85
1 1 94.96 95.00 -1.32 1.54
2 2 96.60 96.67 0.32 1.03
5 5 96.86 96.93 0.58 3.73
3 3 96.92 97.27 0.64 2.14
4 4 97.98 97.97 1.70 0.34
standard.deviation group.size
6 0.92 5
1 1.24 5
2 1.01 5
5 1.93 5
3 1.46 5
4 0.58 5
The following groups are likely to be overplotted
group group.mean contrast
5 5 96.86 0.58
3 3 96.92 0.64
Below is a linear model summary of your input data
Call:
lm(formula = score ~ group, data = owp$data)
Solution des exercices 429
Residuals:
Min 1Q Median 3Q Max
-2.420 -0.795 0.150 0.925 2.040
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 96.2800 0.2313 416.298 < 2e-16 ***
group1 -1.3200 0.5172 -2.552 0.01748 *
group2 0.3200 0.5172 0.619 0.54189
group3 0.6400 0.5172 1.238 0.22785
group4 1.7000 0.5172 3.287 0.00311 **
group5 0.5800 0.5172 1.122 0.27316
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.267 on 24 degrees of freedom
Multiple R-squared: 0.5434,Adjusted R-squared: 0.4483
F-statistic: 5.713 on 5 and 24 DF, p-value: 0.001311
5
5
5
6
2
5
3
99 ●
●
●
●
98 ●
●
●● ●
●
●
●
Dependent variable (response)
●● Group Means
97 ●
97
97 MS−between
● MS−within
●
●
© Dunod – La photocopie non autorisée est un délit.
●
●
● ●
● Grand Mean
95 ●
● ● Group Mean Line
●
●
94 ●
●
●
●
93 ●
F = 5.71
−1.9
−1.3
0.32
0.58
0.64
1.7
0
Figure 10.5
430 10 • Analyse de la variance à un facteur
Sur le graphique, nous constatons que la variabilité de moyennes de chaque groupe (représen-
tées par des triangles) semble plus importante que la dispersion des mesures au sein de chacun
des groupes (représentées par des points). Le carré situé en bas à droite permet de comparer plus
précisément ces variations. En effet, son aire correspond à la variation totale des mesures et la
zone plus claire à l’intérieur de ce carré est la proportion de la variation totale qui provient de la
variation résiduelle tandis que la zone plus foncée à l’intérieur du carré est celle provenant de la
variation due au facteur. La couleur du carré est rouge, ce qui indique que le test de Fisher est
significatif au seuil de 5 %.
5) Donnons une estimation de la variance s2 . Pour cela, nous lisons le carré moyen résiduel
dans le tableau de l’analyse de la variance. Elle vaut 1,6047.
6) Dans le cas de cette étude, nous pouvons faire des comparaisons multiples. En effet, le test de
Fisher étant significatif, nous pouvons procéder à ces comparaisons multiples. Pour cela, nous
tapons la ligne de commande suivante :
Notez que l’option conf.level vaut par défaut 0,95 et qu’il n’est donc pas nécessaire de la
faire apparaître puisque vous travaillez au seuil de 5 %. Nous obtenons :
1 2 3 4 5 6
"ab" "ac" "bc" "c" "bc" "a"
Ainsi les moyennes des groupes 2, 6 et 1 sont dans un groupe homogène car elles ont toutes
en commun la lettre « a ».
Il existe un graphique qui permet de faciliter la lecture des résultats de la procédure. Vous
l’obtenez en tapant l’instruction suivante :
> plot(Tukey1)
Les différences entre les moyennes sont significatives au seuil de 5 % lorsque l’intervalle
associé ne contient pas 0.
95% family-wise confidence level
2-1
4-1
6-1
© Dunod – La photocopie non autorisée est un délit.
4-2
6-2
5-3
5-4
6-5
-6 -4 -2 0 2 4
Figure 10.6
432 10 • Analyse de la variance à un facteur
Figure 10.7
> ggplot(aes(lhs,estimate),data=fortify(summary(wht)))+
+ geom_linerange(aes(ymin=lwr,ymax=upr),data=CI)+
+ geom_text(aes(y=estimate+1,label=round(p,3)))+
+ geom_hline(yintercept = 0)+
+ geom_point(aes(size=p),data=summary(wht))+scale_size(trans="reverse")
Solution des exercices 433
Figure 10.8
Pour finir, voici le graphique des boîtes à moustaches des valeurs de chacun des groupes avec
© Dunod – La photocopie non autorisée est un délit.
une indication des groupes homogènes formés par les moyennes au moyen de lettres. Vous devez
installer la bibliothèque multcompView dont vous allez utiliser la fonction multcompLetters.
Variété
Figure 10.9
Exercice 10.2
1) Le modèle statistique que nous proposons est le modèle de l’analyse de la variance à un
facteur à effets fixes. Le taux de l’urée est la variable à expliquer ou encore la réponse, et le
traitement est le facteur explicatif.
Solution des exercices 435
> traitement<-rep(1:5,c(7,7,7,7,7))
> taux<-c(4.5,2.5,6,4.5,3,5.5,3.5,7.5,3,2.5,4,2,4,5.5,8,6.5,6,3.5,5,
7,5,2,7.5,4,2.5,5,3.5,6.5,6.5,5.5,6,4.5,4,7,5.5)
> traitement<-factor(traitement)
> exo2<-data.frame(traitement,taux)
> modele2<-aov(taux~traitement,data=exo2)
> residus2<-residuals(modele2)
> shapiro.test(residus2)
Nous obtenons :
Comme la p-valeur est strictement supérieure à a = 5 %, le test n’est pas significatif au seuil
a = 5 %. Nous décidons de conserver l’hypothèse nulle H0 au seuil a = 5 %. Le risque d’erreur
associé à cette décision est un risque de deuxième espèce. Nous ne pouvons pas l’évaluer dans
le cas présent mais il est considéré comme satisfaisant car l’effectif de l’échantillon, auquel le
test de Shapiro-Wilk est appliqué, vaut 35 et donc dépasse 30. En effet :
© Dunod – La photocopie non autorisée est un délit.
> length(residus2)
[1] 35
Homogénéité. Nous allons réaliser le test de Bartlett sur ces 35 données en tapant la ligne de
commande suivante :
> bartlett.test(residus2~traitement,data=exo2)
> modele1<-lm(taux~traitement,data=exo2)
> anova(modele1)
4) Pour répondre à l’éventuelle significativité, nous allons utiliser le test de Fisher qui a été
construit à la question précédente. Les hypothèses de ce test sont les suivantes :
> power.anova.test(5,7,19.043,76.42857)
Solution des exercices 437
Comme la puissance (1 − b) est égale à 0,4684833, l’erreur de deuxième espèce b est égale
à 0,5315167. Cette erreur est relativement importante.
Si nous voulions une puissance égale à 0,80 il faudrait prendre au moins 13 patients par
groupe.
Ce résultat a été trouvé en tapant la ligne de commande suivante :
>power.anova.test(groups=5,between.var=19.043,within.var=76.42857,power=.80)
La procédure d’analyse de la variance peut être illustrée avec le graphique de la figure 10.10
créé par l’instruction suivante :
> granovagg.1w(taux,group=traitement)
By-group summary statistics for your input data (ordered by group means)
group group.mean trimmed.mean contrast variance
2 2 4.07 3.8 -0.76 3.62
1 1 4.21 4.2 -0.61 1.65
4 4 4.43 4.3 -0.40 4.12
5 5 5.57 5.6 0.74 1.12
3 3 5.86 5.9 1.03 2.23
438 10 • Analyse de la variance à un facteur
standard.deviation group.size
2 1.90 7
1 1.29 7
4 2.03 7
5 1.06 7
3 1.49 7
Below is a linear model summary of your input data
Call:
lm(formula = score ~ group, data = owp$data)
Residuals:
Min 1Q Median 3Q Max
-2.4286 -1.0714 -0.0714 1.0357 3.4286
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.8286 0.2698 17.897 <2e-16 ***
group1 -0.6143 0.5396 -1.138 0.2639
group2 -0.7571 0.5396 -1.403 0.1708
group3 1.0286 0.5396 1.906 0.0662 .
group4 -0.4000 0.5396 -0.741 0.4643
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.596 on 30 degrees of freedom
Multiple R-squared: 0.1995,Adjusted R-squared: 0.09272
F-statistic: 1.869 on 4 and 30 DF, p-value: 0.1419
Sur le graphique nous constatons que la variabilité de moyennes de chaque groupe (représen-
tées par des triangles) est faible par rapport à la dispersion des mesures au sein de chacun des
groupes (représentées par des points).
Le carré situé en bas à droite permet de comparer plus précisément ces variations. En effet,
son aire correspond à la variation totale des mesures et la zone plus claire à l’intérieur de ce carré
est la proportion de la variation totale qui provient de la variation résiduelle tandis que la zone
plus foncée à l’intérieur du carré est celle provenant de la variation due au facteur. La couleur
du carré est bleue, ce qui indique que le test de Fisher n’est pas significatif au seuil a = 5 %.
7
2
3
8 ●
● ●
● ●
● ● ●
Dependent variable (response)
● ● ● Group Means
5.9
MS−between
5.6 ● ● ●●
MS−within
● ●●
●
●● ●
4.4
4.2
4.1 ●● ● ● ● Grand Mean
● ●
● ● ●
2 ● ●
F = 1.87
−0.76
−0.61
−0.4
0.74
0
Figure 10.10
© Dunod – La photocopie non autorisée est un délit.
5) Donnons une estimation de la variance s2 . Pour cela, nous lisons le carré moyen résiduel
dans le tableau de l’analyse de la variance. Elle vaut 2,5476.
6) Nous ne pouvons pas séparer les traitements puisque le test de Fisher qui a été réalisé à la
question 4) nous a indiqué que les moyennes mi sont toutes égales.
Index
A carré moyen
dû au facteur 406
abaques 296
résiduel 406
ajustement linéaire 364
centre de masse 366
analyse de la variance 399, 404
classe 103
approximation
modale 141
de la loi binomiale
coefficient
par la loi de Poisson 204
d’aplatissement
par la loi normale 204
de Fisher 154
de la loi hypergéométrique par la loi binomiale
204 de Pearson 154
argument 36, 50 d’association 235
asymptotiquement sans biais voir estimateur d’association de Pearson 235
asymptotiquement sans biais d’asymétrie
de Fisher 153
de Pearson 153
B de Bravais-Pearson 233
biais de l’estimateur 259 de corrélation linéaire observé 233
boîte de corrélation linéaire théorique 233
à moustaches 135 de variation 152
de distribution 136 composantes 23
boxplot 136 coordonnées 23
correction de continuité 205
de Yates 276, 309, 343
C couple
caractère 93 covariance 232
multiple 94 distribution
qualitatif 94 des effectifs 223
quantitatif 93 des fréquences 223
continu 94 distribution conjointe 223
discontinu 94 effectif 223
discret 94 fréquence 223
simple 94 tableau de contingence 223
Index 441
O règle
de Freedman-Diaconis 104
objet 23, 26
de Scott 104
classe 27
de Sturges 104
mode 27
régression linéaire 364
nom des colonnes 27
coefficient directeur 365
taille 27
ordonnée à l’origine 365
opérateur d’affectation 24
pente 365
option 50
régression linéaire simple 368
ordinal 94
relativement plus efficace voir estimateur
relativement plus efficace
P réponse 401
résidu de l’ajustement 367
plurimodale 141 résidus 409
population 92 risque d’erreur
prédicteur 366 de deuxième espèce 293
puissance de première espèce 293
a posteriori 421 robustesse d’unité 296
analyse de la variance 420
d’un test statistique 293
S
somme des carrés
Q
des résidus 367
QQPlot voir Quantile to Quantile Plot due à la régression 366
quantile d’ordre a 144 totale 366
Quantile to Quantile Plot 325 statistique 92
quartile d’ordre 143
premier 144 de l’échantillon 258
troisième 144 de test 294
© Dunod – La photocopie non autorisée est un délit.
statistiques 92
stéréogramme 231, 248
R
R1
aide du logiciel 10
T
bibliothèque 7 tableau
installer le logiciel 5 de contingence 223, 319
package 7 de données 24, 52
script 13 de données brutes 223
rapport de corrélation empirique 234 de l’analyse de la variance 368, 408
rapport de corrélation théorique 234 de l’effectif de chaque valeur 101
région des effectifs cumulés 101
critique 294 des fréquences 102
d’acceptation 294 des fréquences cumulées 102
444 Index
test valeur
bilatéral 294 aberrante 136
d’adéquation d’une loi à une loi donnée 344 ajustée 367
d’hypothèse 292 prédite 366
de comparaison avec une norme 297 prévue 367
de Fisher-Freeman-Halton 347 variable
de Freeman-Halton 347 à expliquer 366
de Mac-Nemar 348 aléatoire
de Shapiro-Wilk 265, 271 continue 190
des rangs signés de Wilcoxon 302 discrète 189
des signes 302 contrôlée 401
du x2 d’indépendance 341 de décision 294
exact de Fisher 318, 345 explicative 366
le plus puissant 296 expliquée 366
robustesse d’un, 296 variables aléatoires indépendantes 232
statistique 292 variables d’erreur 369, 403
unilatéral 294 variance
test de comparaison conditionnelle 230
de deux proportions sur deux populations corrigée 148
échantillons appariés 349 de l’échantillon 149
échantillons indépendants 346 de la population 149
de p proportions sur q populations
empirique 148
échantillons appariés 349
estimée 149
échantillons indépendants 348
inter-modalités 234
test de Student
intra-modalités 234
comparaison avec une norme 301
marginale 229
comparaison de deux populations 311
résiduelle 369
test de Bartlett 411
variation
test de Kruskal-Wallis 412
due au facteur 406
test de Tukey 416
expliquée par la régression 366
test de Tukey-Kramer 416
inexpliquée par la régression 367
test de Welch 312
résiduelle 367, 406
test de White 370
théorème de Fisher 264 totale 366, 406
vecteur 23, 28
concaténer 32
U recyclage 35
unimodale 141
unités statistiques 92
Z
zone
V d’acceptation 294
v.a.r. voir variable aléatoire réelle de rejet 294
78282 - (I) - OSB 80° - VIO - NRI
Dépôt légal : septembre 2018
Achevé d’impression par Dupli-Print
www.dupli-print.fr
Imprimé en France