Vous êtes sur la page 1sur 40

Traduit de Anglais vers Français - www.onlinedoctranslator.

com

3.4. TESTS D'HYPOTHÈSES 41

poney
trans = 0,1

ge

t1

2
e

e
e
eu

is

et
eu
un
s

s
an

le
gr
ro

ro

ol
bl

bl
or

ja
vi

vi
3.4 Tests d'hypothèses

Faisons maintenant quelques tests d’hypothèses de base. Commençons par effectuer un test t sur deux échantillons pour voir s'il existe un
différence significative entre l’âge des pirates qui portent un bandeau et ceux qui ne le portent pas :
# Test t d'âge par bandeau
t.test(formule =âge~Bandeau,
données =les pirates,
alternative ='deux faces')
##
# # Test t de Welch à deux échantillons
##
# # données : âge par bandeau
# # t = 0,4, df = 100, valeur p = 0,7
# # hypothèse alternative : la vraie différence de moyenne n'est pas égale à 0
# # Intervalle de confiance de 95 % :
# # - 1,0 1,5
# # exemples d'estimations :
## méchant dans le groupe non méchant dans le groupe oui
## 28 27

Avec une valeur p de 0,7259, nous ne disposons pas de preuves suffisantes indiquant qu'il existe une différence dans l'âge des hommes.
les pirates qui portent des bandeaux et ceux qui n'en portent pas.

Testons ensuite s'il existe une corrélation significative entre la taille et le poids d'un pirate en utilisant lecor.test()
fonction:
cor.test(F ormul un=~ haute ht+w huit ,
data = pirate t es)
42 CHAPITRE 3. Plongez-y !

##
# # Corrélation produit-moment de Pearson
##
# # données: hauteur et largeur
# # t = 80, df = 1000, valeur p <2e-16
# # hypothèse alternative : la vraie corrélation n'est pas égale à 0
# # Intervalle de confiance de 95 % :
# # 0,92 0,94
# # exemples d'estimations :
# # cor
# # 0,93

Nous avons une valeur p dep < 2,2e-16,c'est la notation scientifique pourp < 0,00000000000000016 –ce qui est à peu
près 0. Ainsi, nous conclurions qu'il existe une relation significative (positive) entre la taille d'un pirate et
poids.
Faisons maintenant un test ANOVA s'il y a une différence entre le nombre de tatouages que les pirates ont basés sur
sur leur épée préférée
# Créer un modèle de tatouages
tat.sword.lm <-lm(formule =tatouages~type d'épée,
données =pirates)

# Obtenir le tableau ANOVA


anova(tat.sword.lm)
# # Analyse du tableau des écarts
##
# # Réponse : tatouages
## Df Somme Sq Moyenne Sq Valeur F Pr(>F) 3
# # type.épée 1588 529 54,1 <2e-16***
# # Résidus 996 9743 dix
##---
# # Signif. codes: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1'' 1

Effectivement, nous voyons une autre très petite valeur p dep < 2,2e-16,suggérant que le nombre de tatouages
Les pirates sont différents en fonction de leur épée préférée.

3.5 Analyse de régression

Enfin, effectuons une analyse de régression pour voir si l'âge, le poids et le nombre de tatouages d'un pirate
prédit combien de coffres au trésor il a trouvé :
# Créer un modèle de régression linéaire : DV = poitrines, IV = âge, poids, tatouages
tchests.modèle <-lm(formule =poitrines~âge+poids+les tatouages,
données =pirates)

# Afficher les statistiques récapitulatives


résumé(coffres.modèle)
##
# # Appel:
# # lm(formule = poitrines ~ âge + poids + tatouages, données = pirates)
##
# # Résidus :
# # Min. Médiane 1Q 3ème trimestre Max.
3.6. STATISTIQUES BAYÉSIENNES 43

# # - 33h30 -15h83 - 6,86 8,41 119,97


##
# # Coefficients :
## Estimation standard. Valeur t d'erreur Pr(>|t|)
# # (Interception) 5.1908 7.1844 0,72 0,47
# # âge 0,7818 0,1344 5,82 8e-09***
# # poids - 0,0901 0,0718 - 1,25 0,21
# # tatouages 0,2540 0,2255 1.13 0,26
##---
# # Signif. codes: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1'' 1
##
# # Erreur type résiduelle : 24 sur 996 degrés de liberté
# # R-carré multiple : 0,0406, R-carré ajusté : 0,0377
# # Statistique F : 14 sur 3 et 996 DF, valeur p : 5,75e-09

Il semble que le seul indicateur significatif du nombre de coffres au trésor qu'un pirate a trouvé est
son âge. Il ne semble pas y avoir d’effet significatif du poids ou des tatouages.

3.6 Statistiques bayésiennes

Maintenant, répétons certaines de nos analyses précédentes avec des versions bayésiennes. Nous allons d'abord installer et charger le
Facteur Bayespackage qui contient les fonctions de statistiques bayésiennes que nous utiliserons :

# Installer et charger le package BayesFactor


installer.packages('Facteur Bayes') bibliothèque
(Facteur Bayes)

Maintenant que les packages sont installés et chargés, nous sommes prêts à partir ! Faisons une version bayésienne de notre précédente
Test t demandant si les pirates qui portent un bandeau sont plus âgés ou plus jeunes que ceux qui ne le portent pas.

# Test t bayésien comparant l'âge des pirates avec et sans bandeaux testBF(formule =
âge~Bandeau,
données =pirates)
# # Analyse factorielle bayésienne
##--------------
# # [1] Alt., r=0,707 : 0,12 ±0%
##
# # Contre le dénominateur :
# # Nul, mu1-mu2 = 0
##---
# # Type de facteur Bayes : BFindepSample, JZS

Il semble que nous ayons obtenu un facteur Bayes de 0,12, ce qui constitue une preuve solide.pourl'hypothèse nulle (que la moyenne
l'âge ne diffère pas entre les pirates avec et sans bandeaux)

3.7 N'était-ce pas facile ?!

Attends attends! Avez-vous sérieusement simplement calculé des statistiques descriptives, un test t, une ANOVA et une régression, créé
un nuage de points et un pirateplot, ET effectué à la fois un test t bayésien et une analyse de régression. Ouais. Imaginez combien de temps
il aurait fallu pour expliquer comment faire tout cela dans SPSS. Et même si vous n'avez pas encore vraiment appris comment fonctionne R, je
parierais que vous pourriez facilement modifier le code précédent pour faire beaucoup de choses.
44 CHAPITRE 3. Plongez-y !

d'autres analyses. Bien sûr, ne vous inquiétez pas si tout ou partie du code précédent n’a pas de sens. Bientôt… ce sera le cas
tout soit clair.

Maintenant que vous avez commencé, apprenons à nager.


Chapitre 4

Les bases

Si vous êtes comme la plupart des gens, vous considérez R comme un programme de statistiques. Cependant, même si R est définitivement le plus cool,
La façon la plus badass et la plus pirate de réaliser des statistiques – ce n'est pas vraiment un programme. C'est plutôt une programmation
languequi a été rédigé par et pour des statisticiens. Pour en savoir plus sur l’histoire de R…just…you
je sais… recherchez-le sur Google.

Dans ce chapitre, nous passerons en revue les bases du langage R et de l'environnement de programmation RStudio.

4.1 La ligne de commande (Console)

Le code R, à lui seul, n’est que du texte. Vous pouvez écrire du code R dans un nouveau script dans R ou RStudio, ou dans n'importe quel texte
éditeur. Bon sang, vous pouvez écrire du code R sur Twitter si vous le souhaitez. Cependant, le simple fait d'écrire le code ne suffira pas à résoudre le problème.

