Cours 5 Partie 2 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
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
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)
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)
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
Les arguments des fonctions principales Titre de la figure (en haut du graphique) main= Nom de l’axe des x des y Fixe les limites des axes xlab= ylab= xlim= ylim= « p »dessine des points « l » dessine une ligne, « s » ou « S » une fonction en escalier… type= Considère les axes comme logarithmiques log=« x » log=« y » log=« xy » axes=FALSE Force la fonction à agir comme une fonction de bas niveau (superpose au graphique précédent) add=TRUE
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") abline(v=2,col=2) abline(v=-2,col=2) abline(v=-1,col=3) abline(v=1,col=3) abline(v=3,col=4) abline(v=-3,col=4) abline(h=0)
Exemples de graphiques plot(rnorm(100))
plot(rnorm(100),type="l")
simdonnees=rexp(1000, rate=0 simdonnees=rexp(1000, rate=0.1) hist(simdonnees,prob=T) curve(dexp(x,rate=.1),add=TRUE) par(bg="lightyellow")
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="yellow",bty="l",tcl=0.4,main="comment customiser un graphique avec R")
boxplot():boites à moustaches boxplot(len ~ dose, data = ToothGrowth) len supp dose 1 4.2 VC 0.5 2 11.5 VC 0.5 3 7.3 VC 0.5 4 5.8 VC 0.5 5 6.4 VC 0.5 6 10.0 VC 0.5 7 11.2 VC 0.5 8 11.2 VC 0.5 9 5.2 VC 0.5 10 7.0 VC 0.5
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
barplot(): diagrammes en batons T =table(rpois(100,lambda=5)) r = barplot(T, col='gray')
barplot() tN=table(Ni = rpois(100, lambda=5)) r=barplot(tN, col=rainbow(20)) r [,1] [1,] 0.7 [2,] 1.9 [3,] 3.1 [4,] 4.3 [5,]....
Pour aller plus loin sur les graphiques demo(graphics); Et admirer...
Cours 5 Partie 1 Approfondissements divers
Eviter d ’écrire des boucles: 1 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 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*(1-p)^(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)
Un exemple d'utilisation du type factor
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 ou Facteurs ordonnés:variable qualitative ordonnée
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"
revenu.par.province=tapply(revenus,fprov,mean); revenu.par.province; revenus=c(13000,14900,14000,16100,14500,16600,15900,15400,17000,19000,14600,17000,18500,15800,14500,16600,15900,15400,17000,19000,20000) revenu.par.province=tapply(revenus,fprov,mean); 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] [,4] [1,] 12 15 18 21 [2,] 13 16 19 22 [3,] 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
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 substituent 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épartition 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 suffisamment grand à l'aide d'une technique de tirage dans une population finie