Beruflich Dokumente
Kultur Dokumente
P LATEFORME DE B IOSTATISTIQUE
Plate
Accs th
r
Les activits de la plateforme de
bi
BioStatistique sadressent en priorit
En
Dmarche Exemples lensemble des laboratoires de re-
Premier contact avec un animateur et d
Dveloppement en cours cherche et dveloppement publics et
dfinition dune stratgie. iss
S BASTIEN D JEAN Prsentation de la problmatique
biologique et de ses aspects non
ou ralisations.
Les animateurs scientifiques de la plate-
privs de Midi-Pyrnes. Dans le cadre
M
de nouveaux projets, la plateforme
confidentiels lors dun groupe de travail forme BioStatistique ont t impliqus d
donnant lieu une discussion ouverte. dans les projets suivants : pourra galement rpondre des
de
Conseils et aide lmentaires au ANR PNRA 2006-2009 Plastimpact besoins exprims par des laboratoires
traitement des donnes, co-encadrement
tude des impacts mtabolique et en- nationaux situs hors de la rgion
de projets ou stages par lun des
animateurs. docrinien de deux contaminants de la Midi-Pyrnes.
chane alimentaire issus de la plasturgie:
Dfinition dune stratgie (CDD, Thse,
le Bisphnol A et le DEHP (dithylhexyl
Post-Doc) et construction dun projet
phtalate). Projet port par lUnit INRA de
pour le dveloppement de mthodes
Pharmacologie-Toxicologie.
Partenaires
29 octobre 2008 statistiques et doutils logiciels
spcifiques au problme pos.
AgroBi 2006-2008
1 Introduction 3
1.1 R ? ? ? ? ? ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Environnement de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 R sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 R sous Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Ligne de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Aide en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Principe du document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Initiation 7
2.1 Structures de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1 Scalaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.2 Vecteur - vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.3 Matrice - matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.4 Tableau - array . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.5 list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.6 data.frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Entre / Sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1 Importation dun jeu de donnes . . . . . . . . . . . . . . . . . . . 11
2.2.2 Exportation dobjets R . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.3 Liens avec un tableur . . . . . . . . . . . . . . . . . . . . . . . . . 12
3 Fonctions graphiques 14
3.1 Donnes qualitatives - Effectifs . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Donnes quantitatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3 Graphiques 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4 Vers la 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.5 Exportation de graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Programmation 20
4.1 Structure de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2.1 Fonctions particulires .First() et .Last() . . . . . . . . . . 22
1
5 Un peu de statistique 23
5.1 Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2 Tests statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.3 Statistique descriptive unidimensionnelle . . . . . . . . . . . . . . . . . . 25
5.4 Rgression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.5 Statistique descriptive multidimensionnelle . . . . . . . . . . . . . . . . . 27
5.5.1 Analyse en composantes principales . . . . . . . . . . . . . . . . . 27
5.5.2 Positionnement multidimensionnel . . . . . . . . . . . . . . . . . . 27
5.5.3 Classification hirarchique . . . . . . . . . . . . . . . . . . . . . . 29
2
Chapitre 1
Introduction
1.1 R??????
Extrait de la page daccueil "The Comprehensive R Archive Network" :
Dans les deux sites voqus ci-dessus, on trouvera toutes les ressources ncessaires
lutilisateur de R, dbutant ou expriment : fichiers dinstallation, mises jour, packages,
FAQ, newsletter, documentation...
www.r-project.org cran.cict.fr
3
1.2 Environnement de travail
1.2.1 R sous Windows
Les captures dcran prsentes dans ce document proviennent de la version 2.2.1 (d-
cembre 2005).
Une des premires choses faire consiste crer un environnement de travail afin de
pouvoir rcuprer le travail effectu lors dune session ultrieure. Dans le menu Fichier,
slectionner Sauver lenvironnement de travail... (Fig. 1.1) et placer le fi-
chier suffix par .RData dans le rpertoire de votre choix.
La sauvegarde est renouveler chaque fois que cela semble ncessaire (aprs la cration
de nouvelles variables, avant le lancement dun gros calcul...) et surtout avant de quitter la
session de R. Attention, la sortie par Fichier > Sortir, rpondre oui au message
Sauver une image de la session ? (Fig. 1.2), sauvegarde lenvironnement de travail dans un
fichier .RData qui se trouve dans le rpertoire courant (par dfaut le rpertoire dinstallation
de R (C :/Program Files/R/R-2.2.1).
4
1.2.2 R sous Unix
lappel de commande Unix, il suffit de saisir la commande R pour entrer dans R.
Toutes les objets que vous crs dans R sont stocks dans un fichier .RData qui se cre
automatiquement dans le rpertoire courant. Ce fichier peut tre sauver tout moment par
la fonction save.image(). la sortie de R, un message propose deffectuer une dernire
fois la sauvegarde du fichier .RData.
5
R > help.search("plot")
Et pour comprendre comment fonctionne help.search(), on pourra bien entendu
entrer :
R > help(help.search) et mme
R > help(help) pour savoir comment utiliser la fonction help() !
Commandes Remarques
R > ... ...
R > ... ...
R > ... ...
Questions
...
...
...
Rponses
...
...
...
6
Chapitre 2
Initiation
7
2.1.2 Vecteur - vector
R > d = c(2,3,5,8,4,6) ;d Les commandes illustrent com-
R > is.vector(d) ment crer un vecteur : soit
R > c(2,5,"toto") en donnant les valeurs une
une (c()), soit par une s-
R > 1 :10
quence (seq()) soit par rpti-
R > seq(from=1,to=20,by=2)
tion (rep()).
R > seq(1,20,by=5) Les lments dun vecteur sont
R > seq(1,20,length=5) du mme type (numrique, carac-
R > rep(5,times=10) tre...)
R > rep(c(1,2),3) Lextraction des lments dun
R > rep(c(1,2),each=3) vecteur se fait par loprateur [].
On peut galement nommer les
R > e = rep(1,10)
lments dun vecteur.
R > d[2] ;d[2 :3] ;d[-3] Un problme avec f+d ?
R > d[-1 :2] ;d[-(1 :2)]
R > f = c(a=12,b=26,c=32,d=41) ;f
R > names(f) ;f["a"]
R > names(f)=c("a1","a2","a3","a4")
R > f> 30 ;f[f>30]
R > which(f>30)
R > f[2] = 22 ;f+100 ;f+d
R > cos(f) ;length(f) ;sort(d)
Questions
1. Quels sont les diffrents paramtrages de la fonction seq ?
2. de la fonction rep ?
3. quoi sert la fonction unique ? Illustrer son fonctionnement sur un exemple.
Rponses
1. seq construit un vecteur par une squence de points qui-rpartis entre from et to
soit, par pas de by, soit, en prcisant le nombre de points (length).
2. rep cre un vecteur par rptition dune scalaire ou dun vecteur. Dans ce dernier cas,
le vecteur est rpt squentiellement (times) ou valeur par valeur (each).
3. unique supprime les rplicats dans un vecteur
R > unique(rep(c(1,2),each=3)) renvoie le vecteur 1-2.
8
2.1.3 Matrice - matrix
R > A = matrix(1 :15,ncol=5) ;A Construction dune matrice ;
R > B = matrix(1 :15,nc=5,byrow=T) voir section 5.1 pour la fonction
R > B2=B ;B2[1,1]="toto" ;B2 runif().
Comme pour les vecteurs, les
R > cbind(A,B) ;rbind(A,B)
lments dune matrice sont du
R > A[1,3] ;A[,2] ;B[2,] mme type.
R > A[1 :3,2 :4] Extraction des parties dune ma-
R > g = seq(0,1,length=20) trice.
R > C = matrix(g,nrow=4) Noter quun argument peut-tre
R > C[C[,1]>0.1,] # * nommer intgralement ou par un
R > D = matrix(runif(16),nc=4) raccourci non ambig : ncol de-
vient nc.
R > D>0.5
Oprations termes termes.
R > D[D[,1]>0.5,2] # ** Produit matriciel (%*%) et terme
R > A+B ;A*B terme (*).
R > cos(A) ; cos(A[1 :2,1 :2]) Inversion dune matrice (fonction
R > solve(A) ;solve(A[1 :2,1 :2]) solve()).
R > A %*% B Fonction apply ! ! ! Cest
R > A[1 :2,1 :2] %*% B[1 :2,1 :3] lide mme du logiciel qui appa-
R > apply(A,2,sum) rat dans cette fonction. Cest plus
rapide que lutilisation de boucles
R > apply(D,1,max)
(voir section 4.1).
Questions
1. Que font rbind et cbind ?
2. Dcortiquer la ligne marque * et dcrire ce quelle fait.
3. Mme chose avec **.
Rponses
1. rbind et cbind collent deux vecteurs ou matrices respectivement en ligne ou en
colonne.
2. R > C[C[,1]>0.1,] peut se dcomposer ainsi :
R > C[,1] extrait la premire colonne de la matrice C
R > C[,1]>0.1 renvoie un vecteur logique de longueur le nombre de lignes de C
contenant TRUE si la valeur est suprieure 0.1 et FALSE sinon.
R > C[C[,1]>0.1,] extrait de la matrice C les lignes o les lments sur la pre-
mire colonne sont suprieurs 0.1 et toutes les colonnes (rien aprs la virgule).
3. la ligne ** extrait de la colonne 2 de la matrice D, les lignes o llment sur la pre-
mire colonne est suprieur 0.5.
9
2.1.4 Tableau - array
R > array(c(1 :8, rep(1,8), Un array gnralise une ma-
+ seq(0,1,l=8)), dim = c(2,4,3)) trice. On peut le voir comme un
R > E = .Last.value tableau de matrices.
R > E[, , 1] Une reprsentation de larray H
1 3 5 7 9 11 13 15 17 19 21 23
R > dim(E) ;length(E) 2 4 6 8 10 12 14 16 18 20 22 24
2.1.5 list
R > x = list("bidon",1 :8) ;x Un objet de type list peut conte-
R > x[[1]] ;x[[1]]+1 ;x[[2]]+10 nir plusieurs types dobjets (vec-
R > y = list(matrice=D,vecteur=f, teur, matrice...).
Utile pour renvoyer plusieurs
+ texte="bidon",scalaire=8)
types dinformations comme
R > names(y) ;y[[1]]
rsultats dune fonction.
R > y$matrice ;y$vec Accs aux composants dun ob-
R > y[c("texte","scal")] jet par son numro entre double-
R > y[c("texte","scalaire")] crochets [[ ]] ou par lopra-
R > length(y) teur $ suivi du nom du composant
(sil en a un).
R > length(y$vecteur)
R > cos(y$scal)+y[[2]][1]
10
2.1.6 data.frame
R > taille = runif(12,150,180) Structure spciale pour la ma-
R > masse = runif(12,50,90) nipulation de jeux de donnes
R > sexe = rep(c("M","F","F","M"),3) du type individus (en ligne)
variables (en colonne).
R > H = data.frame(taille,masse,sexe)
Les variables peuvent tre de
R > H ;summary(H) types diffrents (numrique,
R > H[1,] ;H$taille caractre, logique...).
R > H$sexe Noter les analogies entre
R > rm(taille) ;taille # (1) data.frame, list et
R > attach(H) ;taille # (2) matrix.
R > search() # (3)
R > detach() ;taille # (4)
Questions
1. Tester la fonction summary sur dautres types dobjets.
2. Commenter lenchanement des lignes 1 4. Quel est leffet de la fonction attach ?
de la fonction search ? de la fonction detach ?
Rponses
1. Fonction summary
R > vec=c(2,5,3,6,5,4,1,8) ;summary(vec)
R > mat=matrix(1 :20,nc=4,nr=5)
R > summary(mat) ;summary(c(mat))
R > ...
2. Enchanement des lignes
(1) Supprime lobjet taille dans lespace de travail courant ; lobjet taille nest
plus reconnu.
(2) Attache le data.frame H ; les composants de H deviennent accessibles directement.
(3) search() permet de lister les environnements lis lespace de travail courant.
(4) Dtache lenvironnement en position 2 dans la liste de search().
11
R > fic1=read.table("fic1.csv", La fonction read.table()
+ sep=",") permet de lire le contenu dun
R > fic1 fichier pour crer un objet R.
R > fic1b=read.csv("fic1.csv") Les arguments header, sep et
dec permettent de prendre en
R > fic1b
compte les 3 facteurs : entte, s-
R > fic1b=read.csv("fic1.csv",
parateur des colonnes et spara-
+ header=FALSE)
teur dcimal.
R > fic1b Les fonctions read.csv() et
read.csv2() sont analogues
read.table() mais avec un
paramtrage par dfaut diffrent.
Questions
1. Importer les fichiers fic2.txt, fic3.txt et fic4.txt.
Rponses
1. Importation des fichiers :
R > fic2 = read.table("fic2.txt")
R > fic3 = read.table("fic3.txt",header=T,sep=" ;")
R > fic4 = read.table("fic4.txt",sep=" ;",dec=",")
12
Transfrer des donnes de Excel (ou dun tableur quivalent) dans R
Dans Excel :
1. Ouvrir le fichier de donnes,
2. Enregistrer le fichier au format csv (Comma Separated Value) en le spcifiant
dans la liste droulante (Type de fichier).
Le format csv est lisible dans un diteur de texte quelconque, sa spcificit rside
dans les virgules qui sparent les valeurs de colonnes diffrentes. Il est prf-
rable au format txt qui propose des sparateurs tabulation quil est impossible
de distinguer loeil dun espace alors que le codage est diffrent. Dans une ver-
sion franaise dExcel, le sparateur des colonnes est un point-virgule, la virgule
tant le sparateur dcimal.
3. Quitter Excel.
Dans R : Limportation du fichier de donnes seffectue avec la fonction read.table().
Laide en ligne (help(read.table)) vous fournira tous les dtails sur lutilisa-
tion de cette fonction. On peut en grral assurer limportation avec les 4 arguments :
file, header, sep, dec :
* file : nom du fichier qui contient les donnes avec le chemin pour y accder,
* header (TRUE ou FALSE) : permet de prciser si la premire ligne contient le
titre des colonnes
* sep : permet de prciser le caractre qui dlimite les colonnes,
* dec : permet de prciser le sparateur dcimal
N.B. Le chemin pour accder au fichier est indiqu par des / et non par des \.
13
Chapitre 3
Fonctions graphiques
Questions
1. Quelle est la diffrence entre par(mfrow=c(2,2)) et par(mfcol=c(2,2)) ?
2. Consulter laide en ligne pour tester certains arguments optionnels des fonctions pie()
et barplot().
3. Commenter les commandes suivantes (extraites de laide en ligne de pie()) :
R > n=200
R > pie(rep(1,n), labels="", col=rainbow(n), border=NA)
Rponses
14
1. Les 2 commandes dcoupent la fentre graphique en 4 cellules. La diffrence entre
les 2 commandes est illustre par le tableau ci-dessous (par(mfrow=c(2,2)) -
par(mfcol=c(2,2))) :
1-1 2-3
3-2 4-4
Avec par(mfrow=c(2,2)), les 4 graphiques venir sont intgrs ligne par ligne ;
avec par(mfcol=c(2,2)), ils le sont colonne par colonne.
2. Par exemple, pour modifier les couleurs du camembert :
R > pie(vect,col=rgb(0,0,seq(0,1,l=8)))
R > pie(vect,col=rainbow(8))
R > ...
3. Commentaire de la ligne de commande :
R > n=200 # La valeur 200 est affecte n.
R > rep(1,n) # Cre le vecteur de taille n ne contenant que des 1.
R > pie(rep(1,n) # Produit un camembert pour n variables deffectifs tous
gaux 1. Les secteurs sont donc de mme angle.
R > rainbow(n) # Renvoie un vecteur de longueur n contenant un dgrad des
couleurs de larc-en-ciel.
R > border=NA # vite de tracer les bords des secteurs.
R > labels="" # Aucune tiquette nidentifie les secteurs.
Questions
1. Reprsenter dans la mme fentre graphique, le "stripchart", le diagramme-bote hori-
zontal et lhistogramme correspondant lun sous lautre.
Rponses
1. Reprsentation des 3 graphiques
R > par(mfrow=c(3,1))
R > stripchart(x)
R > boxplot(x,horizontal=T)
R > hist(x)
15
3.3 Graphiques 2D
R > x=seq(-10,10,l=50) Certaines fonctions crent
R > plot(x,sin(x)) un nouveau graphique,
R > plot(x,sin(x),type="l") dautres ajoutent des l-
ments un graphique
R > abline(v=0,col="blue",lwd=5,lty=3)
existant.
R > abline(h=sin(0.7),col=3) La fonction locator()
R > text(-5,-0.5,"texte",font=3) attend de lutilisateur quil
R > par(mfrow=c(1,2)) clique sur la fentre gra-
R > plot(x,sin(x),type="l",col=1, phique.
+ main="sinus") Les arguments main,
xlab, ylab, sub...
R > plot(x,cos(x),type="b",col=3,
permettent de placer les
+ xlab="Abscisses") lgendes des axes et du
R > par(mfrow=c(1,1)) graphique.
R > plot(x,cos(x),type="l") La fonction matplot()
R > points(0,1,pch="o",cex=3, trace les colonnes dune
+ col="blue") matrice.
R > lines(c(-5,5),c(0,0),lty=2,col=2) Les options graphiques sont
listes dans la rubrique
R > locator(1) ;text(locator(2),
"Graphical Parameters" de
+ c("clic","clac"),font=c(2,3)) R > help(par) .
R > A=cbind(seq(0,1,l=20),rnorm(20),
+ runif(20))
R > matplot(A,type="b")
Questions
1. Saurez-vous tracer la tte Toto ?
O O
+
Rponses
1. Voici un exemple pour obtenir la tte Toto :
R > plot(0,0,xlim=c(-15,15),ylim=c(-15,15),
+ type="n",axes=FALSE,xlab="",ylab="")
R > points(0,0,pch="+",cex=4) # le nez
R > points(c(-4,4),c(5,5),pch="O",cex=4) # les yeux
R > lines(c(-3,3),c(-5,-5),lwd=3) # la lvre suprieure
R > lines(c(-3,3),c(-6,-6),lwd=3) # la lvre infrieure
16
R > lines(10*sin(0 :360*pi/180),
+ 10*cos(0 :360*pi/180),lwd=5) # le contour du visage
En option, le chapeau :
R > lines(c(-12,12),c(10,10),lwd=3)
R > rect(-6,10,6,14,border=1,lwd=3,col=1)
3.4 Vers la 3D
R > M=matrix(1 :100,nc=10) Reprsentation sous forme
R > image(M) dimage (image()), de
R > x = seq(-10, 10, length= 30) ;y=x nappe (persp()) ou de
contour (contour()).
R > f = function(x,y)
Exemple de la fameuse
+ {r=sqrt(x2+y2) ; 10 * sin(r)/r} fonction sinc() (sinus
R > z = outer(x, y, f) cardinal), extrait de laide
R > z[is.na(z)] = 1 en ligne de la fonction
R > persp(x,y,z) persp().
R > persp(x, y, z, theta=30, phi=30, Pour mieux comprendre
ce que fait la fonction
+ expand = 0.5, col="lightblue")
outer(), on testera :
R > image(x,y,z) R > x=y=1 :5
R > contour(x,y,z) R > z=outer(x,y,"+")
R > filled.contour(x,y,z)
R > image(x,y,z)
R > contour(x,y,z,add=T)
Questions
1. Reprsenter le drapeau franais (ou tout autre drapeau de votre choix, vos risques et
prils).
Rponses
1. Drapeaux :
France :
R > image(t(matrix(c(rep(-1,30),rep(0,30),rep(1,30)),
+ nr=10,nc=9)),col=c("blue","white","red"),axes=F) ;box()
17
Italie :
R > image(t(matrix(c(rep(-1,30),rep(0,30),rep(1,30)),
+ nr=10,nc=9)),col=c("green","white","red"),axes=F) ;box()
Japon :
R > plot(0,0,xlim=c(-10,10),ylim=c(-10,10),type="n",
+ axes=FALSE,xlab="",ylab="")
R > polygon(c(-8,8,8,-8),c(-5,-5,5,5),col="white",border=1)
R > lines(3*sin(0 :360*pi/180),3*cos(0 :360*pi/180),
+ lwd=5,col="red")
R > polygon(3*sin(0 :360*pi/180),3*cos(0 :360*pi/180),
+ lwd=5,col="red",border=0)
Canada ( ! ! !) :
R > X=c(-0.25,-0.2,-2.5,-2,-4,-3.5,-3.75,-2.25,-2,-1,-1.5,
+ -0.75,0,0.75,1.5,1,2,2.25,3.75,3.5,4,2,2.5,0.2,0.25)
R > Y=c(-5,-2.5,-3,-2,0,0.25,1.75,1.5,2,1,4,3.5,5,3.5,4,1,
+ 2,1.5,1.75,0.25,0,-2,-3,-2.5,-5)
R > plot(0,0,xlim=c(-10,10),ylim=c(-10,10),type="n",
+ axes=FALSE,xlab="",ylab="")
R > polygon(c(-8,8,8,-8),c(-6,-6,6,6),col="white")
R > polygon(c(-8,-5,-5,-8),c(-6,-6,6,6),col="red")
R > polygon(c(5,8,8,5),c(-6,-6,6,6),col="red")
R > polygon(X,Y,col="red",border=0)
...
2. Damier (en une seule ligne, sans " ;") :
R > image(matrix(rep(c(rep(c(1,0),5),rep(c(0,1),5)),5),
+ nc=10),col=c("white","black"),axes=F)
Juste pour empcher les pions de tomber :
R > box()
En dtaillant, les diffrentes tapes, cela peut ressembler :
R > v1 = rep(c(1,0),5) # 1 0 1 0 1 0 1 0 1 0
R > v2 = rep(c(0,1),5) #0101010101
10101010010101010110101010100101010101
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
R > mat = matrix(v4,nc=10) 1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
R > image(mat,col=c("white","black"))
18
3.5 Exportation de graphiques
Dans lenvironnement Windows, une premire solution consiste copier le graphique
(menu Fichier > Copier vers le presse-papier). Le graphique ainsi plac
dans le presse-papier peut ensuite tre coll dans le logiciel de son choix.
Pour sauvegarder le graphique dans un fichier, on utilisera dans le menu Fichier la
rubrique Sauver sous. Plusieurs formats sont disponibles : vectoriel (mtafichier), post-
script, pdf, png, bmp, jpeg.
Une autre faon de procder, et cest la seule possible en environnement Unix, consiste
utiliser les fonctions associes la sauvegarde de fichiers graphiques : bmp(), jpeg(),
png(), pdf(), postscript(). La procdure suivre est la suivante :
1. Crer un fichier graphique vers lequel la sortie graphique est redirige
R > jpeg("fichier.jpg")
2. Tracer le graphique : le graphique napparat pas lcran.
R > plot(1 :100)
R > text(20,80,"abcdef")
3. Fermer le fichier. Ne surtout pas oublier cette tape ! La sortie graphique revient
alors lcran pour le prochain trac.
R > dev.off()
Cette procdure est galement utile en environnement Windows lorsque lon souhaite
sauver un graphique trac lors du droulement dune fonction.
19
Chapitre 4
Programmation
Questions
1. Que pensez-vous de :
for (i in 1 :length(b)) a[i]=cos(b[i])
2. Comment obtenir lquivalent de y et z dans la deuxime boucle for sans passer par
une boucle ?
3. Dans lenchanement de commandes ci-dessous, supprimer dabord la boucle for sur
j puis les 2 boucles.
R > M=matrix(1 :20,nr=5,nc=4)
R > res=rep(0,5)
R > for (i in 1 :5){
+ tmp=0
20
+ for (j in 1 :4) {tmp = tmp + M[i,j]}
+ res[i]=tmp}
Rponses
1. Cette boucle est inutile. Il suffit de saisir
R > a=cos(b) . Llment de base de R est la matrice dont le vecteur est un cas
particulier.
2. Une solution consiste sommer les lments TRUE dun vecteur logique
R > x=runif(10) ;y=sum(x>0.5) ;z=10-y
3. Suppression de boucles
Boucle for sur j :
R > for (i in 1 :5) res[i]=sum(M[i,])
Les 2 boucles :
R > res=apply(M,1,sum)
4.2 Fonctions
R > bidon=function(x){x+2} La fonction function() per-
R > ls() met de crer une fonction.
R > bidon On peut donner une valeur par d-
R > bidon(3) faut un paramtre dune fonc-
tion. Cela signifie que si lutili-
R > x = bidon(4)
sateur ne renseigne pas un para-
R > bidon = fix(bidon)
mtre, une valeur par dfaut est
R > bidon = function(a,b=a){a+b} prvue et ne gnre donc pas der-
R > bidon(2,3) reur.
R > bidon(5)
R > calc.rayon=function(r){
+ p=2*pi*r ;s=pi*r*r ;
+ list(rayon=r,perimetre=p,
+ surface=s)}
R > resultat=calc.rayon(3)
R > resultat$ray
R > 2*pi*resultat$r==resultat$perim
Questions
1. crire une fonction qui calcule le primtre et la surface dun rectangle partir des
longueurs l1 et l2 des deux cts. La fonction renvoie galement la longueur et la
largeur du rectangle.
2. crire une fonction qui calcule les n premiers termes de la suite de Fibonacci (u1 =
0, u2 = 1, n > 2, un = un1 + un2 )
21
3. Utiliser cette fonction pour calculer le rapport entre 2 termes conscutifs. Reprsenter
ce rapport en fonction du nombre de termes pour n = 20. Que constatez-vous ? Avez-
vous lu Da Vinci Code ?
Rponses
1. Fonction rectangle() (la fonction rect() existe dj) :
R > rectangle=function(l1,l2){
+ p=(l1+l2)*2
+ s=l1*l2
+ list(largeur=min(l1,l2),longueur=max(l1,l2),
+ perimetre=p,surface=s)}
Utilisation de la fonction :
R > rectangle(4,6) ;res=rectangle(8,7)
2. Fonction fibo() pour calculer les n premiers termes de la suite de Fibonacci :
R > fibo=function(n){
+ res=rep(0,n)
+ res[1]=0 ;res[2]=1
+ for (i in 3 :n) res[i]=res[i-1]+res[i-2]
+ res}
3. Calcul du rapport de 2 termes conscutifs
R > res=fibo(20)
R > ratio=res[2 :20]/res[1 :19]
R > plot(1 :19,ratio,type="b")
1+ 5
Le rapport tend vers le nombre dor 2
1.618034.
22
Chapitre 5
Un peu de statistique
Rappel :
5.1 Simulation
R > help.search("Distribution") La plupart des distributions cou-
R > help(rnorm) rantes sont programmes dans R.
R > rnorm(10) ;pnorm(0) Noter les diffrentes fonctions
lies chaque distribution.
R > qnorm(0.5) ;dnorm(0)
Par exemple, pour la loi nor-
R > plot(dnorm, -3, 3, male : dnorm(), pnorm(),
+ col="blue",lwd=3) qnorm(), rnorm() donnent
R > y=seq(qnorm(1-0.025),3,l=100) respectivement la densit, la
R > polygon(c(y,rev(y)), fonction de rpartition, la fonction
+ c(dnorm(y),rep(0,100)),col=3) quantile et un gnrateur alatoire.
Observer au passage une utilisa-
R > text(2.2,0.015,"0.025",cex=0.9,
tion un peu particulire de la fonc-
+ font=2) tion plot().
Questions
1. Tracer les fonctions densits et les fonctions de rpartition de quelques distributions
de probabilits usuelles (exponentielle, log-normale, Cauchy...)
Rponses
1. Quelques densits et fonctions de rpartition associes (sur un mme graphique) :
R > par(mfcol=c(2,4))
R > plot(dnorm,-5,5)
R > plot(pnorm,-5,5)
23
R > plot(dexp,0,5)
R > plot(pexp,0,5)
R > plot(dlnorm,0,5)
R > plot(plnorm,0,5)
R > plot(dcauchy,0,5)
R > plot(pcauchy,0,5)
24
5.3 Statistique descriptive unidimensionnelle
R > x=runif(100) On revient ici un peu en partie sur les
R > y=runif(100) graphiques pour donnes quantitatives vo-
R > mean(x) ;var(x) ;sd(x) ques dans la section 3.2.
Les fonctions boxplot() et hist()
R > min(x) ;max(x)
peuvent ne pas produire de graphique (op-
R > quantile(x) ;median(x) tion plot=FALSE).
R > quantile(x,0.5) La fonction stem produit une diagramme
R > quantile(x,0.9) stem-and-leaf (tige et feuille) qui donne un
R > boxplot(x,plot=FALSE) aperu de la rpartition des donnes de fa-
R > cov(x,y) on plus rustique quun histogramme
La fonction hist() propose des op-
R > summary(x)
tions pour modifier lapparence de lhisto-
R > stem(x) ;stem(y) gramme.
R > boxplot(x)
R > hist(x)
R > x[25]=2
R > res=boxplot(x) ;res
R > hist(x)
R > x[25]=runif(1)
R > hist(x,density=10)
R > hist(x,plot=FALSE)
R > hist(x,nclass=5)
25
5.4 Rgression
R > search() Vrifier la prsence de
R > ls(pos=7) # (*) "package :datasets"
R > help(cars) dans la liste des bibliothques dis-
ponibles (fonction search()).
R > res1 = lm(dist speed,
Dans la ligne (*), le chiffre 7 cor-
+ data=cars) respond au numro de lextension
R > res1 "package :datasets" dans
R > plot(cars) la liste fournie par search. v-
R > abline(res1) rifier.
R > names(res1) Vrifier la prsence du jeu de don-
R > summary(res1) nes cars. Une description des
donnes est fournie par la fonction
R > anova(res1)
help().
R > res2=lowess(cars$speed,
La fonction lowess() (LOcally
+ cars$dist,f=0.5) WEighted Scatterplot Smooth)
R > lines(res2,col="blue",lty=2) produit un lissage des donnes
par une fonction polynomiale par
morceaux.
Questions
1. Reprsenter, en plus de la droite de rgression, les points correspondants aux valeurs
de distance ajustes par le modle de rgression linaire.
2. Relier par des segments de droite les valeurs de distance ajustes et relles pour chaque
valeur de vitesse.
3. Reprendre la fonction lowess() en modifiant la valeur du paramtre f. Reprsenter
sytmatiquement la courbe lisse correspondante sur le graphique des donnes ini-
tiales.
4. Ajouter une lgende ce graphique (fonction legend).
Questions
1. Reprsentations des valeurs ajustes :
R > plot(cars) ;abline(res1)
R > points(cars[,1],res1$fitted,pch="+",col="blue")
2. Segments de droite entre valeurs ajustes et observes :
R > for (i in 1 :length(res1$fitted))
+ lines(c(cars[i,1],cars[i,1]),
+ c(cars[i,2],res1$fitted[i]),col="red",lty=2)
3. Quelques courbes lowess ajoutes au graphiques des donnes :
R > plot(cars)
R > lines(lowess(cars$speed,cars$dist,f=0.1),col=2)
26
R > lines(lowess(cars$speed,cars$dist,f=0.3),col=3)
R > lines(lowess(cars$speed,cars$dist,f=0.5),col=4)
R > lines(lowess(cars$speed,cars$dist,f=0.7),col=5)
R > lines(lowess(cars$speed,cars$dist,f=0.9),col=6)
4. Lgende positionne par un clic de la souris :
R > legend(locator(1),
+ c("f=0.1","f=0.3","f=0.5","f=0.7","f=0.9"),
+ col=2 :6,lty=1,text.col=2 :6)
Questions
27
1. Quelle est la longueur de lobjet eurodist ? Do vient cette valeur ?
2. Que pensez-vous de la reprsentation fournie par les lignes (1) et (2) ? Construisez une
reprsentation plus vraisemblable.
3. Mettre en uvre le MDS sur les donnes body. Dabord avec la distance euclidienne
(distance par dfaut) puis avec la distance "1-corrlation" (la fonction as.dist()
sera utile dans ce dernier cas).
Rponses
1. eurodist est un jeu de donnes de "package :datasets" qui se prte bien
la mise en uvre du positionnement multidimensionnel (voir help(cmdscale()).
2. Lobjet eurodist est de longueur 210. Cette valeur vient du nombre de distances
deux--deux calculables entre 21 villes : 2120
2
(matrice 21 21 symtrique et de dia-
gonale nulle).
3. La reprsentation obtenue par (1) et (2) est inverse nord-sud par rapport la ralit.
On peut obtenir une reprsentation plus vraisemblable par
R > x = mds.eurodist[,1]
R > y = -mds.eurodist[,2]
R > plot(x, y, type="n")
R > text(x, y, rownames(mds.eurodist))
4. Application aux donnes body (distance euclidienne) :
R > dist.body=dist(df.body)
R > mds.body=cmdscale(dist.body)
R > plot(mds.body)
R > text(mds.body,dimnames(body)[[1]])
5. Distance "1-corrlation" :
R > cor.dist=function(x){as.dist(1-cor(t(x)))}
R > dist.c.body=cor.dist(df.body)
R > mds.c.body=cmdscale(dist.c.body)
R > plot(mds.c.body)
R > text(mds.c.body,rownames(df.body))
28
5.5.3 Classification hirarchique
R > hc.body=hclust(dist.body, On rcupre certains objets
+ method="ward") crs prcdemment.
R > plot(hc.body) Deux notions de distances :
inter-individus et inter-groupes.
R > plot(hc.body,hang=-1)
Reprsentation (par plot())
R > plot(hclust(dist.c.body, dune arbre de classification ou
+ method="ave"),hang=-1) dendrogramme.
R > plot(hc.body,hang=-1) Le rsultat de
R > rhc.body=rect.hclust(hc.body, rect.hclust() nest
+ k=3) pas seulement graphique. Voir
le contenu de rhc.body.
Voir galement la fonction
cutree() au fonctionnement
similaire.
Questions
1. Mettre en uvre la classification hirarchique sur les donnes eurodist.
2. Reprsenter les dendrogrammes pour diffrents critres dagglomration.
Rponses
1. Classification hirarchique :
R > hc.eurodist.ward=hclust(eurodist,method="ward")
R > hc.eurodist.single=hclust(eurodist,method="single")
R > hc.eurodist.complete=hclust(eurodist,method="complete")
R > hc.eurodist.ave=hclust(eurodist,method="ave")
2. Reprsentation des dendrogrammes :
R > par(mfrow=c(1,4))
R > plot(hc.eurodist.ward,hang=-1,main="Ward")
R > plot(hc.eurodist.single,hang=-1,main="Single")
R > plot(hc.eurodist.complete,hang=-1,main="Complete")
R > plot(hc.eurodist.ave,hang=-1,main="Average")
29
Bibliographie
Comme cela est voqu en dbut de document, toutes les ressources souhaitables sur
sont disponibles sur les 2 sites :
www.r-project.org
cran.cict.fr
Parmi la documentation, signalons les documents en franais :
R pour les dbutants - Emmanuel Paradis, version franaise de R for Beginners (81
pages).
Introduction au systme R - Yves Brostaux, (22 pages avec jeux de donnes).
ainsi que le document
Writing R extensions
utile tout utilisateur dsireux de dvelopper en R (interface avec des programmes C, cra-
tion de package...).
Sur le web, le site de Vincent Zoonekynd
Statistiques avec R - zoonek2.free.fr/UNIX/48_R_2004/all.html
est trs complet sur les mthodes statistiques lmentaires accessibles sur la base de R (sans
package additionnel) ainsi que sur les solutions graphiques.
30