travail entier – pour que votre code soit exécuté (c'est-à-dire interprété), vous devez l'envoyer aux R
interpréteur de ligne de commande. Dans RStudio, l'interpréteur de ligne de commande s'appelle la console.

Dans R, l'interpréteur de ligne de commande commence par le symbole >. C'est ce qu'on appelle lerapide. Pourquoi s'appelle-t-on
l'invite ? Eh bien, cela vous « invite » à le nourrir avec du code R. Le moyen le plus rapide pour que R évalue le code est de saisir
votre code R directement dans l'interpréteur de ligne de commande. Par exemple, si vous tapez1+1dans
l'interprète et appuyez sur Entrée, vous verrez ce qui suit
1+1
# # [1] 2

Figure 4.1 : Ross Ihaka et Robert Gentlemen. Vous devez remercier ces deux pirates pour avoir créé R ! Vous ne pensez peut-
être pas beaucoup à eux maintenant, mais à la fin de ce livre, il y a de fortes chances que vous vous déguisez comme l'un
d'eux pour Halloween.

45
46 CHAPITRE 4. LES BASES

Figure 4.2 : Oui. R n'est en réalité qu'une calculatrice sophistiquée. Cet appareil de programmation R a été retrouvé sur une
épave sur le lac Bodensee en Allemagne. Je l'ai volé dans un musée et j'en ai fait une jolie intrigue. Mais je ne veux pas vous
le montrer.

Figure 4.3 : Vous pouvez toujours saisir du code directement dans la ligne de commande pour obtenir une réponse immédiate.
4.2. ÉCRIRE DES SCRIPTS R DANS UN ÉDITEUR 47

Figure 4.4 : Voici à quoi ressemble un nouveau script dans la fenêtre de l'éditeur sur RStudio. Le code que vous tapez ne sera exécuté
que lorsque vous l'enverrez à la console.

Comme vous pouvez le voir, R a renvoyé la valeur (heureusement correcte) de 2. Vous remarquerez que la console renvoie
également le texte [1]. Cela vous indique simplement l'index de la valeur à côté. Ne vous inquiétez pas pour le moment, cela aura
plus de sens plus tard. Comme vous pouvez le constater, R peut heureusement effectuer des calculs de base. En fait, au fond, R n’est
techniquement qu’une calculatrice sophistiquée. Mais c'est comme dire que Michael Jordan estjusteun videur de ballon fantaisie ou
Donald Trump estjusteune orange avec un renard mort sur la tête. Cela (et eux) est bien plus que cela.

4.2 Écrire des scripts R dans un éditeur

Il existe certainement de nombreux cas où il est judicieux de saisir du code directement dans la console. Par exemple, pour
ouvrez un menu d'aide pour une nouvelle fonction avec le ? commande, pour jeter un coup d’œil rapide à un ensemble de
données avec la tête()fonction, ou pour faire des calculs simples comme1+1,vous devez taper directement dans la console.
Cependant, le problème avec l’écriture de tout votre code dans la console est que rien de ce que vous écrivez ne sera enregistré.
Donc, si vous faites une erreur ou si vous souhaitez modifier un code antérieur, vous devez tout retaper. Pas très efficace. Pour cela
(et bien d'autres raisons), vous devrez écrire tout code important que vous souhaitez enregistrer en tant que script R. Un script R
n'est qu'un ensemble de code R dans un seul fichier. Vous pouvez écrire un script R dans n'importe quel texte
éditeur, mais vous devez l'enregistrer avec le fichier .R.suffixe pour indiquer clairement qu'il contient du code R.} dans un éditeur.

Dans RStudio, vous écrirez votre code R dans le… attendez…Sourcefenêtre. Pour commencer à écrire un nouveau script R dans
RStudio, cliquez sur Fichier – Nouveau fichier – R Script.

Raccourci!Pour créer un nouveau script dans R, vous pouvez également utiliser le raccourci commande-shift-N sur Mac. Je ne
je sais ce que c'est sur PC… et je ne veux pas le savoir.

Lorsque vous ouvrez un nouveau script, vous verrez une page vierge vous attendant pour écrire autant de code R que vous le souhaitez.
Dans la figure 4.4, j'ai un nouveau script appeléexemple de scriptavec quelques calculs aléatoires.

Vous pouvez ouvrir plusieurs scripts R dans la fenêtre source dans des onglets séparés (comme je l'ai fait ci-dessus).
48 CHAPITRE 4. LES BASES

Figure 4.5 : Pour évaluer le code de la source, mettez-le en surbrillance et exécutez-le.

4.2.1 Envoyer du code d'une source à la console

Lorsque vous tapez du code dans un script R, vous remarquerez que, contrairement à la saisie de code dans la console,
rien ne se passe. Pour que R puisse interpréter le code, vous devez l'envoyer depuis l'éditeur vers la console. Là
Il existe plusieurs façons de procéder, voici les trois méthodes les plus courantes :

1. Copiez le code depuis l'éditeur (ou n'importe où disposant d'un code R valide) et collez-le dans la console (à
l'aide de Commande-V).

2. Mettez en surbrillance le code que vous souhaitez exécuter (avec votre souris ou en maintenant Shift), puis utilisez le raccourci
Commande-Retour (voir Figure 4.6).

3. Placez le curseur sur une seule ligne que vous souhaitez exécuter, puis utilisez le raccourci Commande-Retour pour exécuter uniquement cette
ligne.

99% du temps, j'utilise la méthode 2, où je surligne le code que je veux, puis j'utilise la commande-retour
raccourci. Cependant, la méthode 3 est idéale pour dépanner le code ligne par ligne.

4.3 Un bref guide de style : commentaires et espacement

Comme tous les langages de programmation, R n'est pas seulement destiné à être lu par un ordinateur, il est également destiné à
être lu par d'autres humains – ou des dauphins très bien dressés. Pour cette raison, il est important que votre code soit joli et
est compréhensible pour les autres et pour votre futur moi. Pour rester bref, je ne fournirai pas de guide de style complet – je
me concentrerai plutôt sur les deux aspects les plus critiques d’un bon style : les commentaires et l’espacement.
4.3. UN BREF GUIDE DE STYLE : COMMENTAIRES ET ESPACEMENT 49

Figure 4.6 : Ah... le raccourci Commande-Retour (Contrôle-Entrée sur PC) pour envoyer le code en surbrillance de
l'éditeur à la console. Habituez-vous à ce raccourci, les gens. Vous allez beaucoup l'utiliser

Figure 4.7 : Comme Stan l'a découvert dans la saison six de South Park, votre futur moi est un crétin paresseux, peut-être ivre. Alors
faites une faveur à votre futur et donnez à votre code une belle apparence. Peut-être aussi aller courir de temps en temps.
50 CHAPITRE 4. LES BASES

4.3.1 Commentaire du code avec le signe # (dièse)

Les commentaires sont complètement ignorés par R et sont uniquement là pour quiconque lit le code. Vous pouvez utiliser des commentaires
pour expliquer ce que fait une certaine ligne de code, ou simplement pour séparer visuellement des morceaux de code significatifs les uns des
autres. Les commentaires dans R sont désignés par un signe # (dièse). Chaque fois que R rencontre un signe #, il ignoreratousle code après
le signe # sur cette ligne. De plus, dans la plupart des éditeurs de codage (comme RStudio), l'éditeur affichera les commentaires dans une
couleur distincte du code R standard pour vous rappeler qu'il s'agit d'un code R standard.
un commentaire:

Voici un exemple de script court et joliment commenté. Essayez de faire en sorte que vos scripts ressemblent à ceci !
# Auteur : Pirate Jack
# Titre : Mon R Script joliment commenté
# Date : Aucun aujourd'hui :(

# Étape 1 : Charger le package yarrr


bibliothèque(ouais)

# Étape 2 : Voir les noms des colonnes dans l'ensemble de données des films
des noms(films)

# Étape 3 : Calculs

# Quel pourcentage de films sont des


suites ? signifier(films$suite,na.rm =T)

# Combien a gagné Pirate's des Caraïbes : On Stranger Tides ?


films$revenus.tous[films$nom=='Pirates des Caraïbes: La Fontaine de jouvence']

Je ne saurais trop insister sur l'importance de commenter votre code ! Croyez-moi, même si vous ne prévoyez
pas de partager votre code avec quelqu'un d'autre, gardez à l'esprit que votre futur moi le lira à l'avenir.

4.3.2 Espacement

Aimeriez-vous lire un livre s’il n’y avait pas d’espace entre les mots ? Je suppose que non.
Ainsi, chaque fois que vous écrivez du code sans espacement approprié, souvenez-vous de cette essence.

Les commentaires ne sont pas le seul moyen de rendre votre code lisible. Il est important d’utiliser correctement les
espaces et les sauts de ligne. Par exemple, j'inclus des espaces entre les opérateurs arithmétiques (comme =, + et -) et
après les virgules (sur lesquelles nous reviendrons plus tard). Par exemple, regardez le code suivant :

# Code qui a l'air merdique


une<-(100+3)-2
signifier(c(un/100,642564624.34))
t.test(formule =revenus.tous~suite,données=films) parcelle(x=films
$budget,y=films$DVD.USA,principal="mon intrigue")

Ce code ressemble à de la merde. N'écrivez pas de code comme ça. Cela me fait mal aux yeux. Maintenant, utilisons un peu de libéral
des quantités de commentaires et d'espacement pour le rendre moins merdique.

# Quelques calculs dénués de sens. Pas important

un <- (100+3)-2
signifier(c(un/100,642564624.34))

# t.test comparant les revenus des suites et des non-suites


4.4. OBJETS ET FONCTIONS 51

Figure 4.8 : Ne faites pas ressembler votre code à ce qu'un Tricératops malade souffrant de diarrhée a laissé à Jeff
Goldblum.

t.test(formule =revenus.tous~suite, données


=films)

# Un nuage de points du budget et des revenus du DVD.


# Difficile de voir une relation

parcelle(X =films$budget,
y =films$DVD.USA,
principal ="mon intrigue")

Vous voyez à quel point ce deuxième morceau de code est meilleur ? Non seulement les commentaires nous indiquent le but
derrière le code, mais il y a des espaces et des sauts de ligne séparant les éléments distincts.

Il existe bien d’autres aspects d’un bon formatage de code. Pour une liste de recommandations sur la façon de réaliser votre
code plus facile à suivre, consultez le guide R Style de Google à l'adresse
https://google-styleguide.googlecode.com/svn/trunk/Rguide.xml

4.4 Objets et fonctions

Pour comprendre le fonctionnement de R, il faut savoir que R tourne autour de deux choses : les objets et les fonctions.
Presque tout dans R est soit un objet, soit une fonction. Dans le morceau de code suivant, je vais définir un simple
objet appelétatouagesen utilisant une fonctionc() :

#1 : Créer un objet vectoriel appelé tatouages


tatouages <-c(4,67,23,4,dix,35)

#2 : Appliquer la fonction Mean() à l'objet Tattoos signifier


(tatouages)
# # [1] 24

Qu'est-ce qu'un objet ? Un objet est une chose – comme un nombre, un ensemble de données, une statistique récapitulative comme une
moyenne ou un écart type, ou un test statistique. Les objets se présentent sous de nombreuses formes et tailles différentes dans R. Il existe
des objets simples commescalairesqui représentent des nombres uniques,vecteurs(comme notretatouagesobjet ci-dessus) qui représentent
plusieurs nombres, des objets plus complexes commetrames de donnéesqui représentent des tableaux de données, et même
52 CHAPITRE 4. LES BASES

des objets plus complexes commetests d'hypothèseourégressionqui contiennent toutes sortes de statistiques
information.

Différents types d'objets ont des caractéristiques différentesles attributs. Par exemple, un vecteur de données a un attribut de longueur
(c'est-à-dire combien de nombres contiennent le vecteur), tandis qu'un test d'hypothèse possède de nombreux attributs tels qu'une statistique de
test et une valeur p. Ne vous inquiétez pas si cela vous semble un peu déroutant maintenant – tout deviendra plus clair lorsque vous rencontrerez ces
nouveaux objets en personne dans les chapitres suivants. Pour l’instant, sachez simplement que les objets dans R sont des choses, et
différents objets ont des attributs différents.

Qu'est-ce qu'une fonction ? Une fonction est unprocédurequi prend généralement un ou plusieurs objets comme arguments (c'est-
à-dire entrées), fait quelque chose avec ces objets, puis renvoie un nouvel objet. Par exemple, lesignifier()fonction
nous avons utilisé ci-dessus prend un objet vectoriel, commeles tatouages,de données numériques comme argument, calcule
la moyenne arithmétique de ces données, puis renvoie un seul nombre (un scalaire). L'un des avantages de R est que vous pouvez
facilement créer vos propres fonctions qui font ce que vous voulez - mais nous J'y reviendrai beaucoup plus tard dans le livre.
Heureusement, R possède des centaines (des milliers ?) de fonctions intégrées qui exécutent la plupart des tâches de base.
tâches d'analyse auxquelles vous pouvez penser.

99 % du temps que vous utilisez R, vous effectuerez les opérations suivantes : 1) Définir des objets. 2) Appliquez des fonctions à ces objets. 3)
Répétez !. Sérieusement, c'est tout. Cependant, comme vous l'apprendrez bientôt, le plus difficile est de savoir comment
pour définir les objets comme vous le souhaitez et savoir quelle(s) fonction(s) accompliront la tâche que vous
envie pour vos objets.

