R pur les débutants Emmanuel Paradis Institut des Sciences de l Évlutin Université Mntpellier II F-34095 Mntpellier cédex 05 France E-mail : paradis@isem.univ-mntp2.fr
Je remercie Julien Claude, Christphe Declercq, Éldie Gazave, Friedrich Leisch, Luis Luangkesrn, Françis Pinard et Mathieu Rs pur leurs cmmentaires et suggestins sur des versins précédentes de ce dcument. J exprime également ma recnnaissance à tus les membres du R Develpment Cre Team pur leurs effrts cnsidérables dans le dévelppement de R et dans l animatin de la liste de discussin électrnique «r-help». Merci également aux utilisateurs de R qui par leurs questins u cmmentaires m nt aidé à écrire R pur les débutants. Mentin spéciale à Jrge Ahumada pur la traductin en espagnl. c 2002, 2005, Emmanuel Paradis (12 septembre 2005) Permissin est accrdée de cpier et distribuer ce dcument, en partie u en ttalité, dans nimprte quelle langue, sur nimprte quel supprt, à cnditin que la ntice c ci-dessus sit incluse dans tutes les cpies. Permissin est accrdée de traduire ce dcument, en partie u en ttalité, dans nimprte quelle langue, à cnditin que la ntice c ci-dessus sit incluse.
Table des matières 1 Préambule 1 2 Quelques cncepts avant de démarrer 3 2.1 Cmment R travaille........................ 3 2.2 Créer, lister et effacer les bjets en mémire........... 5 2.3 L aide en ligne........................... 7 3 Les dnnées avec R 10 3.1 Les bjects............................. 10 3.2 Lire des dnnées dans un fichier.................. 12 3.3 Enregistrer les dnnées....................... 16 3.4 Générer des dnnées........................ 17 3.4.1 Séquences régulières.................... 17 3.4.2 Séquences aléatires.................... 19 3.5 Manipuler les bjets........................ 20 3.5.1 Créatin d bjets...................... 20 3.5.2 Cnversin d bjets.................... 25 3.5.3 Les pérateurs....................... 27 3.5.4 Accéder aux valeurs d un bjet : le système d indexatin 28 3.5.5 Accéder aux valeurs d un bjet avec les nms...... 31 3.5.6 L éditeur de dnnées.................... 32 3.5.7 Calcul arithmétique et fnctins simples......... 33 3.5.8 Calcul matriciel....................... 35 4 Les graphiques avec R 38 4.1 Gestin des graphiques....................... 38 4.1.1 Ouvrir plusieurs dispsitifs graphiques.......... 38 4.1.2 Partitinner un graphique................. 39 4.2 Les fnctins graphiques...................... 42 4.3 Les fnctins graphiques secndaires............... 43 4.4 Les paramètres graphiques..................... 45 4.5 Un exemple cncret........................ 46 4.6 Les packages grid et lattice..................... 51 5 Les analyses statistiques avec R 59 5.1 Un exemple simple d analyse de variance............. 59 5.2 Les frmules............................. 60 5.3 Les fnctins génériques...................... 62 5.4 Les packages............................ 65
6 Prgrammer avec R en pratique 69 6.1 Bucles et vectrisatin...................... 69 6.2 Écrire un prgramme en R.................... 71 6.3 Écrire ses fnctins......................... 72 7 Littérature sur R 76
1 Préambule Le but du présent dcument est de furnir un pint de départ pur les nvices intéressés par R. J ai fait le chix d insister sur la cmpréhensin du fnctinnement de R, bien sûr dans le but d une utilisatin de niveau débutant plutôt qu expert. Les pssibilités ffertes par R étant très vastes, il est utile pur le débutant d assimiler certaines ntins et cncepts afin d évluer plus aisément par la suite. J ai essayé de simplifier au maximum les explicatins pur les rendre accessibles à tus, tut en dnnant les détails utiles, parfis sus frme de tableaux. R est un système d analyse statistique et graphique créé par Rss Ihaka et Rbert Gentleman 1. R est à la fis un lgiciel et un langage qualifié de dialecte du langage S créé par AT&T Bell Labratries. S est dispnible sus la frme du lgiciel S-PLUS cmmercialisé par la cmpagnie Insightful 2. Il y a des différences imprtantes dans la cnceptin de R et celle de S : ceux qui veulent en savir plus sur ce pint peuvent se reprter à l article de Ihaka & Gentleman (1996) u au R-FAQ 3 dnt une cpie est également distribuée avec R. R est distribué librement sus les termes de la GNU General Public Licence 4 ; sn dévelppement et sa distributin snt assurés par plusieurs statisticiens rassemblés dans le R Develpment Cre Team. R est dispnible sus plusieurs frmes : le cde (écrit principalement en C et certaines rutines en Frtran), surtut pur les machines Unix et Linux, u des exécutables précmpilés pur Windws, Linux et Macintsh. Les fichiers pur installer R, à partir du cde u des exécutables, snt distribués à partir du site internet du Cmprehensive R Archive Netwrk (CRAN) 5 ù se truvent aussi les instructins à suivre pur l installatin sur chaque système. En ce qui cncerne les distributins de Linux (Debian,...), les exécutables snt généralement dispnibles pur les versins les plus récentes ; cnsultez le site du CRAN si besin. R cmprte de nmbreuses fnctins pur les analyses statistiques et les graphiques ; ceux-ci snt visualisés immédiatement dans une fenêtre prpre et peuvent être exprtés sus divers frmats (jpg, png, bmp, ps, pdf, emf, pictex, xfig ; les frmats dispnibles peuvent dépendre du système d explitatin). Les résultats des analyses statistiques snt affichés à l écran, certains résultats partiels (valeurs de P, cefficients de régressin, résidus,...) peuvent être sauvés à part, exprtés dans un fichier u utilisés dans des analyses ultérieures. 1 Ihaka R. & Gentleman R. 1996. R: a language fr data analysis and graphics. Jurnal f Cmputatinal and Graphical Statistics 5 : 299 314. 2 vir http://www.insightful.cm/prducts/splus/default.asp pur plus d infrmatin 3 http://cran.r-prject.rg/dc/faq/r-faq.html 4 pur plus d infs : http://www.gnu.rg/ 5 http://cran.r-prject.rg/ 1
Le langage R permet, par exemple, de prgrammer des bucles qui vnt analyser successivement différents jeux de dnnées. Il est aussi pssible de cmbiner dans le même prgramme différentes fnctins statistiques pur réaliser des analyses plus cmplexes. Les utilisateurs de R peuvent bénéficier des nmbreux prgrammes écrits pur S et dispnibles sur internet 6, la plupart de ces prgrammes étant directement utilisables avec R. De prime abrd, R peut sembler trp cmplexe pur une utilisatin par un nn-spécialiste. Ce n est pas frcément le cas. En fait, R privilégie la flexibilité. Alrs qu un lgiciel classique affichera directement les résultats d une analyse, avec R ces résultats snt stckés dans un bjet, si bien qu une analyse peut être faite sans qu aucun résultat ne sit affiché. L utilisateur peut être décncerté par ceci, mais cette facilité se révèle extrêmement utile. En effet, l utilisateur peut alrs extraire uniquement la partie des résultats qui l intéresse. Par exemple, si l n dit faire une série de 20 régressins et que l n veuille cmparer les cefficients des différentes régressins, R purra afficher uniquement les cefficients estimés : les résultats tiendrnt dnc sur une ligne, alrs qu un lgiciel plus classique purra uvrir 20 fenêtres de résultats. On verra d autres exemples illustrant la flexibilité d un système cmme R vis-à-vis des lgiciels classiques. 6 par exemple : http://stat.cmu.edu/s/ 2
2 Quelques cncepts avant de démarrer Une fis R installé sur vtre rdinateur, il suffit de lancer l exécutable crrespndant pur démarrer le prgramme. L attente de cmmandes (par défaut le symble > ) apparait alrs indiquant que R est prêt à exécuter les cmmandes. Sus Windws en utilisant le prgramme Rgui.exe, certaines cmmandes (accès à l aide, uverture de fichiers,...) peuvent être exécutées par les menus. L utilisateur nvice a alrs tutes les chances de se demander «Je fais qui maintenant?» Il est en effet très utile d avir quelques idées sur le fnctinnement de R lrsqu n l utilise pur la première fis : c est ce que nus allns vir maintenant. Nus allns dans un premier temps vir schématiquement cmment R travaille. Ensuite nus décrirns l pérateur «assigner» qui permet de créer des bjets, puis cmment gérer les bjets en mémire, et finalement cmment utiliser l aide en ligne qui est extrêmement utile dans une utilisatin curante. 2.1 Cmment R travaille Le fait que R sit un langage peut effrayer plus d un utilisateur ptentiel pensant «Je ne sais pas prgrammer». Cela ne devrait pas être le cas pur deux raisns. D abrd, R est un langage interprété et nn cmpilé, c est-à-dire que les cmmandes tapées au clavier snt directement exécutées sans qu il sit besin de cnstruire un prgramme cmplet cmme cela est le cas pur la plupart des langages infrmatiques (C, Frtran, Pascal,...). Ensuite, la syntaxe de R est très simple et intuitive. Par exemple, une régressin linéaire purra être faite avec la cmmande lm(y ~ x). Avec R, une fnctin, pur être exécutée, s écrit tujurs avec des parenthèses, même si elles ne cntiennent rien (par exemple ls()). Si l utilisateur tape le nm de la fnctin sans parenthèses, R affichera le cntenu des instructins de cette fnctin. Dans la suite de ce dcument, les nms des fnctins snt généralement écrits avec des parenthèses pur les distinguer des autres bjets sauf si le texte indique clairement qu il s agit d une fnctin. Quand R est utilisé, les variables, les dnnées, les fnctins, les résultats, etc, snt stckés dans la mémire de l rdinateur sus frme d bjets qui nt chacun un nm. L utilisateur va agir sur ces bjets avec des pérateurs (arithmétiques, lgiques, de cmparaisn,...) et des fnctins (qui snt ellesmêmes des bjets). L utilisatin des pérateurs est relativement intuitive, n en verra les détails plus lin (p. 27). Une fnctin de R peut être schématisée cmme suit : 3
arguments ptins fnctin arguments par défaut = résultat Les arguments peuvent être des bjets («dnnées», frmules, expressins,...) dnt certains peuvent être définis par défaut dans la fnctin ; ces valeurs par défaut peuvent être mdifiées par l utilisateur avec les ptins. Une fnctin de R peut ne nécessiter aucun argument de la part de l utilisateur : sit tus les arguments snt définis par défaut (et peuvent être changés avec les ptins), u sit aucun argument n est défini. On verra plus en détail l utilisatin et la cnstructin des fnctins (p. 72). La présente descriptin est pur le mment suffisante pur cmprendre cmment R père. Tutes les actins de R snt effectuées sur les bjets présents dans la mémire vive de l rdinateur : aucun fichier tempraire n est utilisé (Fig. 1). Les lectures et écritures de fichiers snt utilisées pur la lecture et l enregistrement des dnnées et des résultats (graphiques,...). L utilisateur exécute des fnctins par l intermédiaire de cmmandes. Les résultats snt affichés directement à l écran, u stckés dans un bjet, u encre écrits sur le disque (en particulier pur les graphiques). Les résultats étant eux-mêmes des bjets, ils peuvent être cnsidérés cmme des dnnées et être analysés à leur tur. Les fichiers de dnnées peuvent être lus sur le disque de l rdinateur lcal u sur un serveur distant via internet. clavier cmmandes suris fnctins et pérateurs.../library/base/ /stast/ /graphics/... bjets «dnnées» 3 écran bjets «résultats» PS JPEG... biblithèque de fnctins fichiers de dnnées internet Mémire vive Disque dur Fig. 1 Une vue schématique du fnctinnement de R. Les fnctins dispnibles snt stckées dans une biblithèque lcalisées sur le disque dans le répertire R HOME/library (R HOME désignant le répertire ù R est installé). Ce répertire cntient des packages de fnctins, eux-mêmes présents sur le disque sus frme de répertires. Le package nmmé base est en quelque srte le cœur de R et cntient les fnctins de base du lan- 4
gage, en particulier pur la lecture et la manipulatin des dnnées. Chaque package a un répertire nmmé R avec un fichier qui a pur nm celui du package (par exemple, pur base, ce sera le fichier R HOME/library/base/R/base). Ce fichier cntient les fnctins du package. Une des cmmandes les plus simples cnsiste à taper le nm d un bjet pur afficher sn cntenu. Par exemple, si un bjet n cntient la valeur 10 : > n [1] 10 Le chiffre 1 entre crchets indique que l affichage cmmence au premier élément de n. Cette cmmande est une utilisatin implicite de la fnctin print et l exemple ci-dessus est identique à print(n) (dans certaines situatins, la fnctin print dit être utilisée de façn explicite, par exemple au sein d une fnctin u d une bucle). Le nm d un bjet dit bligatirement cmmencer par une lettre (A Z et a z) et peut cmprter des lettres, des chiffres (0 9), des pints (.) et des espaces sulignés ( ). Il faut savir aussi que R distingue, pur les nms des bjets, les majuscules des minuscules, c est-à-dire que x et X purrnt servir à nmmer des bjets distincts (même sus Windws). 2.2 Créer, lister et effacer les bjets en mémire Un bjet peut être créé avec l pérateur «assigner» qui s écrit avec une flèche cmpsée d un signe mins acclé à un crchet, ce symble puvant être rienté dans un sens u dans l autre : > n <- 15 > n [1] 15 > 5 -> n > n [1] 5 > x <- 1 > X <- 10 > x [1] 1 > X [1] 10 Si l bjet existe déjà, sa valeur précédente est effacée (la mdificatin n affecte que les bjets en mémire vive, pas les dnnées sur le disque). La valeur ainsi dnnée peut être le résultat d une pératin et/u d une fnctin : > n <- 10 + 2 > n 5
[1] 12 > n <- 3 + rnrm(1) > n [1] 2.208807 La fnctin rnrm(1) génère une variable aléatire nrmale de myenne zér et variance unité (p. 19). On peut simplement taper une expressin sans assigner sa valeur à un bjet, le résultat est alrs affiché à l écran mais n est pas stcké en mémire : > (10 + 2) * 5 [1] 60 Dans ns exemples, n mettra l assignement si cela n est pas nécessaire à la cmpréhensin. La fnctin ls permet d afficher une liste simple des bjets en mémire, c est-à-dire que seuls les nms des bjets snt affichés. > name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0.5 > ls() [1] "m" "n1" "n2" "name" Ntns l usage du pint-virgule pur séparer des cmmandes distinctes sur la même ligne. Si l n veut lister uniquement les bjets qui cntiennent un caractère dnné dans leur nm, n utilisera alrs l ptin pattern (qui peut s abréger avec pat) : > ls(pat = "m") [1] "m" "name" Pur restreindre la liste aux bjets dnt le nm cmmence par le caractère en questin : > ls(pat = "^m") [1] "m" La fnctin ls.str affiche des détails sur les bjets en mémire : > ls.str() m : num 0.5 n1 : num 10 n2 : num 100 name : chr "Carmen" L ptin pattern peut également être utilisée cmme avec ls. Une autre ptin utile de ls.str est max.level qui spécifie le niveau de détails de l affichage des bjets cmpsites. Par défaut, ls.str affiche les détails de tus les bjets cntenus en mémire, y cmpris les clnnes des jeux de dnnées, matrices et listes, ce qui peut faire un affichage très lng. On évite d afficher tus les détails avec l ptin max.level = -1 : 6
> M <- data.frame(n1, n2, m) > ls.str(pat = "M") M : data.frame : 1 bs. f 3 variables: $ n1: num 10 $ n2: num 100 $ m : num 0.5 > ls.str(pat="m", max.level=-1) M : data.frame : 1 bs. f 3 variables: Pur effacer des bjets de la mémire, n utilise la fnctin rm : rm(x) pur effacer l bjet x, rm(x, y) pur effacer les bjets x et y, rm(list=ls()) pur effacer tus les bjets en mémire ; n purra ensuite utiliser les mêmes ptins citées pur ls() pur effacer sélectivement certains bjets : rm(list=ls(pat = "^m")). 2.3 L aide en ligne L aide en ligne de R est extrêment utile pur l utilisatin des fnctins. L aide est dispnible directement pur une fnctin dnnée, par exemple : >?lm affichera, dans R, la page d aide pur la fnctin lm() (linear mdel). Les cmmandes help(lm) et help("lm") aurnt le même effet. C est cette dernière qu il faut utiliser pur accéder à l aide avec des caractères nn-cnventinnels : >?* Errr: syntax errr > help("*") Arithmetic package:base R Dcumentatin Arithmetic Operatrs... L appel de l aide uvre une page (le cmprtement exact dépend du système d explitatin) avec sur la première ligne des infrmatins générales dnt le nm du package ù se truvent la (u les) fnctin(s) u les pérateurs dcumentés. Ensuite vient un titre suivi de paragraphes qui chacun apprte une infrmatin bien précise. Descriptin: brève descriptin. Usage: pur une fnctin dnne le nm avec tus ses arguments et les éventuelles ptins (et les valeurs par défaut crrespndantes) ; pur un pérateur dnne l usage typique. Arguments: pur une fnctin détaille chacun des arguments. Details: descriptin détaillée. 7
Value: le cas échéant, le type d bjet returné par la fnctin u l pérateur. See Als: autres rubriques d aide prches u similaires à celle dcumentée. Examples: des exemples qui généralement peuvent être exécutés sans uvrir l aide avec la fnctin example. Pur un débutant, il est cnseillé de regarder le paragraphe Examples. En général, il est utile de lire attentivement le paragraphe Arguments. D autres paragraphes peuvent être rencntrés, tel Nte, References u Authr(s). Par défaut, la fnctin help ne recherche que dans les packages chargés en mémire. L ptin try.all.packages, dnt le défaut est FALSE, permet de chercher dans tus les packages si sa valeur est TRUE : > help("bs") N dcumentatin fr bs in specified packages and libraries: yu culd try help.search("bs") > help("bs", try.all.packages = TRUE) Help fr tpic bs is nt in any laded package but can be fund in the fllwing packages: Package splines Library /usr/lib/r/library Ntez que dans ce cas la page d aide de la fnctin bs n est pas uverte. L utilisateur peut uvrir des pages d aide d un package nn chargé en mémire en utilisant l ptin package : > help("bs", package = "splines") bs package:splines R Dcumentatin B-Spline Basis fr Plynmial Splines Descriptin:... Generate the B-spline basis matrix fr a plynmial spline. On peut uvrir l aide au frmat html (qui sera lu avec Netscape, par exemple) en tapant : > help.start() Une recherche par mts-clefs est pssible avec cette aide html. La rubrique See Als cntient ici des liens hypertextes vers les pages d aide des autres fnctins. La recherche par mts-clefs est également pssible depuis R avec la fnctin help.search. Cette dernière recherche un thème, spécifié par une chaîne de caractère, dans les pages d aide de tus les packages installés. Par exemple, help.search("tree") affichera une liste des fnctins dnt les pages 8
d aide mentinnent «tree». Ntez que si certains packages nt été installés récemment, il peut être utile de rafraîchir la base de dnnées utilisée par help.search en utilisant l ptin rebuild (help.search("tree", rebuild = TRUE)). La fnctin aprps truve les fnctins qui cntiennent dans leur nm la chaîne de caractère passée en argument ; seuls les packages chargés en mémire snt cherchés : > aprps(help) [1] "help" ".helpfrcall" "help.search" [4] "help.start" 9
3 Les dnnées avec R 3.1 Les bjects Nus avns vu que R manipule des bjets : ceux-ci snt caractérisés bien sûr par leur nm et leur cntenu, mais aussi par des attributs qui vnt spécifier le type de dnnées représenté par un bjet. Afin de cmprendre l utilité de ces attributs, cnsidérns une variable qui prendrait les valeurs 1, 2 u 3 : une telle variable peut représenter une variable entière (par exemple, le nmbre d œufs dans un nid), u le cdage d une variable catégrique (par exemple, le sexe dans certaines ppulatins de crustacés : mâle, femelle u hermaphrdite). Il est clair que le traitement statistique de cette variable ne sera pas le même dans les deux cas : avec R, les attributs de l bjet dnnent l infrmatin nécessaire. Plus techniquement, et plus généralement, l actin d une fnctin sur un bjet va dépendre des attributs de celui-ci. Les bjets nt tus deux attributs intrinsèques : le mde et la lngueur. Le mde est le type des éléments d un bjet ; il en existe quatre principaux : numérique, caractère, cmplexe 7, et lgique (FALSE u TRUE). D autres mdes existent qui ne représentent pas des dnnées, par exemple fnctin u expressin. La lngueur est le nmbre d éléments de l bjet. Pur cnnaître le mde et la lngueur d un bjet n peut utiliser, respectivement, les fnctins mde et length : > x <- 1 > mde(x) [1] "numeric" > length(x) [1] 1 > A <- "Gmphtherium"; cmpar <- TRUE; z <- 1i > mde(a); mde(cmpar); mde(z) [1] "character" [1] "lgical" [1] "cmplex" Quelque sit le mde, les valeurs manquantes snt représentées par NA (nt available). Une valeur numérique très grande peut être spécifiée avec une ntatin expnentielle : > N <- 2.1e23 > N [1] 2.1e+23 7 Le mde cmplexe ne sera pas discuté dans ce dcument. 10
R représente crrectement des valeurs numériques qui ne snt pas finies, telles que ± avec Inf et -Inf, u des valeurs qui ne snt pas des nmbres avec NaN (nt a number). > x <- 5/0 > x [1] Inf > exp(x) [1] Inf > exp(-x) [1] 0 > x - x [1] NaN Une valeur de mde caractère est dnc entrée entre des guillemets dubles ". Il est pssible d inclure ce dernier caractère dans la valeur s il suit un antislash \. L ensemble des deux caractères \" sera traité de façn spécifique par certaines fnctins telle que cat pur l affichage à l écran, u write.table pur écrire sur le disque (p. 16, l ptin qmethd de cette fnctin). > x <- "Duble qutes \" delimitate R s strings." > x [1] "Duble qutes \" delimitate R s strings." > cat(x) Duble qutes " delimitate R s strings. Une autre pssibilité est de délimiter les variables de mde caractère avec des guillemets simples ( ) ; dans ce cas il n est pas nécessaire d échapper les guillemets dubles avec des antislash (mais les guillemets simples divent l être!) : > x <- Duble qutes " delimitate R\ s strings. > x [1] "Duble qutes \" delimitate R s strings."\ Le tableau suivant dnne un aperçu des bjets représentant des dnnées. 11
bjet mdes plusieurs mdes pssibles dans le même bjet? vecteur numérique, caractère, cmplexe u lgique Nn facteur numérique u caractère Nn tableau numérique, caractère, cmplexe u lgique Nn matrice numérique, caractère, cmplexe u lgique Nn tableau de numérique, caractère, cmplexe u lgique Oui dnnées ts numérique, caractère, cmplexe u lgique Nn liste numérique, caractère, cmplexe, lgique, Oui fnctin, expressin,... Un vecteur est une variable dans le sens généralement admis. Un facteur est une variable catégrique. Un tableau (array) pssède k dimensins, une matrice étant un cas particulier de tableau avec k = 2. À nter que les éléments d un tableau u d une matrice snt tus du même mde. Un tableau de dnnées (data frame) est cmpsé de un u plusieurs vecteurs et/u facteurs ayant tus la même lngueur mais puvant être de mdes différents. Un «ts» est un jeu de dnnées de type séries temprelles (time series) et cmprte dnc des attributs supplémentaires cmme la fréquence et les dates. Enfin, une liste peut cntenir n imprte quel type d bjet, y cmpris des listes! Pur un vecteur, le mde et la lngueur suffisent pur décrire les dnnées. Pur les autres bjets, d autres infrmatins snt nécessaires et celles-ci snt dnnées par les attributs dits nn-intrinsèques. Parmi ces attributs, citns dim qui crrespnd au nmbre de dimensins d un bjet. Par exemple, une matrice cmpsée de 2 lignes et 2 clnnes aura pur dim le cuple de valeurs [2, 2] ; par cntre sa lngueur sera de 4. 3.2 Lire des dnnées dans un fichier Pur les lectures et écritures dans les fichiers, R utilise le répertire de travail. Pur cnnaître ce répertire n peut utiliser la cmmande getwd() (get wrking directry), et n peut le mdifier avec, par exemple, setwd("c:/data") u setwd("/hme/paradis/r"). Il est nécessaire de préciser le chemin d accès au fichier s il n est pas dans le répertire de travail. 8 R peut lire des dnnées stckées dans des fichiers texte (ASCII) à l aide des fnctins suivantes : read.table (qui a plusieurs variantes, cf. ci-dessus), scan et read.fwf. R peut également lire des fichiers dans d autres frmats (Excel, SAS, SPSS,...) et accéder à des bases de dnnées de type SQL, mais les fnctins nécessaires ne snt pas dans le package base. Ces fnctinnalités 8 Sus Windws, il est pratique de créer un raccurci de Rgui.exe, puis éditer ses prpriétés et mdifier le répertire dans le champ «Démarrer en :» sus l nglet «Raccurci» : ce répertire sera ensuite le répertire de travail en démarrant R depuis ce raccurci. 12
snt très utiles pur une utilisatin un peu plus avancée de R, mais n se limitera ici à la lecture de fichiers au frmat ASCII. La fnctin read.table a pur effet de créer un tableau de dnnées et est dnc le myen principal pur lire des fichiers de dnnées. Par exemple, si n a un fichier nmmé data.dat, la cmmande : > mydata <- read.table("data.dat") créera un tableau de dnnées nmmé mydata, et les variables, par défaut nmmées V1, V2..., purrnt être accédées individuellement par mydata$v1, mydata$v2,..., u par mydata ["V1"], mydata["v2"],..., u encre par mydata[, 1], mydata[, 2],... 9 Il y a plusieurs ptins dnt vici les valeurs par défaut (c est-à-dire celles utilisées par R si elles snt mises par l utilisateur) et les détails dans le tableau qui suit : read.table(file, header = FALSE, sep = "", qute = "\" ", dec = ".", rw.names, cl.names, as.is = FALSE, na.strings = "NA", clclasses = NA, nrws = -1, skip = 0, check.names = TRUE, fill =!blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, cmment.char = "#") file le nm du fichier (entre "" u une variable de mde caractère), éventuellement avec sn chemin d accès (le symble \ est interdit et dit être remplacé par /, même sus Windws), u un accès distant à un fichier de type URL (http://...) header une valeur lgique (FALSE u TRUE) indicant si le fichier cntient les nms des variables sur la 1ère ligne sep le séparateur de champ dans le fichier, par exemple sep="\t" si c est une tabulatin qute les caractères utilisés pur citer les variables de mde caractère dec le caractère utilisé pur les décimales rw.names un vecteur cntenant les nms des lignes qui peut être un vecteur de mde character, u le numér (u le nm) d une variable du fichier (par défaut : 1, 2, 3,...) cl.names un vecteur cntenant les nms des variables (par défaut : V1, V2, V3,...) as.is cntrôle la cnversin des variables caractères en facteur (si FALSE) u les cnserve en caractères (TRUE) ; as.is peut être un vecteur lgique, numérique u caractère précisant les variables cnservées en caractère na.strings indique la valeur des dnnées manquantes (sera cnverti en NA) clclasses un vecteur de caractères dnnant les classes à attribuer aux clnnes nrws le nmbre maximum de lignes à lire (les valeurs négatives snt ignrées) 9 Il y a tutefis une différence : mydata$v1 et mydata[, 1] snt des vecteurs alrs que mydata["v1"] est un tableau de dnnées. On verra plus lin (p. 20) des détails sur la manipulatin des bjets. 13
skip le nmbre de lignes à sauter avant de cmmencer la lecture des dnnées check.names si TRUE, vérifie que les nms des variables snt valides pur R fill si TRUE et que les lignes n nt pas tus le même nmbre de variables, des blancs snt ajutés strip.white (cnditinnel à sep) si TRUE, efface les espaces (= blancs) avant et après les variables de mde caractère blank.lines.skip si TRUE, ignre les lignes «blanches» cmment.char un caractère qui définit des cmmentaires dans le fichier de dnnées, la lecture des dnnées passant à la ligne suivante (pur désactiver cet ptin, utiliser cmment.char = "") Les variantes de read.table snt utiles car elles nt des valeurs par défaut différentes : read.csv(file, header = TRUE, sep = ",", qute="\"", dec=".", fill = TRUE,...) read.csv2(file, header = TRUE, sep = ";", qute="\"", dec=",", fill = TRUE,...) read.delim(file, header = TRUE, sep = "\t", qute="\"", dec=".", fill = TRUE,...) read.delim2(file, header = TRUE, sep = "\t", qute="\"", dec=",", fill = TRUE,...) La fnctin scan est plus flexible que read.table. Une différence est qu il est pssible de spécifier le mde des variables, par exemple : > mydata <- scan("data.dat", what = list("", 0, 0)) lira dans le fichier data.dat tris variables, la première de mde caractère et les deux suivantes de mde numérique. Une autre distinctin imprtante est que scan() peut être utilisée pur créer différents bjets, vecteurs, matrices, tableaux de dnnées, listes,... Dans l exemple ci-dessus, mydata est une liste de tris vecteurs. Par défaut, c est-à-dire si what est mis, scan() crée un vecteur numérique. Si les dnnées lues ne crrespndent pas au(x) mde(s) attendu(s) (par défaut u spécifiés par what), un message d erreur est returné. Les ptins snt les suivantes. scan(file = "", what = duble(0), nmax = -1, n = -1, sep = "", qute = if (sep=="\n") "" else " \"", dec = ".", skip = 0, nlines = 0, na.strings = "NA", flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE, blank.lines.skip = TRUE, multi.line = TRUE, cmment.char = "", allwescapes = TRUE) 14
file le nm du fichier (entre ""), éventuellement avec sn chemin d accès (le symble \ est interdit et dit être remplacé par /, même sus Windws), u un accès distant à un fichier de type URL (http://...) ; si file="", les dnnées snt entrées au clavier (l entrée étant terminée par une ligne blanche) what indique le(s) mde(s) des dnnées lues (numérique par défaut) nmax le nmbre de dnnées à lire, u, si what est une liste, le nmbre de lignes lues (par défaut, scan lit jusqu à la fin du fichier) n le nmbre de dnnées à lire (par défaut, pas de limite) sep le séparateur de champ dans le fichier qute les caractères utilisés pur citer les variables de mde caractère dec le caractère utilisé pur les décimales skip le nmbre de lignes à sauter avant de cmmencer la lecture des dnnées nlines le nmbre de lignes à lire na.string indique la valeur des dnnées manquantes (sera cnverti en NA) flush si TRUE, scan va à la ligne suivante une fis que le nmbre de clnnes est atteint (permet d ajuter des cmmentaires dans le fichier de dnnées) fill si TRUE et que les lignes n nt pas tus le même nmbre de variables, des blancs snt ajutés strip.white (cnditinnel à sep) si TRUE, efface les espaces (= blancs) avant et après les variables de mde character quiet si FALSE, scan affiche une ligne indiquant quels champs nt été lus blank.lines.skip si TRUE, ignre les lignes «blanches» multi.line si what est une liste, précise si les variables du même individu snt sur une seule ligne dans le fichier (FALSE) cmment.char un caractère qui définit des cmmentaires dans le fichier de dnnées, la lecture des dnnées passant à la ligne suivante (par défaut les cmmentaires ne snt pas permis) allwescapes spécifie si les caractères échappés (par ex. \t) divent être interprétés (le défaut) u laissés tels-quels La fnctin read.fwf sert à lire dans un fichier ù les dnnées snt dans un frmat à largeur fixée (fixed width frmat) : read.fwf(file, widths, header = FALSE, sep = "\t", as.is = FALSE, skip = 0, rw.names, cl.names, n = -1, buffersize = 2000,...) Les ptins snt les mêmes que pur read.table() sauf widths qui spécifie la largeur des champs (buffersize est le nmbre maximum de lignes lues en même temps). Par exemple, si n a un fichier nmmé data.txt dnt le cntenu est indiqué ci-cntre, n purra lire les dnnées avec la cmmande suivante : A1.501.2 A1.551.3 B1.601.4 B1.651.5 C1.701.6 C1.751.7 > mydata <- read.fwf("data.txt", widths=c(1, 4, 3)) > mydata V1 V2 V3 1 A 1.50 1.2 15
2 A 1.55 1.3 3 B 1.60 1.4 4 B 1.65 1.5 5 C 1.70 1.6 6 C 1.75 1.7 3.3 Enregistrer les dnnées La fnctin write.table écrit dans un fichier un bjet, typiquement un tableau de dnnées mais cela peut très bien être un autre type d bjet (vecteur, matrice,...). Les arguments et ptins snt : write.table(x, file = "", append = FALSE, qute = TRUE, sep = " ", el = "\n", na = "NA", dec = ".", rw.names = TRUE, cl.names = TRUE, qmethd = c("escape", "duble")) x file append qute sep el na dec rw.names cl.names qmethd le nm de l bjet à écrire le nm du fichier (par défaut l bjet est affiché à l écran) si TRUE ajute les dnnées sans effacer celles éventuellement existantes dans le fichier une variable lgique u un vecteur numérique : si TRUE les variables de mde caractère et les facteurs snt écrits entre "", sinn le vecteur indique les numérs des variables à écrire entre "" (dans les deux cas les nms des variables snt écrits entre "" mais pas si qute = FALSE) le séparateur de champ dans le fichier le caractère imprimé à la fin de chaque ligne ("\n" crrespnd à un returcharrit) indique le caractère utilisé pur les dnnées manquantes le caractère utilisé pur les décimales une variable lgique indiquant si les nms des lignes divent être écrits dans le fichier idem pur les nms des clnnes spécifie, si qute=true, cmment snt traitées les guillemets dubles " incluses dans les variables de mde caractère : si "escape" (u "e", le défaut) chaque " est remplacée par \", si "d" chaque " est remplacée par "" Pur écrire de façn plus simple un bjet dans un fichier, n peut utiliser la cmmande write(x, file="data.txt") ù x est le nm de l bjet (qui peut être un vecteur, une matrice u un tableau). Il y a deux ptins : nc (u ncl) qui définit le nmbre de clnnes dans le fichier (par défaut nc=1 si x est de mde caractère, nc=5 pur les autres mdes), et append (un lgique) pur ajuter les dnnées sans effacer celles éventuellement déjà existantes dans le fichier (TRUE) u les effacer si le fichier existe déjà (FALSE, le défaut). Pur enregistrer des bjets, cette fis de n imprte quel type, n utilisera la cmmande save(x, y, z, file="xyz.rdata"). Pur faciliter l échange de fichiers entre machines et systèmes d explitatin, n peut utiliser l ptin ascii=true. Les dnnées (qui snt alrs nmmées wrkspace dans le jargn de 16
R) peuvent ultérieurement être chargées en mémire avec lad("xyz.rdata"). La fnctin save.image est un raccurci pur save(list=ls (all=true), file=".rdata"). 3.4 Générer des dnnées 3.4.1 Séquences régulières Une séquence régulière de nmbres entiers, par exemple de 1 à 30, peut être générée par : > x <- 1:30 On a ainsi un vecteur x avec 30 éléments. Cet pérateur : est priritaire sur les pératins arithmétiques au sein d une expressin : > 1:10-1 [1] 0 1 2 3 4 5 6 7 8 9 > 1:(10-1) [1] 1 2 3 4 5 6 7 8 9 La fnctin seq peut générer des séquences de nmbres réels de la manière suivante : > seq(1, 5, 0.5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 ù le premier nmbre indique le début de la séquence, le secnd la fin, et le trisième l incrément utilisé dans la prgressin de la séquence. On peut aussi utiliser : > seq(length=9, frm=1, t=5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 c : On peut aussi taper directement les valeurs désirées en utilisant la fnctin > c(1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 Il est aussi pssible si l n veut taper des dnnées au clavier d utiliser la fnctin scan avec tut simplement les ptins par défaut : > z <- scan() 1: 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 10: Read 9 items > z [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 17
La fnctin rep crée un vecteur qui aura tus ses éléments identiques : > rep(1, 30) [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 La fnctin sequence va créer une suite de séquences de nmbres entiers qui chacune se termine par les nmbres dnnés cmme arguments à cette fnctin : > sequence(4:5) [1] 1 2 3 4 1 2 3 4 5 > sequence(c(10,5)) [1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 La fnctin gl (generate levels) est très utile car elle génère des séries régulières dans un facteur. Cette fnctin s utilise ainsi gl(k, n) ù k est le nmbre de niveaux (u classes) du facteur, et n est le nmbre de réplicatins pur chaque niveau. Deux ptins peuvent être utilisées : length pur spécifier le nmbre de dnnées prduites, et labels pur indiquer les nms des niveaux du facteur. Exemples : > gl(3, 5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(3, 5, length=30) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 > gl(2, 6, label=c("male", "Female")) [1] Male Male Male Male Male Male [7] Female Female Female Female Female Female Levels: Male Female > gl(2, 10) [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 Levels: 1 2 > gl(2, 1, length=20) [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 Levels: 1 2 > gl(2, 2, length=20) [1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 Levels: 1 2 Enfin, expand.grid() sert à créer un tableau de dnnées avec tutes les cmbinaisns des vecteurs u facteurs dnnés cmme arguments : > expand.grid(h=c(60,80), w=c(100, 300), sex=c("male", "Female")) h w sex 1 60 100 Male 18
2 80 100 Male 3 60 300 Male 4 80 300 Male 5 60 100 Female 6 80 100 Female 7 60 300 Female 8 80 300 Female 3.4.2 Séquences aléatires Il est utile en statistique de puvir générer des dnnées aléatires, et R peut le faire pur un grand nmbre de fnctins de densité de prbabilité. Ces fnctins snt de la frme rfunc(n, p1, p2,...), ù func indique la li de prbabilité, n le nmbre de dnnées générées et p1, p2,... snt les valeurs des paramètres de la li. Le tableau suivant dnne les détails pur chaque li, et les éventuelles valeurs par défaut (si aucune valeur par défaut n est indiquée, c est que le paramètre dit être spécifié). li fnctin Gauss (nrmale) rnrm(n, mean=0, sd=1) expnentielle rexp(n, rate=1) gamma rgamma(n, shape, scale=1) Pissn rpis(n, lambda) Weibull rweibull(n, shape, scale=1) Cauchy rcauchy(n, lcatin=0, scale=1) beta rbeta(n, shape1, shape2) Student (t) rt(n, df) Fisher Snedecr (F ) rf(n, df1, df2) Pearsn (χ 2 ) rchisq(n, df) binmiale rbinm(n, size, prb) multinmiale rmultinm(n, size, prb) gémétrique rgem(n, prb) hypergémétrique rhyper(nn, m, n, k) lgistique rlgis(n, lcatin=0, scale=1) lgnrmale rlnrm(n, meanlg=0, sdlg=1) binmiale négative rnbinm(n, size, prb) unifrme runif(n, min=0, max=1) statistiques de Wilcxn rwilcx(nn, m, n), rsignrank(nn, n) La plupart de ces fnctins nt des cmpagnes btenues en remplaçant la lettre r par d, p u q pur btenir, dans l rdre, la densité de prbabilité (dfunc(x,...)), la densité de prbabilité cumulée (pfunc(x,...)), et la valeur de quantile (qfunc(p,...), avec 0 < p < 1). Les deux dernières séries de fnctins peuvent être utilisées pur truver les valeurs critiques u les valeurs de P de tests statistiques. Par exemple, les 19
valeurs critiques au seuil de 5% pur un test bilatéral suivant une li nrmale snt : > qnrm(0.025) [1] -1.959964 > qnrm(0.975) [1] 1.959964 Pur la versin unilatérale de ce test, qnrm(0.05) u 1 - qnrm(0.95) sera utilisé dépendant de la frme de l hypthèse alternative. La valeur de P d un test, disns χ 2 = 3.84 avec ddl = 1, est : > 1 - pchisq(3.84, 1) [1] 0.05004352 3.5 Manipuler les bjets 3.5.1 Créatin d bjets On a vu différentes façns de créer des bjets en utilisant l pérateur assigner ; le mde et le type de l bjet ainsi créé snt généralement déterminés de façn implicite. Il est pssible de créer un bjet en précisant de façn explicite sn mde, sa lngueur, sn type, etc. Cette apprche est intéressante dans l idée de manipuler les bjets. On peut, par exemple, créer un vecteur vide puis mdifier successivement ses éléments, ce qui est beaucup plus efficace que de rassembler ces éléments avec c(). On utilisera alrs l indexatin cmme n le verra plus lin (p. 28). Il peut être aussi extrêment pratique de créer des bjets à partir d autres bjets. Par exemple, si l n veut ajuster une série de mdèles, il sera cmmde de mettre les frmules crrespndantes dans une liste puis d extraire successivement chaque élément de celle-ci qui sera ensuite inséré dans la fnctin lm. À ce pint de ntre apprentissage de R, l intérêt d abrder les fnctinnalités qui suivent n est pas seulement pratique mais aussi didactique. La cnstructin explicite d bjets permet de mieux cmprendre leur structure et d apprfndir certaines ntins vues précédemment. Vecteur. La fnctin vectr, qui a deux arguments mde et length, va servir à créer un vecteur dnt la valeur des éléments sera fnctin du mde spécifié : 0 si numérique, FALSE si lgique, u "" si caractère. Les fnctins suivantes nt exactement le même effet et nt pur seul argument la lngueur du vecteur créé : numeric(), lgical(), et character(). Facteur. Un facteur inclue nn seulement les valeurs de la variable catégrique crrespndante mais aussi les différents niveaux pssibles de cette variable (même ceux qui ne snt pas représentés dans les dnnées). La fnctin factr crée un facteur avec les ptins suivantes : 20
factr(x, levels = srt(unique(x), na.last = TRUE), labels = levels, exclude = NA, rdered = is.rdered(x)) levels spécifie quels snt les niveaux pssibles du facteur (par défaut les valeurs uniques du vecteur x), labels définit les nms des niveaux, exclude les valeurs de x à ne pas inclure dans les niveaux, et rdered est un argument lgique spécifiant si les niveaux du facteur snt rdnnés. Rappelns que x est de mde numérique u caractère. En guise d exemples : > factr(1:3) [1] 1 2 3 Levels: 1 2 3 > factr(1:3, levels=1:5) [1] 1 2 3 Levels: 1 2 3 4 5 > factr(1:3, labels=c("a", "B", "C")) [1] A B C Levels: A B C > factr(1:5, exclude=4) [1] 1 2 3 NA 5 Levels: 1 2 3 5 La fnctin levels sert à extraire les niveaux pssibles d un facteur : > ff <- factr(c(2, 4), levels=2:5) > ff [1] 2 4 Levels: 2 3 4 5 > levels(ff) [1] "2" "3" "4" "5" Matrice. Une matrice est en fait un vecteur qui pssède un argument supplémentaire (dim) qui est lui-même un vecteur numérique de lngueur 2 et qui définit les nmbres de lignes et de clnnes de la matrice. Une matrice peut être créée avec la fnctin matrix : matrix(data = NA, nrw = 1, ncl = 1, byrw = FALSE, dimnames = NULL) L ptin byrw indique si les valeurs dnnées par data divent remplir successivement les clnnes (le défaut) u les lignes (si TRUE). L ptin dimnames permet de dnner des nms aux lignes et clnnes. > matrix(data=5, nr=2, nc=2) [,1] [,2] [1,] 5 5 [2,] 5 5 > matrix(1:6, 2, 3) [,1] [,2] [,3] 21
[1,] 1 3 5 [2,] 2 4 6 > matrix(1:6, 2, 3, byrw=true) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 Une autre façn de créer une matrice est de dnner les valeurs vulues à l attribut dim d un vecteur (attribut qui est initialement NULL) : > x <- 1:15 > x [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > dim(x) NULL > dim(x) <- c(5, 3) > x [,1] [,2] [,3] [1,] 1 6 11 [2,] 2 7 12 [3,] 3 8 13 [4,] 4 9 14 [5,] 5 10 15 Tableau de dnnées. On a vu qu un tableau de dnnées est créé de façn implicite par la fnctin read.table ; n peut également créer un tableau de dnnées avec la fnctin data.frame. Les vecteurs inclus dans le tableau divent être de même lngueur, u si un de ces éléments est plus curt il est alrs «recyclé» un nmbre entier de fis : > x <- 1:4; n <- 10; M <- c(10, 35); y <- 2:4 > data.frame(x, n) x n 1 1 10 2 2 10 3 3 10 4 4 10 > data.frame(x, M) x M 1 1 10 2 2 35 3 3 10 4 4 35 > data.frame(x, y) Errr in data.frame(x, y) : arguments imply differing number f rws: 4, 3 Si un facteur est inclus dans le tableau de dnnées, il dit être de même lngueur que le(s) vecteur(s). Il est pssible de changer les nms des 22
clnnes avec, par exemple, data.frame(a1=x, A2=n). On peut aussi dnner des nms aux lignes avec l ptin rw.names qui dit, bien sûr, être un vecteur de mde caractère et de lngueur égale au nmbre de lignes du tableau de dnnées. Enfin, ntns que les tableaux de dnnées nt un attribut dim de la même façn que les matrices. Liste. Une liste est créée de la même façn qu un tableau de dnnées avec la fnctin list. Il n y a aucune cntrainte sur les bjets qui y snt inclus. À la différence de data.frame(), les nms des bjets ne snt pas repris par défaut ; en reprenant les vecteurs x et y de l exemple précédant : > L1 <- list(x, y); L2 <- list(a=x, B=y) > L1 [[1]] [1] 1 2 3 4 [[2]] [1] 2 3 4 > L2 $A [1] 1 2 3 4 $B [1] 2 3 4 > names(l1) NULL > names(l2) [1] "A" "B" Série temprelle. La fnctin ts va créer un bjet de classe "ts" à partir d un vecteur (série temprelle simple) u d une matrice (série temprelle multiple), et des ptins qui caractérisent la série. Les ptins, avec les valeurs par défaut, snt : ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1, ts.eps = getoptin("ts.eps"), class, names) data start end frequency deltat un vecteur u une matrice le temps de la 1ère bservatin, sit un nmbre, u sit un vecteur de deux entiers (cf. les exemples ci-dessus) le temps de la dernière bservatin spécifié de la même façn que start nmbre d bservatins par unité de temps la fractin de la péride d échantillnnage entre bservatins successives (ex. 1/12 pur des dnnées mensuelles) ; seulement un de frequency u deltat dit être précisé 23
ts.eps class names tlérance pur la cmparaisn de séries. Les fréquences snt cnsidérées égales si leur différence est inférieure à ts.eps classe à dnner à l bjet ; le défaut est "ts" pur une série simple, et c("mts", "ts") pur une série multiple un vecteur de mde caractère avec les nms des séries individuelles dans le cas d une série multiple ; par défaut les nms des clnnes de data, u Series 1, Series 2, etc. Quelques exemples de créatin de séries temprelles avec ts : > ts(1:10, start = 1959) Time Series: Start = 1959 End = 1968 Frequency = 1 [1] 1 2 3 4 5 6 7 8 9 10 > ts(1:47, frequency = 12, start = c(1959, 2)) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nv Dec 1959 1 2 3 4 5 6 7 8 9 10 11 1960 12 13 14 15 16 17 18 19 20 21 22 23 1961 24 25 26 27 28 29 30 31 32 33 34 35 1962 36 37 38 39 40 41 42 43 44 45 46 47 > ts(1:10, frequency = 4, start = c(1959, 2)) Qtr1 Qtr2 Qtr3 Qtr4 1959 1 2 3 1960 4 5 6 7 1961 8 9 10 > ts(matrix(rpis(36, 5), 12, 3), start=c(1961, 1), frequency=12) Series 1 Series 2 Series 3 Jan 1961 8 5 4 Feb 1961 6 6 9 Mar 1961 2 3 3 Apr 1961 8 5 4 May 1961 4 9 3 Jun 1961 4 6 13 Jul 1961 4 2 6 Aug 1961 11 6 4 Sep 1961 6 5 7 Oct 1961 6 5 7 Nv 1961 5 5 7 Dec 1961 8 5 2 Expressin. Les bjets de mde expressin nt un rôle fndamental dans R. Une expressin est une suite de caractères qui nt un sens pur R. Tutes les cmmandes valides snt des expressins. Lrsque la cmmande est 24
tapée directement au clavier, elle est alrs évaluée par R qui l exécute si elle est valide. Dans bien des circnstances, il est utile de cnstruire une expressin sans l évaluer : c est le rôle de la fnctin expressin. On purra, bien sûr, évaluer l expressin ultérieurement avec eval(). > x <- 3; y <- 2.5; z <- 1 > exp1 <- expressin(x / (y + exp(z))) > exp1 expressin(x/(y + exp(z))) > eval(exp1) [1] 0.5749019 Les expressins servent aussi, entre autres, à inclure des équatins sur les graphiques (p. 44). Une expressin peut être créée à partir d une variable de mde caractère. Certaines fnctins utilisent des expressins en tant qu argument, par exemple D qui calcule des dérivées partielles : > D(exp1, "x") 1/(y + exp(z)) > D(exp1, "y") -x/(y + exp(z))^2 > D(exp1, "z") -x * exp(z)/(y + exp(z))^2 3.5.2 Cnversin d bjets Le lecteur aura sûrement réalisé que les différences entre certains bjets snt parfis minces ; il est dnc lgique de puvir cnvertir un bjet en un autre en changeant certains de ces attributs. Une telle cnversin sera effectuée avec une fnctin du genre as.smething. R (versin 2.1.0) cmprte, dans les packages base et utils, 98 de ces fnctins, aussi nus ne rentrerns pas dans les détails ici. Le résultat d une cnversin dépend bien sûr des attributs de l bjet cnverti. En général, la cnversin suit des règles intuitives. Pur les cnversins de mdes, le tableau suivant résume la situatin. 25
Cnversin en Fnctin Règles numérique as.numeric FALSE 0 TRUE 1 "1", "2",... 1, 2,... "A",... NA lgique as.lgical 0 FALSE autres nmbres TRUE "FALSE", "F" FALSE "TRUE", "T" TRUE autres caractères NA caractère as.character 1, 2,... "1", "2",... FALSE "FALSE" TRUE "TRUE" Il existe des fnctins pur cnvertir les types d bjets (as.matrix, as.ts, as.data.frame, as.expressin,...). Ces fnctins vnt agir sur des attributs autres que le mde pur la cnversin. Là encre les résultats snt généralement intuitifs. Une situatin fréquemment rencntrée est la cnversin de facteur en vecteur numérique. Dans ce cas, R cnvertit avec le cdage numérique des niveaux du facteur : > fac <- factr(c(1, 10)) > fac [1] 1 10 Levels: 1 10 > as.numeric(fac) [1] 1 2 Cela est lgique si l n cnsidère un facteur de mde caractère : > fac2 <- factr(c("male", "Female")) > fac2 [1] Male Female Levels: Female Male > as.numeric(fac2) [1] 2 1 Ntez que le résultat n est pas NA cmme n aurait pu s attendre d après le tableau ci-dessus. Pur cnvertir un facteur de mde numérique en cnservant les niveaux tels qu ils snt spécifiés, n cnvertira d abrd en caractère puis en numérique. > as.numeric(as.character(fac)) [1] 1 10 Cette prcédure est très utile si, dans un fichier, une variable numérique cntient (pur une raisn u une autre) également des valeurs nn-numériques. On a vu que read.table() dans ce genre de situatin va, par défaut, lire cette clnne cmme un facteur. 26
3.5.3 Les pérateurs Nus avns vu précédemment qu il y a tris principaux types d pérateurs dans R 10. En vici la liste. Opérateurs Arithmétique Cmparaisn Lgique + additin < inférieur à! x NON lgique - sustractin > supérieur à x & y ET lgique * multiplicatin <= inférieur u égal à x && y idem / divisin >= supérieur u égal à x y OU lgique ^ puissance == égal x y idem %% mdul!= différent xr(x, y) OU exclusif %/% divisin entière Les pérateurs arithmétiques u de cmparaisn agissent sur deux éléments (x + y, a < b). Les pérateurs arithmétiques agissent nn seulement sur les variables de mde numérique u cmplexe, mais aussi sur celles de mde lgique ; dans ce dernier cas, les valeurs lgiques snt cnverties en valeurs numériques. Les pérateurs de cmparaisn peuvent s appliquer à n imprte quel mde : ils returnent une u plusieurs valeurs lgiques. Les pérateurs lgiques s appliquent à un (!) u deux bjets de mde lgique et returnent une (u plusieurs) valeurs lgiques. Les pérateurs «ET» et «OU» existent sus deux frmes : la frme simple pére sur chaque élément des bjets et returne autant de valeurs lgiques que de cmparaisns effectuées ; la frme duble pére sur le premier élément des bjets. On utilisera l pérateur «ET» pur spécifier une inégalité du type 0 < x < 1 qui sera cdée ainsi : 0 < x & x < 1. L expressin 0 < x < 1 est valide mais ne dnnera pas le résultat escmpté : les deux pérateurs de cette expressin étant identiques, ils sernt exécutés successivement de la gauche vers la drite. L pératin 0 < x sera d abrd réalisée returnant une valeur lgique qui sera ensuite cmparée à 1 (TRUE u FALSE < 1) : dans ce cas la valeur lgique sera cnvertie implicitement en numérique (1 u 0 < 1). > x <- 0.5 > 0 < x < 1 [1] FALSE Les pérateurs de cmparaisn pèrent sur chaque élément des deux bjets qui snt cmparés (en recyclant éventuellement les valeurs si l un est plus curt), et returnent dnc un bjet de même taille. Pur effectuer une cmparaisn «glbale» de deux bjets, deux fnctins snt dispnibles : identical et all.equal. 10 Les caractères suivants snt en fait aussi des pérateurs pur R : $, @, [, [[, :,?, <-, <<-, =, ::. Un tableau des pérateurs décrivant les règles de pririté peut être truvé avec?syntax. 27
> x <- 1:3; y <- 1:3 > x == y [1] TRUE TRUE TRUE > identical(x, y) [1] TRUE > all.equal(x, y) [1] TRUE identical cmpare la représentatin interne des dnnées et returne TRUE si les bjets snt strictement identiques, sinn FALSE. all.equal cmpare «l égalité apprximative» des deux bjets, et returne TRUE u affiche un résumé des différences. Cette dernière fnctin prend en cmpte l apprximatin des calculs dans la cmparaisn des valeurs numériques. La cmparaisn de valeurs numériques sur un rdinateur est parfis surprenante! > 0.9 == (1-0.1) [1] TRUE > identical(0.9, 1-0.1) [1] TRUE > all.equal(0.9, 1-0.1) [1] TRUE > 0.9 == (1.1-0.2) [1] FALSE > identical(0.9, 1.1-0.2) [1] FALSE > all.equal(0.9, 1.1-0.2) [1] TRUE > all.equal(0.9, 1.1-0.2, tlerance = 1e-16) [1] "Mean relative difference: 1.233581e-16" 3.5.4 Accéder aux valeurs d un bjet : le système d indexatin L indexatin est un myen efficace et flexible d accéder de façn sélective aux éléments d un bjet ; elle peut être numérique u lgique. Pur accéder à, par exemple, la 3ème valeur d un vecteur x, n tape x[3] qui peut être utilisé aussi bien pur extraire u changer cette valeur : > x <- 1:5 > x[3] [1] 3 > x[3] <- 20 > x [1] 1 2 20 4 5 L indice lui-même peut être un vecteur de mde numérique : > i <- c(1, 3) 28
> x[i] [1] 1 20 Si x est une matrice u un tableau de dnnées, n accédera à la valeur de la ième ligne et jème clnne par x[i, j]. Pur accéder à tutes les valeurs d une ligne u d une clnne dnnée, il suffit simplement d mettre l indice apprprié (sans ublier la virgule!) : > x <- matrix(1:6, 2, 3) > x [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > x[, 3] <- 21:22 > x [,1] [,2] [,3] [1,] 1 3 21 [2,] 2 4 22 > x[, 3] [1] 21 22 Vus avez certainement nté que le dernier résultat est un vecteur et nn une matrice. Par défaut, R returne un bjet de la plus petite dimensin pssible. Ceci peut être mdifié avec l ptin drp dnt le défaut est TRUE : > x[, 3, drp = FALSE] [,1] [1,] 21 [2,] 22 Ce système d indexatin se généralise facilement pur les tableaux, n aura alrs autant d indices que le tableau a de dimensins (par exemple pur une tableau à tris dimensins : x[i, j, k], x[,, 3],x[,, 3, drp = FALSE], etc). Il peut être utile de se suvenir que l indexatin se fait à l aide de crchets, les parenthèses étant réservées pur les arguments d une fnctin : > x(1) Errr: culdn t find functin "x" L indexatin peut aussi être utilisée pur supprimer une u plusieurs lignes u clnnes en utilisant des valeurs négatives. Par exemple, x[-1, ] supprimera la 1ère ligne, u x[-c(1, 15), ] fera de même avec les 1ère et 15ème lignes. En utilisant la matrice définies ci-dessus : > x[, -1] [,1] [,2] [1,] 3 21 29
[2,] 4 22 > x[, -(1:2)] [1] 21 22 > x[, -(1:2), drp = FALSE] [,1] [1,] 21 [2,] 22 Pur les vecteurs, matrices et tableaux il est pssible d accéder aux valeurs de ces éléments à l aide d une expressin de cmparaisn en guise d indice : > x <- 1:10 > x[x >= 5] <- 20 > x [1] 1 2 3 4 20 20 20 20 20 20 > x[x == 1] <- 25 > x [1] 25 2 3 4 20 20 20 20 20 20 Une utilisatin pratique de cette indexatin lgique est, par exemple, la pssibilité de sélectinner les éléments pairs d une variable entière : > x <- rpis(40, lambda=5) > x [1] 5 9 4 7 7 6 4 5 11 3 5 7 1 5 3 9 2 2 5 2 [21] 4 6 6 5 4 5 3 4 3 3 3 7 7 3 8 1 4 2 1 4 > x[x %% 2 == 0] [1] 4 6 4 2 2 2 4 6 6 4 4 8 4 2 4 Ce système d indexatin utilise dnc des valeurs lgiques returnées dans ce cas par les pérateurs de cmparaisn. Ces valeurs lgiques peuvent être calculées au préalable, elles sernt éventuellement recyclées : > x <- 1:40 > s <- c(false, TRUE) > x[s] [1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 L indexatin lgique peut également être utilisée avec des tableaux de dnnées, mais avec la difficulté que les différentes clnnes peuvent être de mdes différents. Pur les listes, l accès aux différents éléments (qui peuvent être n imprte quel bjet) se fait avec des crchets simples u dubles : la différence étant qu avec les crchets simples une liste est returnée, alrs qu avec les crchets dubles extraient l bjet de la liste. Par exemple, si le 3ème élément d une liste est un vecteur, le ième élément de ce vecteur peut être accédé avec my.list[[3]][i], u bien avec my.list[[3]][i, j, k] s il s agit d un tableau à tris dimensins, etc. Une autre différence est que my.list[1:2] returnera une liste avec le premier et le secnd élément de la liste riginale, alrs que my.list[[1:2]] ne dnnera pas le résultat escmpté. 30
3.5.5 Accéder aux valeurs d un bjet avec les nms Les nms snt les étiquettes des éléments d un bjet, et snt dnc de mde caractère. Ce snt généralement des attributs ptinnels ; il en existe plusieurs srtes (names, clnames, rwnames, dimnames). Les nms d un vecteur snt stckés dans un vecteur de même lngueur, et peuvent accédés avec la fnctin names. > x <- 1:3 > names(x) NULL > names(x) <- c("a", "b", "c") > x a b c 1 2 3 > names(x) [1] "a" "b" "c" > names(x) <- NULL > x [1] 1 2 3 Pur les matrices et les tableaux de dnnées, clnames and rwnames snt les étiquettes des lignes et des clnnes. Elles peuvent être accédées avec leurs fnctins respectives, u avec dimnames qui returne une liste avec les deux vecteurs. > X <- matrix(1:4, 2) > rwnames(x) <- c("a", "b") > clnames(x) <- c("c", "d") > X c d a 1 3 b 2 4 > dimnames(x) [[1]] [1] "a" "b" [[2]] [1] "c" "d" Pur les tableaux, les nms des dimensins peuvent être accédés avec dimnames. > A <- array(1:8, dim = c(2, 2, 2)) > A,, 1 31
[,1] [,2] [1,] 1 3 [2,] 2 4,, 2 [,1] [,2] [1,] 5 7 [2,] 6 8 > dimnames(a) <- list(c("a", "b"), c("c", "d"), c("e", "f")) > A,, e c d a 1 3 b 2 4,, f c d a 5 7 b 6 8 Si les éléments d un bjet nt des nms, ils peuvent être extraits en les utilisant en guise d indices. En fait, cela dit être appelè subdivisin (subsetting) plutôt qu extractin car les attributs de l bjet d rigine snt cnservés. Par exemple, si un tableau de dnnées DF cmprte les variables x, y, et z, la cmmande DF["x"] dnnera un tableau de dnnées avec juste x ; DF[c("x", "y")] dnnera un tableau de dnnées avec les deux variables crrespndantes. Ce système marche aussi avec une liste si ses éléments nt des nms. Cmme n le cnstate, l index ainsi utilisé est un vecteur de mde caractère. Cmme pur les vecteurs lgiques u numériques vus précédemment, ce vecteur peut être établi au préalable et ensuite inséré pur l extractin. Pur extraire un vecteur u un facteur d un tableau de dnnées n utilisera l pérateur $ (par exemple DF$x). Cela marche également avec les listes. 3.5.6 L éditeur de dnnées Il est pssible d utiliser un éditeur graphique de style tableur pur éditer un bjet cntenant des dnnées. Par exemple, si n a une matrice X, la cmmande data.entry(x) uvrira l éditeur graphique et l n purra mdifier les valeurs en cliquant sur les cases crrespndantes u encre ajuter des clnnes u des lignes. La fnctin data.entry mdifie directement l bjet passé en argument sans avir à assigner sn résultat. Par cntre la fnctin de returne une 32
liste cmpsée des bjets passés en arguments et éventuellement mdifiés. Ce résultat est affiché à l écran par défaut mais, cmme pur la plupart des fnctins, peut être assigné dans un bjet. Les détails de l utilisatin de cet éditeur de dnnées dépendent du système d explitatin. 3.5.7 Calcul arithmétique et fnctins simples Il existe de nmbreuses fnctins dans R pur manipuler les dnnées. La plus simple, n l a vue plus haut, est c qui cncatène les bjets énumérés entre parenthèses. Par exemple : > c(1:5, seq(10, 11, 0.2)) [1] 1.0 2.0 3.0 4.0 5.0 10.0 10.2 10.4 10.6 10.8 11.0 Les vecteurs peuvent être manipulés seln des expressins arithmétiques classiques : > x <- 1:4 > y <- rep(1, 4) > z <- x + y > z [1] 2 3 4 5 Des vecteurs de lngueurs différentes peuvent être additinnés, dans ce cas le vecteur le plus curt est recyclé. Exemples : > x <- 1:4 > y <- 1:2 > z <- x + y > z [1] 2 4 4 6 > x <- 1:3 > y <- 1:2 > z <- x + y Warning message: lnger bject length is nt a multiple f shrter bject length in: x + y > z [1] 2 4 4 On ntera que R a returné un message d avertissement et nn pas un message d erreur, l pératin a dnc été effectuée. Si l n veut ajuter (u multiplier) la même valeur à tus les éléments d un vecteur : > x <- 1:4 > a <- 10 33
> z <- a * x > z [1] 10 20 30 40 Les fnctins dispnibles dans R pur les manipulatins de dnnées snt trp nmbeuses pur être énumérées ici. On truve tutes les fnctins mathématiques de base (lg, exp, lg10, lg2, sin, cs, tan, asin, acs, atan, abs, sqrt,...), des fnctins spéciales (gamma, digamma, beta, besseli,...), ainsi que diverses fnctins utiles en statistiques. Quelques-unes snt indiquées dans le tableau qui suit. sum(x) prd(x) max(x) min(x) which.max(x) which.min(x) range(x) length(x) mean(x) median(x) var(x) u cv(x) cr(x) var(x, y) u cv(x, y) cr(x, y) smme des éléments de x prduit des éléments de x maximum des éléments de x minimum des éléments de x returne l indice du maximum des éléments de x returne l indice du minimum des éléments de x idem que c(min(x), max(x)) nmbre d éléments dans x myenne des éléments de x médiane des éléments de x variance des éléments de x (calculée sur n 1) ; si x est une matrice u un tableau de dnnées, la matrice de variancecvariance est calculée matrice de crrélatin si x est une matrice u un tableau de dnnées (1 si x est un vecteur) cvariance entre x et y, u entre les clnnes de x et de y si ce snt des matrices u des tableaux de dnnées crrélatin linéaire entre x et y, u matrice de crrélatins si ce snt des matrices u des tableaux de dnnées Ces fnctins returnent une valeur simple (dnc un vecteur de lngueur 1), sauf range qui returne un vecteur de lngueur 2, et var, cv et cr qui peuvent returner une matrice. Les fnctins suivantes returnent des résultats plus cmplexes. rund(x, n) arrndit les éléments de x à n chiffres après la virgule rev(x) inverse l rdre des éléments de x srt(x) trie les éléments de x dans l rdre ascendant ; pur trier dans l rdre descendant : rev(srt(x)) rank(x) rangs des éléments de x lg(x, base) calcule le lgarithme à base base de x scale(x) si x est une matrice, centre et réduit les dnnées ; pur centrer uniquement ajuter l ptin center=false, pur réduire uniquement scale=false (par défaut center=true, scale=true) pmin(x,y,...) un vecteur dnt le ième élément est le minimum entre x[i], y[i],... 34
pmax(x,y,...) idem pur le maximum cumsum(x) un vecteur dnt le ième élément est la smme de x[1] à x[i] cumprd(x) idem pur le prduit cummin(x) idem pur le minimum cummax(x) idem pur le maximum match(x, y) returne un vecteur de même lngueur que x cntenant les éléments de x qui snt dans y (NA sinn) which(x == a) returne un vecteur des indices de x pur lesquels l pératin de cmparaisn est vraie (TRUE), dans cet exemple les valeurs de i telles que x[i] == a (l argument de cette fnctin dit être une variable de mde lgique) chse(n, k) calcule les cmbinaisns de k événements parmi n répétitins = n!/[(n k)!k!] na.mit(x) supprime les bservatins avec dnnées manquantes (NA) (supprime la ligne crrespndante si x est une matrice u un tableau de dnnées) na.fail(x) returne un message d erreur si x cntient au mins un NA unique(x) si x est un vecteur u un tableau de dnnées, returne un bjet similaire mais avec les éléments dupliqués supprimés table(x) returne un tableau des effectifs des différentes valeurs de x (typiquement pur des entiers u des facteurs) table(x, y) tableau de cntingence de x et y subset(x,...) returne une sélectin de x en fnctin de critères (..., typiquement des cmparaisns : x$v1 < 10) ; si x est un tableau de dnnées, l ptin select permet de préciser les variables à sélectinner (u à éliminer à l aide du signe mins) sample(x, size) ré-échantillnne aléatirement et sans remise size éléments dans le vecteur x, pur ré-échantillnner avec remise n ajute l ptin replace = TRUE 3.5.8 Calcul matriciel R ffre des facilités pur le calcul et la manipulatin de matrices. Les fnctins rbind et cbind juxtapsent des matrices en cnservant les lignes u les clnnes, respectivement : > m1 <- matrix(1, nr = 2, nc = 2) > m2 <- matrix(2, nr = 2, nc = 2) > rbind(m1, m2) [,1] [,2] [1,] 1 1 [2,] 1 1 [3,] 2 2 [4,] 2 2 > cbind(m1, m2) [,1] [,2] [,3] [,4] [1,] 1 1 2 2 [2,] 1 1 2 2 35
L pérateur pur le prduit de deux matrices est %*%. Par exemple, en reprenant les deux matrices m1 et m2 ci-dessus : > rbind(m1, m2) %*% cbind(m1, m2) [,1] [,2] [,3] [,4] [1,] 2 2 4 4 [2,] 2 2 4 4 [3,] 4 4 8 8 [4,] 4 4 8 8 > cbind(m1, m2) %*% rbind(m1, m2) [,1] [,2] [1,] 10 10 [2,] 10 10 La transpsitin d une matrice se fait avec la fnctin t ; cette fnctin marche aussi avec un tableau de dnnées. La fnctin diag sert à extraire, mdifier la diagnale d une matrice, u encre à cnstruire une matrice diagnale. > diag(m1) [1] 1 1 > diag(rbind(m1, m2) %*% cbind(m1, m2)) [1] 2 2 8 8 > diag(m1) <- 10 > m1 [,1] [,2] [1,] 10 1 [2,] 1 10 > diag(3) [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 > v <- c(10, 20, 30) > diag(v) [,1] [,2] [,3] [1,] 10 0 0 [2,] 0 20 0 [3,] 0 0 30 > diag(2.1, nr = 3, nc = 5) [,1] [,2] [,3] [,4] [,5] [1,] 2.1 0.0 0.0 0 0 [2,] 0.0 2.1 0.0 0 0 [3,] 0.0 0.0 2.1 0 0 R a également des fnctins spéciales pur le calcul matriciel. Citns slve pur l inversin d une matrice, qr pur la décmpsitin, eigen pur le cal- 36
cul des valeurs et vecteurs prpres, et svd pur la décmpsitin en valeurs singulières. 37
4 Les graphiques avec R R ffre une variété de graphiques remarquable. Pur avir une petite idée des pssibilités ffertes, il suffit de taper la cmmande dem(graphics) u dem(persp). Il n est pas pssible ici de détailler tutes les pssibilités ainsi ffertes, en particulier chaque fnctin graphique a beaucup d ptins qui rendent la prductin de graphiques extrêment flexible. Le fnctinnement des fnctins graphiques dévie substantiellement du schéma dressé au début de ce dcument. Ntamment, le résultat d une fnctin graphique ne peut pas être assigné à un bjet 11 mais est envyé à un périphérique graphique (graphical device). Un périphérique graphique est matérialisé par une fenêtre graphique u un fichier. Il existe deux srtes de fnctins graphiques : principales qui créent un nuveau graphe, et secndaires qui ajutent des éléments à un graphe déjà existant. Les graphes snt prduits en fnctin de paramètres graphiques qui snt définis par défaut et peuvent être mdifiés avec la fnctin par. Nus allns dans un premier temps vir cmment gérer les graphiques, ensuite nus détaillerns les fnctins et paramètres graphiques. Nus verrns un exemple cncret de l utilisatin de ces fnctinnalités pur la prductin de graphes. Enfin, nus verrns les packages grid et lattice dnt le fnctinnement est différent de celui résumé ci-dessus. 4.1 Gestin des graphiques 4.1.1 Ouvrir plusieurs dispsitifs graphiques Lrsqu une fnctin graphique est exécutée, si aucun périphérique graphique n est alrs uvert, R uvrira une fenêtre graphique et y affichera le graphe. Un périphérique graphique peut être uvert avec une fnctin apprpriée. La liste des périphériques graphiques dispnibles dépend du système d explitatin. Les fenêtres graphiques snt nmmées X11 sus Unix/Linux et windws sus Windws. Dans tus les cas, n peut uvrir une fenêtre avec la cmmande x11() qui marche même sus Windws grâce à un alias vers la cmmande windws(). Un périphérique graphique de type fichier sera uvert avec une fnctin qui dépend du frmat : pstscript(), pdf(), png(),... Pur cnnaître la liste des périphériques dispnibles pur vtre installatin, tapez?device. Le dernier périphérique uvert devient le périphérique graphique actif sur lequel sernt affichés les graphes suivants. La fnctin dev.list() affiche la liste des périphériques uverts : 11 Il y a quelques exceptins ntables : hist() et barplt() prduisent également des résultats numériques sus frme de liste u de matrice. 38
> x11(); x11(); pdf() > dev.list() X11 X11 pdf 2 3 4 Les chiffres qui s affichent crrespndent aux numérs des périphériques qui divent être utilisés si l n veut changer le périphérique actif. Pur cnnaître le périphérique actif : > dev.cur() pdf 4 et pur changer le périphérique actif : > dev.set(3) X11 3 La fnctin dev.ff() ferme un périphérique graphique : par défaut le périphérique actif est fermé sinn c est celui dnt le numér est dnné cmme argument à la fnctin. R affiche le numér du périphérique actif : > dev.ff(2) X11 3 > dev.ff() pdf 4 Deux spécificités de la versin Windws de R snt à signaler : la fnctin win.metafile qui accède à un fichier au frmat Windws Metafile, et un menu «Histry» affiché lrsque la fenêtre graphique est sélectinnée qui permet d enregistrer tus les graphes prduits au curs d une sessin (par défaut l enregistrement n est pas activé, l utilisateur l active en cliquant sur «Enregistrer» dans ce menu). 4.1.2 Partitinner un graphique La fnctin split.screen partitinne le graphique actif. Par exemple : > split.screen(c(1, 2)) va diviser le graphique en deux parties qu n sélectinnera avec screen(1) u screen(2) ; erase.screen() efface le graphe dernièrement dessiné. Une partie peut être elle-même divisée avec split.screen() dnnant la pssibilité de faire des arrangements cmplexes. Ces fnctins snt incmpatibles avec d autres (tel layut u cplt) et ne divent pas être utilisées avec des périphériques graphiques multiples. Leur 39
utilisatin dit dnc être limitée par exemple pur l explratin visuelle de dnnées. La fnctin layut partitinne le graphique actif en plusieurs parties sur lesquelles snt affichés les graphes successivement ; sn argument principal est une matrice avec des valeurs entières qui indiquent les numérs des susfenêtres. Par exemple, si l n veut diviser la fenêtre en quatre parties égales : > layut(matrix(1:4, 2, 2)) On purra bien sûr créer cette matrice au préalable ce qui permettra de mieux vir cmment est divisé le graphique : > mat <- matrix(1:4, 2, 2) > mat [,1] [,2] [1,] 1 3 [2,] 2 4 > layut(mat) Pur visualiser cncrètement la partitin créée, n utilisera la fnctin layut.shw avec en argument le nmbre de sus-fenêtres (ici 4). Avec cet exemple n aura : > layut.shw(4) 1 2 3 4 Les exemples qui suivent mntrent certaines des pssibilités ainsi ffertes. > layut(matrix(1:6, 3, 2)) > layut.shw(6) 1 2 4 5 3 6 > layut(matrix(1:6, 2, 3)) > layut.shw(6) 1 3 5 2 4 6 40
> m <- matrix(c(1:3, 3), 2, 2) > layut(m) > layut.shw(3) 1 2 3 Dans tus ces exemples, nus n avns pas utilisé l ptin byrw de matrix, les sus-fenêtres snt dnc numértées par clnne ; il suffit bien sûr de spécifier matrix(..., byrw = TRUE) pur que les sus-fenêtres sient numértées par ligne. On peut aussi dnner les numérs dans la matrice dans l rdre que l n veut avec, par exemple, matrix(c(2, 1, 4, 3), 2, 2). Par défaut, layut() va partitinner le graphique avec des hauteurs et largeurs régulières : ceci peut être mdifié avec les ptins widths et heights. Ces dimensins snt dnnées relativement 12. Exemples : > m <- matrix(1:4, 2, 2) > layut(m, widths=c(1, 3), heights=c(3, 1)) > layut.shw(4) 1 2 3 4 > m <- matrix(c(1,1,2,1),2,2) > layut(m, widths=c(2, 1), heights=c(1, 2)) > layut.shw(2) 1 2 Enfin, les numérs dans la matrice peuvent inclure des 0 dnnant la pssibilité de cnstruire des partitins cmplexes (vire éstériques). > m <- matrix(0:3, 2, 2) > layut(m, c(1, 3), c(1, 3)) > layut.shw(3) 1 2 3 12 Elles peuvent aussi être dnnées en centimètres, cf.?layut. 41
> m <- matrix(scan(), 5, 5) 1: 0 0 3 3 3 1 1 3 3 3 11: 0 0 3 3 3 0 2 2 0 5 21: 4 2 2 0 5 26: Read 25 items > layut(m) > layut.shw(5) 1 3 2 5 4 4.2 Les fnctins graphiques Vici un aperçu des fnctins graphiques principales de R. plt(x) graphe des valeurs de x (sur l axe des y) rdnnées sur l axe des x plt(x, y) graphe bivarié de x (sur l axe des x) et y (sur l axe des y) sunflwerplt(x, y) pie(x) bxplt(x) stripchart(x) cplt(x~y z) interactin.plt (f1, f2, y) matplt(x,y) dtchart(x) furfldplt(x) asscplt(x) msaicplt(x) pairs(x) plt.ts(x) idem que plt() mais les pints superpsés snt dessinés en frme de fleurs dnt le nmbre de pétales représente le nmbre de pints graphe en camembert graphe bites et mustaches graphe des valeurs de x sur une ligne (une alternative à bxplt() pur des petits échantillns) graphe bivarié de x et y pur chaque valeur (u intervalle de valeurs) de z si f1 et f2 snt des facteurs, graphe des myennes de y (sur l axe des y) en fnctin des valeurs de f1 (sur l axe des x) et de f2 (différentes curbes) ; l ptin fun permet de chisir la statistique résumée de y (par défaut fun=mean) graphe bivarié de la 1ère clnne de x cntre la 1ère de y, la 2ème de x cntre la 2ème de y, etc. si x est un tableau de dnnées, dessine un graphe de Cleveland (graphes superpsés ligne par ligne et clnne par clnne) visualise, avec des quarts de cercles, l assciatin entre deux variables dichtmiques pur différentes ppulatins (x dit être un tableau avec dim=c(2, 2, k) u une matrice avec dim=c(2, 2) si k = 1) graphe de Chen Friendly indiquant les déviatins de l hypthèse d indépendance des lignes et des clnnes dans un tableau de cntingence à deux dimensins graphe en msaïque des résidus d une régressin lg-linéaire sur une table de cntingence si x est une matrice u un tableau de dnnées, dessine tus les graphes bivariés entre les clnnes de x si x est un bjet de classe "ts", graphe de x en fnctin du temps, x peut être multivarié mais les séries divent avir les mêmes fréquence et dates 42
ts.plt(x) hist(x) barplt(x) qqnrm(x) qqplt(x, y) cntur(x, y, z) filled.cntur (x, y, z) image(x, y, z) persp(x, y, z) stars(x) symbls(x, y,...) termplt(md.bj) idem mais si x est multivarié les séries peuvent avir des dates différentes et divent avir la même fréquence histgramme des fréquences de x histgramme des valeurs de x quantiles de x en fnctin des valeurs attendues seln une li nrmale quantiles de y en fnctin des quantiles de x curbes de niveau (les dnnées snt interplées pur tracer les curbes), x et y divent être des vecteurs et z une matrice telle que dim(z)=c(length(x), length(y)) (x et y peuvent être mis) idem mais les aires entre les cnturs snt clrées, et une légende des culeurs est également dessinée idem mais les dnnées snt représentées avec des culeurs idem mais en perspective si x est une matrice u un tableau de dnnées, dessine un graphe en segments u en étile ù chaque ligne de x est représentée par une étile et les clnnes par les lngueurs des branches dessine aux crdnnées dnnées par x et y des symbles (cercles, carrés, rectangles, étiles, thermmètres u «bxplts») dnt les tailles, culeurs, etc, snt spécifiées par des arguments supplémentaires graphe des effets (partiels) d un mdèle de régressin (md.bj) Pur chaque fnctin, les ptins peuvent être truvées via l aide-en-ligne de R. Certaines de ces ptins snt identiques pur plusieurs fnctins graphiques ; vici les principales (avec leurs éventuelles valeurs par défaut) : add=false si TRUE superpse le graphe au graphe existant (s il y en a un) axes=true si FALSE ne trace pas les axes ni le cadre type="p" le type de graphe qui sera dessiné, "p" : pints, "l" : lignes, "b" : pints cnnectés par des lignes, "" : idem mais les lignes recuvrent les pints, "h" : lignes verticales, "s" : escaliers, les dnnées étant représentées par le smmet des lignes verticales, "S" : idem mais les dnnées étant représentées par le bas des lignes verticales xlim=, ylim= fixe les limites inférieures et supérieures des axes, par exemple avec xlim=c(1, 10) u xlim=range(x) xlab=, ylab= anntatins des axes, divent être des variables de mde caractère main= titre principal, dit être une variable de mde caractère sub= sus-titre (écrit dans une plice plus petite) 4.3 Les fnctins graphiques secndaires Il y a dans R un ensemble de fnctins graphiques qui nt une actin sur un graphe déjà existant (ces fnctins snt appelées lw-level pltting cmmands 43
dans le jargn de R, alrs que les fnctins précédentes snt nmmées highlevel pltting cmmands). Vici les principales : pints(x, y) lines(x, y) text(x, y, labels,...) mtext(text, side=3, line=0,...) segments(x0, y0, x1, y1) arrws(x0, y0, x1, y1, angle=30, cde=2) abline(a,b) abline(h=y) abline(v=x) ajute des pints (l ptin type= peut être utilisée) idem mais avec des lignes ajute le texte spécifié par labels au crdnnées (x,y) ; un usage typique sera : plt(x, y, type="n") ; text(x, y, names) ajute le texte spécifié par text dans la marge spécifiée par side (cf. axis() plus bas) ; line spécifie la ligne à partir du cadre de traçage trace des lignes des pints (x0,y0) aux pints (x1,y1) idem avec des flèches aux pints (x0,y0) si cde=2, aux pints (x1,y1) si cde=1, u aux deux si cde=3 ; angle cntrôle l angle de la pinte par rapprt à l axe trace une ligne de pente b et rdnnée à l rigine a trace une ligne hrizntale sur l rdnnée y trace une ligne verticale sur l abcisse x abline(lm.bj) trace la drite de régressin dnnée par lm.bj (cf. sectin 5) rect(x1, y1, x2, trace un rectangle délimité à gauche par x1, à drite par x2, en y2) bas par y1 et en haut par y2 plygn(x, y) trace un plygne reliant les pints dnt les crdnnées snt dnnées par x et y legend(x, y, ajute la légende au pint de crdnnées (x,y) avec les symbles legend) dnnés par legend title() ajute un titre et ptinnellement un sus-titre axis(side, vect) ajute un axe en bas (side=1), à gauche (2), en haut (3) u à drite (4) ; vect (ptinnel) indique les abcisses (u rdnnées) ù les graduatins sernt tracées bx() ajute un cadre autur du graphe rug(x) dessine les dnnées x sur l axe des x sus frme de petits traits verticaux lcatr(n, returne les crdnnées (x, y) après que l utilisateur ait cliqué type="n",...) n fis sur le graphe avec la suris ; également trace des symbles (type="p") u des lignes (type="l") en fnctin de paramètres graphiques ptinnels (...) ; par défaut ne trace rien (type="n") À nter la pssibilité d ajuter des expressins mathématiques sur un graphe à l aide de text(x, y, expressin(...)), ù la fnctin expressin transfrme sn argument en équatin mathématique. Par exemple, > text(x, y, expressin(p == ver(1, 1+e^-(beta*x+alpha)))) va afficher, sur le graphe, l équatin suivante au pint de crdnnées (x, y) : 1 p = 1 + e (βx+α) Pur inclure dans une expressin une variable numérique n utilisera les fnctins substitute et as.expressin; par exemple pur inclure une valeur de R 2 (précédemment calculée et stckée dans un bjet nmmé Rsquared) : 44
> text(x, y, as.expressin(substitute(r^2==r, list(r=rsquared)))) qui affichera sur le graphe au pint de crdnnées (x, y) : R 2 = 0.9856298 Pur ne cnserver que tris chiffres après la virgule n mdifiera le cde cmme suit : > text(x, y, as.expressin(substitute(r^2==r, + list(r=rund(rsquared, 3))))) qui affichera : R 2 = 0.986 Enfin, pur btenir le R en italique : > text(x, y, as.expressin(substitute(italic(r)^2==r, + list(r=rund(rsquared, 3))))) R 2 = 0.986 4.4 Les paramètres graphiques En plus des fnctins graphiques secndaires, la présentatin des graphiques peut être amélirée grâce aux paramètres graphiques. Ceux-ci s utilisent sit cmme des ptins des fnctins graphiques principales u secndaires (mais cela ne marche pas pur tus), sit à l aide de la fnctin par qui permet d enregistrer les changements des paramètres graphiques de façn permanente, c est-à-dire que les graphes suivants sernt dessinés en fnctin des nuveaux paramètres spécifiés par l utilisateur. Par exemple, l instructin suivante : > par(bg="yellw") résultera en un fnd jaune pur tus les graphes. Il y a 73 paramètres graphiques, dnt certains nt des rôles prches. La liste détaillée peut être btenue avec?par ; je me limite ici à ceux qui snt les plus curamment utilisés. adj cntrôle la justificatin du texte par rapprt au brd gauche du texte : 0 à gauche, 0.5 centré, 1 à drite, les valeurs > 1 déplacent le texte vers la gauche, et les valeurs négatives vers la drite ; si deux valeurs dnt dnnées (ex. c(0, 0)) la secnde cntrôle la justificatin verticale par rapprt à la ligne de base du texte bg spécifie la culeur de l arrière-plan (ex. bg="red", bg="blue" ; la liste des 657 culeurs dispnibles est affichée avec clrs()) 45
bty cntrôle cmment le cadre est tracé, valeurs permises : "", "l", "7", "c", "u" u "]" (le cadre ressemblant au caractère crrespndant) ; bty="n" supprime le cadre cex une valeur qui cntrôle la taille des caractères et des symbles par rapprt au défaut ; les paramètres suivants nt le même cntrôle pur les nmbres sur les axes, cex.axis, les anntatins des axes, cex.lab, le titre, cex.main, le sus-titre, cex.sub cl cntrôle la culeur des symbles ; cmme pur cex il y a : cl.axis, cl.lab, cl.main, cl.sub fnt un entier qui cntrôle le style du texte (1 : nrmal, 2 : italique, 3 : gras, 4 : gras italique) ; cmme pur cex il y a : fnt.axis, fnt.lab, fnt.main, fnt.sub las un entier qui cntrôle cmment snt dispsées les anntatins des axes (0 : parallèles aux axes, 1 : hrizntales, 2 : perpendiculaires aux axes, 3 : verticales) lty cntrôle le type de ligne tracée, peut être un entier (1 : cntinue, 2 : tirets, 3 : pints, 4 : pints et tirets alternés, 5 : tirets lngs, 6 : tirets curts et lngs alternés), u un ensemble de 8 caractères maximum (entre "0" et "9") qui spécifie alternativement la lngueur, en pints u pixels, des éléments tracés et des blancs, par exemple lty="44" aura le même effet que lty=2 lwd une valeur numérique qui cntrôle la largeur des lignes mar un vecteur de 4 valeurs numériques qui cntrôle l espace entre les axes et le brd de la figure de la frme c(bas, gauche, haut, drit), les valeurs par défaut snt c(5.1, 4.1, 4.1, 2.1) mfcl un vecteur de frme c(nr,nc) qui partitinne la fenêtre graphique en une matrice de nr lignes et nc clnnes, les graphes snt ensuite dessinés en clnne (cf. sectin 4.1.2) mfrw idem mais les graphes snt ensuite dessinés en ligne (cf. sectin 4.1.2) pch cntrôle le type de symble, sit un entier entre 1 et 25, sit n imprte quel caractère entre guillements (Fig. 2) ps un entier qui cntrôle la taille en pints du texte et des symbles pty un caractère qui spécifie la frme du graphe, "s" : carrée, "m" : maximale tck une valeur qui spécifie la lngueur des graduatins sur les axes en fractin du plus petit de la largeur u de la hauteur du graphe ; si tck=1 une grille est tracée tcl idem mais en fractin de la hauteur d une ligne de texte (défaut tcl=-0.5) xaxt si xaxt="n" l axe des x est défini mais pas tracé (utile avec axis(side=1,...)) yaxt si yaxt="n" l axe des y est défini mais pas tracé (utile avec axis(side=2,...)) 4.5 Un exemple cncret Afin d illustrer l utilisatin des fnctinnalités graphiques de R, cnsidérns un cas cncret et simple d un graphe bivarié de 10 paires de valeurs aléatires. Ces valeurs nt été générées avec : > x <- rnrm(10) > y <- rnrm(10) Le graphe vulu sera btenu avec plt() ; n tapera la cmmande : 46
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 "*" "?" "." "X" "a" *? X a Fig. 2 Les symbles pur tracer des pints avec R (pch=1:25). Les culeurs nt été btenues avec les ptins cl="blue", bg="yellw", la secnde ptin n a un effet que pur les symbles 21 à 25. N imprte quel caractère peut être utilisé (pch="*", "?", ".",...). y 1.0 0.5 0.0 0.5 0.5 0.0 0.5 1.0 x Fig. 3 La fnctin plt utilisée sans ptins. 47
> plt(x, y) et le graphique sera dessiné sur le périphérique actif. Le résultat est représenté Fig. 3. Par défaut, R dessine les graphiques de façn «intelligente» : l espacement entre les graduatins sur les axes, la dispsitin des anntatins, etc, snt calculés afin que le graphique btenu sit le plus intelligible pssible. L utilisateur peut tutefis vulir changer l allure du graphe, par exemple, pur cnfrmer ses figures avec un style éditrial prédéfini u les persnnaliser pur un séminaire. La façn la plus simple de changer la présentatin d un graphe est d ajuter des ptins qui mdifiernt les arguments par défaut. Dans ntre cas, nus puvns mdifier de façn appréciable ntre figure de la façn suivante : plt(x, y, xlab="ten randm values", ylab="ten ther values", xlim=c(-2, 2), ylim=c(-2, 2), pch=22, cl="red", bg="yellw", bty="l", tcl=0.4, main="hw t custmize a plt with R", las=1, cex=1.5) Le résultat est la Fig. 4. Vyns en détail chacune des ptins utilisée. D abrd, xlab et ylab vnt changer les anntatins sur les axes qui, par défaut, étaient les nms des variables. Ensuite, xlim et ylim nus permettent de définir les limites sur les deux axes 13. Le paramètre graphique pch a été ici utilisé cmme ptin : pch=22 spécifie un carré dnt la culeur du cntur et celle de l intérieur peuvent être différentes et qui snt dnnées, respectivement, par cl et bg. On se reprtera au tableau sur les paramètres graphiques pur cmprendre les mdificatins apprtées par bty, tcl, las et cex. Enfin, un titre a été ajuté par l ptin main. Les paramètres graphiques et les fnctins graphiques secndaires permettent d aller plus lin dans la présentatin d un graphe. Cmme vu précédemment, certains paramètres graphiques ne peuvent pas être passés cmme arguments dans une fnctin cmme plt. Nus allns maintenant mdifier certains de ces paramètres avec par(), il est dnc nécessaire cette fis de taper plusieurs cmmandes. Quand les paramètres graphiques snt mdifiés, il est utile de sauver les valeurs initiales de ces paramètres au préalable afin de puvir les rétablir par la suite. Vici les cmmandes pur btenir la Fig. 5. par <- par() par(bg="lightyellw", cl.axis="blue", mar=c(4, 4, 2.5, 0.25)) plt(x, y, xlab="ten randm values", ylab="ten ther values", xlim=c(-2, 2), ylim=c(-2, 2), pch=22, cl="red", bg="yellw", bty="l", tcl=-.25, las=1, cex=1.5) title("hw t custmize a plt with R (bis)", fnt.main=3, adj=1) par(par) 13 Par défaut, R ajute 4% de part et d autre des limites des axes. Ce cmprtement peut être supprimé en mettant les paramètres graphiques xaxs="i" et yaxs="i" (ceux-ci peuvent être passés cmme ptins à plt()). 48
Hw t custmize a plt with R 2 1 Ten ther values 0 1 2 2 1 0 1 2 Ten randm values Fig. 4 La fnctin plt utilisée avec ptins. 2 Hw t custmize a plt with R (bis) 1 Ten ther values 0 1 2 2 1 0 1 2 Ten randm values Fig. 5 Les fnctins par, plt et title. 49
Détaillns les actins prvquées par ces cmmandes. Tut d abrd, les paramètres graphiques par défaut snt sauvés dans une liste qui est nmmée, par exemple, par. Tris paramètres vnt être mdifiés ensuite : bg pur la culeur de l arrière-plan, cl.axis pur la culeur des chiffres sur les axes et mar pur les dimensins des marges autur du cadre de traçage. Le graphe est tracé de façn presque similaire que pur la Fig. 4. On vit que la mdificatin des marges a permis d utiliser de l espace libre autur du cadre de traçage. Le titre est ajuté cette fis avec la fnctin graphique secndaire title ce qui permet de passer certains paramètres en arguments sans altérer le reste du graphique. Enfin, les paramètres graphiques initiaux snt restaurés avec la dernière cmmande. Maintenant, le cntrôle ttal! Sur la Fig. 5, R détermine encre certaines chses cmme le nmbre de graduatins sur les axes u l espace entre le titre et le cadre de traçage. Nus allns maintenant cntrôler ttalement la présentatin du graphique. L apprche utilisée ici est de tracer le graphe «à blanc» avec plt(..., type="n"), puis d ajuter les pints, les axes, les anntatins, etc, avec des fnctins graphiques secndaires. On se permettra aussi quelques fantaisies, cmme de changer la culeur de fnd du cadre de traçage. Les cmmandes suivent, et le graphe prduit est la Fig. 6. par <- par() par(bg="lightgray", mar=c(2.5, 1.5, 2.5, 0.25)) plt(x, y, type="n", xlab="", ylab="", xlim=c(-2, 2), ylim=c(-2, 2), xaxt="n", yaxt="n") rect(-3, -3, 3, 3, cl="crnsilk") pints(x, y, pch=10, cl="red", cex=2) axis(side=1, c(-2, 0, 2), tcl=-0.2, labels=false) axis(side=2, -1:1, tcl=-0.2, labels=false) title("hw t custmize a plt with R (ter)", fnt.main=4, adj=1, cex.main=1) mtext("ten randm values", side=1, line=1, at=1, cex=0.9, fnt=3) mtext("ten ther values", line=0.5, at=-1.8, cex=0.9, fnt=3) mtext(c(-2, 0, 2), side=1, las=1, at=c(-2, 0, 2), line=0.3, cl="blue", cex=0.9) mtext(-1:1, side=2, las=1, at=-1:1, line=0.2, cl="blue", cex=0.9) par(par) Cmme précédemment, les paramètres graphiques par défaut snt enregistrés et la culeur de l arrière-plan est changé ainsi que les marges. Le graphe est ensuite dessiné avec type="n" pur ne pas tracer les pints, xlab="", ylab="" pur ne pas marquer les nms des axes et xaxt="n", yaxt="n" pur ne pas tracer les axes. Le résultat est de tracer uniquement le cadre de traçage et de définir les axes en fnctin de xlim et ylim. Ntez qu n aurait pu utiliser l ptin axes=false mais dans ce cas ni les axes ni le cadre n auraient été tracés. Les éléments snt ensuite ajutés dans le cadre ainsi défini avec des fnctins graphiques secndaires. Avant d ajuter les pints, n va changer la 50
Ten ther values Hw t custmize a plt with R (ter) 1 0 1 2 0 2 Ten randm values Fig. 6 Un graphe fait «sur mesure». culeur dans le cadre avec rect() : les dimensins du rectangle snt chisies afin de dépasser largement celles du cadre. Les pints snt tracés avec pints() ; n a cette fis changé de symble. Les axes snt ajutés avec axis() : le vecteur qui est passé en secnd argument dnne les crdnnées des graduatins qui divent être tracées. L ptin labels=false spécifie qu aucune anntatin n est ajutée avec les graduatins. Cette ptin accepte aussi un vecteur de mde caractère, par exemple labels=c("a", "B", "C"). Le titre est ajuté avec title(), mais n a changé légèrement la plice. Les anntatins des axes snt mises avec mtext() (marginal text). Le premier argument de cette fnctin est un vecteur de mde caractère qui dnne le texte à afficher. L ptin line indique la distance à partir du cadre de traçage (par défaut line=0), et at la crdnnée. Le secnd appel à mtext() utilise la valeur par défaut de side (3). Les deux autres appels de mtext() passent un vecteur numérique en premier argument : celui-ci sera cnverti en mde caractère. 4.6 Les packages grid et lattice Les packages grid et lattice implémentent les systèmes «grid» et «lattice». Grid est un nuveau mde graphique avec sn prpre systéme de paramètres graphiques qui snt distincts de ceux vus ci-dessus. Les deux distinctins principales entre grid et le mde graphique de base snt : plus de flexibilité pur diviser les périphériques graphiques à l aide des vues (viewprts) qui peuvent être chevauchantes (les bjets graphiques peuvent même être partagés entre vues, par exemple des flèches) ; les bjets graphiques (grb) peuvent être mdifiès u effacés d un graphe 51
sans avir à le re-dessiner (cmme dit être fait avec le mde graphique de base). Les graphiques btenus avec grid ne peuvent habituellement pas être cmbinés u mélangés avec ceux prduits par le mde graphique de base (le package gridbase dit être utilisé à cette fin). Les deux mdes graphiques peuvent cependant être utilisés dans la même sessin sur le même périphérique graphique. Lattice est essentiellement l implémentatin dans R des graphiques de type Trellis de S-PLUS. Trellis est une apprche pur la visualisatin de dnnées multivariées particulièrement apprpriée pur l explratin de relatins u d interactins entre variables 14. L idée principale derrière lattice (tut cmme Trellis) est celle des graphes multiples cnditinnés : un graphe bivarié entre deux variables sera décupé en plusieurs graphes en fnctin des valeurs d une trisième variable. La fnctin cplt utilise une apprche similaire, mais lattice ffre des fnctinnalités plus vastes. Lattice utilise grid cmme mde graphique. La plupart des fnctins de lattice prennent pur argument principal une frmule 15, par exemple y ~ x. La frmule y ~ x z signifie que le graphe de y en fnctin de x sera dessiné en plusieurs sus-graphes en fnctin des valeurs de z. Le tableau ci-dessus indique les principales fnctins de lattice. La frmule dnnée en argument est la frmule type nécessaire, mais tutes ces fnctins acceptent une frmule cnditinnelle (y ~ x z) cmme argument principal ; dans ce cas un graphe multiple, en fnctin des valeurs de z, est dessiné cmme nus le verrns dans les exemples ci-dessus. barchart(y ~ x) bwplt(y ~ x) densityplt(~ x) dtplt(y ~ x) histgram(~ x) qqmath(~ x) stripplt(y ~ x) qq(y ~ x) xyplt(y ~ x) histgramme des valeurs de y en fnctin de celles de x graphe bites et mustaches graphe de fnctins de densité graphe de Cleveland (graphes superpsés ligne par ligne et clnne par clnne) histgrammes des fréquences de x quantiles de x en fnctin des valeurs attendues seln une distributin thérique graphe unidimensinnel, x dit être numérique, y peut être un facteur quantiles pur cmparer deux distributins, x dit être numérique, y peut être numérique, caractère u facteur mais dit avir deux niveaux graphes bivariés (avec de nmbreuses fnctinnalités) 14 http://cm.bell-labs.cm/cm/ms/departments/sia/prject/trellis/index.html 15 plt() accepte également une frmule en argument principal : si x et y snt deux vecteurs de même lngueur, plt(y ~ x) et plt(x, y) dnnernt des graphiques identiques. 52
levelplt(z ~ x*y) cnturplt(z ~ x*y) clud(z ~ x*y) wireframe(z ~ x*y) splm(~ x) parallel(~ x) graphe en culeur des valeurs de z aux crdnnées furnies par x et y (x, y et z snt tus de même lngueur) graphe 3-D en perspective (pints) idem (surface) matrice de graphes bivariés graphe de crdnnées parallèles Vyns maintenant quelques exemples afin d illustrer quelques aspects de lattice. Il faut au préalable charger le package en mémire avec la cmmande library(lattice) afin d accéder aux fnctins. D abrd, les graphes de fnctins de densité. Un tel graphe peut être dessiné simplement avec densityplt(~ x) qui tracera une curbe de densité empirique ainsi que les pints crrespndants aux bservatins sur l axe des x (cmme rug()). Ntre exemple sera un peu plus cmpliqué avec la superpsitin, sur chaque graphe, des curbes de densité empirique et de densité estimée avec une li nrmale. Il nus faut à cette fin utiliser l argument panel qui définit ce qui dit être tracé dans chaque graphe. Les cmmandes snt : n <- seq(5, 45, 5) x <- rnrm(sum(n)) y <- factr(rep(n, n), labels=paste("n =", n)) densityplt(~ x y, panel = functin(x,...) { panel.densityplt(x, cl="darkolivegreen",...) panel.mathdensity(dmath=dnrm, args=list(mean=mean(x), sd=sd(x)), cl="darkblue") }) Les tris premières lignes génèrent un échantilln de variables nrmales que l n divise en sus-échantillns d effectif égal à 5, 10, 15,... et 45. Ensuite vient l appel de densityplt qui prduit un graphe par sus-échantilln. panel prend pur argument une fnctin. Dans ntre exemple, nus avns défini une fnctin qui fait appel à deux fnctins prédéfinies dans lattice : panel.densityplt qui trace la fnctin de densité empirique et panel.mathdensity qui trace la fnctin de densité estimée avec une li nrmale. La fnctin panel.densityplt est appellée par défaut si aucun argument n est dnné à panel : la cmmande densityplt(~ x y) aurait dnné le même graphe que sur la Fig. 7 mais sans les curbes bleues. Les exemples suivants snt pris, plus u mdifiés, des pages d aide de lattice et utilisent des dnnées dispnibles dans R : les lcalisatins de 1000 séismes près des îles Fidji et des dnnées bimétriques sur des fleurs de tris espèces d iris. La Fig. 8 représente la lcalisatin gégraphique des séismes en fnctin de la prfndeur. Les cmmandes nécessaires pur ce graphe snt : 53
4 2 0 2 4 0.6 n = 35 n = 40 n = 45 0.5 0.4 0.3 0.2 0.1 0 n = 20 n = 25 n = 30 0.6 0.5 Density 0.4 0.3 0.2 0.1 0.6 n = 5 n = 10 n = 15 0 0.5 0.4 0.3 0.2 0.1 0 4 2 0 2 4 x 4 2 0 2 4 Fig. 7 La fnctin densityplt. 165 170 175 180 185 10 472 544 544 616 616 688 15 20 25 30 35 40 256 328 328 400 400 472 10 15 20 lat 25 30 35 10 40 112 112 184 184 256 40 15 20 25 30 35 40 165 170 175 180 185 lng 165 170 175 180 185 Fig. 8 La fnctin xyplt avec les dnnées «quakes». 54
data(quakes) mini <- min(quakes$depth) maxi <- max(quakes$depth) int <- ceiling((maxi - mini)/9) inf <- seq(mini, maxi, int) quakes$depth.cat <- factr(flr(((quakes$depth - mini) / int)), labels=paste(inf, inf + int, sep="-")) xyplt(lat ~ lng depth.cat, data = quakes) La première cmmande charge le jeu de dnnées quakes en mémire. Les cinq cmmandes suivantes créent un facteur en divisant la prfndeur (variable depth) en neuf intervalles d étendues égales : les niveaux de ce facteur snt nmmés avec les brnes inférieures et supérieures de ces intervalles. Il suffit ensuite d appeller la fnctin xyplt avec la frmule apprpriée et un argument data qui indique ù xyplt dit chercher les variables 16. Avec les dnnées iris, le chevauchement entre les différentes espèces est suffisament faible pur les représenter ensemble sur la même figure (Fig. 9). Les cmmandes crrespndantes snt : data(iris) xyplt( Petal.Length ~ Petal.Width, data = iris, grups=species, panel = panel.superpse, type = c("p", "smth"), span=.75, aut.key = list(x = 0.15, y = 0.85) ) L appel de la fnctin xyplt est ici un peu plus cmplexe que dans l exemple précédent et utilise plusieurs ptins que nus allns détailler. L ptin grups, cmme sn nm l indique, définit des grupes qui sernt utilisés par les autres ptins. On a déjà vu l ptin panel qui définit cmment les différents grupes vnt être représentés sur la graphe : n utilise ici une fnctin prédéfinie panel.superpse afin de superpser les grupes sur le même graphe. Aucune ptin n étant passée à panel.superpse, les culeurs par défaut sernt utilisées pur distinguer les grupes. L ptin type, cmme dans plt(), précise le type de traçage, sauf qu ici n peut dnner plusieurs arguments sus frme d un vecteur : "p" pur tracer les pints et "smth" pur tracer une curbe de lissage dnt le degré est dnné par span. L ptin aut.key ajute la légende au graphe ; il est seulement nécessaire de dnner, dans une liste, les crdnnées ù la légende dit être tracée. Ntez que ces crdnnées snt relatives (c est-à-dire dans l intervalle [0, 1]). Nus allns vir maintenant la fnctin splm avec les mêmes dnnées sur les iris. Les cmmandes suivantes nt servi à prduire la Fig. 10 : 16 plt() ne peut pas prendre d argument data, la lcalisatin des variables dit être dnnée explicitement, par exemple plt(quakes$lng ~ quakes$lat). 55
Petal.Length 7 6 5 4 setsa versiclr virginica 3 2 1 0 0.5 1 1.5 2 2.5 Petal.Width Fig. 9 La fnctin xyplt avec les dnnées «iris». splm( ~iris[1:4], grups = Species, data = iris, xlab = "", panel = panel.superpse, aut.key = list(clumns = 3) ) L argument principal est cette fis une matrice (les quatre premières clnnes d iris). Le résultat est l ensemble des graphes bivariés pssibles entre les variables de la matrice, tut cmme la fnctin standard pairs. Par défaut, splm ajute le texte «Scatter Plt Matrix» sus l axe des x : pur l éviter n a précisé xlab="". Le reste des ptins est similaire à l exemple précédent, sauf qu n a précisé clumns = 3 pur aut.key afin que la légende sit dispsée sur tris clnnes. La Fig. 10 aurait pu être faite avec pairs(), mais cette fnctin ne peut pas prduire des graphes cnditinnés cmme sur la Fig. 11. Le cde utilisé est relativement simple : splm(~iris[1:3] Species, data = iris, pscales = 0, varnames = c("sepal\nlength", "Sepal\nWidth", "Petal\nLength")) Les sus-graphes étant assez petits, n a ajuté deux ptins pur amélirer la lisibilité de la figure : pscales = 0 supprime les graduatins des axes (tus les sus-graphes snt à la même échelle), et n a redéfini les nms des variables pur les faire tenir sur deux lignes ("\n" cde pur un saut de ligne dans une chaine de caractères). Le dernier exemple utilise la méthde des crdnnées parallèles pur l analyse explratire de dnnées multivariées. Les variables snt alignées sur un axe (par exemple sur l axe des y) et les valeurs bservées snt représentées sur l autre axe (les variables étant mises à la même échelle, par exemple en les 56
Setsa Versiclr Virginica 2.5 1.5 2 2.5 2 1.5 Petal.Width 1 0 0.5 7 4 5 6 7 6 5 4 Petal.Length 4 3 2 1 2 3 4 1 4.5 3.5 4 4.5 4 3.5 Sepal.Width 3 2.5 2 2.5 3 2 8 7 8 7 Sepal.Length 6 5 5 6 0.5 1 0 Fig. 10 La fnctin splm avec les dnnées «iris» (1). virginica Petal Length Sepal Width Sepal Length setsa versiclr Petal Length Petal Length Sepal Width Sepal Width Sepal Length Sepal Length Scatter Plt Matrix Fig. 11 La fnctin splm avec les dnnées «iris» (2). 57
Min Max setsa versiclr virginica Petal.Width Petal.Length Sepal.Width Sepal.Length Min Max Min Max Fig. 12 La fnctin parallel avec les dnnées «iris». réduisant). Les valeurs crrespndant au même individu snt reliées par une ligne. Avec les dnnées iris n btient la Fig. 12 avec le cde suivant : parallel(~iris[, 1:4] Species, data = iris, layut = c(3, 1)) 58
5 Les analyses statistiques avec R Encre plus que pur les graphiques, il est impssible ici d aller dans les détails sur les pssibilités ffertes par R pur les analyses statistiques. Mn but est ici de dnner des pints de repère afin de se faire une idée sur les caractéristiques de R pur cnduire des analyses de dnnées. Le package stats inclut des fnctins pur un large évental d analyses statistiques : tests classiques, mdèles linéaires (y cmpris régressin par les mindres carrés, mdèles linéaires généralisés et analyse de variance), lis de distributin, résumés statistiques, classificatins hiérarchiques, analyses de séries-temprelles, mindres carrés nn-linéaires, et analyses multivariées. D autres méthdes statistiques snt dispnibles dans un grand nmbre de packages. Certains snt distribués avec une installatin de base de R et snt recmmandés, et de nmbreux autres snt cntribués et divent être installés par l utilisateur. Nus cmmencerns par un exemple simple, qui ne nécessite aucun package autre que stats, afin de présenter l apprche générale pur analyser des dnnées avec R. Puis nus détaillerns certaines ntins qui snt utiles en général quelque sit le type d analyse que l n veut cnduire tel les frmules et les fnctins génériques. Ensuite, nus dresserns une vue d ensemble sur les packages. 5.1 Un exemple simple d analyse de variance La fnctin pur l analyse de variance dans stats est av. Pur l essayer, prenns un jeu de dnnées dispnible dans R : InsectSprays. Six insecticides nt été testés en culture, la répnse bservée étant le nmbre d insectes. Chaque insecticide ayant été testé 12 fis, n a dnc 72 bservatins. Laissns de côté l explratin graphique de ces dnnées pur se cnsacrer à une simple analyse de variance de la répnse en fnctin de l insecticide. Après avir chargé les dnnées en mémire à l aide de la fnctin data, l analyse est faite après transfrmatin en racine carrée de la répnse : > data(insectsprays) > av.spray <- av(sqrt(cunt) ~ spray, data = InsectSprays) L argument principal (et bligatire) d av est une frmule qui précise la répnse à gauche du signe ~ et le prédicteur à drite. L ptin data = InsectSprays précise que les variables divent être prises dans le tableau de dnnées InsectSprays. Cette syntaxe est équivalente à : > av.spray <- av(sqrt(insectsprays$cunt) ~ InsectSprays$spray) 59
u encre (si l n cnnait les numérs de clnne des variables) : > av.spray <- av(sqrt(insectsprays[, 1]) ~ InsectSprays[, 2]) La première syntaxe est préférable car plus claire. Les résultats ne snt pas affichés car ceux-ci snt cpiés dans un bjet nmmé av.spray. Certaines fnctins snt utilisées pur extraire les résultats désirés, par exemple print pur afficher un bref résumé de l analyse (essentiellement les paramètres estimés) et summary pur afficher plus de détails (dnt les tests statistiques) : > av.spray Call: av(frmula = sqrt(cunt) ~ spray, data = InsectSprays) Terms: spray Residuals Sum f Squares 88.43787 26.05798 Deg. f Freedm 5 66 Residual standard errr: 0.6283453 Estimated effects may be unbalanced > summary(av.spray) Df Sum Sq Mean Sq F value Pr(>F) spray 5 88.438 17.688 44.799 < 2.2e-16 *** Residuals 66 26.058 0.395 --- Signif. cdes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Rappelns que de taper le nm de l bjet en guise de cmmande équivaut à la cmmande print(av.spray). Une représentatin graphique des résultats peut être btenue avec plt() u termplt(). Avant de taper la cmmande plt(av.spray), le graphique dera divisé en quatre afin que les quatre graphes diagnstiques sient dessinés sur le même graphe. Les cmmandes snt : > par <- par() > par(mfcl = c(2, 2)) > plt(av.spray) > par(par) > termplt(av.spray, se=true, partial.resid=true, rug=true) et les graphes btenus snt représentés Fig. 13 et Fig. 14. 5.2 Les frmules Les frmules snt un élément-clef des analyses statistiques avec R : la ntatin utilisée est la même pur (presque) tutes les fnctins. Une frmule est 60
Residuals 1.5 0.0 1.0 Residuals vs Fitted 27 39 25 1.5 2.5 3.5 Fitted values Standardized residuals 0.0 0.5 1.0 1.5 Scale Lcatin plt 27 39 25 1.5 2.5 3.5 Fitted values Standardized residuals 2 0 1 2 25 Nrmal Q Q plt 39 27 Ck s distance 0.00 0.04 0.08 Ck s distance plt 27 39 25 2 1 0 1 2 0 20 40 60 Theretical Quantiles Obs. number Fig. 13 Représentatin graphique des résultats de la fnctin av avec plt(). Partial fr spray 3 2 1 0 1 2 0 1 2 3 4 5 6 spray Fig. 14 Représentatin graphique des résultats de la fnctin av avec termplt(). 61
b %in% a typiquement de la frme y ~ mdel ù y est la répnse analysée et mdel est un ensemble de termes pur lesquels les paramètres snt estimés. Ces termes snt séparés par des symbles arithmétiques mais qui nt ici une significatin particulière. a+b effets additifs de a et de b X si X est une matrice, ceci équivaut à un effet additif de tutes ses clnnes, c est-à-dire X[,1]+X[,2]+...+X[,ncl(X)]; certaines de ces clnnes peuvent être sélectinnées avec l indexatin numérique (ex. : X[,2:4]) a:b effet interactif entre a et b a*b effets additifs et interactifs (identique à a+b+a:b) ply(a, n) plynme de a jusqu au degré n ^n inclue tutes les interactins jusqu au niveau n, c est-àdire (a+b+c)^2 est identique à a+b+c+a:b+a:c+b:c les effets de b snt hiérarchiquement inclus dans a (identique à a+a:b u a/b) -b supprime l effet de b, par exemple : (a+b+c)^2-a:b est identique à a+b+c+a:c+b:c -1 y~x-1 frce la régressin à passer par l rigine (idem pur y~x+0 u 0+y~x) 1 y~1 ajuste un mdèle sans effets (juste l «intercept») ffset(...) ajute un effet au mdèle sans estimer de paramètre (par ex. ffset(3*x)) On vit que les pérateurs arithmétiques de R nt dans une frmule un sens différent de celui qu ils nt dans une expressin classique. Par exemple, la frmule y~x1+x2 définira le mdèle y = β 1 x 1 + β 2 x 2 + α, et nn pas (si l pérateur + avait sa fnctin habituelle) y = β(x 1 + x 2 ) + α. Pur inclure des pératins arithmétiques dans une frmule, n utilisera la fnctin I : la frmule y~i(x1+x2) définira alrs le mdèle y = β(x 1 + x 2 ) + α. De même, pur définir le mdèle y = β 1 x + β 2 x 2 + α n utilisera la frmule y ~ ply(x, 2) (et nn pas y ~ x + x^2). Cependant, il est pssible d inclure une fnctin dans une frmule afin de transfrmer une variable cmme nus l avns vu cidessus avec l analyse de variance des dnnées d insecticides. Pur les analyses de variance, av() accepte une syntaxe particulière pur spécifier les effets aléatires. Par exemple, y ~ a + Errr(b) signifie effets additifs d un terme fixe (a) et d un terme aléatire (b). 5.3 Les fnctins génériques On se suvient que les fnctins de R agissent en fnctin des attributs des bjets éventuellement passés en arguments. La classe est un attibut qui mérite une certaine attentin ici. Il est très fréquent que les fnctins statistiques de R returnent un bjet de classe emprunté au nm de la fnctin (par exemple, 62
av returne un bjet de classe "av", lm returne un de classe "lm"). Les fnctins que nus purrns utiliser par la suite pur extraire les résultats agirnt spécifiquement en fnctin de la classe de l bjet. Ces fnctins snt dites génériques. Par exemple, la fnctin la plus utilisée pur extraire des résultats d analyse est summary qui permet d afficher les résultats détaillés. Seln que l bjet qui est passé en argument est de classe "lm" (mdèle linéaire) u "av" (analyse de variance), il est clair que les infrmatins à afficher ne sernt pas les mêmes. L avantage des fnctins génériques est d avir une syntaxe unique pur tus les cas. Un bjet qui cntient les résultats d une analyse est généralement une liste dnt l affichage est déterminée par sa classe. Nus avns déjà vu cette ntin que les fnctins de R agissent spécifiquement en fnctin de la nature des bjets qui snt dnnés en arguments. C est un caractère général de R 17. Le tableau suivant dnne les principales fnctins génériques qui permettent d extraire des infrmatins d un bjet qui résulte d une analyse. L usage typique de ces fnctins étant : > md <- lm(y ~ x) > df.residual(md) [1] 8 print summary df.residual cef residuals deviance fitted lglik AIC returne un résumé succint returne un résumé détaillé returne le nmbre de degrés de liberté résiduel returne les cefficients estimés (avec parfis leurs erreurs-standards) returne les résidus returne la déviance returne les valeurs ajustées par le mdèle calcule le lgarithme de la vraisemblance et le nmbre de paramètre d un mdèle calcule le critère d infrmatin d Akaike u AIC (dépend de lglik()) Une fnctin cmme av u lm prduit dnc une liste dnt les différents éléments crrespndent aux résultats de l analyse. Si l n reprend l exemple de l analyse de variance sur les dnnées InsectSprays, n peut regarder la structure de l bjet créé par av : > str(av.spray, max.level = -1) List f 13 - attr(*, "class")= chr [1:2] "av" "lm" Une autre façn de regarder cette structure est d afficher les nms des éléments de l bjet : 17 Il y a plus de 100 fnctins génériques dans R. 63
> names(av.spray) [1] "cefficients" "residuals" "effects" [4] "rank" "fitted.values" "assign" [7] "qr" "df.residual" "cntrasts" [10] "xlevels" "call" "terms" [13] "mdel" Les éléments peuvent ensuite être extraits cmme vu précédemment : > av.spray$cefficients (Intercept) sprayb sprayc sprayd 3.7606784 0.1159530-2.5158217-1.5963245 spraye sprayf -1.9512174 0.2579388 summary() crée également une liste, qui dans le cas d av() se limite à un tableau de tests : > str(summary(av.spray)) List f 1 $ :Classes anva and data.frame : 2 bs. f 5 variables:..$ Df : num [1:2] 5 66..$ Sum Sq : num [1:2] 88.4 26.1..$ Mean Sq: num [1:2] 17.688 0.395..$ F value: num [1:2] 44.8 NA..$ Pr(>F) : num [1:2] 0 NA - attr(*, "class")= chr [1:2] "summary.av" "listf" > names(summary(av.spray)) NULL Les fnctins génériques n agissent généralement pas sur les bjets : elles appèlent la fnctin apprpriée en fnctin de la classe de l argument. Une fnctin appelée par une générique est une méthde (methd) dans le jargn de R. De façn schématique, une méthde est cntruite seln generic.cls, ù cls désigne la classe de l bjet. Dans le cas de summary, n peut afficher les méthdes crrespndantes : > aprps("^summary") [1] "summary" "summary.av" [3] "summary.avlist" "summary.cnnectin" [5] "summary.data.frame" "summary.default" [7] "summary.factr" "summary.glm" [9] "summary.glm.null" "summary.infl" [11] "summary.lm" "summary.lm.null" [13] "summary.manva" "summary.matrix" [15] "summary.mlm" "summary.packagestatus" [17] "summary.posixct" "summary.posixlt" [19] "summary.table" 64
On peut visualiser les particularités de cette générique dans le cas de la régressin linéaire cmparée à l analyse de variance avec un petit exemple simulé : > x <- y <- rnrm(5) > lm.spray <- lm(y ~ x) > names(lm.spray) [1] "cefficients" "residuals" "effects" [4] "rank" "fitted.values" "assign" [7] "qr" "df.residual" "xlevels" [10] "call" "terms" "mdel" > names(summary(lm.spray)) [1] "call" "terms" "residuals" [4] "cefficients" "sigma" "df" [7] "r.squared" "adj.r.squared" "fstatistic" [10] "cv.unscaled" Le tableau suivant indique certaines fnctins génériques qui fnt des analyses supplémentaires à partir d un bjet qui résulte d une analyse faite au préalable, l argument principal étant cet bjet, mais dans certains cas un argument supplémentaire est nécessaire cmme pur predict u update. add1 drp1 step anva predict update teste successivement tus les termes qui peuvent être ajutés à un mdèle teste successivement tus les termes qui peuvent être enlevés d un mdèle sélectinne un mdèle par AIC (fait appel à add1 et drp1) calcule une table d analyse de variance u de déviance pur un u plusieurs mdèles calcule les valeurs prédites pur de nuvelles dnnées à partir d un mdèle ré-ajuste un mdèle avec une nuvelle frmule u de nuvelles dnnées Il y a également diverses fnctins utilitaires qui extraient des infrmatins d un bjet mdèle u d une frmule, cmme alias qui truve les termes linéairement dépendants dans un mdèle linéaire spécifié par une frmule. Enfin, il y a bien sûr les fnctins graphiques cmme plt qui affiche divers diagnstiques u termplt (cf. l exemple ci-dessus) ; cette dernière fnctin n est pas vraiment générique mais fait appel à predict. 5.4 Les packages Le tableau suivant liste les packages standards distribués avec une installatin de base de R. 65
Package base datasets grdevices graphics grid methds splines stats stats4 tcltk tls utils Descriptin fnctins de base de R jeux de dnnées de base périphériques graphiques pur mdes base et grid graphiques base graphiques grid définitin des méthdes et classes pur les bjets R ainsi que des utilitaires pur la prgrammatin régressin et classes utilisant les représentatins plynmiales fnctins statistiques fnctins statistiques utilisant les classes S4 fnctins pur utiliser les éléments de l interface graphique Tcl/Tk utilitaires pur le dévelppement de package et l administratin fnctins utilitaires de R Certains de ces packages snt chargés en mémire quand R est démarré ; ceci peut être affiché avec la fnctin search : > search() [1] ".GlbalEnv" "package:methds" [3] "package:stats" "package:graphics" [5] "package:grdevices" "package:utils" [7] "package:datasets" "Autlads" [9] "package:base" Les autres packages peuvent être utilisés après chargement : > library(grid) La liste des fnctins d un package peut être affichée avec : > library(help = grid) u en parcurant l aide au frmat html. Les infrmatins relatives à chaque fnctin peuvent être accédées cmme vu précédemment (p. 7). De nmbreux packages cntribués allngent la liste des analyses pssibles avec R. Ils snt distribués séparément, et divent être installés et chargés en mémire sus R. Une liste cmplète de ces packages cntribués, accmpagnée d une descriptin, se truve sur le site Web du CRAN 18. Certains de ces packages snt regrupés parmi les packages recmmandés car ils cuvrent des méthdes suvent utilsées en analyse des dnnées. Les packages recmmandés snt suvent distribués avec une installatin de base de R. Ils snt brièvement décrits dans le tableau ci-dessus. 18 http://cran.r-prject.rg/src/cntrib/packages.html 66
Package Descriptin bt méthdes de ré-échantillnnage et de btstrap class méthdes de classificatin cluster méthdes d aggrégatin freign fnctins pur imprter des dnnées enregistrés sus divers frmats (S3, Stata, SAS, Minitab, SPSS, Epi Inf) KernSmth méthdes pur le calcul de fnctins de densité (y cmpris bivariées) lattice graphiques Lattice (Trellis) MASS cntient de nmbreuses fnctins, utilitaires et jeux de dnnées accmpagnant le livre «Mdern Applied Statistics with S» par Venables & Ripley mgcv mdèles additifs généralisés nlme mdèles linéaires u nn-linéaires à effets mixtes nnet réseaux neurnaux et mdèles lg-linéaires multinmiaux rpart méthdes de partitinnement récursif spatial analyses spatiales («kriging», cvariance spatiale,...) survival analyses de survie Il y a deux autres dépôts principaux de packages pur R : le Prjet Omegahat pur le Calcul Statistique 19 centré sur les applicatins basés sur le web et les interfaces entre prgrammes et langages, et le Prjet Bicnductr 20 spécialisé dans les applicatins biinfrmatiques (en particulier pur l analyse des dnnées de micr-arrays ). La prcédure pur installer un package dépend du système d explitatin et si vus avez installé R à partir des surces u des exécutables précmpilés. Dans ce dernier cas, il est recmmandé d utiliser les packages précmpilés dispnibles sur le site du CRAN. Sus Windws, l exécutable Rgui.exe a un menu «Packages» qui permet d installer un u plusieurs packages via internet à partir du site Web de CRAN u des fichiers.zip sur le disque lcal. Si l n a cmpilé R, un package purra être installé à partir de ses surces qui snt distribuées sus frme de fichiers.tar.gz. Par exemple, si l n veut installer le package gee, n téléchargera dans un permier temps le fichier gee 4.13-6.tar.gz (le numér 4.13-6 désigne la versin du package ; en général une seule versin est dispnible sur CRAN). On tapera ensuite à partir du système (et nn pas de R) la cmmande : R CMD INSTALL gee_4.13-6.tar.gz Il y a plusieurs fnctins utiles pur gérer les packages cmme CRAN.packages, installed.packages u dwnlad.packages. Il est utile également de taper régulièrement la cmmande : > update.packages() 19 http://www.megahat.rg/r/ 20 http://www.bicnductr.rg/ 67
qui vérifie les versins des packages installés en cmparaisn à celles dispnibles sur CRAN (cette cmmande peut être appelée du menu «Packages» sus Windws). L utilisateur peut ensuite mettre à jur les packages qui nt des versins plus récentes que celles installées sur sn système. 68
6 Prgrammer avec R en pratique Maintenant que nus avns fait un tur d ensemble des fnctinnalités de R, revenns au langage et à la prgrammatin. Nus allns vir des idées simples susceptibles d être mises en pratique. 6.1 Bucles et vectrisatin Le pint frt de R par rapprt à un lgiciel à menus dérulants est dans la pssibilité de prgrammer, de façn simple, une suite d analyses qui sernt exécutées successivement. Cette pssibilité est prpre à tut langage infrmatique, mais R pssède des particularités qui rendent la prgrammatin accessible à des nn-spécialistes. Cmme les autres langages, R pssède des structures de cntrôle qui ne snt pas sans rappeler celles du langage C. Suppsns qu n a un vecteur x, et pur les éléments de x qui nt la valeur b, n va dnner la valeur 0 à une autre variable y, sinn 1. On crée d abrd un vecteur y de même lngueur que x : y <- numeric(length(x)) fr (i in 1:length(x)) if (x[i] == b) y[i] <- 0 else y[i] <- 1 On peut faire exécuter plusieurs instructins si elles snt encadrées dans des acclades : fr (i in 1:length(x)) { y[i] <- 0... } if (x[i] == b) { y[i] <- 0... } Une autre situatin pssible est de vulir faire exécuter une instructin tant qu une cnditin est vraie : while (myfun > minimum) {... } 69
Les bucles et structures de cntrôle peuvent cependant être évitées dans la plupart des situatins et ce grâce à une caractéristique du langage R : la vectrisatin. La structure vectrielle rend les bucles implicites dans les expressins et nus en avns vu de nmbreux cas. Cnsidérns l additin de deux vecteurs : > z <- x + y Cette additin purrait être écrite avec une bucle cmme cela se fait dans la plupart de langages : > z <- numeric(length(x)) > fr (i in 1:length(z)) z[i] <- x[i] + y[i] Dans ce cas il est nécessaire de créer le vecteur z au préalable à cause de l utilisatin de l indexatin. On réalise que cette bucle explicite ne fnctinnera que si x et y snt de même lngueur : elle devra être mdifiée si cela n est pas le cas, alrs que la première expressin marchera quelque sit la situatin. Les exécutins cnditinnelles (if... else) peuvent être évitées avec l indexatin lgique ; en reprenant l exemple plus haut : > y[x == b] <- 0 > y[x!= b] <- 1 Les expressins vectrisées snt nn seulement plus simples, mais aussi plus efficaces d un pint de vue infrmatique, particulièrement pur les grsses quantités de dnnées. Il y a également les fnctins du type apply qui évitent d écrire des bucles. apply agit sur les lignes et/u les clnnes d une matrice, sa syntaxe est apply(x, MARGIN, FUN,...), ù X est la matrice, MARGIN indique si l actin dit être appliquée sur les lignes (1), les clnnes (2) u les deux (c(1, 2)), FUN est la fnctin (u l pérateur mais dans ce cas il dit être spécifié entre guillemets dubles) qui sera utilisée, et... snt d éventuels arguments supplémentaires pur FUN. Un exemple simple suit. > x <- rnrm(10, -5, 0.1) > y <- rnrm(10, 5, 2) > X <- cbind(x, y) # les clnnes gardent les nms "x" et "y" > apply(x, 2, mean) x y -4.975132 4.932979 > apply(x, 2, sd) x y 0.0755153 2.1388071 lapply() va agir sur une liste : la syntaxe est similaire à celle d apply et le résultat returné est une liste. 70
> frms <- list(y ~ x, y ~ ply(x, 2)) > lapply(frms, lm) [[1]] Call: FUN(frmula = X[[1]]) Cefficients: (Intercept) x 31.683 5.377 [[2]] Call: FUN(frmula = X[[2]]) Cefficients: (Intercept) ply(x, 2)1 ply(x, 2)2 4.9330 1.2181-0.6037 sapply() est une variante plus flexible de lapply() qui peut prendre un vecteur u une matrice en argument principal, et returne ses résultats sus une frme plus cnviviale, en général sus frme de tableau. 6.2 Écrire un prgramme en R Typiquement, un prgramme en R sera écrit dans un fichier sauvé au frmat ASCII et avec l extensin.r. La situatin typique ù un prgramme se révèle utile est lrsque l n veut exécuter plusieurs fis une tâche identique. Dans ntre premier exemple, nus vulns tracer le même graphe pur tris espèces d iseaux différentes, les dnnées se truvant dans tris fichiers distincts. Nus allns prcéder pas-à-pas en vyant différentes façns de cnstruire un prgramme pur ce prblème très simple. D abrd, cnstruisns ntre prgramme de la façn la plus intuitive en faisant exécuter successivement les différentes cmmandes désirées, en prenant sin au préalable de partitinner le graphique. layut(matrix(1:3, 3, 1)) data <- read.table("swal.dat") plt(data$v1, data$v2, type="l") title("swallw") data <- read.table("wren.dat") plt(data$v1, data$v2, type="l") title("wren") data <- read.table("dunn.dat") # partitinne le graphique # lit les dnnées # ajute le titre 71
plt(data$v1, data$v2, type="l") title("dunnck") Le caractère # sert à ajuter des cmmentaires dans le prgramme : R passe alrs à la ligne suivante. Le prblème de ce premier prgramme est qu il risque de s allnger sérieusement si l n veut ajuter d autres espèces. De plus, certaines cmmandes snt répétées plusieurs fis, elles peuvent être regrupées et exécutées en mdifiant les arguments qui changent. Les nms de fichier et d espèce snt dnc utilisés cmme des variables. La stratégie utilisée ici est de mettre ces nms dans des vecteurs de mde caractère, et d utiliser ensuite l indexatin pur accéder à leurs différentes valeurs. layut(matrix(1:3, 3, 1)) # partitinne le graphique species <- c("swallw", "wren", "dunnck") file <- c("swal.dat", "Wren.dat", "Dunn.dat") fr(i in 1:length(species)) { data <- read.table(file[i]) # lit les dnnées plt(data$v1, data$v2, type="l") title(species[i]) # ajute le titre } On ntera qu il n y a pas de guillemets autur de file[i] dans read.table puisque cet argument est de mde caractère. Ntre prgramme est maintenant plus cmpact. Il est plus facile d ajuter d autres espèces car les deux vecteurs qui cntiennent les nms d espèces et de fichiers snt définis au début du prgramme. Les prgrammes ci-dessus purrnt marcher si les fichiers.dat snt placés dans le répertire de travail de R, sinn il faut sit changer ce répertire de travail, u bien spécifier le chemin d accés dans le prgramme (par exemple : file <- "/hme/paradis/data/swal.dat"). Si les instructins snt écrites dans un fichier Mybirds.R, n peut appeler le prgramme en tapant : > surce("mybirds.r") Cmme pur tute lecture dans un fichier, il est nécessaire de préciser le chemin d accès au fichier s il n est pas dans le répertire de travail. 6.3 Écrire ses fnctins L essentiel du travail de R se fait à l aide de fnctins dnt les arguments snt indiqués entre parenthèses. L utilisateur peut écrire ses prpres fnctins qui aurnt les mêmes prpriétés que les autres fnctins de R. Écrire ses prpres fnctins permet une utilisatin efficace, flexible et ratinnelle de R. Reprenns l exemple ci-dessus de la lecture de dnnées dans un fichier suivi d un graphe. Si l n veut répéter cette pératin quand n le veut, il peut être judicieux d écrire une fnctin : 72
myfun <- functin(s, F) { data <- read.table(f) plt(data$v1, data$v2, type="l") title(s) } Pur puvir être exécutée, cette fnctin dit être chargée en mémire ce qui peut se faire de plusieurs façns. On peut entrer les lignes de la fnctin au clavier cmme n imprte quelle cmmande, u les cpier/cller à partir d un éditeur. Si la fnctin a été enregistrée dans un fichier au frmat texte, n peut la charger avec surce() cmme un autre prgramme. Si l utilisateur veut que ses fnctins sient chargées au démarrage de R, il peut les enregistrer dans un wrkspace.rdata qui sera chargé en mémire s il est lcalisé dans le répertire de travail de démarrage. Une autre pssibilté est de cnfigurer le fichier.rprfile u Rprfile (vir?startup pur les détails). Enfin, il est pssible de créer un package mais ceci ne sera pas abrdé ici (n se reprtera au manuel «Writing R Extensins»). On purra par la suite, par une seule cmmande, lire les dnnées et dessiner le graphe, par exemple myfun("swallw", "Swal.dat"). Nus arrivns dnc à une trisième versin de ntre prgramme : layut(matrix(1:3, 3, 1)) myfun("swallw", "Swal.dat") myfun("wren", "Wrenn.dat") myfun("dunnck", "Dunn.dat") On peut également utiliser sapply() abutissant à une quatrième versin du prgramme : layut(matrix(1:3, 3, 1)) species <- c("swallw", "wren", "dunnck") file <- c("swal.dat", "Wren.dat", "Dunn.dat") sapply(species, myfun, file) Avec R, il n est pas nécessaire de déclarer les variables qui snt utilisées dans une fnctin. Quand une fnctin est exécutée, R utilise une règle nmmée étendue lexiquale (lexical scping) pur décider si un bjet désigne une variable lcale à la fnctin u un bjet glbal. Pur cmprendre ce mécanisme, cnsidérns la fnctin très simple ci-dessus : > f <- functin() print(x) > x <- 1 > f() [1] 1 73
Le nm x n a pas été utilisé pur créer un bjet au sein de f(), R va dnc chercher dans l envirnnement immédiatement supérieur si un bjet nmmé x existe et affichera sa valeur (sinn un message d erreur est affiché et l exécutin est terminée). Si l n utilise x cmme nm d bjet au sein de ntre fnctin, la valeur de x dans l envirnnement glbal n est pas utilisée. > x <- 1 > f2 <- functin() { x <- 2; print(x) } > f2() [1] 2 > x [1] 1 Cette fis print() a utilisé l bjet x qui a été défini dans sn envirnnement, c est-à-dire celui de la fnctin f2. Le mt «immédiatement» ci-dessus est imprtant. Dans les deux exemples que nus venns de vir, il y a deux envirnnements : celui glbal et celui de la fnctin f u f2. S il y avait tris u plus envirnnements embîtés, la recherche des bjets se fait par «paliers» d un envirnnement à l envirnnement immédiatement supérieur, ainsi de suite jusqu à l envirnnement glbal. Il y a deux façns de spécifier les arguments à une fnctin : par leurs psitins u par leurs nms. Par exemple, cnsidérns une fnctin qui prendrait tris arguments : f <- functin(arg1, arg2, arg3) {...} On peut exécuter f() sans utiliser les nms arg1,..., si les bjets crrespndants snt placés dans l rdre, par exemple : f(x, y, z). Par cntre, l rdre n a pas d imprtance si les nms des arguments snt utilisés, par exemple : f(arg3 = z, arg2 = y, arg1 = x). Une autre particularité des fnctins dans R est la pssibilité d utiliser des valeurs par défaut dans la définitin. Par exemple : f <- functin(arg1, arg2 = 5, arg3 = FALSE) {...} Les cmmandes f(x), f(x, 5, FALSE) et f(x, arg3 = FALSE) aurnt exactement le même résultat. L utilisatin de valeurs par défaut dans la définitin d une fnctin est très utile, particulièrement en cnjnctin avec les arguments nmmés (ntamment pur changer une seule valeur par défaut : f(x, arg3 = TRUE)). Pur cnclure cette partie, nus allns vir un exemple de fnctin n est pas purement statistique mais qui illustre bien la flexibilité de R. Cnsidérns que l n veuille étudier le cmprtement d un mdèle nn-linéaire : le mdèle de Ricker défini par : 74
[ ( N t+1 = N t exp r 1 N )] t K Ce mdèle est très utilisé en dynamique des ppulatins, en particulier de pissns. On vudra à l aide d une fnctin simuler ce mdèle en fnctin du taux de crissance r et de l effectif initial de la ppulatin N 0 (la capacité du milieu K est curamment prise égale à 1 et cette valeur sera prise par défaut) ; les résultats sernt affichés sus frme de graphique mntrant les changements d effectifs au curs du temps. On ajutera une ptin qui permettra de réduire l affichage des résultats aux dernières génératins (par défaut tus les résultats sernt affichés). La fnctin ci-dessus permet de faire cette analyse numérique du mdèle de Ricker. ricker <- functin(nzer, r, K=1, time=100, frm=0, t=time) { N <- numeric(time+1) N[1] <- nzer fr (i in 1:time) N[i+1] <- N[i]*exp(r*(1 - N[i]/K)) Time <- 0:time plt(time, N, type="l", xlim=c(frm, t)) } Essayez vus-mêmes avec : > layut(matrix(1:3, 3, 1)) > ricker(0.1, 1); title("r = 1") > ricker(0.1, 2); title("r = 2") > ricker(0.1, 3); title("r = 3") 75
7 Littérature sur R Manuels. Plusieurs manuels snt distribués avec R dans R HOME/dc/manual/ : An Intrductin t R [R-intr.pdf], R Installatin and Administratin [R-admin.pdf], R Data Imprt/Exprt [R-data.pdf], Writing R Extensins [R-exts.pdf], R Language Definitin [R-lang.pdf]. Les fichiers crrespndants peuvent être sus divers frmats (pdf, html, texi,...) en fnctin du type d installatin. FAQ. R est également distribué avec un FAQ (Frequently Asked Questins) lcalisé dans le répertire R HOME/dc/html/. Une versin de ce R- FAQ est régulièrement mise à jur sur le site Web du CRAN : http://cran.r-prject.rg/dc/faq/r-faq.html. Ressurces en-ligne. Le site Web du CRAN accueille plusieurs dcuments et ressurces bibligraphiques ainsi que des liens vers d autres sites. On peut y truver une liste de publicatins (livres et articles) liées à R u aux méthdes statistiques 21 et des dcuments et manuels écrits par des utilisateurs de R 22. Listes de discussin. Il y a quatre listes de discussin électrnique sur R ; pur s inscrire, envyer un message u cnsulter les archives vir : http://www.r-prject.rg/mail.html La liste de discussin générale r-help est une surce intéressante d infrmatin pur les utilisateurs (les tris autres listes snt cnsacrées aux annnces de nuvelles versins, et aux dévelppeurs). De nmbreux utilisateurs nt envyé sur r-help des fnctins u des prgrammes qui peuvent dnc être truvés dans les archives. Il est dnc imprtant si l n a un prblème avec R de prcéder dans l rdre avant d envyer un message à r-help et de : 1. cnsulter attentivement l aide-en-ligne (éventuellement avec le mteur de recherche) ; 2. cnsulter le R-FAQ ; 3. chercher dans les archives de r-help à l adresse ci-dessus u en cnsultant un des mteurs de recherche mis en place sur certains sites Web 23 ; 21 http://www.r-prject.rg/dc/bib/r-publicatins.html 22 http://cran.r-prject.rg/ther-dcs.html 23 Les adresses de ces sites snt répertriées sur celui du CRAN à http://cran.r-prject.rg/search.html 76
4. lire le «psting guide» 24 avant d envyer vs questins. R News. La revue électrnique R News a pur but de cmbler l espace entre les listes de discussin électrniques et les publicatins scientifiques traditinnelles. Le premier numér a été publié en janvier 2001 25. Citer R dans une publicatin. Enfin, si vus mentinnez R dans une publicatin, il faut citer la référence suivante : R Develpment Cre Team (2005). R: A language and envirnment fr statistical cmputing. R Fundatin fr Statistical Cmputing, Vienna, Austria. ISBN 3-900051-07-0, URL: http://www.r-prject.rg. 24 http://www.r-prject.rg/psting-guide.html 25 http://cran.r-prject.rg/dc/rnews/ 77