Introduction au logiciel R
Transcription
Introduction au logiciel R
Matériaux 4 – TP de Traitement des données Introduction au logiciel R R est un logiciel libre, clone d’un autre logiciel très célèbre dans la communauté statisticienne S+ (notez le clin d’œil). Il peut être téléchargé gratuitement sur www.r-project.org. Sur ce site vous trouverez également des documentations très complètes, notamment le manuel d’Emmanuel Paradis, chercheur en biologie à…Montpellier Comme tous les logiciels libres, le développement et l’amélioration de R peuvent être effectués par tout un chacun. Actuellement, R propose bien plus de fonctions statistiques que vous ne pourrez en utiliser pendant ce cours. Les développeurs insistent sur le fait que R permet un calcul vectoriel lui ouvrant des applications dans d’autres domaines que les statistiques. R est plus précisément un langage orienté-objet interprété. Outre les diverses procédures intégrées, R est très connu pour son interface graphique souple et qui permet d’exporter des graphiques de très bonne qualité à des formats variés très simplement. Enfin, contrairement à d’autres logiciels « boîtes noires », R oblige son utilisateur à une programmation minimale, ce qui le rend également plus souple que SAS ou SPSS par exemple (et on ne parle pas de la facture…) Avant de commencer : • Les lignes de commandes peuvent être rappelées avec les flèches « haut » et « bas », comme sous Unix. L’ensemble des commandes que vous passez est gardée en mémoire dans un fichier .history • • • Vous allez créer des « objets » (variables, fonctions…). Tout est stocké dans un gros fichier générique nommé .Rdata. Mais vous avez bien sûr la possibilité de stocker vos données dans des fichiers propres (Ex : tp.Rdata) Toutes les données sont comprises comme des vecteurs, qui peuvent avoir des noms (attributes) distincts. Ainsi matrix et data.frame peuvent représenter tous deux des tableaux de chiffres mais sont compris différemment par R. Je vous recommande de créer un répertoire de travail dédié à R et au cours de Statistique Multidimensionnelle sur votre disque. Puis spécifiez-le sous R en passant par File/Change dir. Voici un petit tour de quelques fonctionnalités de base. Comme toute première approche, et puisque R vous y invite, vous pouvez commencez par taper : >demo() et vous vous laissez guider pour avoir un bref aperçu des capacités graphiques de R. Ces graphes s’appuient sur des jeux de données intégrés à R, dans des librairies, et qui sont fort utiles pour tester vos programmes. Faites également un petit tour sur l’aide en ligne : onglet Help/Html Help. J’omets désormais le prompt >. L’affectation se fait par le signe double <- (inférieur strict, tiret) x<-2 x isim<-«polytech» isim x<-c(1,2,3);x c() est la fonction collecteur qui assigne des valeurs (numériques ou non) à un objet (ici x) ls() Liste les objets dans le .Rdata search() Liste les packages de base (un package ? posez-moi la question…) x<-1:30 nouvelle affectation… x écrasement… mode(isim) Les vecteurs ont d’office deux attributs : le mode et la longueur. rm(isim);ls() mode(x) 4 modes principaux : numérique, caractère, complexe, logique (F ouT). length(x) N.B. : il existe d’autres modes. y<-seq(-1,1.2,0.2) Voir aussi les fonctions rep, sequence m<-matrix(y,nrow=4) m m<-matrix(y,nrow=4,byrow=T) Comparez. attributes(m) Une matrice est toujours un vecteur mais qui possède un attribut supplémentaire : dim qui est un vecteur de taille 2 contenant la taille de la matrice. -1- Lire, importer, exporter des données R peut importer des données de différents types (et accéder à certaines BDD). Nous nous limiterons ici à des fichiers texte. Il est préférable de les placer dans le répertoire de travail. Pour localiser ce répertoire : getwd() et pour le changer setwd(nom du répertoire). Crééz avec Wordpad ou le bloc notes le petit fichier texte suivant. Placez dans votre répertoire de travail et donnez lui le nom tp1.txt 073 466 688 10 8 4 862 811 Revenez sous R data1<-read.table(«tp1.txt ») Puis data2<-read.table("tp1.txt",col.names=c("A","B","C")) write.table(data2,file="res.txt") Puis allez voir ce qui s’est passé dans votre répertoire de travail. La commande read.table peut être remplacé par scan sous certaines conditions ou par read.fwf. Elle créé un objet de la classe data.frame. La commande write est moins spécifique que write.table data2[3,2] data2[1:3,] Extraction de sous-matrice data2[c(1,3),] What’s the difference ? 1/ VECTEURS Création de vecteurs Testez les lignes de commandes suivantes > x<-1:6 > y<-c(1,4,2,5,4,3) > z<-paste("X",1:10,sep="") > rep("a",3) > rep(1,4) > rep(c(2,3),4) > rep(c(2,3),c(4,4)) > rep(1:4,2) > rep(1:4,1:4) > seq(from=1,to=10,by=0.5) > seq(from=1,to=10,length=19) > rev(6:12) Opération arithmétiques sur les vecteurs +, -, *, ^, /,sqrt(), log(), exp(), abs() > z<-c(-2,-5,3,6) > 2*sqrt(abs(z)^2+3) Opération logiques sur les vecteurs Testez les lignes de commandes suivantes : > x<-1:6 > y<-c(1,4,2,5,4,3) > x<y > x>y > x==y > x!=y > (x<=3)&(y>3) > (x<=3)|(y>3) Autres fonctions utilisables sur les vecteurs. A essayer! > min(y),max(y), sum(y), sort(y), prod(y), length(y), rank(y), Extraction d'éléments > y[2] -2- > > > > y[length(y)] y[2:4] y[2]<-0 y 2/ MATRICES Création de matrices > x<-1:12 > Z<-matrix(x,ncol=3) > Z > Zbis<-cbind(Z,c(rep(8,4))) Regardez ce que vaut à présent Zbis! > colnames(Zbis)<-c("col1","col2","col3","col4") > rownames(Zbis)<-paste("Y",1:4,sep="") Et maintenant? Que fait la ligne suivante? > c(Zbis) Extraction d'éléments Testez les lignes de commandes suivantes : > Zbis[2,] > Zbis[,2] > Zbis[2,2] Opérations sur les matrices Testez les lignes de commandes suivantes : > t(Zbis) > dim(Zbis) > ncol(Zbis) > nrow(Zbis) > Zbis%*%Z 3/ GRAPHIQUES x<-seq(0,10,length=50) y<-sqrt(x) plot(x,y) plot(x,y,type="l") Essayer aussi type="s","h" layout(matrix(1:4,2,2)) layout.show(4) plot(x,y,type="l",xlab="abscisses",ylab="ordonnées",main="mon premier graphe partitionné avec R",las=1,cex.main=0.7) plot(x,y,type="s") plot(x,y,pch="s") plot(x,y,pch=17) dev.off() x<-rnorm(200,0,1) y<-rnorm(200,0,0.2) plot(x,y,xlim=c(-2,2),ylim=c(-2,2),pch=20) Votre premier nuage de point sous R (émouvant, n’est-ce pas ?). Au fait quelle est la loi de probabilité associée à cet échantillon ? Comment feriez-vous tourner ce nuage de 45 degrés ? Exporter ce graphique dans le répertoire de travail au format que vous souhaitez. La gestion des graphiques sous R pourrait à elle seule donner l’occasion d’une séance de TD bien remplie. On distingue dans R • des commandes graphiques « haut-niveau » qui vont créer un graphe ou la base d’un graphe : plot, pairs, hist, piechart, etc… • des commandes graphiques « bas-niveau » qui se rajoutent à un graphe existant : points, lines, abline, legend, locator… -3- Les paramètres graphiques (taille des caractères, couleurs, axes, arrière plan, etc) peuvent être directement entrés en option des commandes de haut niveau ou être gérés globalement par la commande par() (68 paramètres différents). 4/ SIMULATION La simulation de variables aléatoires Elle est enfantine sous R. Simulation de n variables pour quelques lois célèbres ( R peut simuler 18 lois différentes.) Commande Loi rpois(n,m) Poisson(m) rbinom(n,k,p) Binomiale(k,p) rpois(n,l) Poisson(l) runif(n,a,b) Uniforme(a,b) rnorm(n,m,s) Normale(m,s²) rexp(n,m) Exponentielle(m) x<-rnorm(50,0,1) x t<-rep(0,50) plot(x,t,pch=20) Effectuez quelques autres tentatives en changeant les paramètres (50,0,1) x<-runif(50,0,1) x t<-rep(0,50) plot(x,t,pch=20) Réiterez avec quelques unes des lois mentionnées dans le tableau ci-dessus et vues en cours. Que se passe-t-il en reprenant la même séquence pour des variables aléatoires discrètes ? Essayez alors par exemple : x<-rpois(50,5) plot(x) N.B. : Je pars du principe que le cours de première année est assimilé et que ces lois sont connues… En rajoutant d, p et q devant le nom de la loi , on peut également obtenir les valeurs • de la densité (Ex : dnorm(1)) • de la fonction de répartition (Ex : pnorm(0)) • des quantiles (Ex : qnorm(1.96)) Testez au passage ces fonctions utiles pour ordonner une suite de nombres : sort, rank. La représentation des données Nous allons voir que R peut, grâce à son interface graphique, nous permettre de représenter les données simulées. x<-rnorm(200,0,1) hist(x) hist(x,breaks=5) plot(density(x)) Que se passe-t-il sur ces deux dernières commandes ? En fait la fonction hist n’est pas bien adaptée à la représentation des variables discrètes. x<-rpois(50,5) eff<-table(x) barplot(eff) Vous obtenez un diagramme en bâtons (R ne sait pas les tracer autrement et il ne vous faut pas les confondre avec les histogrammes.) Recopiez la petite fonction ci-dessous et dites quelle est son utilité. po<-function(n,lambda){ p<-0 for (i in 1:n) p[i]<-dpois(x=i,lambda=lambda) plot(p,type="h")} puis effectuez po(20,5) -4- et recommencez en variant les exemples. Généralisez à d’autres lois discrètes. La simulation de vecteurs aléatoires de taille 2. x<-rnorm(200,0,1) y<-rnorm(200,0,0.2) plot(x,y) Que fait-on ici ? Comparez avec : plot(x,y,xlim= c(-2,2),ylim= c(-2,2),pch=20) Qu’a-t-on fait ? z<-(x+y)/sqrt(2) y<-(x-y)/sqrt(2) plot(z,y,xlim= c(-3,3),ylim= c(-3,3),pch=20) Et maintenant ? Essayez de « retrouver » ce qui se passe d’un point de vue mathématique. Tracez quelques autres nuages de points (vecteurs aléatoires de dimension 2) a partir d’autres types de variables aléatoires que la loi normale ? Que remarquez-vous avec la loi uniforme ? 5/ CALCULS ET ANALYSES Un petit détour par l’algèbre linéaire A partir de l’aide en ligne, déterminez la commande donnant les valeurs propres et les vecteurs propres d’une matrice carrée. Retrouvez les valeurs propres et les vecteurs propres de la matrice carrée de taille 2 composée de 1 Reprenez la matrice rectangulaire 6,3 introduite au début du TD puis m<-as.matrix(data1) On transforme le data.frame data1 en une matrice. Sous réserve de compatibilité on change la classe d’un objet par la commande : nouvonom<-as.nelleclasse(ancnom) v<-t(m)%*%m Essayez de comprendre ce qui se passe. Donnez les valeurs propres de la nouvelle matrice. Récupérez-les dans un vecteur de taille 3. (Comment fait-on ?). Prenez sa racine carrée. Maintenant faites : svd(m) Des commentaires ? La loi des grands nombres : l’occasion de faire une petite boucle Exécutez les lignes suivantes : x<-runif(100,-0.5,1) z<-0;y<-0 for(i in 1:50){y[i+1]<-y[i]+x[i+1];z[i]<-y[i]/i};plot(z,type="l") Reprenez les instruction suivantes en simulant une loi normale , puis une loi de Cauchy. Quelles différences remarquezvous ? Premières analyses statistiques avec R Nous commençons avec l’obtention de statistiques simples via la commande summary. La variance et la covariance s’obtiennent avec la commande var. Testez aussi mad. data() Liste les jeux de donnés embarqués avec R. L’embarras du choix… data(faithful) Cherchez dans l’aide la description de ce jeu de données attach(faithful) summary(faithful) plot(faithful) hist(eruptions,prob=T) Que se passe-t-il avec prob=F ? lines(density(eruptions,bw=0.1),col="blue") rug(eruptions,col="green") Essayez de comprendre les deux lignes de commande suivantes : -5- library(stepfun) plot(ecdf(eruptions),do.points=F,verticals=T) Nous passons maintenant à une analyse de variance. La commande est aov (essayez aussi l’instruction alternative anova). library(MASS) data(michelson) attach(michelson) plot(Expt,Speed, xlab=”Experience No.”) anv<-aov(Speed~Run+Expt,data=michelson) anv<-aov(Speed~Run+Expt,data=michelson) summary(anv) plot(anv) -6-