4.4.1 Chiffres versus caractères

Pour la plupart, les objets dans R se déclinent en deux versions :numériqueetpersonnage. Il est très important de garder ces deux
éléments séparés car certaines fonctions, commesignifier(),etmaximum()ne fonctionnera que pour les objets numériques,
tandis que des fonctions commegrep()etstrtrim()ne fonctionne que pour les objets de caractère.

Un objet numérique est juste un nombre comme1, 10ou3.14.Vous n'avez rien de spécial à faire pour créer un
objet numérique, tapez-le simplement comme si vous utilisiez une calculatrice.

# Ce sont tous des objets numériques 1

dix
3.14

UNpersonnagel'objet est un nom comme "Madisen", "Brian",ou "Université de Constance".Pour spécifier un


objet caractère, vous devez inclure des guillemets "" autour du texte.
# Ce sont tous des objets personnages
"Madisen"
"Brian"
"dix"

Si vous essayez d'effectuer une fonction ou une opération destinée à un objet numérique sur un objet caractère (et
vice-versa), R vous criera dessus. Par exemple, voici ce qui se passe lorsque j'essaie de faire la moyenne des deux
objets de personnage "1"et "dix":
# Cela renverra une erreur car les arguments ne sont pas numériques !
signifier(c("1","dix"))

Message d'avertissement : l'argument n'est ni numérique ni logique, renvoyant NA

Si je m'assure que les arguments sont numériques (en n'incluant pas les guillemets), je ne recevrai pas le
erreur:

# C'est acceptable!
signifier(c(1,dix))
# # [1] 5,5
4.4. OBJETS ET FONCTIONS 53

4.4.2 Créer de nouveaux objets avec <-

Vous savez maintenant que vous pouvez utiliser R pour effectuer des calculs simples. Mais pour vraiment profiter de R, il
faut savoir créer et manipuler des objets. Toutes les données, analyses et même tracés que vous utilisez et créez sont, ou
peuvent être, enregistrés en tant qu'objets dans R. Par exemple, lefilmsl'ensemble de données que nous avons utilisé
auparavant est un objet stocké dans leyarrremballer. Cet objet a été défini dans leyarrrpaquet avec le nomfilms. Lorsque
vous avez chargé leyarrrpaquet avec lebibliothèque('yarrr')commande, vous avez dit à R de vous donner accès
aufilmsobjet. Une fois l'objet chargé, nous pourrions l'utiliser pour calculer des statistiques descriptives,
des tests d'hypothèses et pour créer des tracés.

Pour créer de nouveaux objets dans R, vous devez faireaffectation d'objet. L'affectation d'objets est notre façon de stocker des
informations, telles qu'un nombre ou un test statistique, dans quelque chose auquel nous pouvons facilement nous référer plus tard. C'est
une grosse affaire. L'affectation d'objets nous permet de stocker des objets de données sous des noms pertinents que nous pouvons ensuite
utiliser pour découper et découper des objets de données spécifiques à tout moment.

Pour effectuer une mission, nous utilisons le tout-puissant <- opérateur appeléattribuerPour attribuer quelque chose à un
nouvel objet (ou pour modifier un objet existant), utilisez la notationobjet <- ...},oùobjetest le nouvel objet (ou mis à jour),
et ... est tout ce que vous souhaitez stocker dansobjet.Commençons par créer un objet très simple appelé
unet en lui attribuant la valeur 100 :

Les bons noms d'objets établissent un équilibre entre la facilité de saisie (c'est-à-dire les noms courts) et la facilité d'interprétation. Si vous disposez de
plusieurs ensembles de données, ce n'est probablement pas une bonne idée de les nommer.une, b, cparce que vous oublierez qui est quoi. Cependant,
en utilisant des noms longs commemars 2015Groupe1UniquementFemmesvous donnera le syndrome du canal carpien.

# Créez un nouvel objet appelé a avec une valeur de 100


un <-100

Une fois que vous aurez exécuté ce code, vous remarquerez que R ne vous dit rien. Cependant, tant que vous n'avez pas tapé
quelque chose de mal, R devrait maintenant avoir un nouvel objet appeléunqui contient le nombre 100. Si vous voulez voir la
valeur, vous devez appeler l'objet en exécutant simplement son nom. Cela imprimera la valeur de l'objet
à la console :
# Imprimer l'objet a un

# # [1100

Maintenant, R imprimera la valeur deun (dans ce cas 100) à la console. Si vous essayez d'évaluer un objet qui n'est pas encore
défini, R renverra une erreur. Par exemple, essayons d'imprimer l'objetbque nous n'avons pas encore défini :
b

Erreur : l'objet 'b' est introuvable

Comme vous pouvez le voir, R nous a crié dessus parce que l'objetbn'a pas encore été défini.

Une fois que vous avez défini un objet, vous pouvez le combiner avec d'autres objets en utilisant l'arithmétique de base. Créons
objetsunetbet jouer avec eux.
un <-1
b <-100

# Qu'est-ce que a + b ?
un+b
# # [1] 101

# Attribuer a + b à un nouvel objet (c) c


<- une+b

# Qu'est-ce que c ?
54 CHAPITRE 4. LES BASES

c
# # [1] 101

4.4.2.1 Pour modifier un objet, vous devez le réaffecter !

Normalement, j'essaie d'éviter de trop insister, mais comme la phrase suivante est si importante, je dois simplement
Allez-y. Voilà…

Pour modifier un objet, vousdoitattribuez-le à nouveau !

Peu importe ce que vous faites avec un objet, si vous ne le réattribuez pas, il ne changera pas. Par exemple, disons que vous
avez un objetzavec une valeur de 0. Vous souhaitez ajouter 1 àzafin d'en faire 1. Pour ce faire, vous pourriez
je veux juste entrerz + 1 –mais cela ne fera pas l'affaire. Voici ce qui se passe si vousne le faites pasattribuez-le à nouveau :

z <-0
z+1
# # [1] 1

D'accord! Voyons maintenant la valeur dez

z
# # [dix

Condamner! Comme vous pouvez le voir, la valeur de z est toujours 0 ! Qu'est ce qui ne s'est pas bien passé? Oh ouais…

Pour modifier un objet, vousdoitattribuez-le à nouveau !

Le problème est que lorsque nous avons écritz + 1sur la deuxième ligne, R pensait que nous voulions juste qu'il calcule et
imprimer la valeur dez + 1,sans stocker le résultat comme nouveauzobjet. Si nous voulons réellement mettre à jour le
valeur dez,nous devons réaffecter le résultat àzcomme suit:
z <-0
z <- z+1 # Maintenant, je change VRAIMENT z
z
# # [1] 1

Ouf, z vaut maintenant 1. Parce que nous avons utilisé l'affectation, z a été mis à jour. À propos de putain de temps.

4.4.3 Comment nommer les objets

Vous pouvez créer des noms d'objet en utilisant n'importe quelle combinaison de lettres et quelques caractères spéciaux (comme . et _).
Voici quelques noms d'objets valides
# Noms d'objet valides
groupe.moyenne <-10.21
mon.âge <-32
FavorisPirate <-"Jack Sparrow"
somme.1.à.5<-1+2+3+4+5

Tous les noms d'objets ci-dessus sont parfaitement valides. Voyons maintenant quelques exemples deinvalidenoms d'objets. Ces
noms d'objet ne sont pas valides car ils contiennent des espaces, commencent par des chiffres ou ont des noms non valides.
personnages:

# Noms d'objet invalides ! âges des femmes <-


50#les espaces 5expérience <-50#commence
par un chiffre un!<-50#a un caractère invalide
4.4. OBJETS ET FONCTIONS 55

Figure 4.9 : Comme pour un message texte, vous devriez probablement surveiller votre utilisation des majuscules dans R.

Si vous essayez d'exécuter le code ci-dessus dans R, vous recevrez un message d'avertissement commençant par

Erreur : symbole inattendu

. Chaque fois que vous voyez cet avertissement dans R, cela signifie presque toujours que vous avez une erreur de nom.

4.4.3.1 R est sensible à la casse !

Comme l'anglais, R est sensible à la casse : il traite les lettres majuscules différemment des lettres minuscules. Par exemple,
les quatre objets suivantsPillage, pillageetPILLAGEsont des objets totalement différents dans R :
# Ce sont tous des objets différents
Pillage <-1
pillage <-100
PILLAGE <-5

J'essaie d'éviter d'utiliser trop de lettres majuscules dans les noms d'objets car elles m'obligent à maintenir la touche Maj enfoncée. Cela peut
paraître idiot, mais vous seriez surpris de voir à quel point il est plus facile de tapermes donnéesqueMes données100 fois.
56 CHAPITRE 4. LES BASES

4.4.4 Exemple : Pirates des Caraïbes

Prenons un exemple plus pratique : nous définirons un objet appeléblackpearl.usdqui a le mondial


revenus de Pirates des Caraïbes : La Malédiction du Black Pearl en dollars américains. Une recherche rapide sur Google
m'a montré que le revenu était de 634 954 103 $. Je vais créer le nouvel objet en utilisant l'affectation :
blackpearl.usd <-634954103

