R est un logiciel pour l’analyse statistique des données. Il fournit les procédures usuelles (t-tests, anova, tests non paramétriques…) et possède des possibilités graphiques performantes pour explorer les données. Pouvant être utilisé aussi bien en mode interactif qu’en mode batch, R est un logiciel libre, dont le code source est disponible et qui peut être recopié et diffusé gratuitement. Des versions compilées de R sont disponibles pour Linux, Windows et Mac OS X.
Les instructions de téléchargement et d’installation sont disponible sur site principal du logiciel R http://www.r-project.org.
Je recommande vivement d’installer l’environnment de travail rstudio (http://www.rstudio.com).
Les inconditionnels d’Emacs apprécieront les packages ESS et polymode.
On m’a dit du bien de https://jasp-stats.org/.
Après avoir installé le système de base, vous pouvez installer des modules supplémentaires (‘packages’) qui ajoutent des fonctions à R.
Pour l’analyse des données d’expériences, les paquetages suivants sont intéressants: - ez
: Easy Analysis and Visualization of Factorial Experiments - nlme
, lme4
: Linear Mixed-Effects Models - vcd
: Visualizing Categorical Data - psy
: Various procedures used in psychometry - multcomp
: Corrections for multiple comparisons - ggplot2
: Elegant Data Visualisations Using the Grammar of Graphics - plyr
, reshape
: Tools for Splitting, Applying and Combining Data
Ces modules sont disponibles sur les sites CRAN dans la section Contributed extension packages.
Pour installer un module sous Windows, dans RGui, utiliser le menu ‘Package/Install package from CRAN’ (il faut être connecté à Internet).
Pour installer un module sous Linux, il faut d’abord télécharger le fichier package.tar.gz
du CRAN, puis exécuter R CMD INSTALL package.tar.gz
en ligne de commande.
On peut également utiliser la fonction install.packages()
à l’intérieur de R.
De nos jours, beaucoup de gens trouvent naturel de pouvoir utiliser les logiciels sans lire de documentation. Si cela est raisonnable pour les logiciels qui réalisent des opérations assez simples, c’est dangereux avec les logiciels qui effectuent des opérations conceptuellement compliquées. Dans le cas de R, qui comprend de nombreuses commandes, il est illusoire d’envisager utiliser ce logiciel sans lire un minimum de documentation. Notre expérience est que les premières heures d’analyse de données avec R nécessitent de fréquents recours aux documentations, mais lorsqu’on est devenu à l’aise, alors il n’y a pratiquement plus besoin de s’y référer.
Il est donc utile de savoir où chercher l’information a propos de R.
Pour les débutants, on trouve sur Internet un bon nombre de documents sur R, notamment dans la section “Documentation/Contributed” du site www.r-project.org. Mentionnons en particulier :
R possède aussi une documentation officielle, sous forme de fichiers pdf et html, qui est copiée sur votre disque dur lors de l’installation du logiciel. Dans l’interface graphique sous Windows, les manuels au format pdf sont accessibles dans les menus Help/Manuals
. Il est fortement conseillé de parcourir, au minimum, les deux documents “An Introduction to R” et “R Data Import et Export”.
Les manuels sont également accessibles sous forme html, dans le menu Help/Html help
sous Windows, et en tapant help.start()
sous Linux. Cela ouvre votre navigateur Internet sur une page web locale qui contient divers liens, entre autres vers ces manuels. Par exemple, le lien Packages/base
liste les commandes de bases de R.
Il existe plusieurs livres publiés qui traitent de R. Pour les débutants, les deux livres suivants peuvent offrir une aide utile :
Pour un niveau plus avancé:
L’interaction avec R se fait en tapant des commandes dans la fenêtre R Console
.
Pour commencer, vous pouvez utiliser R comme une calculatrice. Cliquez dans la fenêtre ‘R Console’, puis tapez:
2 + 3
## [1] 5
Poursuivez avec:
a = 5
a + 8
## [1] 13
Le principe de R est le suivant : vous entrez une ligne de commande, et quand vous tapez sur ‘Entrée’, R lit cette ligne et effectue l’opération demandée.
Essayez maintenant les commandes suivantes :
a = 1:10
a
## [1] 1 2 3 4 5 6 7 8 9 10
b = rnorm(10)
plot(a, b)
plot(a, b, pch=16, col=2)
La commande plot
provoque l’affichage d’une fenêtre graphique
Cliquez à nouveau dans la fenêtre R Console
, puis tapez:
a=c(3, 4, 6, 7, 8, 9)
a
## [1] 3 4 6 7 8 9
length(a)
## [1] 6
b = c('alpha', 'beta')
b
## [1] "alpha" "beta"
length(b)
## [1] 2
La variable ‘a
’ contient un vecteur numérique à six éléments.
La variable ‘b
’ contient un vecteur contenant deux chaînes de caractères.
Les concepts de vecteur et de variable sont essentiels dans R. On y reviendra plus tard ; pour le moment, retenez que :
Comme on l’a déjà vu, la liste des variables peut être affichée par ls()
, et une variable peut être détruite par la commande rm(nom)
.
Entrez les commandes suivantes, pas à pas, et observez le résultat:
a = rnorm(20, mean=55, sd=10)
mean(a)
## [1] 54.82851
sd(a)
## [1] 12.7692
max(a)
## [1] 76.55416
summary(a)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 27.21 45.36 54.01 54.83 61.84 76.55
hist(a)
boxplot(a)
stripchart(a)
stripchart(a, pch=16, cex=2, col=2, method='jitter', vertical=T)
x1 = rnorm(10, mean=100, sd=10)
x2 = rnorm(10, mean=110, sd=10)
boxplot(x1, x2)
t.test(x1, x2)
##
## Welch Two Sample t-test
##
## data: x1 and x2
## t = -5.0761, df = 17.656, p-value = 8.344e-05
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -25.10608 -10.39300
## sample estimates:
## mean of x mean of y
## 94.37346 112.12300
plot(x1 , x2)
summary(lm(x2 ~ x1))
##
## Call:
## lm(formula = x2 ~ x1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -13.3081 -3.9215 -0.4167 5.2390 9.7874
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 110.4242 29.0897 3.796 0.00527 **
## x1 0.0180 0.3072 0.059 0.95471
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.691 on 8 degrees of freedom
## Multiple R-squared: 0.0004291, Adjusted R-squared: -0.1245
## F-statistic: 0.003434 on 1 and 8 DF, p-value: 0.9547
A tout moment, une aide en ligne est disponible à l’aide de la commande help.search(‘mot clé’). La description détaillée d’une commande s’obtient en tapant ?nom de la commande’.
Essayez :
?t.test
apropos('t.test')
help.search("test")
help.start()
La fenêtre R Console étant active, sélectionnez “File/Exit” et répondez “Oui” à la question “Save workspace image?”
Et voilà…
Tout votre travail est-il perdu ?
Non. Redémarrez R, et remarquez la ligne:
[Previously saved workspace restored]
Tapez “ls()
” et constatez que vos variables sont toujours là.
Le “workspace” (“espace de travail”), c’est à dire l’ensemble des variables, a été sauvegardé sur le disque. Cela permet de reprendre une analyse de données au point où on l’a laissée quand on a quitté R.
Si vous voulez “nettoyer” le workspace, c’est à dire supprimer toutes les variables qu’il contient, tapez la commande “rm(list=ls())
”.
Il est possible de choisir le nom de fichier où est sauvegardé le workspace (par défaut “.RData
”). Cela permet de faire plusieurs analyses indépendantes sans les mélanger. (Voir les menus File/Load workspace/ Save Workspace). Une alternative plus recommandée et de créer un dossier pour chaque analyse de données indépendantes.
Tapez la commande history()
. Une fenêtre s’affiche listant les dernières commandes que vous avez tapées (voir figure ).
Une manière efficace de travailler avec R consiste à sauvegarder les commandes au fur et à mesure dans un fichier texte. Pour cela, en parallèle avec R, ouvrez un éditeur de fichier texte (le plus simple d’entre eux, bien qu’il soit très limité, est le bloc-notes de Windows disponible dans les accessoires).
En utilisant le copier/coller, copier dans le fichier texte les commandes qui font l’essentiel de l’analyse. A la fin de votre session de travail, sauvez ce fichier avec un nom explicite (par exemple le nom de l’expérience) et une extension “.R”.
Quand vous reprendrez cette analyse quelques jours ou mois plus tard, vous pourrez réutiliser ce fichier, qu’on appelle habituellement un script. R vous permettra de ré-executer les commandes de ce script en utilisant la commande source
.
Faites un essai: créez un fichier qui contient les lignes suivantes :
a = rnorm(100)
b = rnorm(100)
summary(a)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -2.66900 -0.48600 0.01823 0.10450 0.76300 3.03800
summary(b)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -2.43000 -0.74310 -0.02984 -0.10030 0.55590 1.99500
cor.test(a,b)
##
## Pearson's product-moment correlation
##
## data: a and b
## t = 0.40573, df = 98, p-value = 0.6858
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.1567286 0.2354743
## sample estimates:
## cor
## 0.04095018
Sauvez-le dans “Mes documents”, sous le nom “test.R
”.
Dans R, utilisez le menu “File/Change Dir” pour aller dans “Mes Documents”. Puis tapez:
source('test.R',echo=T)
Vérifiez que cela marche.
Sous Linux, il n’est pas nécessaire de démarrer R: on peut entrer R BATCH script.R
sur une ligne de commande dans un terminal et les résultats sont écrits automatiquement dans le fichier script.Rout
.
Les commandes et les résultats des analyses statistiques et les graphiques peuvent être copiés/collés dans un document.
Les résultats (sans les commandes) peuvent être copiés automatiquement dans un fichier texte grâce à “sink
”. Tapez:
sink('monanalyse.txt',split=T)
a = 1:10
mean(a)
summary(a)
sink()
Puis ouvrez le fichier “monanalyse.txt
”.
Les graphiques peuvent être sauvés directement dans des fichiers graphiques en utilisant les commandes postscript
, jpeg
ou png
(voir l’aide en ligne de ces fonctions).
Mentionnons le paquetage R2HTML
qui permet de créer des rapports au format html de façon semi-automatique.
L’expérience prouve que la meilleure stratégie est de créer un répertoire (dossier) par analyse de données, et d’y disposer: (a) les fichiers de données brutes; (2) le fichier script contenant les commandes R; (3) le workspace et le(s) fichiers(s) résultats (textes et graphiques).
L’objet de base en R est le vecteur. Un vecteur peut contenir des valeurs numériques, des valeurs de vérité (True
or False
), des chaînes de caractères… Les fonctions les plus utilisées pour créer des vecteurs sont c
, rep
et seq
:
c(1, 2, 3, 4, 5, 6)
## [1] 1 2 3 4 5 6
c(T, T, F, F)
## [1] TRUE TRUE FALSE FALSE
c('a', 'b')
## [1] "a" "b"
rep(55, 10)
## [1] 55 55 55 55 55 55 55 55 55 55
rep(c(1,2), 10)
## [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
rep(c('a', 'b'), c(2,7))
## [1] "a" "a" "b" "b" "b" "b" "b" "b" "b"
seq(1, 10, by=.1)
## [1] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3
## [15] 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7
## [29] 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 5.1
## [43] 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5
## [57] 6.6 6.7 6.8 6.9 7.0 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9
## [71] 8.0 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 9.0 9.1 9.2 9.3
## [85] 9.4 9.5 9.6 9.7 9.8 9.9 10.0
Un type de vecteur particulièrement utile est le type factor. Les facteurs sont des vecteurs utilisés pour classifier les valeurs d’autres vecteurs (les facteurs sont des “variables indicatrices”). Par exemple, étant donné 100 scores provenant de plusieurs groupes de sujets, une variable facteur peut désigner ces sous-groupes.
(a=factor(c(rep('alpha', 10), rep('beta', 10))))
## [1] alpha alpha alpha alpha alpha alpha alpha alpha alpha alpha beta
## [12] beta beta beta beta beta beta beta beta beta
## Levels: alpha beta
(b=gl(3, 4, 48, labels=c('a', 'b', 'c')))
## [1] a a a a b b b b c c c c a a a a b b b b c c c c a a a a b b b b c c c
## [36] c a a a a b b b b c c c c
## Levels: a b c
(x=rnorm(48))
## [1] -0.74619942 -2.03415825 -2.45078493 0.78517866 1.50267863
## [6] -0.51583617 0.15303998 -0.78983022 -0.36816267 1.96911337
## [11] -0.34784589 -0.39183255 1.27439312 -0.20496299 0.45994364
## [16] 0.04581141 1.15732722 0.42417014 0.90968587 0.05807693
## [21] 1.18935002 1.04772407 0.18628689 -0.76410899 -1.37086541
## [26] -0.20208121 1.48181630 -0.07871632 -0.90276822 0.01289568
## [31] 0.42292397 -0.93048265 0.19481941 0.87724196 1.29420092
## [36] 0.60231022 -1.15562056 0.23188275 0.81197647 -1.35059223
## [41] -0.59152969 -1.99065460 -1.33351722 -0.56438585 -0.48236896
## [46] -0.85680073 0.77597240 -1.08945055
tapply(x, b, mean)
## a b c
## -0.2814362 -0.1861379 0.2397781
boxplot(x ~ b)
stripchart(x ~ b, method='jitter')
stripchart(x ~ b, method='jitter', vertical=T)
On peut créer un facteur à partir d’un vecteur grâce à la fonction factor
, ou directement avec la fonction “gl
”.
(a = rnorm(50))
## [1] -0.49004055 -1.29394884 0.14884944 -0.65218245 0.32989433
## [6] -2.54890235 -0.16944231 -0.75216359 2.07353704 -1.19347752
## [11] -0.44032492 0.64959852 1.02221616 -1.69837792 1.44322146
## [16] 1.36284979 -0.77778731 0.49949522 -1.15299325 -0.80528923
## [21] -0.81853154 -0.56139744 1.36942334 1.59438794 -1.18980606
## [26] 0.06635126 0.09496587 -0.72871283 -1.60682388 0.58966812
## [31] 0.22358980 1.37768291 1.29782356 0.65707543 -0.13396692
## [36] -1.70621165 0.18842799 0.03155099 -0.04787062 -0.41269713
## [41] -0.65399758 -1.01770287 0.06493552 -0.45009732 2.25663057
## [46] 1.06174241 -0.32123939 -0.23853805 -0.45239721 1.61445166
a[1]
## [1] -0.4900405
a[2]
## [1] -1.293949
a[c(1, 3, 5)]
## [1] -0.4900405 0.1488494 0.3298943
a>0
## [1] FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE
## [12] TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE FALSE FALSE
## [23] TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE
## [34] TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE
## [45] TRUE TRUE FALSE FALSE FALSE TRUE
a[a>0]
## [1] 0.14884944 0.32989433 2.07353704 0.64959852 1.02221616 1.44322146
## [7] 1.36284979 0.49949522 1.36942334 1.59438794 0.06635126 0.09496587
## [13] 0.58966812 0.22358980 1.37768291 1.29782356 0.65707543 0.18842799
## [19] 0.03155099 0.06493552 2.25663057 1.06174241 1.61445166
(b=gl(2, 25, labels=c('g1', 'g2')))
## [1] g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1 g1
## [24] g1 g1 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2 g2
## [47] g2 g2 g2 g2
## Levels: g1 g2
a[b=='g1']
## [1] -0.4900405 -1.2939488 0.1488494 -0.6521825 0.3298943 -2.5489023
## [7] -0.1694423 -0.7521636 2.0735370 -1.1934775 -0.4403249 0.6495985
## [13] 1.0222162 -1.6983779 1.4432215 1.3628498 -0.7777873 0.4994952
## [19] -1.1529932 -0.8052892 -0.8185315 -0.5613974 1.3694233 1.5943879
## [25] -1.1898061
Une particularité de R est que les éléments d’un vecteur peuvent avoir des noms:
v=c(1, 2, 3, 4)
names(v) = c('alpha', 'beta', 'gamma', 'delta')
v['beta']
## beta
## 2
Cela s’avère très utile pour créer des dictionnaires. Par exemple, un vecteur ‘freq
’ donnant la fréquence d’usage des mots peut avoir les mots comme ‘names’ ; il suffit alors de taper “freq['aller']
” pour obtenir la fréquence du mot ‘aller’.
mots=c('aller', 'vaquer')
freq=c(45, 3)
freq
## [1] 45 3
freq[mots=='aller']
## [1] 45
names(freq)=mots
freq
## aller vaquer
## 45 3
freq['aller']
## aller
## 45
D’autres objets de R sont les les listes, les arrays (vecteurs multidimensionnels) et les data.frames.
Les data.frames sont des listes de vecteurs qui ont tous la même longueur. Les data.frames sont très bien adaptés pour stocker des données présentées sous forme de tableau bi-dimensionnel.
(a=array(1:20, dim=c(4,5)))
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
a[2,4]
## [1] 14
(b=list(alpha=1:3,
beta=c('a','b','c','d')))
## $alpha
## [1] 1 2 3
##
## $beta
## [1] "a" "b" "c" "d"
names(b)
## [1] "alpha" "beta"
b$alpha
## [1] 1 2 3
b$beta
## [1] "a" "b" "c" "d"
(c=data.frame(a=gl(2,5,10),b=1:10,x=rnorm(10)))
## a b x
## 1 1 1 -0.99414613
## 2 1 2 -2.07587886
## 3 1 3 -0.59902787
## 4 1 4 0.57858822
## 5 1 5 -1.75878559
## 6 2 6 0.02992957
## 7 2 7 -1.53670296
## 8 2 8 -1.09951551
## 9 2 9 -0.26293485
## 10 2 10 2.04475841
c$a
## [1] 1 1 1 1 1 2 2 2 2 2
## Levels: 1 2
c$b
## [1] 1 2 3 4 5 6 7 8 9 10
c$x
## [1] -0.99414613 -2.07587886 -0.59902787 0.57858822 -1.75878559
## [6] 0.02992957 -1.53670296 -1.09951551 -0.26293485 2.04475841
c[1:2,]
## a b x
## 1 1 1 -0.9941461
## 2 1 2 -2.0758789
Les objets peuvent être enregistrés dans des variables avec l’opérateur =
(ou <-
). Pour voir le contenu de l’objet représenté par une variable, il suffit de taper le nom de celle-ci.
a<-c(1,2,3)
a
## [1] 1 2 3
ls()
## [1] "a" "b" "c" "freq" "mots" "v" "x" "x1" "x2"
rm(a)
ls()
## [1] "b" "c" "freq" "mots" "v" "x" "x1" "x2"
Les vecteurs contenus dans une liste ou dans un data.frame sont accessibles avec le symbole $. Un data.frame peut être “attaché” pour que ses vecteurs soient directement accessibles.
mydata<-data.frame(a=gl(2,5,10),b=1:10,x=rnorm(10))
names(mydata)
## [1] "a" "b" "x"
mydata$a
## [1] 1 1 1 1 1 2 2 2 2 2
## Levels: 1 2
mydata$b
## [1] 1 2 3 4 5 6 7 8 9 10
mydata$x
## [1] -0.18172575 -0.17663704 0.03035259 0.27473636 1.24954705
## [6] -1.48911712 -0.36496406 -1.66550503 0.78051965 0.59428103
attach(mydata)
## The following objects are masked _by_ .GlobalEnv:
##
## b, x
a
## [1] 1 1 1 1 1 2 2 2 2 2
## Levels: 1 2
b
## $alpha
## [1] 1 2 3
##
## $beta
## [1] "a" "b" "c" "d"
x
## [1] -0.74619942 -2.03415825 -2.45078493 0.78517866 1.50267863
## [6] -0.51583617 0.15303998 -0.78983022 -0.36816267 1.96911337
## [11] -0.34784589 -0.39183255 1.27439312 -0.20496299 0.45994364
## [16] 0.04581141 1.15732722 0.42417014 0.90968587 0.05807693
## [21] 1.18935002 1.04772407 0.18628689 -0.76410899 -1.37086541
## [26] -0.20208121 1.48181630 -0.07871632 -0.90276822 0.01289568
## [31] 0.42292397 -0.93048265 0.19481941 0.87724196 1.29420092
## [36] 0.60231022 -1.15562056 0.23188275 0.81197647 -1.35059223
## [41] -0.59152969 -1.99065460 -1.33351722 -0.56438585 -0.48236896
## [46] -0.85680073 0.77597240 -1.08945055
detach(mydata)
Quand les données sont très peu nombreuses, on peut les entrer directement dans un vecteur (comme on l’a fait jusqu’ici) avec la fonction ‘c
’.
Les fonctions scan
et read.table
permettent de lire des données enregistrées dans des fichiers textes.
scan
lit une suite de données dans un vecteur.
Avec un éditeur de texte, créez un fichier datafile1.txt
contenant:
3.4 5.6 2.1 6.7 8.9
Puis, dans R, entrez:
scores<-scan('datafile1.txt')
On peut également entrer des données directement en ligne de commande :
scores<-scan('')
La fonction read.table
lit des données présentées sous forme tabulaire (par ex. les fichiers .csv enregistrés par Excel) et renvoit un data.frame.
Créez un fichier datafile2.txt
contenant:
sujet groupe score
s1 exp 3
s2 exp 4
s3 exp 6
s4 cont 7
s5 cont 8
Puis importez le dans R:
a<-read.table('datafile2.txt',header=T)
a
scan
et read.table
ne lisent que des fichiers textes, Le package ‘foreign’ permet de lire directement certains fichiers de données binaires provenant de SPSS, SAS, …
library(help='foreign')
Mentionnons également l’existence de packages permettant d’accéder à des informations stockées dans des bases de données (MySQL, Oracle…).
Cette section a pour but d’illustrer quelques concepts fondamentaux de la statistique inférentielle, et de présenter les principales fonctions de R pour le traitement statistique des données recueillies lors d’un protocole expérimental.
Différentes fonctions permettent de générer des nombres aléatoires suivant une certaine distribution de probabilité :
runif(10) # distribution uniforme
## [1] 0.086277833 0.004575344 0.923430190 0.752197812 0.553001953
## [6] 0.797581331 0.448278308 0.238572420 0.162277250 0.464658049
rnorm(10) # distribution normale
## [1] -1.8401052 -0.2653521 2.9060628 0.2331750 -0.1691501 -0.2623380
## [7] -1.3281432 1.4255977 -0.9852099 -1.1241900
rnorm(10,mean=100)
## [1] 100.99702 100.99634 100.65538 99.76738 101.17303 101.96837 100.79886
## [8] 101.22319 100.14854 100.36403
rbinom(10,size=1,prob=.5) # distribution binomiale
## [1] 0 0 1 1 0 1 0 1 1 1
La fonction rnorm
génère des nombres aléatoires distribués selon une loi normale. En augmentant le nombre d’échantillons générés (de 10 à 10000), on constate que la distribution des valeurs obtenues se rapproche de plus en plus d’une distribution normale continue :
s1=rnorm(10,mean=2)
summary(s1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.4292 0.9306 2.0340 2.1440 2.9900 4.8400
s2=rnorm(100,mean=2)
summary(s2)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -1.142 1.430 2.049 2.100 2.710 5.691
s3=rnorm(10000,mean=2)
summary(s3)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -1.945 1.332 2.011 1.999 2.670 5.897
par(mfrow=c(3,3)) # organisation des graphiques selon une matrice 3 x 3
hist(s1) # histogrammes
hist(s2)
hist(s3)
# graphes en évitant le chevauchement des points de même coordonnées
stripchart(s1,method='jitter',vert=T,pch=16)
stripchart(s2,method='jitter',vert=T,pch=16)
stripchart(s3,method='jitter',vert=T,pch='.')
plot(density(s1)) # fonction de densité
x=seq(-5,5,by=.01) # vecteur de coordonnées normées pour les abscisses
lines(x,dnorm(x,mean=2),col=2)
plot(density(s2))
lines(x,dnorm(x,mean=2),col=2)
plot(density(s3))
lines(x,dnorm(x,mean=2),col=2)
En première approximation, la distribution théorique de la taille des individus de sexe masculin, français, et dans la tranche d’âge 20-35 ans,suit une loi normale de moyenne 170 et d’écart-type 10.
On peut donc non seulement situer un individu, ou un groupe d’individus, dans cette distribution, mais également évaluer la probabilité qu’un individu choisi au hasard parmi la population entière mesure moins de 185 cm, ou plus de 198 cm, ou ait une taille comprise entre 174 et 186 cm.
Lorsque l’on ne dispose pas des tables de lois normales N(m;s2) (il y en a une infinité puisqu’il y a 2 paramètres libres), on utilise la loi normale centrée-réduite N(0;12) (encore appelée loi Z), dont la table est disponible la plupart des manuels ou bien sur le web. Cependant R fournit directement les tables des lois normales, par l’intermédiaire de la commande pnorm
, qui prend en arguments la valeur repère, la moyenne et l’écart-type théoriques.
taille=seq(130, 210, by=1)
plot(taille, dnorm(taille, mean=170, sd=10), type='b', col="red")
p = pnorm(185, mean=170, sd=10)
abline(v=185, col=4)
text(185, .012, paste("P(X<185)=", signif(p, 3)), col=4, pos=2, cex=.6)
p = pnorm(198, mean=170, sd=10)
abline(v=198, col=4)
text(198, .002, paste("P(X>198)=",round(1 - p, 3)), col=4, pos=4, cex=.6)