Intro à R - Cours en Ligne
Transcription
Intro à R - Cours en Ligne
Master EBE Introduction à R et Statistique inférentielle R est un logiciel de calcul statistique et probabiliste. Il est développé dans le cadre du projet GNU http://www.gnu.org/ ), c’est donc un logiciel libre qui présente l’avantage d’être enrichi par l’ensemble des personnes de bonne volonté grâce au système des package . C’est un langage de script (ligne de commandes) orienté objet. Il est disponible pour différentes palteformes (Windows, Linux, Unix, MacOS). Enfin on trouve de nombreuses documentations en ligne. Pour mémoire ici, on peut citer – le site officiel : http://cran.r-project.org/, vous trouverez à cette adresse toutes les informations nécessaires pour l’installation de R, – et un manuel en français à l’usage des (pseudo) débutants http://cran.r-project.org/ doc/contrib/Paradis-rdebuts_fr.pdf 1 Aide R possède une aide très sophistiquée, accessible en mode commande ou au format HTML. Pour accéder à l’aide HTML il faut taper help.start(), ou sélectionner Aide, Aide HTML dans le menu. On a alors accès à des manuels (introduction à R en particulier), à la documentation des packages, et à un moteur de recherche. L’aide en mode commande se fait par l’intermédiaire de la fonction help() ou bien ?nomfonction ?read.csv ?read.table Les exemples proposés à la fin de la description des fonctions aident beaucoup en général à comprendre leur fonctionnement. On peut aussi se poser des questions sur un sujet bien précis :Comment faire un test de student ?. Pour cela on utilise la commande help.search qui recherche dans la documentation à quel endroit le mot apparaı̂t. help.search("student") 2 Lecture des données Copier le fichier T:\Master-EBE\DYST_TD_Intro\Chacals.csv dans votre répertoire personnel, puis l’ouvrir avec un éditeur de texte (NotePad par exemple) et noter comment le fichier est constitué. On veut maintenant l’importer dans R 1 # ce qui se trouve derriere # est un commentaire , ce n’est pas executé setwd("monRépertoire") maTable <- read.table(’chacal.csv’,header=TRUE, sep=";") maTable names(maTable) head(maTable) maTable$taille maTable$sexe maTable <- read.table("chacals.csv",header=TRUE, colClasses=c("numeric","factor") , sep=";") maTable$taille maTable$sexe ls() taille attach(maTable) taille sexe 3 Objets R travaille avec des objets. Les données, les graphiques, les fonctions, les résultats d’analyse sont des objets. Les objets les plus courants sont : vector vecteur composé d’une seule variable data.frame tableau de données. Il contient le nom des variables. list liste d’objet, généralement le résultat d’une analyse. Chaque élément de la liste est accessible en tapant le nom de la liste suivi du symbole $ et du nom de l’élément. La plupart des objets ont un attribut de classe. Les plus courants sont numeric, logical, integer, factor, character, data.frame, .... objects() class(maTable) class(sexe) class(taille) class(taille/10) 4 Graphiques Avant d’analyser les données, il est bon de les visualiser. R dispose d’immenses capacités graphiques ... qui ne sont pas toujours faciles à utiliser. On se contente de quelques exemples. ?plot plot(taille,main="taille en fonction du numero de l’individu") plot(taille,col=sexe,main="taille en fonction du numero de l’individu",pch=20) legend("topright", legend=c("male","femelle"), pch=20, col=c(1,2)) 2 plot(sexe,taille,main="Taille des cr^ anes de chacals en fonction du sexe") ?boxplot 5 5.1 Etude du jeu de données Chacals Création de variables et calculs élémentaires On voudrait centrer les tailles des crânes pour cela, on a besoin de calculer la moyenne et de calculer la différence entre la taille d’un crâne et la moyenne. 5.1.1 Sur l’échantillon complet moy <- mean(taille) taille.cent <-taille -moy ecart2 <- taille.cent^2 A l’aide de la variable ecart2, de la fonction sum et de la fonction length calculer la variance de l”échantillon. Comparer au résultat de la fonction var. Pour ajouter une variable à notre table de données, il suffit de concaténer cette variable avec le reste de la table, en expliquant à R qu’on veut ajouter une colonne. maTable<-cbind(maTable,taille.cent, ecart2) head(maTable) 5.1.2 Extraire un sous echantillon Pour sélectionner uniquement les femelles chacals, on dispose de l’opérateur [ ]. A partir des commandes suivantes, on peut calculer la moyenne et la variance de l”échantillon en fonction du sexe. taille.femelle<- taille[sexe==2] taille.male<-taille[sexe==1] moy.male<- mean(taille.male) ... La fonction by permet de faire la même chose plus facilement. ?by 5.2 Un premier test On se demande si la taille d’un crâne de chacal mâle est différente de la taille d’un crâne d’un chacal femelle. On met en place un test de Student. Justifier l’hypothèse d’égalité des variances. help.search("student") ?t.test 3 6 Simulation On veut simuler un échantillon gaussien X1 , . . . , X15 de moyenne µ = 10 et de variance σ = 4. Pour cela on peut utiliser la fonction rnorm. 2 monEchantillon <- rnorm(15,mean=10,sd=2) hist(monEchantillon) monEchantillon <- rnorm(60,mean=10,sd=2) hist(monEchantillon) On veut maintenant vérifier que l’estimateur de la moyenne suit une loi normale de moyenne µ et de variance ? ? ? ? mesEchantillons <- matrix(rnorm(60*50,mean=10,sd=2),ncol=50, nrow=60) mesEchantillons <- as.table(mesEchantillons) mesEchantillons moy.estim <- apply(mesEchantillons,2,mean) hist(moy.estim, freq=F) qqnorm(moy.estim) Vérifier par un QQplot que moy.est suit la loi attendue. 7 A vous de jouer Dans le cadre d’une étude phyto-écologique dans les Vosges, on a noté, pour une série de 260 peuplements de hêtres ou de sapins, le type d’humus réparti en six classes de niveau trophique décroissant : dysmoder, moder, mull moder, mull acide, mull mésotrophe et mull eutrophe. Les effectifs obtenus par essence et classe d’humus sont donnés dans le tableau suivant : Dysmoder Sapin 36 Hêtre 9 Moder 36 11 Mull model 17 20 Mull acide 40 32 Mull méso Mull eutrophe 16 12 25 6 total 157 103 Que peut-on dire de la répartition des espèces par type d’humus ? 8 8.1 Compléments Fonctions Une fonction associe un objet (la sortie) à un ensemble d’objets (les arguments d’entrée). Les arguments d’entrée peuvent être définis par défaut. Ils sont associés à un nom générique qui peut être omis si l’ordre des arguments est celui de la définition. L’objet en sortie est le plus souvent une liste. La description des fonctions de R est accessible par l’aide en ligne en tapant ?nomdelafonction. ?seq seq(1,10) seq(to=10,from=1,by=1) seq(to=10,from=1,l=10) 4 seq(1,10,2) seq(1,10,l=5) tri = sort(Taille, index.return=TRUE) tri$x;tri$ix 8.2 Fichiers script Un fichier script permet d’écrire plusieurs commande à la fois et de les exécuter séquentiellement (c’est un programme) ou bien de créer une nouvelle fonction. On donne habituellement l’extension .R au fichier texte contenant les instructions. La commande source(nomprogramme) permet d’exécuter le programme ou la fonction. Boucles et tests boucles for (indices in vecindices){ instructions } while (condition) { instructions } tests if (condition){ instructions } else { instructions } fonction sortie = function(arg1=defaut1,arg2=defaut2,...){ instructions return(sortie) } fecart<- function(taille.ind, taille.echant){ vMessage=c(’Mignon’, ’Normal’, ’EFFRAYANT’) tiers<-round(length(taille.echant)/3) seuils<-rep(0,2) seuils[1]<-sort(taille.echant)[tiers] seuils[2]<-sort(taille.echant)[2*tiers] groupe<-sum(taille.ind>seuils)+1 diagnostic = list(groupe=groupe, message=vMessage[groupe]) return(diagnostic) } fecart(125,taille) detach(maTable) 8.3 Sauvegarde R propose à la fin de chaque session de sauvegarder tout l’espace de travail. Celui-ci est en général énorme et contient beaucoup d’objets intermédiaires inutiles. Pour sauvegarder uniquement quelques objets, utiliser la fonction save(). Pour charger les données sauvegardées utiliser la fonction load(). save(t.taille, maTable,file=’sauve.res’) rm(maTable); maTable; load(’sauve.res’); maTable 5 Pour sauvegarder un tableau de donnéees au format ASCII utiliser la fonction write.table() write.table(maTable,file=’resultats.txt’,quote=FALSE,row.names=FALSE,col.names=c(’Sexe’, Pour sauvegarder un graphique on peut soit utiliser le menu de la fenêtre graphique, soit utiliser les fonctions pdf(), postscript(), jpeg(). pdf("monGraphique") hist(taille) dev.off() 6