Maintenant, mes collègues pirates européens voudront peut-être savoir combien cela représente en euros. Créons un
nouvel objet appelé {blackpearl.eurqui convertit notre valeur initiale en euros en multipliant le montant initial par
0,88 (en supposant que 1 USD = 0,88 EUR)

blackpearl.eur <- blackpearl.usd*0,88


blackpearl.eur
# # [1] 5.6e+08

Il semblerait que le film ait rapporté 558 759 611 euros. Pas mal. Maintenant, voyons à quel point Pirates des
Caribbean 2 : Dead Man's Chest réalisé par rapport à "Curse of the Black Pearl". Une autre recherche sur Google a révélé
que Dead Man's Chest rapportait 1 066 215 812 $ (ce n'était pas une erreur de frappe, le putain de film réalisé
plus d'un milliard de dollars).

homme mort.usd <-1066215812

Maintenant, je vais diviserhomme mort.usdparblackpearl.usd :

homme mort.usd/blackpearl.usd
# # [1] 1,7

On dirait que "Dead Man's Chest" a rapporté 168% autant que "Curse of the Black Pearl" - pas mal pour deux
des films basés sur un manège de Disneyland.

4.5 Testez votre puissance R !

1. Créez un nouveau script R. À l’aide des commentaires, écrivez votre nom, la date et « Testing my Chapter 2 R Might » en
haut du script. Écrivez vos réponses au reste de ces exercices sur ce script, et assurez-vous de copier et coller les
questions originales en utilisant les commentaires ! Votre script devraitseulementcontenir du code R et des
commentaires valides.

2. Lequel (le cas échéant) des noms d'objets suivants n'est pas valide ?
celui-ci <-1
CELUI-CI <-2
1Ceci <-3
ceci.un <-4
Ce.1<-5
Ceci.....ON...E <-6
Ce!Sur!e <-7
lkjasdfkjsdf <-8

3. 2015 a été une bonne année pour le butin des pirates : votre navire a collecté 100 800 pièces d'or. Créez un objet
appelé or.en.2015et attribuez-lui la valeur correcte.

4. Oups, lors de la dernière inspection nous avons découvert qu'un de vos pirates Skippy McGee avait caché 800
pièces d'or dans ses sous-vêtements. Allez-y et ajoutez ces pièces d'or à l'objetor.en.2015.Ensuite, créez un
objet appeléplanche.listeavec le nom du voleur pirate.

5. Regardez le code ci-dessous. Que retournera R après la troisième ligne ? Faites une prédiction, puis testez le code vous-
même.
4.5. TESTEZ VOTRE R PUISSANCE ! 57

un <-dix
un+dix
un
58 CHAPITRE 4. LES BASES
Chapitre 5

Scalaires et vecteurs

# Informations sur l'équipage


capitaine.nom <-"Jack"
capitaine.âge <-33

crew.names <-c("Bruyère","Vincent","Maya","Becki")
équipage.ages <-c(19,35,22,44)
équipage.sex <-c(représentant("M",fois =2),représentant("F",fois =
2)) crew.ages.decade <- crew.ages/dix

# Gains sur les 10 premiers jours de mer


jours <-1:dix
or <-séquence(de =dix,à =100,par =dix) argent
<-représentant(50,fois =dix) total <- or+argent

Les gens ne sont pas des objets. Mais R en regorge. Voici quelques-uns des éléments de base.

5.1 Scalaires

Le type d'objet le plus simple dans R est unscalaire. Un objet scalaire n'est qu'une valeur unique comme un nombre ou un nom. Dans
le chapitre précédent nous avons défini plusieurs objets scalaires. Voici des exemples de scalaires numériques :

# Exemples de scalers numériques


un <-100
b <-3/100
c <- (une+b)/b

Les scalaires ne doivent pas nécessairement être numériques, ils peuvent aussi l'êtrepersonnages(également appelés cordes). Dans R, vous notez
caractères utilisant des guillemets. Voici des exemples de scalaires de caractères :
# Exemples de scalers de caractères d
<-"bateau"
e <-"canon"
f <-"Est-ce que des armées modernes utilisent encore des canons ?"

Comme vous pouvez l'imaginer, R traite différemment les scalaires numériques et caractériels. Par exemple, même si vous pouvez faire
opérations arithmétiques de base sur les scalaires numériques – elles ne fonctionneront pas sur les scalaires de caractères. Si vous essayez de
effectuez des opérations numériques (comme l'addition) sur des caractères scalaires, vous obtiendrez une erreur comme celle-ci :

59
60 CHAPITRE 5. SCALAIRES ET VECTEURS

scalaire Vecteur

Figure 5.1 : Représentation visuelle d'un scalaire et d'un vecteur. Merde profonde. Attendez que nous arrivions aux matrices – vous allez le
perdre.

un <-"1"
b <-"2"
un+b

Erreur dans a + b : argument non numérique de l'opérateur binaire

Si vous voyez une erreur comme celle-ci, cela signifie que vous essayez d'appliquer des opérations numériques au caractère
objets. C'est tout simplement malade et faux.

5.2 Vecteurs

Passons maintenant àvecteurs.Un objet vectoriel n'est qu'une combinaison de plusieurs scalaires stockés sous forme d'un seul
objet . Par exemple, les nombres de un à dix pourraient être un vecteur de longueur 10 et les caractères de l'alphabet ish
Anglais pourraient être un vecteur de longueur 26. Comme les scalaires, les vecteurs peuvent être numériques ou alphabétiques.
(mais pas les deux !).

Il existe de nombreuses façons de créer des vecteurs dans R. Voici les méthodes que nous aborderons dans ce chapitre :

Tableau 5.1 : Fonctions pour créer des vecteurs.

Fufonction Exemple Résultat

c( un B, ...) c(1, 5, 9) 1, 5, 9
un:b 1:5 1, 2, 3, 4, 5
seq(de, à, par, longueur.out) p(x, seq(de = 0, à = 6, par = 2) rep(c(7, 8), 0, 2, 4, 6
fois, chacun,
concernant fois = 2, chacun = 2) 7, 7, 8, 8, 7, 7,
le ngth.out) 8, 8

Le Le moyen le plus simple de créer un vecteur est d'utiliser lec()fonction. Le c signifie ici concaténer, ce qui signifie «
moiles rassembler ». Lec()La fonction prend plusieurs scalaires comme arguments et renvoie un vecteur contenant ces
suite objets. Lorsque vous utilisez c(), placez une virgule entre les objets (scalaires ou vecteurs) que vous
souhaitez combiner :

Utilisons lec()fonction pour créer un vecteur appeléuncontenant les entiers de 1 à 5.


# Créez un objet a avec les entiers de 1 à 5
5.2. VECTEURS 61

Figure 5.2 : Ce n'est pas un tuyau. C'est un vecteur de caractère.

char.vec <-c("Céci","nid","pas","une","tuyau") char.vec

# # [1] "Ceci" "nest" "pas" "une" "pipe"

Tandis que lec()function est le moyen le plus simple de créer un vecteur, c'est aussi l'un des plus fastidieux. Par
exemple, disons que vous vouliez créer un vecteur de tous les entiers de 1 à 100. Vous ne voulez certainement pas
devoir taper tous les nombres dans l’opérateur ac(). Heureusement, R possède de nombreuses fonctions intégrées simples pour
générer des vecteurs numériques. Commençons par trois d'entre eux :a:b, séquence(),etreprésentant():

5.2.1a:b

Leun Bla fonction prend deux scalaires numériquesunetbcomme arguments, et renvoie un vecteur de nombres de
le point de départunjusqu'au point finalbpar pas de 1.
Voici quelques exemples deun Bfonction en action. Comme vous le verrez, vous pouvez reculer ou avancer, ou
faire des séquences entre des nombres non entiers :

1:dix
# # [1] 1 2 3 4 5 6 7 8 9 10 dix:1

# # [1] 10 9 8 7 6 5 4 3 2 1
2.5:8.5
# # [1] 2,5 3,5 4,5 5,5 6,5 7,5 8,5

5.2.2 séquence()

Argument Définition
depuis Le début de la séquence La
à fin de la séquence Le pas de
par la séquence
longueur.out La longueur souhaitée de la séquence finale (à
utiliser uniquement si vous ne spécifiez paspar)

Leséquence()la fonction est une version plus flexible deun B.Commea:b, suite()vous permet de créer une séquence à partir de
un numéro de début à un numéro de fin. Cependant,séquence(),a des arguments supplémentaires qui vous permettent de
précisez soit la taille des pas entre les nombres, soit la longueur totale de la séquence :
Leséquence()la fonction a deux nouveaux argumentsparetlongueur.out.Si vous utilisez leparargument, la séquence
se fera par étapes de l'entrée dans leparargument:
# Créez les nombres de 1 à 10 par pas de 1
62 CHAPITRE 5. SCALAIRES ET VECTEURS

Figure 5.3 : Pas une bonne représentation d'un représentant dans R.

# 3 nombres de 0 à 100
séquence(de =0,à =100,longueur.out =3)
# # [1] 0 50 100

5.2.3 représentant()

Argument Définition
X Un scalaire ou un vecteur de valeurs à
fois répéter Le nombre de fois à répéter x
chaque Le nombre de fois où répéter chaque valeur dans x La
longueur.out longueur souhaitée de la séquence finale

Lereprésentant()La fonction vous permet de répéter un scalaire (ou un vecteur) un nombre de fois spécifié, ou à un nombre souhaité.
longueur. Faisons quelques répétitions.

représentant(X =3,fois =dix)


# # [1] 3 3 3 3 3 3 3 3 3 3
représentant(X =c(1,2),chacun =3)
# # [1] 1 1 1 2 2 2
représentant(X =1:3,longueur.out =dix)
# # [1] 1 2 3 1 2 3 1 2 3 1

Comme vous pouvez le constater, vous pouvez inclure unun Bappeler dans unreprésentant()!

Vous pouvez même combiner lefoisetchaquearguments au sein d'un mêmereprésentant()fonction. Par exemple, voici
comment créer la séquence {1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3} avec un seul appel àreprésentant():
représentant(X =1:3,chacun =2,fois =2)
# # [1] 1 1 2 2 3 3 1 1 2 2 3 3

Avertissement! Les vecteurs contiennent soit des nombres, soit des caractères, pas les deux

Un vecteur ne peut contenir qu'un seul type de scalaire : numérique ou caractère. Si vous essayez de créer un vecteur avec
scalaires numériques et de caractères, alors R convertiratousdes scalaires numériques en caractères. Dans le prochain morceau de
code, je vais créer un nouveau vecteur appelémon.vecqui contient un mélange de scalaires numériques et de caractères.
5.3. GÉNÉRATION DE DONNÉES ALÉATOIRES 63

mon.vec <-c("un",1,"b",2,"c",3) mon.vec

# # [1] "a" "1" "b" "2" "c" "3"

Comme vous pouvez le voir sur la sortie,mon.vecest stocké sous forme de vecteur de caractères où tous les nombres sont convertis
aux personnages.

5.3 Génération de données aléatoires

Parce que R est un langage conçu pour les statistiques, il contient de nombreuses fonctions qui vous permettent de générer des données aléatoires.
données - soit à partir d'un vecteur de données que vous spécifiez (comme Face ou Face d'une pièce de monnaie), soit à partir d'un
établidistribution de probabilité, comme la distribution Normale ou Uniforme.

Dans la section suivante, nous passerons en revue la normeéchantillon()fonction pour tirer des valeurs aléatoires à partir d’un vecteur.
Nous aborderons ensuite certaines des distributions de probabilité les plus couramment utilisées : normale et uniforme.

5.3.1 échantillon()

Argument Définition
X Un vecteur de résultats à partir duquel vous souhaitez échantillonner. Par exemple,
pour simuler des tirages au sort, vous devez saisirx = c("H", "T")
taille Le nombre d'échantillons que vous souhaitez prélever. La valeur par défaut est la
longueur deX.
remplacer Faut-il effectuer un échantillonnage avec remplacement ? Si FALSE (la valeur
par défaut), alors chaque résultat dansXne peut être tiré qu’une seule fois. Si
VRAI, alors chaque résultat dansXpeut être tiré plusieurs fois. Un vecteur de
prob probabilités de même longueur queXindiquant la probabilité que chaque
résultat dansXest. Le vecteur de probabilités que vous donnez comme
argument doit totaliser un. Si vous ne précisez pas le probargument, tous les
résultats seront également probables.

Leéchantillon()La fonction vous permet de tirer des échantillons aléatoires d’éléments (scalaires) à partir d’un vecteur. Par exemple, si
vous souhaitez simuler les 100 lancers d'une pièce de monnaie, vous pouvez demander à la fonction d'échantillonnage d'échantillonner 100
valeurs du vecteur [« Têtes », « Tails »]. Ou, si vous devez affecter de manière aléatoire des personnes à une condition « Contrôle » ou « Test »
dans une expérience, vous pouvez échantillonner de manière aléatoire les valeurs du vecteur [« Contrôle », « Test »] :

Utilisonséchantillon()tirer 10 échantillons à partir d’un vecteur d’entiers de 1 à 10.


# A partir des entiers 1:10, tirez 5 nombres
échantillon(X =1:dix,taille =5)
# # [1] 2 1 5 3 9

5.3.1.1 remplacer = VRAI

Si vous ne précisez pas leremplacerargument, R supposera que vous échantillonnezsansremplacement. Dans


en d'autres termes, chaque élément ne peut être échantillonné qu'une seule fois. Si vous souhaitez échantillonner avec remplacement, utilisez le
remplacer = VRAIargument:

Pensez au remplacement, comme si vous tiriez des boules d’un sac. Échantillonnageavecremplacement (remplacer =
VRAI) signifie que chaque fois que vous tirez une balle, vous remettez la balle dans le sac avant de tirer une autre balle.
64 CHAPITRE 5. SCALAIRES ET VECTEURS

Échantillonnagesansremplacement (remplacer = FAUX)signifie qu'après avoir tiré une balle, vous retirez cette balle
du sac pour que vous ne puissiez plus jamais le dessiner.

# Tirez 30 échantillons à partir des entiers 1:5 avec remplacement


échantillon(X =1:5,taille =dix,remplacer =VRAI)
# # [1] 2 3 5 2 3 5 4 4 2 1

Si vous essayez de prélever un grand échantillon à partir d'un vecteursansremplacement, R renverra une erreur car il s'exécute
des choses à dessiner :
# Vous NE POUVEZ PAS prélever 10 échantillons sans remplacement
# un vecteur de longueur 5
échantillon(X =1:5,taille =dix)

Erreur : impossible de prendre un échantillon plus grand que la population lorsque "replace = FALSE"

Pour résoudre ce problème, dites simplement à R que vous souhaitez échantillonner avec remplacement :

# Vous POUVEZ prélever 10 échantillons avec remplacement à partir d'un


# vecteur de longueur 5
échantillon(X =1:5,taille =dix,remplacer =VRAI)
# # [1] 4 2 2 3 3 4 5 3 2 5

Pour spécifier la probabilité que chaque élément du vecteurXdoit être sélectionné, utilisez leprobargument. La durée
de laprobl'argument devrait être aussi long que leXargument. Par exemple, tirons 10 échantillons (avec remplacement)
du vecteur [« a », « b »], mais nous ferons en sorte que la probabilité de sélectionner « a » soit de 0,90, et la
la probabilité de sélectionner « b » est de 0,10

échantillon(X =c("un","b"),
prob =c(.9, .1), taille
=dix,
remplacer =VRAI)
# # [1] "a" "a" "a" "a" "a" "a" "a" "a" "a" "a"

5.3.1.2 Ex : simulation de tirages au sort

Simulons 10 lancers d'une pièce équitable, la probabilité d'obtenir soit une pile soit une pile soit de 0,50. Parce que tout
les valeurs sont également probables, nous n'avons pas besoin de spécifier leprobargument

échantillon(X =c("H","T"),#Les valeurs possibles de la pièce


taille =dix,#10 lancers
remplacer =VRAI)#Échantillonnage avec remplacement
# # [1] "H" "H" "T" "T" "H" "T" "H" "T" "H" "H"

Modifions maintenant cela en simulant des lancers de pièces biaisés, où la probabilité de face est de 0,8 et la
probabilité de face est de 0,2. Puisque les probabilités de chaque résultat ne sont plus égales, nous devrons
précisez-les avec leprobargument:
échantillon(X =c("H","T"),
prob =c(.8, .2),#Rendre la pièce biaisée pour Face taille =dix
,
remplacer =VRAI)
# # [1] "H" "H" "H" "H" "H" "T" "T" "H" "H" "H"

Comme vous pouvez le voir, notre fonction a renvoyé un vecteur de 10 valeurs correspondant à notre taille d'échantillon de 10.
5.3. GÉNÉRATION DE DONNÉES ALÉATOIRES 65

5.3.1.3 Ex : Pièces d'un coffre

Coffre de 20 pièces d'or, 30 pièces d'argent,

et 50 pièces de bronze

Maintenant, prenons un exemple de tirage de pièces d'un coffre au trésor. Disons que le coffre contient 100 pièces : 20 d'or, 30 d'argent,
et 50 bronzes. Tirons 10 pièces au hasard dans ce coffre.
# Créez un coffre avec les 100 pièces

poitrine <-c(représentant("or",20),
représentant("argent",30),
représentant("bronze",50))

# Tirez 10 pièces du coffre


échantillon(X =poitrine,
taille =dix)
# # [1] "bronze" "bronze" "bronze" "bronze" "bronze" "argent" "bronze"
# # [8] "bronze" "bronze" "argent"

La sortie duéchantillon()La fonction ci-dessus est un vecteur de 10 chaînes indiquant le type de pièce que nous avons dessiné sur chaque
échantillon. Et comme toute fonction d'échantillonnage aléatoire, ce code vous donnera probablement des résultats différents à chaque fois.
il est temps de l'exécuter ! Voyez combien de temps il vous faut pour obtenir 10 pièces d’or…

Dans la section suivante, nous verrons comment générer des données aléatoires à partir de données spécifiées.distributions de probabilité. Quoi
est une distribution de probabilité ? Eh bien, c'est simplement une équation – également appelée fonction de vraisemblance – qui
indique la probabilité que certaines valeurs numériques soient tirées.

Nous pouvons utiliser des distributions de probabilité pour représenter différents types de données. Par exemple, imaginez que vous devez
embauchez un nouveau groupe de pirates pour votre équipage. Vous avez la possibilité d'embaucher des personnes provenant de l'une des deux
écoles de formation de pirates différentes qui produisent des pirates de qualité variable. Un collège « Pirate Training Unlimited »
pourrait avoir tendance à s'adresser à des pirates qui sont généralement ok - jamais géniaux mais jamais terribles. Tandis qu'un autre
collège, « Formation illimitée des pirates », pourrait produire des pirates avec une grande variété de qualités, de très faible à très élevée.
Dans la figure 5.4, j'ai représenté 5 exemples de pirates de chaque collège, où chaque pirate est représenté par une balle sur laquelle est écrit
un numéro. Comme vous pouvez le constater, les pirates du PTU ont tous tendance à être regroupés entre 40 et 60 (et non
66 CHAPITRE 5. SCALAIRES ET VECTEURS

Deux collèges de pirates différents

Formation de pirate illimitée

434478 5658

Entraînement illimité des pirates

19 34 52 66
35

0 20 40 60 80 100

Qualité pirate

Figure 5.4 : Échantillonnage de 5 pirates potentiels issus de deux collèges de pirates différents. Pirate Training Unlimited
(PTU) produit systématiquement des pirates moyens (avec des scores compris entre 40 et 60), tandis qu'Unlimited Pirate
Training (UPT) produit une large gamme de pirates de 0 à 100.

terrible mais pas génial), tandis que les pirates de l'UPT sont partout sur la carte, de 0 à 100. Nous pouvons utiliser des
distributions de probabilité (dans ce cas, la distribution uniforme) pour définir mathématiquement la probabilité qu'une
valeur possible soit tirée au hasard de une répartition. On pourrait décrire Pirate Training Unlimited avec une distribution
uniforme avec une petite portée, et Unlimited Pirate Training avec une seconde distribution uniforme avec une
large éventail.

Dans les deux sections suivantes, je couvrirai les deux distributions les plus courantes : la distribution normale et la distribution
uniforme. Cependant, R contient bien plus de distributions que ces deux-là. Pour les voir tous, regardez le menu d'aide
pour les distributions :

# Voir toutes les distributions incluses dans Base R ?


Distributions

5.3.2 Normale (gaussienne)

Argument Définition
n Le nombre d'observations à tirer de la distribution. La
signifier moyenne de la distribution.
Dakota du Sud L'écart type de la distribution.

La distribution normale (alias « gaussienne ») est probablement la distribution la plus importante de toutes les statistiques.
La distribution normale est en forme de cloche et comporte deux paramètres : une moyenne et un écart type. À
générer des échantillons à partir d'une distribution normale dans R, on utilise la fonctionrnorme()

# 5 échantillons d'une distribution normale avec moyenne = 0, sd = 1


rnorme(n =5,moyenne =0,SD =1)
# # [1] -1,38 2,40 0,37 0,53 0,69

# 3 échantillons d'une distribution normale avec moyenne = -10, sd = 15


5.3. GÉNÉRATION DE DONNÉES ALÉATOIRES 67

Trois distributions normales

1.0 µ =0, σ = 1
µ = −2, = 0,5 µ
0,8

=1, = 2
0,6
dnorme(x)

0,4
0,2
0,0

−4 −2 0 2 4

X
Figure 5.5 : Trois distributions normales différentes avec des moyennes et des écarts types différents

3 distributions uniformes

Min = −1, Max = +1


Min = −4, Max = −3
Min = −2, Max = +4
0,0 0,2 0,4 0,6 0,8 1,0 1,2
Densité

−4 −2 0 2 4

X
Figure 5.6 : La distribution uniforme – connue familièrement sous le nom de distribution d'Anthony Davis.
68 CHAPITRE 5. SCALAIRES ET VECTEURS

# 5 échantillons de Dist uniforme avec des limites à 0 et 1


runif(n =5,min =0,maximum =1)
# # [1] 0,94 0,80 0,57 0,11 0,22

# 10 échantillons de distribution uniforme avec des limites à -100 et +100


runif(n =dix,min =-100,maximum =100)
# # [1] 10,94 -80,50 52,38 0,45 -79,65 31,94 87,28 -67,69 -58,64 - 0,37

5.3.4 Notes sur les échantillons aléatoires

5.3.4.1 Les échantillons aléatoires changeront toujours

Chaque fois que vous tirez un échantillon d'une distribution de probabilité, vous obtiendrez (probablement) un résultat différent. Par
exemple, voyez ce qui se passe lorsque j'exécute les deux commandes suivantes (vous apprendrez lernorme()fonction sur
la page suivante…)

