Université de Nice Sophia-Antipolis Année Universitaire 2013/2014 L3 MASS Analyse de données Feuille de TD Prise en main du logiciel R (2) durée : 1h30 Remarque 1 Cette seconde feuille de TD est dans la continuité de la première. Il s agit ici d apprendre à importer et à sauvegarder des données ainsi qu à réaliser les premiers graphiques. Sauvegarde de données : Par moment, il peut être utile de sauvegarder des données afin de pouvoir les utiliser par la suite. Les deux commandes les plus utilisées sont write et save. write ne peut être utilisé que pour des objets de type vecteur ou matrice alors que save peut être utilisé pour n importe quoi. Il faut bien faire attention au répertoire de travail pour sauvegarder les objets au bon endroit! (a) Exemples : Créez les objets suivants : x=c(1,4), M=matrix(1:10,ncol=2) et L=list(x,M). write(x, x.txt ) : sauvegarde l objet x dans un fichier x.txt. write(m, M.txt ) : sauvegarde l objet M dans un fichier M.txt. Attention, si vous ouvrez le fichier M.txt, vous constaterez que ce fichier contient plutôt la transposée de M. write(t(m), M.txt,ncolumns=2) : sauvegarde l objet M sous sa bonne forme dans le fichier M.txt. save(m,file= Mb.RData ) : sauvegarde l objet M dans le fichier Mb.RData. save(m,file= Mb.txt ) : sauvegarde l objet M dans le fichier Mb.txt. Mais illisible car la fonction save encode de façon à ce que seul le logiciel R puisse lire la sauvegarde. Par ailleurs, si vous oubliez le mot file, il y aura un message d erreur. (b) Exercices d application : Tapez write(l, L.txt ) et save(l,file= L.RData ) Créez le vecteur x constitué de 1000 simulations d une loi de Poisson de paramètre 2. Créez la matrice X constituée de 1000 lignes et 2 colonnes avec dans la première colonne des simulations d une loi normale d espérance 2 et de variance 0.1 et dans la seconde colonne des simulations d une loi de student de paramètre 2. Donnez respectivement les noms normale et student à la première et deuxième colonnes de X. A l aide de la fonction write, sauvegarder les objets x et X respectivement dans les fichiers x.txt et X.txt dans votre répertoire. A l aide de la fonction save, sauvegarder les objets x et X respectivement dans les fichiers x.rdata et X.RData dans votre répertoire. 1
Importation de données : Précédemment, nous avons vu comment créer un certain nombre d objets. Cependant, le rôle du statisticien est généralement de traiter des jeux de données recueillis par d autres. Donc, il se pose tout naturellement la question de savoir comment importer des jeux de données dans le logiciel R. Pour cela, il existe une commande principale read.table. Par ailleurs il existe la commande load qui permet d importer un objet de type.rdata. Une fois encore, le répertoire de travail est très important! (a) Exemples : A=read.table( M.txt ) : crée un objet A contenant les données du fichier M.txt. A=load( M.RData ) : crée un objet A contenant le nom de l objet stocké dans le fichier M.RData. Pour visualiser cet objet, il suffit alors de taper le nom contenu dans A. La différence entre les deux commandes est que l objet.rdata a conservé lors de la sauvegarde et de l importation le nom des colonnes, ce qui n a pas été fait avec read.table en l état. (b) Exercices d application : Tapez ls(). Qu obtenez-vous? Tapez rm(list=ls()), puis de nouveau ls(). Que c est-il passé? Chargez dans le workspace le contenu des fichiers x.txt et X.RData créés précédemment. Affichez les objets chargés. Ouvrez dans windows, indépendamment de R, le fichier M.txt. Enregistrez ce fichier sous le nom M2.txt et le modifier en ajoutant la première ligne suivante : var1 var2. Chargez ce fichier dans R à l aide de la commande read.table. L importation estelle correct? Si non, regardez l aide sur la fonction read.table pour procéder à une importation correcte. Représentations graphiques usuelles : La commande la plus simple pour procéder à une représentation graphique est la fonction plot. S il existe une seule commande, elle recèle un grand nombre d options qui permettent de procéder à des représentations différentes. En raison des très nombreuses options, il va être assez compliqué de tout détailler. Par conséquent, nous allons regarder l essentiel et ensuite, vous vous réfèrerez à l aide en ligne pour faire vos propres tentatives. (a) Commandes : Dans la fonction plot, il existe quelques arguments importants : type : permet de spécifier le type de tracé type= l : tracé par lignes brisées type= p : tracé des points type= b : tracé par lignes brisées avec représentation des points type= s : tracé d une fonction en escalier xlab et/ou ylab : permet respectivement de donner un nom aux axes main : permet de donner un titre au graphique 2
col : permet de définir la couleur des points et/ou traits lty : permet de définir le style des traits (voir les valeurs dans l aide sur la fonction par) lwd : permet de définir la grosseur du trait pch : permet de définir le style de représentation des points xaxt et/ou yaxt : permet de dire si les axes doivent être tracés ou non xlim et/ou ylim : permet de définir les valeurs limites des axes Il existe d autres fonctions que l on peut associer à la fonction plot, comme axis ou encore legend par exemple. La première permet de redéfinir le format des axes tandis que la seconde permet de définir une légende. (b) Exemples : En raison du nombre de possibilités, il est impossible d être ici exhaustif. Cependant, nous allons essayer d appréhender les différentes fonctions. plot(1:10,2*(1:10),type= p ) : création d un nuage de points plot(1:10,2*(1:10),type= p,xlab= x,ylab= y ) : création d un nuage de points et nouveaux noms aux axes. plot(1:10,2*(1:10),type= p,xlab= x,ylab= y,xaxt= n,yaxt= n ) : création d un nuage de points et suppression des axes. plot(1:10,2*(1:10),type= p,xlab=,ylab= ) : création d un nuage de points et sans nom aux axes. plot(1:10,2*(1:10),type= b ) : création d un tracé par ligne superposé au nuage de point plot(1:10,2*(1:10),type= b,pch=2) : idem précédemment avec modification du style des points. Modifiez la valeur de pch et identifiez les différents styles. Par ailleurs, il est possible de remplir certaines formes de points avec de la couleur à l aide de la commande bg. Regardez l aide sur la fonction points. plot(1:10,c(1,3,2,5,8,2,7,4,7,10),type= l,col="green") : création d un tracé par lignes brisées de couleur verte plot(1:10,c(1,3,2,5,8,2,7,4,7,10),type= l,lwd=3) : création d un tracé par lignes brisées plus épaisses plot(1:10,c(1,3,2,5,8,2,7,4,7,10),type= l,lty=3) : création d un tracé par lignes brisées en pointillé. Modifiez la valeur de lty et identifiez les différents styles. plot(1:10,2*(1:10),type= b,xlim=c(4,8),ylim=c(2,14)) : création d un tracé par ligne superposé au nuage de point et cadrage de la fenêtre graphique. Tapez plot(c(1,2,4,6,9,10),2*c(1,2,4,6,9,10),type= p,xlab= x,ylab= y ) puis axis(1,c(1,2,4,6,9,10),c("1","2","4","6","9","10")). Que se passe t il? Tapez plot(seq(-π,π,0.5),sin(seq(-π,π,0.5)),type= b,xlab= x,ylab=,col="red",pch=21,bg="red",xlim=c(-π,π),ylim=c(-1,1)) puis par(new=true), puis plot(seq(-π,π,0.5),cos(seq(-π,π,0.5)),type= b,xlab= x,ylab=,col="blue" 3
,pch=21,bg="blue",xlim=c(-π,π),ylim=c(-1,1)) et pour finir legend(-3,0.75,legend=c("sin","cos"),col=c("red","blue"),pch=c(21,21),lty=c(1,1,pt.bg=c("red","blue")). Qu est ce que cela produit? Expliquez chacun des arguments. (c) Exercices d applications : i. Représentez la fonction cos et la fonction sin sur [-π,π], la fonction cos en rouge et la fonction sin en bleu. Une légende et un titre devront figurer sur la représentation graphique. ii. Quelle fonction est représentée par l instruction suivante : plot(c(1,2,4,7,10),c(0,1,4,5,8), type= s,col= red,xlab=,ylab= ) iii. Et que fait ce qui suit : plot(1:10,1:10, type= p,col= red,xlab=,ylab= ) par(new=true) plot(1:8,0.5*(1:8), type= p,col= blue,xlab=,ylab= ) Est-ce que la représentation est correcte? Que faire pour la rendre correcte? Si l on oublie la ligne par(new=true) que se passe t il? Et si on la remplace par X11(), que se produit-il? Gestion de la fenêtre graphique : Parfois, il est nécessaire de diviser la fenêtre graphique principale en sous-fenêtres graphiques afin de pouvoir présenter sur un même graphique plusieurs graphes. Il existe plusieurs façons pour effectuer cette subdivision, nous allons en voir deux. (a) Commandes : Les deux commandes que nous utiliserons sont mfrow (ou son pendant mfcol) et split.screen. Mais avant de pouvoir diviser une fenêtre graphique, encore faut-il savoir ouvrir une telle fenêtre. La commande à connaître est X11(). X11() : permet d ouvrir une nouvelle fenêtre graphique. dev.cur() : permet de savoir la fenêtre graphique ouverte qui est active, à savoir celle sur laquelle il va être possible de tracer une courbe. On obtient en fait le numéro de la fenêtre active. dev.list() : donne le numéro de toutes les fenêtres graphiques ouvertes. dev.set(n) : permet de rendre actif la fenêtre graphique portant le numéro n si toutefois la fenêtre numéro n a été ouverte. dev.off() : permet de fermer la fenêtre graphique active. dev.off(n) : permet de fermer la fenêtre graphique numéro n si elle était ouverte (sans pour autant que la fenêtre n soit active). par(mfrow=c(3,2)) : divise la fenêtre graphique principale en 6 sous fenêtres organisées sur 3 lignes et 2 colonnes. La fenêtre numéro 1 est celle en haut à gauche, celle numéro 2 est celle en haut à droite et ainsi de suite avec un remplissage ligne par ligne. par(mfcol=c(3,2)) : divise la fenêtre graphique principale en 6 sous fenêtres organisées sur 3 lignes et 2 colonnes. La fenêtre numéro 1 est celle en haut à gauche, celle numéro 2 est celle du milieu à gauche et ainsi de suite avec un remplissage colonne par colonne. 4
split.screen(c(n,p)) : permet de scinder la fenêtre graphique en n*p sous fenêtres réparties sur n lignes et p colonnes. split.screen(c(n,p),k) : permet de scinder la fenêtre graphique numéro k en n*p sous fenêtres réparties sur n lignes et p colonnes. close.screen(all = TRUE) : permet de sortir du mode screen. A ne pas oublier à la fin de toute réalisation d un graphique. screen(n) : rend active la sous-fenêtre numéro n. Par défaut, la sous-fenêtre active créée lors de la dernière instruction et portant le plus petit numéro. Si l on revient sur une sous-fenêtre graphique déjà remplie, par défaut, le contenu est effacé. Pour ne pas effacer, il faut taper screen(n, FALSE). erase.screen(n) : permet d effacer le contenu de la sous-fenêtre numéro n. Attention, cela ne fonctionne que si le fond graphique n est pas transparent comme c est le cas par défaut. (b) Exemples : Tapez les instructions suivantes et commentez ce qui est fait. X11() X11() dev.cur(2) par(mfrow=c(2,3)) plot(seq(-π,π,0.01),sin(seq(-π,π,0.01)),type= l ) plot(seq(-π,π,0.5),sin(seq(-π,π,0.5)),type= l,xlim=c(-π,π),ylim=c(-1,1)) par(new=true) plot(seq(-π,π,0.01),sin(seq(-π,π,0.01)),type= l,xlim=c(-π,π),ylim=c(-1,1),col="red") plot(seq(-π,π,0.5),sin(seq(-π,π,0.5)),type= s,xlim=c(-π,π),ylim=c(-1,1),xlab=,ylab= ) par(new=true) plot(seq(-π,π,0.01),sin(seq(-π,π,0.01)),type= s,xlim=c(-π,π),ylim=c(-1,1), col="red",xlab=,ylab= ) plot(c(seq(0,3,0.01),seq(3.01,20,0.01)),c(exp(seq(0,3,0.01)),sqrt(seq(3.01,20,0.01))),type= l ) dev.cur(3) plot(seq(0,10,0.001),sqrt(seq(0,10,0.001)),type= l ) dev.off() X11() plot(1:10,1:10) graphics.off() Faire la même chose en remplaçant par(mfrow=c(2,3)) par par(mfcol=c(2,3)). Quelle différence cela produit-il? split.screen(c(2,1)) par(bg="white") plot(seq(-π,π,0.01),sin(seq(-π,π,0.01)),type= l ) split.screen(c(1,2),2) plot(seq(-π,π,0.5),sin(seq(-π,π,0.5)),type= l,xlim=c(-π,π),ylim=c(-1,1)) screen(3,false) 5
plot(seq(-π,π,0.01),sin(seq(-π,π,0.01)),type= l,xlim=c(-π,π),ylim=c(-1,1), col="red",lty=3) screen(4) plot(seq(-π,π,0.5),sin(seq(-π,π,0.5)),type= s,xlim=c(-π,π),ylim=c(-1,1),xlab=,ylab= ) screen(4,false) plot(seq(-π,π,0.01),sin(seq(-π,π,0.01)),type= s,xlim=c(-π,π),ylim=c(-1,1), col="red",xlab=,ylab= ) screen(1) plot(seq(-π,π,0.01),sin(seq(-π,π,0.01)),type= l,xlab=,ylab= ) close.screen(all=true) (c) Exercices : i. Superposez sur une même représentation graphique la fonction cosinus et la fonction sinus représentées sur l intervalle [ π/2, π/2]. ii. Sans effacer la représentation précédente, représentez sur une nouvelle fenêtre graphique ces mêmes fonctions mais cette-fois représentées sur l intervalle [ 3π, 3π]. iii. Sur une même représentation graphique, représentez dans des fenêtres différentes organisées de la façon suivante, deux fenêtres sur la première ligne et 4 sur la seconde. en haut à gauche : sur l intervalle [ 10, 10] avec un pas de 0.001 entre les points, superposez la fonction hyperbolique et la fonction exponentielle, la première en bleue et la seconde en rouge, toutes les deux en trait plein. Attention aux légendes des axes qui ne doivent pas apparaître. en haut à droite : sur l intervalle [0, 4] avec un pas de 0.001, superposez la fonction racine carrée, la fonction carrée et la fonction identité, la première en bleue en trait plein, la seconde en rouge en pointillé et la dernière en vert en traits alternés. Ajoutez une légende. Attention aux légendes des axes qui ne doivent pas apparaître. Dans l ordre sur la ligne du dessous : Représentez la même chose que dans le cadran supérieur gauche mais avec un pas de 1 et en mettant les points en plus des lignes sur la courbe. Même chose que la question d avant mais avec un pas de 0.1 Faites la même chose que dans le cadran supérieur droit, mais avec un pas de 1 et avec une fonction en escalier. Faites comme la question d avant mais avec un pas de 0.1. Revenez sur chacune des fenêtres graphiques et ajoutez un titre. Problèmes : (a) Exercice 1 : On veut regarder d une certaine manière l influence de la taille d un échantillon. Pour cela, on va générer, à l aide de la fonction rnorm, un échantillon de taille n, en faisant varier la valeur de n et faire une représentation graphique permettant de se comparer à la loi normale. Suivez les questions suivantes : 6
i. Dans l objet x1, stockez 10 simulations d une loi normale d espérance 2 et de variance 0.01. ii. Dans l objet x2, stockez 100 simulations d une loi normale d espérance 2 et de variance 0.01. iii. Dans l objet x3, stockez 1000 simulations d une loi normale d espérance 2 et de variance 0.01. iv. Dans l objet x4, stockez 10000 simulations d une loi normale d espérance 2 et de variance 0.01. v. Transformez x1 en un objet y1 (respectivement x2 en y2, x3 en y3 et x4 en y4), de façon à vous ramener à une loi normale centrée réduite. vi. Subdivisez une fenêtre graphique en 4 sous-fenêtres. vii. Dans chacune des sous-fenêtres (celle en haut à gauche associée à y1, en haut à droite à y2, en bas à gauche à y3 et en bas à droite à y4), superposez la fonction empirique et la fonction de répartition associée à une loi normale. Vous utiliserez deux couleurs différentes pour chacune des courbes, mettrez une légende, un titre et un nom aux axes. viii. Que pouvez vous dire de ces représentations? (b) Exercice 2 : Vous savez peut-être que sous certaines conditions, on dit que la loi binomiale de paramètres n et p converge vers la loi normale de paramètres np et np(1 p). C est cette convergence que nous allons essayer de visualiser. On considère donc une loi binomiale de paramètres n et p et nous allons faire varier ces deux paramètres. Suivez les questions suivantes : i. Dans r1 stockez les probabilités d une loi binomiale de paramètres n = 5 et p = 0.1 ii. Dans r2 stockez les probabilités d une loi binomiale de paramètres n = 200 et p = 0.1 iii. Dans r3 stockez les probabilités d une loi binomiale de paramètres n = 5 et p = 0.4 iv. Dans r4 stockez les probabilités d une loi binomiale de paramètres n = 50 et p = 0.4 v. Scindez une fenêtre graphique en 4 sous-fenêtres réparties sur 2 lignes et 2 colonnes. vi. Dans chacune des sous-fenêtres, superposez le graphique des probabilités de la loi binomiale et la loi de densité de la loi normale associée. Vous indiquerez une légende et vous différencierez les deux courbes par un style de trait différent et non par la couleur. Pourquoi jouer sur le style de trait plutôt que sur la couleur? vii. Sans supprimer la première fenêtre, faîtes une seconde fenêtre graphique disposée de la même manière que la première où cette fois, vous superposerez les fonctions de répartition. viii. De façon théorique, comment expliqueriez-vous cette convergence? 7