Lancement de R, les menus
Transcription
Lancement de R, les menus
Cours 2 Vecteurs, matrices,listes,séries temporelles Compléments sur les vecteurs • Il y a quatre types de base: Numériques,alphanumériques, logiques, facteurs • A chaque type correspond ses opérateurs. Par exemple on ne peut pas additionner des vecteurs alphanumériques. Par contre on peut, si v est un vecteur numérique v+2: ajoute 2 à tous les éléments de v v+w : attention si les deux vecteurs ne sont pas de même longueur, donne un vecteur de la longueur du plus grand,en dupliquant le plus court • On peut tester ou modifier le mode d’un vecteur: as.numeric() :impose le mode numérique is.numeric() :booléen TRUE ou FALSE as.character() :impose le mode caractère is.character() :booléen TRUE ou FALSE as.factor(),is.factor(),as.logical(),is.logical()… • Les fonctions factor(): contraint à être facteur cut():contraint un vecteur numérique à être un facteur Conversion d ’objets • Conversion en numérique:as.numéric() FALSE->0 TRUE ->1 “ 1 ”, “ 2 ”,..>1,2,..“ A ”->NA • Conversion en logique: as.logical() 0->FALSE autres nombres ->TRUE “ FALSE”->FALSE “ TRUE” ->TRUE autres caractères ->NA • Conversion en caractère:as.character() • 1,2,…-> “ 1 ”, “ 2 ” FALSE- > “ FALSE ” TRUE -> “ TRUE ” Génération de nombres aléatoires • Rappel: Un échantillon est une partie d'une population sur laquelle s'éffectue une étude statistique. On peut disposer d'échantillons issus d'une expérimentation, ou, si on connait la loi de la variable parente X,(de distribution connue) simuler ces observations: on parlera d'échantillon empirique ou observé et d'échantillon simulé. La taille d'un échantillon est le nombre d'observations de l'échantillon Exemple 1 • X: v.a.r taille de la population P • Un échantillon de taille 5 issu d'une expérimentation: • (1,60;1,80;1,72;1,78;1,63) • Un échantillon simulé de taille 10 en supposant que X suit une loi normale de paramètres (1,75;15) • 209.38 186.99 167.24 168.71 184.49 175.63 162.25 177.86 183.27 181.68 (Obtenu par x=rnorm(10,175,15);x) Exemple 2: lois discrètes La loi binomiale B(n,p), rbinom() P ( X = k )=[n!/p!(n-p)!] p^k ( 1 - p )^n-k rbinom(10,10,0.3) [1] 3 5 0 2 3 1 3 5 4 6 rbinom(100,10,0.3) [1] 4 3 5 2 3 4 4 4 0 0 3 2 4 3 4 3 2 3 1 3 5 3 5 3 5 2 5 5 1 6 2 3 4 3 4 3 2 2 3 2 1 2 5 6 5 2 3 1 3 3 4 6 1 2 6 4 1 2 2 1 1 4 2 4 3 1 2 3 2 3 7 2 4 2 3 3 4 4 4 4 4 4 2 2 2 3 1 2 1 3 4 4 1 1 4 3 3 4 4 5 la loi uniforme discrète U(n)(où les pi sont tous égaux):sample() Exemple a=sample(1:15,10);a [1] 12 8 11 10 9 4 2 14 1 5 • • la loi de Poisson P(λ):rpois() p(X=k)=e^{-λ} λ^k/k! exemple: b=rpois(10, 5);b [1] 7 5 5 6 4 7 4 6 3 6 • la loi géométrique g(p),p(X=k) = p (1-p)^k • rgeom(10,0.25) [1] 1 2 0 0 3 2 1 2 1 0 • Génération de nombres aléatoires • Exemples: sample():échantillon, tirages avec ou sans remise, permutations exemples: v1= sample(1:10) : permutation de{1,2,..,10} v2= sample(1:10,3) : tirage sans remise (par défaut )de 3 éléments parmi 10 v3= sample(1:2,10,replace=TRUE) : tirage avec remise de 10 valeurs 1 ou 2 au hasard • pour un tirage non uniforme on précise le vecteur probabilité(p1,…pn) avec pi=1. exemple:v4=sample(1:5,3,prob=c(0.1,0.2,0.1,0.5,0.1)) • rnorm(100):génère 100 observations issues de la loi normale de paramètres 0 et 1 (par défaut) rnorm(100, mean=2,var=3): génére 100 observations issues de la loi normale de paramètres 2 et 3 Complément 1: distributions des caractéristiques usuelles d'un usuelle d'un échantillon • Le pb central de l'inférence statistique: disposant d'un échantillon d'observations de taille n, déduire les propriétés de la population dont il est issu.(moyenne par exemple) • Si l'échantillon est représentatif,(divers modes d'échantillonnage, les observations deviennent des variables aléatoires ainsi que les résumés numériques usuels:il convient donc d'en chercher les lois de probabilité avant de tenter d'extrapoler à la population. • Exemple: on prélève au hasard n ampoules électriques dans une production et on mesure leur durée de vie, xi. Dans le cas d'un échantillon représentatif, les différences entre les xi peuvent etre considérées comme des fluctuations de nature aléatoire. suite D' où l'hypothèse fondamentale de la théorie de l'échantillonnage: Les valeurs observées xi sont des réalisations d'une même variable aléatoire X, appelée variable parente. Cela revient à postuler l'existence d'une var aléatoire X « durée de vie d'une ampoule », dont on observe n réalisations xi, ou bien à postuler l'existence de n var aléatoires Xi toutes de même loi et dont on observe une seule réalisation xi. Un échantillon (x1,...xn) constitue n réalisations indépendantes de la var X, ou bien une réalisation unique du n-uplet (X1,...Xn). Par extension on appelle échantillon le nuple (X1,...Xn). Suite: définition d'une statistique La théorie de l'échantillonnage se propose d'étudier les propriétés du n-uple(X1,...Xn)et des caractéristiques le résumant, à partir des propriétés de X, en étudiant en particulier ce qui se passe lorsque n (taille de l'échantillon)est grand. Statistique: Une statistique est une fonction mesurable de X1,...Xn. T=f(X1,...Xn) Exemple 1 la moyenne La statistique « moyenne empirique de l'échantillon » T=1/n( Σ Xi) a pour moyenne la moyenne de X,E(T)=E(X) pour variance la variance de X divisé par n V(T)=V(X) /n loi forte des grands nombres: T tend presque sûrement vers m théorème central limite:T-E(X)/(σ/sqrt(n))tend vers la loi normale centrée réduite N(0,1) résultat fondamental en statistique, vrai lorsque les Xi sont indépendantes. Exemple 2 la variance La statistique « variance empirique l'échantillon » de S2=1/n Σ( Xi-T)2 a pour moyenne E(S2)=(n-1/n)V(X).On dit que cette statistique est biaisée (E(S2)n'est pas égal à V(X)) Théorème central limite: [S2-(n-1/n)σ2]/sqrt(V(S2))tend vers normale centrée réduite N(0,1). résultat vrai lorsque les Xi sont indépendantes. la loi Génération de matrices • Ce sont des vecteurs qui possèdent un argument supplémentaire, qui est lui-même un vecteur de longueur 2, sa dimension, et qui définit le nombre de lignes et de colonnes • ex: M=matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL ) • Sélection dans une matrice,sous-matrices M[1,2],M[c(2,3),c(3,4)] M[i,],M[,j]: sélection d’une ligne ou d’une colonne M[c(1,5,4),]: sélection de plusieurs lignes (1,5 et 4) • Dimension d’une matrice: dim(): renvoie la dimension de la matrice. On peut aussi imposer cette dimension Génération de matrices(suite) • exemple: v=1:12; M=matrix(v);dim(M)=c(3,4);M; [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 • Indice linéaire (par colonne) M[v],M[-v] exemple:M[-3] donne la matrice privée de son troisième élément, soit un vecteur • M[M[,1]>0,]:sélectionne la sous matrice pour laquelle les valeurs dans la première colonne sont positives Opérations sur les matrices • Les opérateurs habituels fonctionnent élément par élément • Le produit matriciel algébrique:%*% • t():transposition • diag(): si v est un vecteur, diag(v)crée une matrice diagonale ayant v sur la diagonale si M est une matrice, diag(M) extrait la diagonale de M • sum():si v est un vecteur ou une matrice, sum(v) calcule la somme de tous les éléments de v sum(v,na.rm=TRUE):somme sans tenir compte des NA Opérations sur les matrices (suite) • det(): déterminant d ’une matrice carrée • solve():inverse d ’une matrice , ou résolution d ’un système d ’équations linéaire • eigen(): calcul des valeurs propres et vecteurs propres Opérations sur les matrices (suite) • apply(M,margin,fun,…):applique à M la fonction fun (ou un opérateur, mais qui doit alors être mis entre guillemets),margin indique si l’action doit être appliquée sur les lignes ( margin=1), les colonnes ( margin=2), ou les deux ( margin=c(1,2)) • exemples: • apply(M,1,sum):le résultat est une colonne formée des sommes des lignes de la matrice • apply(M,2,sum):pareil pour les colonnes Les listes • Création de listes: avec la fonction list() • Il n’y a aucune contrainte sur les objets qui y sont inclus Exemple: x=1:10;y= letters ; L=list(x,y); crée une liste sans nom L=list(chiffres=0:9,lettres=letters);L $chiffres [1] 0 1 2 3 4 5 6 7 8 9 $lettres [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" Les deux champs sont accessibles par L$chiffres; L$lettres; Les listes (exemple) • On trouve souvent des listes comme résultat d'une commande R • exemple:lm() est une fonction retournant pour un modèle linéaire une liste contenant au moins: coefficients, résidus,valeurs estimées,rangs, poids.... Les series temporelles • La fonction ts() va créer une série temporelle à partir d’un vecteur (ou d’une matrice), et des options suivantes ts(data=,start=,end=,frequency=…) data:un vecteur ou une matrice start: le temps de la première observation end:le temps de la dernière observation frequency: le nombre d’observations par unité de temps t=ts(matrix(rpois(36,5),12,3),start=c(1961,1), frequency=12) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 1961 1961 1961 1961 1961 1961 1961 1961 1961 1961 1961 1961 Series 1 Series 2 Series 3 7 6 8 7 8 4 4 2 5 3 3 4 7 6 10 4 6 6 5 5 4 3 3 6 7 3 3 4 3 7 7 2 7 3 4 4 plot(t) Etude empirique des fluctuations d'échantillonnage • Quelquefois, on est dans l'impossibilité de calculer la distribution d'échantillonnage de certaines caractéristiques utiles: soit parce que n est trop petit,soit parce que la distribution parente est inconnue • On utilise alors des techniques de simulation, qui substitue la puissance de calcul d'un ordinateur à celle d'un développement analytique: Population de distribution connue: • Si on connait la loi F de la variable parente X, il suffit de simuler un très grand nombre N d'échantillons de n valeurs de X. Pour chaque échantillon, on calcule la statistique cherchée, d'ou une distribution T1, ...Ti • Si N est grand, la répatition empirique des Ti est proche de la loi de la variable T Population de distribution inconnue:la méthode de rééchantillonnage bootstrap • L'idée (B .EFRON) est la suivante: • Si n est grand Fn* est proche de F, on aura donc une bonne approximation de la loi de T en utilisant Fn*à la place de F. • On tire donc des échantillons de n valeursdans la loi Fn*, ce qui revient à rééchantillonner dans l'échantillon • x1,...xn. • Autrement dit à effectuer des tirages avec remise des n valeurs parmi les n observées • Les valeurs observées sont donc répétées. • Lorsque n n'est pas très grand, on peuténumérer tous les échantillons possible équiprobables,(n^n),sinon on se contente d'en tirer un nombre suffisemment grand à l'aide d'une technique de tirage dans une population finie Echantillons artificiels simulation • Obtention de nombres aléatoires.(Les méthodes les plus employées sont basées sur des suites récurrentes...) • Exemple de simulation de variable aléatoire de Bernoulli de paramètre p: on tire un nombre au hasard entre 0 et 1 s'il est inférieur à p X=1, supérieur X=0. A partir d'une var de Bernoulli, on utilise le fait qu'une var Binomiale B(n,p) est la somme de n var de Bernoulli B(p). • Exemple de simulation de loi normale: si U et V sont deux var uniformes sur [0,1] X et Y définies comme ci-dessous sont deux var normales centrées réduites: • X=(-2ln(U))(1/2) cos(2 Π V) • Y=(-2ln(U))(1/2) sin(2 Π V) ... Echantillons artificiels simulation Exemple de simulation de loi gamma: Exemple de simulation de loi de Poisson: Voir Saporta p281 Cours 3 data frames data.frame • En interne ce sont des listes, dont les champs sont des colonnes • En apparence ce sont des matrices, avec comme différence essentielle que les différentes colonnes peuvent être de modes distincts:alphanumériques, booléennes, facteurs… • Les lignes et les colonnes sont nommées et on peut y accéder par leur indice de position ou par leur nom… exemple: L= LETTERS[1:3]; • D=data.frame(=rep(1,10),y=1:10,fac=sample(L,10, repl=TRUE)); La troisième colonne est D[,3]ou D[,”fac”]ouD$fac • C’est le type par défaut résultant de la lecture de fichiers externes et nécéssaire pour exporter des tableaux de R 1 2 3 4 5 6 7 8 9 10 x y 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 fac C C A B A A B A B C Fonctions pour les data frames x 1 2 3 4 5 6 7 8 9 10 y fac salle 1 1 B 1 1 2 A 2 1 3 B 1 1 4 A 2 1 5 C 1 1 6 C 2 1 7 B 1 1 8 C 2 1 9 B 1 1 10 A 2 • data.frame(): • names(),colnames()rownames()lis te des noms de ligne et de colonnes • dimnames():liste ayant 2 champs: les noms de lignes et les noms de colonne • dim():liste donnant les dimensions du data frame • cbind():concaténation en colonne • rbind():concaténation en ligne • Exemple:cbind(d,salle=rep(c(1,2 ),5)) La fonction data() : • Cette fonction permet de lire des données internes un data.frame ou de lister les data frame existants Exemples: data() # liste de tous les data frame dans le package par défaut « datasets » data(USArrests) # charge le data frame USArrests help(USArrests) # donne des informations sur le data frame « USArrests », si elles existent data(package = .packages(all.available = TRUE))# Donne la liste de tous les data frames de tous les packages disponibles try(data(package = "rpart") )# liste des data frame dans le package rpart La fonction library() Exemples: library():donne la liste des packages disponibles On peut en charger d’autres par le CRAN par exemple library(cluster);data(agriculture);permet de charger le data frame « agriculture » du package « cluster » data(agriculture, package=« cluster »); permet aussi de charger ce data frame Lois de probabilité, distributions • On peut évaluer les quantités suivantes: Fonctions de répartition Densité Quantiles Simulations • Les fonctions ont le même nom avec des préfixes différents r: donne des échantillons d: donne les valeurs P(X=j) p: donne les valeurs P(X<=x) q: donne la valeur y telle que P(X=x)=y Exemples: dnorm(),pnorm(),qnorm(),rnorm():loi normale dbinom(),pbinom(),qbinom(),rbinom():loi binomiale dt(),pt(),qt(),rt():loi de student dpois(), ppois(), qpois(), tpois():loi de Poisson … exemples dbinom(k, n, p) donne la valeur une loi B(n,p),c’est-à-dire Exemple: dbinom(3,10,0.2) P(X=k) sachant que X suit 0.2013266 rbinom(10,n,p) donne un échantillon de taille 10 extrait d’une population suivant une loi B(n,p): Exemple: rbinom(10,10,0.2) [1] 5 2 3 2 4 0 4 2 0 2 pbinom(k,n,p) donne P(X<=k) sachant que X suit une loi B(n,p),c’est-à-dire la valeur de la fonction de distribution F(k) Exemples: pbinom(3,10,0.2); 0.8791261 pbinom(1:10,10,0,2) ; [1] 0.1073742 0.3758096 0.6777995 0.8791261 0.9672065 0.9936306 0.9991356 0.9999221 0.9999958 1.0000000 0 2 4 6 c(-1, x) 8 10 0.0 0.2 0.4 c(0, z) 0.6 0.8 1.0 qbinom(q,n,p) est le quantile , c’est-à-dire la plus petite valeur x telle que F(x)=P(X<=x) >=q. Exemple: qbinom(0.5,10,0.2) ; [1] 2 qchisq(.1,df=8) est le premier décile deX^2(8) Fonction de répartition de la loi binomiale de paramètres 10 et 0,2 0.6 0.4 0.2 0.0 c(0, z) 0.8 1.0 • 0 2 4 6 c(-1, x) 8 10 Exemple d'une loi continue: la loi normale qnorm(0.2) [1] -0.8416212 0.6 0.4 0.2 0.0 pnorm(x) 0.8 1.0 • 0 5 x 10 Représentation de données: histogrammes La fonction hist() Exemple: v=rbinom(1000,10,0.4) table(v) v 0 1 2 3 4 7 8 4 44 110 215 253 194 125 hist(v) 5 42 6 13 Distribution d’un ensemble d’observations • • • • Quelques fonctions: si v est un ensemble d’observations table(v): compte les fréquences des éléments de v hist(v): trace l’histogramme summary(v): renvoie un résumé statistique du contenu de v,avec le min 1er quartile, moyenne, médiane,3iemme quartile et max • quantile(v): renvoie les quantiles correspondant au vecteur de probabilité donné. Par défaut renvoie les quartiles • Moins utilisées stem():arbre qqplot(x,y):trace les quantiles de x /quantiles de y exemples essai=sample(1:20,200,replace=TRUE) • stem(essai) • • • • • • • • • • • • • • • • • • • • 1 | 0000000000000000 1| 2 | 0000000000000000000000000 2| 3 | 00000000000000000000000 3| 4 | 0000000000000000 4| 5 | 00000000000000000000 5| 6 | 000000000000000000000 6| 7 | 00000000000000000 7| 8 | 00000000000000000000000000 8| 9 | 00000000000000000 9| 10 | 0000000000000000000 • hist(essai) • Plot(density(essai)) density(essai); density(x = essai) Data: essai (200 obs.); Bandwidth 'bw' = 0.8883 x Min. :-1.665 Min. :0.0004156 1st Qu : 1.918 1st Qu.:0.0295460 Median : 5.500 Median :0.0946940 Mean : 5.500 Mean :0.0697013 3rd Qu.: 9.082 3rd Qu.:0.1003626 Max. :12.665 Max. :0.1102250 y Cours 4 Modes Modes possibles Plusieurs modes Vecteur vector Numérique,caractère,complexe logique Non Facteur factor Numérique,caractère Non Tableau array Numérique,caractère,complexe logique Non Matrice matrix Numérique,caractère,complexe logique Non Data.frame Numérique,caractère,complexe logique Oui Série temporelle ts Numérique,caractère,complexe logique oui Liste list Numérique, caractère, complexe logique oui Importer des fichiers ascii • Pour les lectures et écritures dans un fichier,R utilise le repertoire de travail. • getwd():permet de connaître ce repertoire • setwd():permet de modifier le repertoire de travail exemple setwd(« c:/data ») • R peut lire des données stockées dans un fichier texte (ascii):read.table() la sortie est un data.frame arguments de cette fonction: file= nom du fichier sep= séparateur (espace par défaut) header= booléen (=TRUE si le nom des colonnes est en tête, FALSE sinon) Exemple: fichier c:\ArR\fic.txt read.table(file=,sep=,header=) F=read.table(« c:\\ArR\\fic.txt », sep=« \t»,header=TRUE); • Variantes:read.csv(), read.delim(),read.fwf()…ou des fichiers dans d ’autres formats(Excell,SAS,SPSS), bases de données SQL… • les fonctions ne sont pas toujours dans le package base et exporter • Ecriture d’un fichier write.table() arguments: file= nom du fichier append= booléen si TRUE ajoute au fichier existant, si FALSE ecrase le fichier existant col.names= booléen si TRUE écrit les noms de colonnes row.names= idem pour les lignes Sauvegarder certains objets en binaire ou en ASCII et les restaurer Fonctions: • dump(): sauve en ascii des objets R • source():recharge les objets sauvés par dump(),par exemple un script sauvegardé sous le nom test.R sera rappelé par source(« test.R », echo=TRUE) • save(): comme dump() mais en binaire • load(): comme source() mais en binaire En pratique, on pourra créer un repertoirede travail par analyse de données, et y déposer: • les fichiers de données brutes • le fichier script contenant les commandes R • le workspace et les fichiers résultats(textes et graphiques) Eviter d ’écrire des boucles avec les fonctions apply() lapply()sapply() apply(X, MARGIN, FUN, ...) retourne un vecteur de la taille appropriée, où • X: tableau • Margin =1 pour les lignes, 2 pour les colonnes, c(1,2) pour les lignes et les colonnes • Fun: fonction '+', '%*%‘, mean, sum,... • lapply sapply() même fonction pour les listes et les vecteurs Eviter d ’écrire des boucles (2) • Exemple 1 n=10 p=0.2 x=0:n y=choose(n,x)*p^x*(1p)^(n-x) #ou bien y=dbinom(x,n,p) plot(x,y,type="h" ,lwd=10) • Exemple 2 prod(1:8); 40320 identique à factorial(8) Le type factor:Un exemple • Un facteur est un objet vecteur qui peut être utilisé pour spécifier une classification discrète des composants d’un autre vecteur de même longueur • Facteurs non ordonné:variable qualitative • Facteurs ordonnés:variable ordonnée qualitative • prov=c("PA","PA","AG","RG","ME","CT","CT","SR","TP ","EN","CL","ME","PA","AG","RG","ME","CT","CT","SR ","TP","EN") • length(prov) • [1] 21 • • fprov=factor(prov) ;fprov [1] PA PA AG RG ME CT CT SR TP EN CL ME PA AG RG ME CT CT SR TP EN • Levels: AG CL CT EN ME PA RG SR TP • levels(fprov) • [1] "AG" "CL" "CT" "EN" "ME" "PA" "RG" "SR" "TP" •revenus=c(13000,14900,14000,16100,14500,1660 0,15900,15400,17000,19000,14600,17000,18500,1 5800,14500,16600,15900,15400,17000,19000,2000 0) •revenu.par.province=tapply(revenus,fprov,mea n) •revenu.par.province AG CL CT EN ME PA 14900.00 14600.00 15950.00 19500.00 16033.33 15466.6 RG SR TP 15300.00 16200.00 18000.00 La fonction which() • which(x, arr.ind = FALSE) • x: un vecteur ou tableau logique • arr.ind: logique est-ce que les indices du tableau doivent être retournés lorsque x est un tableau? • Exemple: m = matrix(12:24,3,4) ;m [1,] [2,] [3,] [,1] [,2] [,3] [,4] 12 15 18 21 13 16 19 22 14 17 20 23 which(m %% 3 == 0) [1] 1 4 7 10 which(m %% 3 == 0, arr.ind=TRUE) row col [1,] 1 1 [2,] 1 2 [3,] 1 3 [4,] 1 4 Cours 5 Les graphiques Les graphiques • Le résultat d’une fonction graphique ne peut pas être assigné à un objet mais est envoyé à un dispositif graphique (graphical device) • Il y a deux sortes de fonctions graphiques: -principales qui créent un nouveau graphe -secondaires qui ajoutent des éléments au graphe pré-existant Les fenêtres graphiques • On peut avoir plusieurs fenêtres, une seule est active • Ouvrir une fenêtre: xll(),pdf()… • Liste des fenêtres ouvertes et leur numéro dev.list() • Active la fenêtre i: dev.set(i) • Ferme la fenêtre i: dev.off(i) • Partitionner une fenêtre split.screen(): exemple: split.screen(c(1,2)) 2 graphes en ligne • • screen():sélectionne une fenêtre erase.screen():efface, sauf si le fond d’écran est transparent(valeur par défaut) La commande par() • Les graphes sont produits en fonction de paramètres graphiques définis par défaut et modifiables à travers la commande par() • Exemples: par(bg="cornsilk") par(xlog=TRUE); par(mfrow=c(3,2)) divise la fenêtre graphique en 6 (par défaut 1 seul graphe par fenêtre) La commande par() suite • Il est prudent de conserver l ’ancien paramétrage • exemple: op=par(no.readonly = TRUE) #mémorise sous le nom op l ’ancien paramétrage par(mfrow=c(1,2)) #modifie le paramétrage plot(1:10,sin(1:10)) plot(1:10,cos(1:10)) par(op) # rétablit l ’ancien paramétrage Quelques fonctions graphiques principales • • • • • • • • • • • plot(x): valeurs de x en ordonnées plot(x,y): nuage de points y en ordonnées x en abcisses coplot():trace tous les nuages conditionnels boxplot():boites à moustaches pairs(): plusieurs nuages, tous les nuages possible sur toutes les colonnes possible du data frame hist():histogramme des fréquences barplot(), matplot(): : diagrammes en batons curve(): tracé d ’une courbe qqnorm(x):quantiles de x en fonction des quantiles de la loi normale qqlot(x,y):quantiles de y en fonction des quantiles de x persp():vues en perspective Exemple: la fonction curve() curve(sin,0, pi) curve(x^3-3*x, -2, 2) curve(x^2-2, add = TRUE, col = "violet") curve(pnorm(x),-3,3, col="red") curve(dnorm(x),-3,3,col="blue",add=TRUE) Les arguments des fonctions principales add=TRUE Force la fonction à agir comme une fonction de bas niveau (superpose au graphique précédent) axes=FALSE log=« x » log=« y » log=« xy » Considère les axes comme logarithmiques type= « p »dessine des points « l » dessine une ligne, « s » ou « S » une fonction en escalier… xlab= ylab= Nom de l’axe des x des y Fixe les limites des axes xlim= ylim= main= Titre de la figure (en haut du graphique) Fonctions graphiques secondaires • points():comme plot(), mais superpose au graphique précédent • lines(),segments() :trace des segments • text(),mtext(): ajout de texte • arrows(): ajoute des flèches • abline(h=): lignes horizontales • abline(v=): lignes verticales • abline(a,b): ligne de pente b, ordonnée à l’origine a • legend(x,y): ajoute la légende au point (x,y) • title(): ajout du titre • locator():positionne un point sur la fenêtre graphique • NB: avec text() on peut afficher une équation utilisant des expressions compatibles avec TEX curve(dnorm(x),from=-3,to=3, main="densité de la loi normale centrée réduite") • • 0.4 densité de la loi normale centrée réduite 0.2 0.3 abline(v=-1,col=3) abline(v=1,col=3) 0.1 abline(v=3,col=4) abline(v=-3,col=4) abline(h=0) 0.0 dnorm(x) abline(v=2,col=2) abline(v=-2,col=2) -3 -2 -1 0 x 1 2 3 Exemples de graphiques -2 -1 x 0 1 2 plot(rnorm(100)) 0 20 40 60 Index 80 100 1 0 -1 -2 rnorm(100) 2 plot(rnorm(100),type="l") 0 20 40 60 Index 80 100 • simdonnees=rexp(1000, rate=0.1) hist(simdonnees,prob=T) curve(dexp(x,rate=.1),add=TRUE) x=rnorm(10);y=rnorm(10); plot(x,y,xlab="dix valeurs au hasard", ylab="dix autres valeurs") plot(x,y,xlab="dix valeurs au hasard", ylab="dix autres valeurs", xlim=c(2,2),ylim=c(2,2), pch=22,col="red",bg="yellow") • x=rnorm(10);y=rnorm(10); • plot(x,y,xlab="dix valeurs au hasard", ylab="dix autres valeurs",xlim=c(-2,2),ylim=c(2,2),pch=22,col="red",bg="yello w",bty="l",tcl=0.4,main="commen t customiser un graphique avec R") boxplot():boites à moustaches boxplot(len ~ dose, data = ToothGrowth) Guinea Pigs' Tooth Growth 35 len supp dose 30 1 4.2 VC 0.5 2 11.5 VC 0.5 6 10.0 VC 0.5 20 15 10 5 6.4 VC 0.5 tooth length 4 5.8 VC 0.5 25 3 7.3 VC 0.5 5 7 11.2 VC 0.5 9 5.2 VC 0.5 10 7.0 VC 0.5 0 8 11.2 VC 0.5 0.5 1 Vitamin C dose mg 2 pairs(): plusieurs nuages, tous les nuages possible sur toutes les colonnes possible du data frame pairs(iris[1:4], pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)]) iris Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa Anderson's Iris Data -- 3 species 3.0 4.0 0.5 1.5 2.5 7.5 2.0 4.0 4.5 6.0 Sepal.Length 5 7 2.0 3.0 Sepal.Width 1.5 2.5 1 3 Petal.Length 0.5 Petal.Width 4.5 5.5 6.5 7.5 1 2 3 4 5 6 7 barplot(): diagrammes en batons 0 5 10 15 20 T =table(rpois(100,lambda=5)) r = barplot(T, col='gray') 1 2 3 4 5 6 7 8 9 10 11 Programmation de base Boucles et Tests • For( in ) { } • While( ) { } • Les exécutions conditionnelles (if .. else) peuvent être évitées avec des indexations logiques. Exemples: y=numeric(length(x)); for(i in 1:length(x)) {if(x[i]==b)y[i]=0 else y[i]=1} Peut être remplacé par: y[x==b]=0; y[x!=b]=1; • Les fonctions du type apply(),évitent d’écrire des boucles. Les fonctions • On peut écrire ses propres fonctions: • Pour pouvoir être exécutée une fonction doit être chargée en mémoire, cela peut se faire de plusieurs façons: • Entrer les lignes au clavier, • ou les copier /coller à partir d’un éditeur • Enregistrer la fonction dans un fichier ascii et la charger par la commande source() • Si on souhaite que la fonction soit chargée au démarrage, il peut les enregistrer dans un workspace avec l’extension .Rdata qui sera chargé en mémoire s’il est localisé dans le répertoire de travail de démarrage getwd(): indique le repertoire de travail • • • • Exemple carre=function(x){print(x*x)} carre(3);9 Il y a deux manières de spécifier les arguments à une fonction: par leur position par leur nom Exemple: fonc=function(arg1,arg2,arg3) fonc(x,y,z); fonc(arg2=y,arg1=x,arg3=z); • print() pour afficher le contenu d ’un objet dans une fonction • Arguments par défaut • Exemple: • Moy.et.etype=function(x=1:10) {moyenne=mean(x); etype=sd(x); print(c(moyenne,etype)); } moy.et.etype() [1] 5.500000 3.027650 moy.et.etype(1:100) [1] 50.50000 29.01149 Fonctions mathématiques de base sum(x) Somme des éléments prod(x) Produit des éléments de x max(x), min(x) Maximum, minimum des éléments de x which.max(x) Retourne l’indice du maximum des éléments de x which.min(x) Retourne l’indice du minimum des éléments de x range(x) Idem que c(min,max) mean(x) Moyenne des éléments de x median(x) Médiane des éléments de x var(x) ou cov(x) Variance des éléments de x(calculée sur n-1) matrice des var et cov si x est une matrice cor(x) Matrice de corrélation si x est une matrice ou un data frame sd(x) Ecart-type des éléments de x de x Autres fonctions round(x,n) Arrondit les éléments de x à n chiffres après la virgule rev(x) Inverse l’ordre des éléments de x sort(x) Trie les éléments de x dans l’ordre ascendant rank(x) Range les éléments de x scale(x) Centre et réduit les données pmin(x,y,…) Un vecteur dont le iéme élément est le minimum entre x[i] et y[i] cumsum(x) Un vecteur dont le ieme élément est la somme de x[1]à x[i] cumprod(), cummin(),cummax() Idem pour produit, minimum, maximum match(x,y) Retourne un vecteur de meme longueur que x contenant les éléments de x qui sont dans y encore… choose(n,k) Coefficient binomial Cnk na.omit() Supprime les observations avec données manquantes na.fail() Retourne un message d’erreur si x contient au moins un NA unique() Si x est un vecteur ou un data frame, retourne un objet similaire mais avec les éléments duppliqués supprimés table() Retourne un tableau des effectifs des différentes valeurs de x subset() Retourne une selection de x en fonction de critères sample(x,size) Ré-échantillonnage aléatoire et sans remise de size éléments dans x Les régressions linéaires Les analyses statistiques avec R Modèles linéaires ,lm() modèles linéaires généralisés,glm() analyse de variance, aov() généralités • L ’argument principal type: réponse ~ est une formule du prédicteur exemples: data(I=InsectSprays) ~ aov(sqrt(count) spray,data=I) équivalent à : ~ aov(sqrt(I$count) I$spray) ou à aov(sqrt(I[,1]) ~ I[,2]) Les formules • y~model ou y est la réponse analysée et model est un ensemble de termes pour lesquels les paramètres sont estimés • attention: les symboles arithmétiques ont ici une signification particulière • exemples: y~x1+x2 désigne le modèle y=ax1+bx2+c y~I(x1+x2) désigne le modèle y=a(x1+x2)+c y~poly(x,2) désigne le modèle y=ax^2+bx+c y~x1+x2 désigne le modèle y=ax1+bx2+c y~x1-1 désigne le modèle y=ax1 Les fonctions génériques • Les objets qui contiennent les résultats d ’une analyse, ont un attribut particulier, la classe. • Certaines fonctions, dites génériques, permettent d ’extraire des informations d ’un objet résultat • exemples: summary()qui a une action différente sur un objet de classe lm() , aov(),... apropos("^summary") [1] "summary.aov" "summary.glm" [4] "summary.infl" "summary.manova" [7] "summary.mlm" "summaryRprof" [10] "summary" "summary.data.frame" [13] "summary.Date" "summary.factor" [16] "summary.matrix" "summary.POSIXlt" [19] "summary.table" "summary.aovlist" "summary.lm" "summary.stepfun" "summary.connection" "summary.default" "summary.POSIXct" Les fonctions génériques • • • • • • • • plot() print() résumé succint summary() résumé détaillé df.residuals nbre de ddl résiduels coef coefficients estimés residuals résidus deviance déviance fitted valeurs ajustées par le modèle • logLik logarithme de la vraisemblance... Un objet-résultat, produit par aov(), lm()…. est généralement une liste,bien qu ’il ne soit pas affiché comme tel, dont les éléments peuvent être affiché par la fonction names() ex names(res.reg)pour une régréssion linéaire "coefficients" "residuals" "effects" "rank" "fitted.values" "assign" "qr" "df.residual" "xlevels" "terms" "model" "call" Analyses supplémentaires à partir d ’un objet add1():teste successivement tous les termes qui peuvent être ajoutés à un modèle drop1():teste successivement tous les termes qui peuvent être enlevés à un modèle anova(): calcule une table d ’analyse de variance ou de deviance pour un ou plusieurs modèles predict(): calcule les valeurs prédites pour des nouvelles données update(): réajuste un modèle ... Régréssion linéaire simple • Sur des données fictives: x=1:100 x=sample(x,30,replace=TRUE) x [1] 62 18 9 67 43 38 57 12 41 29 69 76 77 46 42 75 32 74 [26] 71 81 76 94 34 6 40 51 88 61 3 38 y=3+7*x+rnorm(30,0,100) Y [1] 340.61710 254.86969 54.52298 463.78335 379.30676 177.27873 555.98297 [8] -13.48922 273.11081 187.46739 439.59869 380.92303 537.40362 414.12641 [15] 299.09269 494.05965 415.9 plot(x,y) res.reg=lm(y~x); Call: • lm(formula = y ~ x) Coefficients: (Intercept) x 13.22 6.71 Droite de régression: y=6,71 *x +13.22 plot(x,y); abline(res.reg) summary(res.reg) • Residuals: Min 1Q -142.29 -58.64 Median -17.17 3Q 63.33 Max 187.99 • Coefficients: • Estimate Std. Error t value Pr(>|t|) (Intercept) 13.2213 37.0548 0.357 0.724 x 6.7105 0.6587 10.188 6.37e-11 • Residual standard error: 90.65 on 28 degrees of freedom • Multiple R-Squared: 0.7875, Adjusted Rsquared: 0.78 Plus sophistiquée... • La croissance d ’une bactérie (par jour), modélisé par N=N0 e^kt t=2:12; N=c(55,90,135,245,403,665,1100,1810,3000,4 450,7350); Le modèle est le suivant; • t=c(2:12);N=c(55,90,135,245,403,665, 1100,1810,3000,4450,7350) • T=data.frame(t,N,y=log(N));T; > T t N y 1 2 55 4.007333 2 3 90 4.499810 3 4 135 4.905275 4 5 245 5.501258….. Calcul de moyenne et écart-type • apply(T,2,mean); t N 7.000000 1754.818182 • apply(T,2,sd); y 6.475094 t N 3.316625 2326.625317 y 1.640357 plot(T$t,T$N) plot(T$t,T$y) droite de regression • ll=lm(y~t,data=T);ll; Call: lm(formula = y ~ t, data = T) Coefficients: (Intercept) 3.0142 t 0.4944 abline(ll); summary(ll) • Call: lm(formula = y ~ t, data = T) • Residuals: Min 1Q -0.08656 -0.02117 Median 0.01500 3Q 0.02912 • Coefficients: Estimate Std. Error t value (Intercept) 3.014162 0.032947 91.49 t 0.494419 0.004289 115.27 --Signif. codes: 0 `***' 0.001 `**' 0.01 ' 1 Max 0.04802 Pr(>|t|) 1.13e-14 *** 1.41e-15 *** `*' 0.05 `.' 0.1 ` summary(ll) suite Residual standard error: 0.04499 on 9 degrees of freedom Multiple R-Squared: 0.9993, Adjusted R-squared: 0.9992 F-statistic: 1.329e+04 on 1 and 9 DF, p-value: 1.413e-15 Régression linéaire multiple • Exemples: Les tests statistiques les test du chi-deux La fonction chisq.test(x,y,logical,p) • Premier exemple: on lance un dé 300 fois et on obtient le résultat suivant: 1 2 3 4 5 6 43 49 56 45 66 41 x=c(43, 49, 56, 45, 66, 41) prob=rep(1/6,6) chisq.test(x,p=prob) • Chi-squared test for given probabilities • data: x • X-squared = 8.96, df = 5, p-value = 0.1107 Second exemple sur un tableau de contingence Exemple d ’un tableau donnant la cécité en fonction du sexe: tab=matrix(c(442,514,38,6),nrow=2,byrow=TRUE) colnames(tab)=c("homme","femme") rownames(tab)=c("voyant","aveugle") voyant aveugle homme femme 442 514 38 6 X2=chisq.test(tab,correct=FALSE) On teste s ’il y a une relation entre sexe et cécité (l ’hypothèse par défaut est celle d ’indépendance) Pearson's Chi-squared test data: tab X-squared = 27.1387, df = 1, p-value = 1.894e-07 attributes(x2) $names [1] "statistic" "parameter" "p.value" "method" "data.name" "observed" [7] "expected" "residuals" $class [1] "htest » par exemple: x2$expected homme femme voyant 458.88 497.12 aveugle 21.12 22.88 valeurs attendues sous hypothèse d ’indépendance x2$residuals homme femme voyant -0.787994 0.7570801 aveugle 3.673039 -3.5289413 sum(x2$residuals^2) 27.13874 la somme des carrés des résidus est la valeur du chi-deux • Soit le tableau de contingence suivant: • roux blond brun • bleu 13 20 7 • marron 24 10 18 • le test du chi-deux d ’indépendance s ’effectue ainsi: • chisq.test(m) • Pearson's Chi-squared test • data: m • X-squared = 10.0494, df = 2, p-value = 0.006574 on teste l ’hypothèse nulle suivante « H0:il y a indépendance entre la couleur des yeux et celle des cheveux » Test sur une moyenne: prop.test() • Pour comparer deux ou plusieurs proportions sur des échantillons de grande taille: prop.test(x, n, p = NULL,alternative = c("two.sided", "less", "greater"), conf.level = 0.95, correct = TRUE) Classification La fonction kmeans() Méthodes de type « nuées dynamiques »: on suppose que les individus sont des points de R^n muni de la distance euclidienne On recherche un partitionnement des individus en classes • Variance des classes minimale (classes homogènes) • Variance entre classes maximale • Rappel : théorème de Huygens: la somme de l ’inertie interclasse et de l ’inertie intraclasse est constante (inertie = moyenne des carrés des distances au centre de gravité) suite • Exemple en dimension 2 sur le dataframe D PROB LECT CARR OPER SYNO PFB SUITE ANAL D70 T M s 1 4.52 1.92 0.93 1.94 1.20 0.08 2.05 1.99 1.37 16.01 1.78 1.21 2 1.50 0.77 0.43 -0.32 1.20 1.26 2.05 1.99 2.30 11.19 1.24 0.85 3 1.77 0.19 1.94 1.19 1.20 0.59 2.05 1.50 1.37 11.80 1.31 0.61 4 1.22 0.19 2.19 0.43 1.20 0.92 2.05 0.51 0.75 9.10 1.01 0.76 5 1.22 1.92 -0.83 1.56 0.64 0.08 1.76 1.01 0.44 7.82 0.87 0.88 6 0.68 0.39 -0.83 -0.32 1.20 -1.77 1.76 0.76 0.18 1.70 0.19 1.08 7 2.05 0.77 0.68 0.43 0.36 1.60 1.76 0.51 1.06 9.23 1.03 0.63 8 0.42 0.39 -0.57 1.56 0.36 -0.93 1.76 0.26 0.44 2.86 0.32 0.90 9 -0.15 -0.19 1.44 -0.32 0.64 0.76 1.76 0.02 1.37 5.34 0.59 0.79 10 -0.42 -0.19 -0.57 1.19 0.64 E=D[,c(1,2)] cl <- kmeans(E, 4, 20) (donne 4 sous-nuages) plot(E, col = cl$cluster) (tracé pour un objet de type résultat de la fct kmeans) points(cl$centers, col = 1:4, pch = 8) Autre exemple • data(airquality); a=airquality [,3:4] • cl=kmeans(a,3,20) • plot(a, col = cl$cluster) ;points(cl$centers, col = 1:4, pch = 8) le résultat de la fct kmeans est une liste contenant :les composants suivants: • • cluster: un vecteur d’entiers indiquant la partition ( le sous-nuage) à laquelle est affecté chaque point centers: la matrice des centres des sous-nuages • withinss: The within-cluster sum of squares for each cluster. • size: le nombre de points dans chaque sous-nuage La fonction hclust() La fonction cutree()