# Tirez un échantillon de taille 5 à partir d'une distribution normale avec une moyenne de 100 et un écart-type de
10 rnorme(n =5,moyenne =100,SD =dix)
# # [1] 107 94 103 106 100

# Refais-le!
rnorme(n =5,moyenne =100,SD =dix)
# # [1] 113 104 109 108 96

Comme vous pouvez le constater, exactement le même code a produit des résultats différents – et c'est exactement ce que nous voulons ! Chaque
le moment où tu coursrnorm(),ou une autre fonction de distribution, vous obtiendrez un nouvel échantillon aléatoire.

5.3.4.2 Utilisationset.seed()pour contrôler des échantillons aléatoires

Il y aura des cas où vous souhaiterez exercer un certain contrôle sur les échantillons aléatoires que R produit à partir des
fonctions d'échantillonnage. Par exemple, vous souhaiterez peut-être créer un exemple reproductible d’un code que
n’importe qui peut reproduire exactement. Pour ce faire, utilisez leset.seed()fonction. En utilisantset.seed()forcera R
pour produire des échantillons aléatoires cohérents à tout moment sur n’importe quel ordinateur.

Dans le code ci-dessous, je vais définir la valeur de départ d'échantillonnage sur 100 avecset.seed(100).je vais ensuite courirrnorme()deux fois. Le
les résultats seront toujours cohérents (car nous avons corrigé la graine d'échantillonnage).

# Fixer la graine d'échantillonnage à 100, donc les fonctions d'échantillonnage suivantes


# produit toujours les mêmes valeurs
définir.seed(100)

# Le résultat sera toujours -0,5022, 0,1315, -0,0789 rnorme(3,


moyenne =0,SD =1)
# # [1] -0,502 0,132 -0,079

# Le résultat sera toujours 0,887, 0,117, 0,319 rnorme(


3,moyenne =0,SD =1)
# # [1] 0,89 0,12 0,32

Essayez d'exécuter le même code sur votre machine et vous verrez exactement les mêmes exemples que ceux que j'ai reçus ci-dessus. Oh
et la valeur de 100 que j'ai utilisée ci-dessus dansset.seed(100)est totalement arbitraire – vous pouvez définir la graine sur n’importe quel
entier que vous voulez. Il se trouve que j'aime la façon dontset.seed(100)regarde dans mon code.
5.4. TESTEZ VOTRE R PUISSANCE ! 69

5.4 Testez votre puissance R !

1. Créez le vecteur [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] de trois manières : une fois en utilisantc(),une fois utiliséun B,et une fois utilisé
séquence().

2. Créez le vecteur [2.1, 4.1, 6.1, 8.1] de deux manières, une fois en utilisantc()et une fois utiliséséquence()

3. Créez le vecteur [0, 5, 10, 15] de 3 manières : en utilisantc(), séquence()avec unparargumentation, etséquence()avec un
longueur.outargument.

4. Créez le vecteur [101, 102, 103, 200, 205, 210, 1000, 1100, 1200] en utilisant une combinaison desc()et
séquence()les fonctions

5. Un nouveau groupe de 100 pirates monte à bord de votre navire et a besoin de nouvelles épées. Vous disposez de 10
cimeterres, 40 épées larges et 50 coutelas que vous devez distribuer uniformément aux 100 pirates lors de leur
embarquement. Créez un vecteur de longueur 100 où il y a 1 cimeterre, 4 sabres et 5 coutelas dans chaque groupe de 10.
Autrement dit, dans les 10 premiers éléments, il devrait y avoir exactement 1 cimeterre, 4 sabres et 5 coutelas. Les 10 éléments
suivants devraient également avoir le même numéro de chaque épée (et ainsi de suite).

6. Créez un vecteur qui répète les entiers de 1 à 5, 10 fois. C'est-à-dire [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, …]. La
longueur du vecteur doit être de 50 !
7. Maintenant, créez le même vecteur qu'avant, mais cette fois répétez 1, 10 fois, puis 2, 10 fois, etc., soit [1, 1, 1, …,
2, 2, 2, …, … 5 , 5, 5]. La longueur du vecteur doit également être de 50

8. Créez un vecteur contenant 50 échantillons à partir d'une distribution normale avec une moyenne de population de 20
et un écart type de 2.

9. Créez un vecteur contenant 25 échantillons à partir d'une distribution uniforme avec une limite inférieure de -100 et une limite
supérieure de -50.
70 CHAPITRE 5. SCALAIRES ET VECTEURS
Chapitre 6

Fonctions vectorielles

Dans ce chapitre, nous aborderons les fonctions de base des objets vectoriels. Le code ci-dessous utilise les fonctions que vous allez
apprendre à calculer les statistiques récapitulatives de deux examens.

# 10 étudiants de deux classes différentes ont passé deux examens.


# Voici trois vecteurs montrant les données mi-parcours <-c(
62,68,75,79,55,62,89,76,45,67) finale <-c(78,72,97,82,60,83,92,
73,50,88)

# Combien d'étudiants sont là?


longueur(mi-session)
# # [1] 10

# Ajoutez 5 à chaque score à mi-parcours (crédit supplémentaire !) mi-


parcours <- mi-parcours+5 mi-parcours

# # [1] 67 73 80 84 60 67 94 81 50 72

# Différence entre les notes finales et à mi-parcours


final-mi-parcours
# # [1] 11 -1 17 -2 0 16 -2 -8 0 16

# La note moyenne de chaque


élève (mi-session+final)/2
# # [1] 72 72 88 83 60 75 93 77 50 80

# Note moyenne à mi-session


signifier(mi-session)
# # [1] 73

# Écart type des notes à mi-session Dakota du Sud


(mi-session)
# # [1] 13

# Note finale la plus élevée


maximum(final)
# # [1] 97

# z-scores

71
72 CHAPITRE 6. FONCTIONS VECTORIELLES

midterm.z <- (miterm-signifier(mi-session))/Dakota du Sud(mi-session)


final.z <- (final-signifier(final))/Dakota du Sud(final)

6.1 Opérations arithmétiques sur les vecteurs

Jusqu'à présent, vous savez comment effectuer des opérations arithmétiques de base telles que + (addition), - (soustraction) et *
(multiplication) sur des scalaires. Heureusement, R rend tout aussi simple les opérations arithmétiques sur des valeurs numériques.
vecteurs :

un <-c(1,2,3,4,5) b <-c(dix,20,30
,40,50)

un+100
# # [1] 101 102 103 104 105
une+b
# # [1] 11 22 33 44 55
(un+b)/dix
# # [1] 1,1 2,2 3,3 4,4 5,5

Si vous effectuez une opération sur un vecteur avec un scalaire, R appliquera le scalaire à chaque élément du vecteur. Pour
Par exemple, si vous avez un vecteur et que vous souhaitez ajouter 10 à chaque élément du vecteur, ajoutez simplement les objets
vectoriels et scalaires. Créons un vecteur avec les entiers de 1 à 10, et ajoutons puis ajoutons 100 à chaque élément :

# Prenez les nombres entiers de 1 à 10, puis ajoutez 100 à chacun


1:dix+100
# # [1] 101 102 103 104 105 106 107 108 109 110

Comme vous pouvez le voir, le résultat est [1 + 100, 2 + 100,… 10 + 100]. Bien sûr, nous aurions pu faire ce vecteur
avec leun Bfonctionne comme ceci :101:110,mais vous voyez l'idée.
6.1. OPÉRATIONS ARITHMÉTIQUES SUR LES VECTEURS 73

Bien sûr, cela ne fonctionne pas uniquement avec l'addition… oh non. Essayons la division, la multiplication et les exposants.
Créons un vecteurunavec les entiers de 1 à 10 puis changez-le :
un <-1:dix
un/100
# # [1] 0,01 0,02 0,03 0,04 0,05 0,06 0,07 0,08 0,09 0,10 une^2

# # [1] 1 4 9 16 25 36 49 64 81 100

Encore une fois, si vous effectuez une opération algébrique sur un vecteur avec un scalaire, R appliquera simplement l'opération à
chaque élément du vecteur.

6.1.1 Mathématiques de base avec plusieurs vecteurs

Et si vous souhaitez effectuer une opération sur deux vecteurs de même longueur ? Facile. Appliquez simplement
l’opération aux deux vecteurs. R les combinera ensuite élément par élément. Par exemple, si vous ajoutez le vecteur
[1, 2, 3, 4, 5] au vecteur [5, 4, 3, 2, 1], le vecteur résultant aura les valeurs [1 + 5, 2 + 4, 3 + 3, 4 + 2, 5 + 1]
= [6, 6, 6, 6, 6] :
c(1,2,3,4,5)+c(5,4,3,2,1)
# # [1] 6 6 6 6 6

Créons deux vecteurs a et b où chaque vecteur contient les entiers de 1 à 5. Nous créerons ensuite deux
nouveaux vecteursab.sum,la somme des deux vecteurs etab.diff,la différence des deux vecteurs, et
ab.prod,le produit des deux vecteurs :
un <-1:5
b <-1:5

ab.somme <- a+b


ab.diff <- a-b
ab.prod <- a*b

somme ab.

# # [1] 2 4 6 8 10 ab.diff

# # [1] 0 0 0 0 0
ab.prod
# # [1] 1 4 9 16 25

6.1.2 Ex : Vente de pâtisseries pirates

Disons que vous organisiez une vente de pâtisseries sur votre navire où 5 pirates vendaient à la fois des tartes et des biscuits. Vous pourriez enregistrer le
nombre total de tartes et de biscuits vendus dans deux vecteurs :

tartes <-c(3,6,2,dix,4) les cookies <-c(70


,40,40,200,60)

Maintenant, disons que vous voulez savoir combien d'articles au total chaque pirate a vendu. Vous pouvez le faire en ajoutant simplement le
deux vecteurs :

total.vendu <- tartes+cookies


total.vendu
# # [1] 73 46 42 210 64

Fou.
74 CHAPITRE 6. FONCTIONS VECTORIELLES

Figure 6.1 : Selon cet article publié en 2015 dans Plos One, lorsqu'il s'agit de personnes, la longueur peut avoir une importance pour
certains. Mais croyez-moi, pour les vecteurs, c'est toujours le cas.

6.2 Statistiques récapitulatives

Ok, maintenant que nous pouvons créer des vecteurs, apprenons les fonctions de base des statistiques descriptives. Nous commencerons par les
fonctions qui s'appliquent aux données continues. Les données continues sont des données qui, de manière générale, peuvent prendre une
nombre infini de valeurs. La taille et le poids sont de bons exemples de données continues. Le tableau 6.1 contient les fonctions
courantes pour les vecteurs numériques continus. Chacun d'eux prend comme argument un vecteur numérique,
et renvoie soit un scalaire (ou dans le cas derésumé(),untableau)par conséquent.

Tableau 6.1 : Fonctions statistiques récapitulatives pour les données continues.

Fonction Exemple Résultat

somme(x), produit(x) somme(1:10) 55


min(x), max(x) min(1:10) 1
moyenne(x), médiane(x) moyenne (1:10) 5.5
sd(x), var(x), plage(x) sd(1:10) 3.03
quantile(x, probs) quantile (1:10, problèmes = 0,2) 2.8
résumé(x) résumé (1:10) Min = 1,00. 1er Qu. = 3,25,
Médiane = 5,50, Moyenne = 5,50,
3e Qu. = 7,75, maximum = 10,0

Calculons quelques statistiques descriptives à partir de certaines données liées aux pirates. Je vais créer un vecteur appeléXque
contient le nombre de tatouages de 10 pirates aléatoires.
tatouages <-c(4,50,2,39,4,20,4,8,dix,100)

Désormais, nous pouvons calculer plusieurs statistiques descriptives sur ce vecteur en utilisant les fonctions de statistiques récapitulatives :

min(tatouages)
# # [1] 2
signifier(tatouages)
# # [1] 24
6.2. STATISTIQUES SOMMAIRES 75

parfois…). Utilisez plutôtlongueur()fonction. Lelongueur()la fonction prend un vecteur comme argument, et


renvoie un scalaire représentant le nombre d'éléments dans le vecteur :
un <-1:dix
longueur(un) # Combien y a-t-il d'éléments dans un ?
# # [1] 10

b <-séquence(de =1,à =100,longueur.out =20)


longueur(b) # Combien y a-t-il d'éléments dans b ?
# # [1] 20

longueur(c("Ce","personnage","vecteur","a","six","éléments."))
# # [1] 6
longueur("Ce scalaire de caractère n'a qu'un seul élément.")
# # [1] 1

Habituez-vous aulongueur()les gens fonctionnels, vous l’utiliserez beaucoup !

6.2.2 Fonctions vectorielles numériques supplémentaires

Le tableau 6.2 contient des fonctions supplémentaires qui vous seront utiles lors de la gestion des vecteurs numériques :

Tableau 6.2 : Fonctions de résumé vectoriel pour les données continues.

Fonction Description Exemple Résultat

rond(x, Arrondir les éléments en x à rond(c(2,231, 3,1415), 2.2, 3.1


chiffres) chiffreschiffres chiffres = 1)
plafond(x), Arrondir les éléments x à l'entier plafond(c(5.1, 7.9)) 6, 8
étage(x) le plus élevé (ou le plus bas)
suivant
x %% y Arithmétique modulaire (c'est-à-dire 7 %% 3 1
x mod y)

6.2.3 Statistiques d'échantillons provenant d'échantillons aléatoires

Maintenant que vous savez comment calculer des statistiques récapitulatives, examinons de plus près comment R sélectionne des
échantillons aléatoires à l'aide de l'outilrnorme()etrunif()les fonctions. Dans le prochain morceau de code, je calculerai quelques statistiques
récapitulatives à partir d'un vecteur de 5 valeurs d'une distribution normale avec une moyenne de 10 et un écart type.
sur 5. Je calculerai ensuite les statistiques récapitulatives de cet échantillon en utilisantsignifier()etDakota du Sud():

# 5 échantillons d'une distribution normale avec moyenne = 10 et sd


= 5 x <-rnorme(n =5,moyenne =dix,SD =5)

# Quels sont la moyenne et l'écart type de l'échantillon ? signifier


(X)
# # [1] 11
Dakota du Sud(X)

# # [1] 2,5

Comme vous pouvez le constater, la moyenne et l'écart type de notre échantillon vectoriel sont proches des valeurs de population de
10 et 5 – mais ils ne sont pas exactement les mêmes car ce sont des exemples de données. Si nous prenons une taille beaucoup plus grande
(disons 100 000), les statistiques de l'échantillon devraient se rapprocher beaucoup plus des valeurs de la population :
76 CHAPITRE 6. FONCTIONS VECTORIELLES

# 100 000 échantillons d'une distribution normale avec moyenne = 10, sd = 5


y <-rnorme(n =100000,moyenne =dix,SD =5)

signifier(o)
# # [1] 10
Dakota du Sud(o)

# # [1] 5

Oui, bien sûr, notre nouvel échantillon y (contenant 100 000 valeurs) a une moyenne d'échantillon et un écart type beaucoup plus
proches (presque identiques) des valeurs de la population que notre échantillon x (contenant seulement 5 valeurs). Ce
est un exemple de ce qu’on appelle la loi des grands nombres. Recherche le sur Google.

6.3 Statistiques de comptage

Nous passerons ensuite aux fonctions de comptage courantes pour les vecteurs avec des données discrètes ou non numériques. Les données
discrètes sont celles comme le sexe, la profession et les pets de singe, qui ne permettent qu'un ensemble fini (ou du moins plausiblement fini)
de réponses. Les fonctions communes pour les vecteurs discrets sont dans le tableau 6.3. Chacun de ces vecteurs prend
un vecteur comme argument – cependant, contrairement aux fonctions précédentes que nous avons examinées, les arguments de ces fonctions
les fonctions peuvent être numériques ou alphabétiques.

Tableau 6.3 : Fonctions de comptage pour données discrètes.

Fonction Description Exemple Résultat

unique(x) Renvoie un vecteur de toutes les unique(c(1, 1, 2, 10)) 1, 2, 10


valeurs uniques.
tableau(x, Renvoie un tableau affichant table(c("a", "a", "b", 2-"a", 1-"b", 1-"c"
exclure) toutes les valeurs uniques "c"))
ainsi qu'un nombre de chaque
occurrence. Pour inclure un
nombre de valeurs NA, incluez
l'argument
exclure = NULL

Testons ces fonctions en commençant par deux vecteurs de données discrètes :


vec <-c(1,1,1,5,1,1,dix,dix,dix)
sexe <-c("M","M","F","F","F","M","F","M","F")

La fonctionunique(x)vous dira toutes les valeurs uniques du vecteur, mais ne vous dira rien sur
à quelle fréquence chaque valeur apparaît.

unique(vec)
# # [1] 1 5 10
unique(genre)
# # [1] "M" "F"

La fonctiontableau()fait la même chose queunique(),mais va encore plus loin en vous indiquant à quelle fréquence
chacune des valeurs uniques apparaît :

tableau(vec)
# # vec
# # 1 5 10
##513
6.4. VALEURS MANQUANTES (NA) 77

tableau(genre)
# # genre
# #FM
##54

Si vous souhaitez obtenir un tableau de pourcentages au lieu de comptes, vous pouvez simplement diviser le résultat dutableau()
fonction par la somme du résultat :
tableau(vec)/somme(tableau(vec))
# # vec
## 1 5 dix
# # 0,56 0,11 0,33
tableau(genre)/somme(tableau(genre))
# # genre
##F M
# # 0,56 0,44

6.4 Valeurs manquantes (NA)

Dans R, les données manquantes sont codées comme NA. Dans les ensembles de données réels, les valeurs NA apparaissent tout le temps.
Malheureusement, la plupart des fonctions de statistiques descriptives paniqueront s'il manque une valeur (NA) dans les données. Par exemple, le
Le code suivant renverra NA car il y a une valeur NA dans le vecteur de données :
un <-c(1,5,N / A,2,dix)
signifier(un)
# # [1] SO

Heureusement, il existe un moyen de contourner ce problème. Pour dire à une fonction statistique descriptive d'ignorer les éléments manquants
(NA), incluez l'argumentna.rm = VRAIdans la fonction. Cet argument indique explicitement à la fonction
d'ignorer les valeurs NA. Essayons de calculer la moyenne du vecteurunencore une fois, cette fois avec le
supplémentairena.rm = VRAIargument:
signifier(un,na.rm =VRAI)
# # [1] 4,5

Désormais, la fonction ignorait la valeur NA et renvoyait la moyenne des données restantes. Bien que cela puisse paraître trivial
maintenant (pourquoi avons-nous inclus une valeur NA dans le vecteur si nous voulions l'ignorer ?!), cela deviendra très important
lorsque nous appliquerons la fonction à des données réelles qui, très souvent, contiennent des valeurs manquantes.

6.5 Standardisation (z-score)

Une tâche courante en statistique consiste à normaliser les variables – également appelée calcul des scores z. Le but de
standardiser un vecteur, c'est le mettre sur une échelle commune qui permet de le comparer à d'autres
variables (standardisées). Pour normaliser un vecteur, il suffit de soustraire le vecteur par sa moyenne, puis
divisez le résultat par l'écart type du vecteur.

Si le concept des scores z est nouveau pour vous, ne vous inquiétez pas. Dans l’exemple pratique suivant, vous verrez comment cela peut vous aider à
comparer deux ensembles de données. Mais pour l'instant, voyons à quel point il est facile de standardiser un vecteur en utilisant les bases
arithmétique.

Disons que vous avez un vecteur a contenant des données. Nous allons attribuer le vecteur à un nouvel objet appeléunalors
calculer la moyenne et l'écart type avec lesignifier()etDakota du Sud()les fonctions:
78 CHAPITRE 6. FONCTIONS VECTORIELLES

Tableau 6.4 : Notes d'un concours pirate

pirate grog escalade


Heidi 12 100
André 8 520
Becky 1 430
Madisen 6 200
David 2 700

un <-c(5,3,7,5,5,3,4) signifier
(un)
# # [1] 4,6
Dakota du Sud(un)

# # [1] 1,4

D'accord. Nous allons maintenant créer un nouveau vecteur appeléazqui est une version standardisée de a. Pour ce faire, nous allons simplement
soustrayez la moyenne du vecteur, puis divisez par l'écart type.
az <- (une-signifier(un))/Dakota du Sud(un)

Examinons maintenant les valeurs standardisées :


az
# # [1] 0,31 -1,12 1,74 0,31 0,31 -1,12 -0,41

La moyenne deazdevrait maintenant être 0, et l'écart type deazdevrait maintenant être 1. Assurons-nous que :
signifier(az)
# # [1] 2e-16
Dakota du Sud(az)

# # [1] 1

Doux. Oh, ne t'inquiète pas, la moyenne deazne ressemble pas exactement à zéro. En utilisant une notation non scientifique,
le résultat est 0,000000000000000198. À toutes fins utiles, c'est 0. La raison pour laquelle le résultat n'est pas exactement
0 est due à des raisons théoriques en informatique que je ne peux pas expliquer (parce que je ne comprends pas
eux).

6.5.1 Ex : Évaluer un concours

Votre second intolérant au gluten vient de périr dans un tragique incident de sauce soja et il est temps de promouvoir un autre
membre de votre équipage au poste nouvellement libéré. Bien sûr, seules deux qualités comptent vraiment pour un pirate : grimper
sur une corde et boire du grogg. Par conséquent, pour voir lequel de vos équipages mérite la promotion, vous décidez d'organiser
un concours d'escalade et de boisson. Lors de la compétition d'escalade, vous mesurez combien de pieds de corde un pirate peut
grimper en une heure. Dans le concours de boissons, vous mesurez combien de tasses
de grogg qu'ils peuvent boire en une minute. Cinq pirates se portent volontaires pour le concours – voici leurs résultats :

Nous pouvons représenter les principaux résultats avec deux vecteursgrogetescalade:

grogg <-c(12,8,1,6,2) escalade <-c(100,520,


430,200,700)

Vous disposez désormais des données, mais il y a un problème : les échelles des chiffres sont très différentes. Alors que
les nombres de Grogg vont de 1 à 12, les nombres d'escalade ont une plage beaucoup plus large de 100 à 700.
il est difficile de comparer directement les deux séries de chiffres.
6.6. TESTEZ VOTRE R PUISSANCE ! 79

Tableau 6.5 : Le trésor de Renata lorsqu'elle était sobre et lorsqu'elle était ivre

jour sobre ivre


Lundi 2 0
Mardi 0 0
Mercredi 3 1
Jeudi 1 0
Vendredi 0 1
Samedi 3 2
Dimanche 5 2

Pour résoudre ce problème, nous utiliserons la standardisation. Créons de nouveaux vecteurs standardisés appelésgrogg.zet
escalade.z
grogg.z <- (grogg-signifier(grogg))/Dakota du Sud(grogg) escalade.z <-
(escalade-signifier(escalade))/Dakota du Sud(escalade)

Voyons maintenant les résultats finaux


grogg.z
# # [1] 1,379 0,489 -1,068 0,044 -0,845
escalade.z
# # [1] -1,20 0,54 0,17 -0,78 1,28

Il semble qu’il y ait eu deux performances exceptionnelles en particulier. Lors du concours de boisson grogg, la
première pirate (Heidi) avait un score z de 1,4. Nous pouvons interpréter cela en disant qu'Heidi a bu 1,4 écarts-types
de tasses de grogg de plus que le pirate moyen. Lors de la compétition d'escalade, le cinquième pirate (David) avait
un z-score de 1,3. Ici, nous conclurions que David a grimpé de 1,3 écart-type de plus que le
pirate moyen.
Mais quel pirate a été le meilleur en moyenne sur les deux événements ? Pour répondre à cette question, créons un z-score
combiné pour chaque pirate qui calcule les z-scores moyens de chaque pirate pour les deux événements. Nous ferons cela en
additionnant deux performances et en divisant par deux. Cela nous dira quelle est la qualité, en moyenne, de chaque pirate
fait par rapport à ses camarades pirates.

moyenne.z <- (grogg.z+(escalade.z))/2

Regardons le résultat :
rond(moyenne.z,1)
# # [1] 0,1 0,5 -0,5 -0,4 0,2

Le z-score moyen le plus élevé appartient au deuxième pirate (Andrew) qui avait une valeur z-score moyenne de 0,5.
Les premier et dernier pirates, qui avaient bien réussi dans une épreuve, semblaient avoir mal réussi dans l'autre épreuve.

Morale de l'histoire : promouvoir le pirate qui sait boireetgrimper.

6.6 Testez votre R Might !

1. Créez un vecteur qui montre la racine carrée des entiers de 1 à 10.


2. Renata pense qu'elle trouve plus de trésors lorsqu'elle a bu une tasse de grogg que lorsqu'elle n'en a pas bu. Pour tester cela,
elle a enregistré la quantité de trésors qu'elle a trouvé pendant 7 jours sans boire de grogg (c'est-à-dire sobre), puis a fait la
même chose pendant 7 jours en buvant du grogg (c'est-à-dire ivre). Voici ses résultats :

Combien de trésors Renata a-t-elle trouvé en moyenne lorsqu'elle était sobre ? Et quand elle était ivre ?
80 CHAPITRE 6. FONCTIONS VECTORIELLES

3. En utilisant à nouveau les données de Renata, créez un nouveau vecteur appelédifférencecela montre à quel point Renata a
trouvé beaucoup plus de trésors lorsqu'elle était ivre et lorsqu'elle ne l'était pas. Quelle était la moyenne, la médiane et l’écart
type de la différence ?

4. Il existe une vieille parabole qui ressemble à ceci. Un homme effectue un travail pour un roi et doit être payé.
Parce que l'homme aime le riz (qui ne l'aime pas ?!), il propose au roi deux manières différentes de le payer.
Vous pouvez soit me payer 100 kilogrammes de riz, soit me payer comme suit : prenez un échiquier et placez
un grain de riz dans le carré en haut à gauche. Mettez ensuite 2 grains de riz sur le carré suivant, suivis de 4
grains sur le suivant, 8 grains sur le suivant… et ainsi de suite, où la quantité de riz double sur chaque carré,
jusqu'à arriver au dernier carré. Lorsque vous aurez terminé, donnez-moi tous les grains de riz qui pourraient
(en théorie) tenir sur l'échiquier.Le roi, sentant que cet homme était un idiot pour avoir fait une offre aussi
stupide, accepte immédiatement la deuxième option. Il invoque un échiquier et commence à compter les grains
de riz un par un… En supposant qu'il y a 64 cases sur un échiquier, calculez combien de grains de riz le
personnage principal recevra. Si un grain de riz pèse 1/6400 kilogrammes, combien de kilogrammes de riz a-t-il
obtenu ?Astuce : Si vous avez du mal à trouver la réponse, imaginez combien de grains se trouvent sur les
premier, deuxième, troisième et quatrième carrés, puis essayez de créer le vecteur qui montre le nombre de
grains sur chaque carré. Une fois que vous avez trouvé ce vecteur, vous pouvez facilement calculer la réponse
finale avec lesomme()fonction.

Vous aimerez peut-être aussi