########################################################################################### ## HAB711B Description et inference DESINF -- seances TP #1 et #2 ## ##Introduction a R et manipulation de donnees ## ########################################################################################### ##### Les salles de TP et le systeme d'exploitation # En TP, les ordinateurs sont equipes d'un systeme d'exploitation linux. # Contrairement a Windows ou Mac, Linux offre de nombreuses distributions libres # et gratuites. La plupart des distributions Linux sont reconnues pour leur style # epure et leur simplicite. Certains reflexes que vous avez acquis sur d'autres # systemes d'exploitation peuvent etre differents (touches racourci), mais vous # verrez vite que cet environnement simplifie peut avoir des avantages. # Sous Linux, pour demarrer la session R, vous pouvez ouvrir le logiciel R Studio dans le menu des applications ##### R en bref # R est un logiciel libre, multiplateforme et gratuit qui permet de faire des # statistiques. # C'est aujourd'hui un des outils informatiques phares dans le domaine, en # particulier en biologie. Il s'appuie sur un langage informatique et un # environnement propre (R). # R exsite depuis plusieurs dizaines d'années, il est gratuit, constamment ameliore par une # tres large communaute ouverte de chercheurs et de passionnes. # R fonctionne en ligne de commandes, ce n'est donc pas un logiciel presse # bouton. Ces commandes peuvent etre annotees et stockees sous forme de texte # appelees script. Un avantage enorme de ce fonctionnement permet de sauvegarder # l'ensemble des operations qui ont ete faites, de les echanger, de les adapter, # et de les ameliorer. ##### Le script et les commentaires # Vous avez ici une feuille de script, une feuille de script est une serie # de commentaires pour vous aider a comprendre une serie de commandes qui # permettent d'interagir avec votre ordinateur. Les commentaires de ces # feuilles sont ecrits pour le langage R que vous allez apprendre durant ces # seances. Chaque ligne de commentaire est precedee d'un signe diese #. # Ainsi quand vous excecutez ces commentaires via l ebouton "Run" lors d'une session # R, ils ne seront pas lus comme des ordres pour votre machine lorsqu'ils vont etre instruits dans la console. # Les commentaires sont utiles, car ils permettent d'avoir des indications sur # les explications des commandes qui seront envoyees a l'ordinateur. Nous # vous conseillons donc de sauvegarder cette feuille de script, mais aussi # de la completer avec vos propres commentaires ou reponses aux exercices. # Vous conserverez ainsi une trace de votre TP que vous pourrez imprimer, et # reproduire dans R. ###### 1. Utilisation de R comme d'une calculatrice # Demarrez R. On vous demandera d'excecuter dans la console un certain nombre de commandes contenues dans les feuilles de # script, via "Run", les analyser et parfois de les completer. # Notez que la ligne de commande dans la console demarre par le prompt, signe >. # Cela signifie que R attend vos commandes (vos ordres). # Si ce n'est pas le cas, R attend autre chose: dans ce cas # 1.soit rien n'apparait (il faut alors interagir avec une autre # fenetre (un graphique ou bien l'editeur du jeu de donnee). # 2. soit un + apparait en debut de ligne, ce qui veut dire que votre commande # est incomplete. # R permet de faire des calculs simples, en ecrivant des operations qui font # intervenir des vecteurs (des nombres) et des operateurs (signes de calcul) 1+1.1 ##Q1. Que ce passe t'il a l'execution de cette commande ? #apres l'execution de la commande le resultat de l'operation est imprime dans la console # Notez que la virgule correspond au point. # De quoi le resultat est-il precede ? #Le resultat est precede d'un numero entre crochets, ce numero indique l'indice (la position) du premier element de la ligne 10/2 # Dans R, les operateurs +,-, *,/, %/%, %% permettent respectivement de faire # des additions, soustractions, multiplications, divisions, divisions entieres # et obtenir le reste entier. # L'operateur ; permet de produire deux commandes sur la meme ligne 10/2; 10%%2 # Il est ainsi possible de faire des operations multiples sur une meme ligne 10+2*3 #Q2. Que constate - t - on ici ? #La multiplication est prioritaire sur l'addition, R fonctionne comme une calculette scientifique # Pour g?rer le flux des op?rations, on utilise le double op?rateur parenth?se () # Comme pour tout op?rateur double, toute parenth?se ouverte doit ?tre ferm?e, sous # peine d'un message d'erreur, ou bien d'un retour de R par le signe + qui indique que # vous n'avez pas termin? votre commande # par exemple: 10+(2*3 #fait intervenir le signe + ? la ligne, il faut alors taper la parenth?se fermante pour #terminer la commande ) (10+2)*3 #on le voit ici, les parenth?ses permettent de g?rer les priorit?s entre op?rations. # L'op?rateur ":" permet de faire des suite r?guli?re d'entier, il a priorit? sur les op?rateurs arithm?tiques. 1:30 1:30*2 ### Les constantes et les fonctions dans R. pi # Par d?faut, quel est l'unit? des angles dans R? # pi est une constante, sa valeur est accessible en tapant pi. De mani?re g?n?ral, pi est # un objet dans R. Il existe d'autres constantes dans R, vous pouvez y acc?der via l'aide # en ligne ?pi # Dans linux pour fermer l'aide en ligne, il faut taper q # R permet ?galement l'utilisation de fonctions. Ces fonctions permettent ?galement de faire # des op?rations, de retourner des graphiques, et de faire beaucoup d'autres choses. cos(pi) cos(2*pi) # L'aide en ligne dans R vous permet de comprendre l'utilisation des fonctions. On peut #par exemple, demander l'aide en ligne pour cos. ?cos # Dans l'aide en ligne de la fonction cos, on voit que pour l'utiliser, il faut pr?ciser un argument x # cet argument ou variable n'existe pas dans R. Comme on peut le voir lors de la commande suivante. x # Il permet juste de vous montrer ? quoi doit correspondre x dans la fonction. Vous pouvez # le lire dans la suite de l'aide en ligne (usage et arguments). Lors de l'appel ? la fonction cos, # x doit donc ?tre substitu? une valeur num?rique ou complexe pour que la fonction retourne un r?sultat. # Certaines fonctions n?cessitent des arguments multiples, ces arguments multiples doivent # ?tre s?par?s par des virgules. C'est le cas de la fonction lm, qui permet de faire des # mod?les lin?aires ?lm # Notez qu'? la fin de l'aide en ligne, vous avez un tuteur. C'est ? dire un exemple de # ce que la fonction peut produire. Pour ex?cuter ce tuteur et voir ce qui se passe, on # tape par exemple. example(cos) # D'autres fonctions admettent ?galement des arguments qui peuvent ?tre multiples, mais # leur nombre n'est pas sp?cifi? ? priori. Dans ce cas, ces arguments apparaissent sous # la forme de ... ?c # La fonction c est une fonction importante car elle permet d'entrer une suite de donn?es # en format vectoriel. c(1,3,1) #### Les diff?rents type d'objets dans R, l'assignation et l'indexation de ces objets. # Au del? de la manipulation de nombres et de chiffres, R permet de manipuler diff?rents # types d'objet. Il peut s'agir de vecteurs (vectors) (suite d'?l?ment de m?me nature), # des matrices (matrix), des tableaux de tableaux (arrays), des jeux de donn?es # (data.frame), des listes (list) (ensemble d'?l?ments de nature diverse). L'acc?s aux # ?l?ments de ces objets se fait par une technique app?l?e indexation. ## Les vecteurs # Pour cr?er un vecteur conntenant des objets de m?me type, on utilise la fonction c c(1,3,1) # Il est possible de conserver le r?sultat de cette commande en la stockant dans un # objet, on parle encore d'assignation a<-c(1,3,1) #l'op?rateur d'assignation est <-, il est possible aussi d'utiliser le signe =, mais #on pr?f?rera l'utiliser pour sp?cifier des arguments dans les fonctions. a # On peut ensuite faire des op?rations sur cet objet a*2 # Ou bien regarder des caract?ristiques de cet objet comme sa longeur ou son mode mode(a) length(a) # Pour construire un vecteur contenant des cha?nes de caract?res, ces derni?res doivent # ?tre pr?c?d?es et suivies du double op?rateur " pour les disinguer des objets R ou des # valeurs num?riques b<-c("jiji", "jojo") b #Q3. Obtenez le mode et la longeur de b mode(b); length(b) #La coercition: tapez la commande suivante a1<-c(a,b) a1 length(a1) mode(a1) #Q4. Que s'est-il pass?. #les chiffres ont ?t? transform? en mode caract?res (cf les guillemets) de sorte que les ?l?ments du vecteur soient compatibles, on parle de coercition, comme un vecteur ne peux ?tre composer que d'un seul type d'?l?ment, R se d?brouille pour les rendre compatible entre eux ##l'indexation num?rique sur un vecteur. #On peut extraire une partie d'un objet en fournissant l'emplacement d'un ou de plusieurs #?l?ments que l'on veut ensuite manipuler. L'indexation se fait grace au double op?rateur [] a1[2] a1[c(2,4)] a1[-2] #Q5. Que fait le signe - ici ? #il permet d'enlever le deuxi?me ?l?ment dans a1 ##les bool?ens #en plus des vecteurs num?riques ou de type chaines de caract?res, il existe des vecteurs # de bool?ens (vrai/faux) (logical dans R). #ces vecteurs sont utiles car ils permettent de faire des comparaisons. b1<-3:10 b1>5 b1>=5 b1==1 a1=="jiji" b2<-b1==1 mode(b2) length(b2) ##Il est possible de combiner les comparaisons avec les op?rateurs et (&) ou ou (|) #Q6. Comparez le r?sulat de ces deux commandes b1>5 & b1<7 b1<5 | b1>7 #La commande ressort un vecteur bool?ens (composer d'?l?ments de type logical) #dans le premier cas, on a vrai quand la valeur des ?l?ments de b1 sont ? la fois sup?rieurs ? 5 et inf?rieurs ? 7 #dans le second cas, on a vrai quand l'?l?ment de b1 est inf?rieur ? 5 ou quand il est sup?rieur ? 7 #la fonction which permet d'indiquer l'emplacement des ?l?ments dans un vecteur si ils #satisfassent ? la condition vrai b3<-b1>=5 which(b3) #cette fonction peut ?tre utile pour faire de l'indexaction num?rique. b1[which(b3)] #cette commande permettra d'extraire les valeurs de b3 sup?rieures ou ?gales ? 5 b1[which(b1>=5)] #Cette seconde commande est ?quivalente. #l'indexation logique b3 b1[b3] b1[b1>=5] #Plus compacte, cette indexation permet d'extraire les valeurs pour #lesquelles l'indice correspond ? vrai (TRUE). Ce mode d'indexation est tr?s utilis? dans R. #Il permet de se passer de which. ###Les matrices #les matrices sont des vecteurs organis?s en plusieurs colonnes et lignes M<-matrix(1:10,5,2) M #Elles sont remplies par d?faut colonnes par colonnes, le premier ?l?ment correspond au vecteur #de donn?es, le second au nombre de lignes, puis de colonnes. M1<-matrix(1:10,5,2, byrow=T) M1 #On peut aussi les remplir en lignes en sp?cifiant l'option byrow=T #On peut facilement faire du calcul matriciel dans R. La transpos?e est obtenu par la fonction t t(M1) #Le produit matriciel est obtenu par l'op?rateur %*% t(M1)%*%M #Il est ?galement possible d'indexer les matrices en lignes et en colonnes pour cela, il faut #utiliser la virgule. #Q7. Interpr?tez les commandes suivantes: M1[1,] M1[,1] M1[-2,] M1[1:2,] M1[M1[,1]>3,] #Les matrices comme les vecteurs peuvent ?tre de type numeric, character ou logical. Elles ne peuvent #pas contenir des ?l?ments de diff?rents modes. #En plus d'une longeur et d'un mode, on peut extraire leur nombre de colonnes et lignes dim(M) dim(M1) #La premi?re valeur correspond au nombre de lignes, la seconde au nombre de colonnes. ##Les arrays (tableaux de tableaux) sont des matrices ?tendues ? plusieurs dimensions array(1:30,dim=c(2,5,3)) #Cette commande permet d'organiser les valeurs 1 ? 30 dans 3 matrices de 2 lignes et 5 colonnes. #Le remplissage se fera par matrices, colonnes, et lignes A<-array(1:30,dim=c(2,5,3)) dim(A) #Q8. indexez A de sorte ? obtenir la deuxi?me matrice; ensuite indexez A de sorte ? obtenir # l'ensemble des premi?res colonnes A[,,1] A[,1,] ##Les listes #Les listes sont des objets qui permettent de stocker des objets de diff?rents modes ou type. #Elles sont obtenues gr?ce ? la fonction list. De tr?s nombreuses fonctions de R renvoient des objets # de type list. Il est essentiel de savoir les indexer. list(A, b1) b4<-list(A, b1) b4 #la longeur d'une liste correspond au nombre d'objets qu'elle contient length(b4) #Pour indexer une liste on utilise l'op?rateur [[]]; il permet d'extraire l'objet b4[[2]] #Il est possible ensuite d'extraire des valeur sur cet objet b4[[2]][3] #Cette commande extrairera le troisi?me ?l?ment du deuxi?me objet #Le mode d'une liste est de type list. mode(b4) #Les listes permettent ?galement l'indexation nominale, pour cela il faut renseigner les noms # des ?l?ments de la liste ? leur cr?ation b5<-list(objet1=A ,objet2=b1) b5 #Q9. Qu'est qui a chang? entre b4 et b5 #les objets de la liste sont pr?c?d?s par leur nom plutot que par les doubles crochets autour de l 'indice names(b5) #Pour indexer une liste par nom, on utilise l'op?rateur $ b5$objet1 ##Les jeux de donn?es (data.frame). #En statistique, les jeux de donn?es sont une pr?sentation conventionnelle des donn?es. Ils correspondent ? des observations uni ou mulvari?es (en lignes) et des variables en colonnes. Ces variables peuvent ?tre de diff?rents mode. Les data.frame sont en fait des listes de vecteur (variables) de m?me taille. R contient des jeux de donn?es pour s'entrainer. #Un exemple de jeu de donn?es est ToothGrowth ?ToothGrowth mode(ToothGrowth) #les diff?rentes variables peuvent ?tre obtenues grace ? names names(ToothGrowth) #l'indexation de ces jeux de donn?es peut se faire comme pour une matrice ou une liste ToothGrowth[,1] ToothGrowth$len #Il est d'usage dans les jeux de donn?es d'avoir des facteurs (variables cat?goriques). Les facteurs sont des vecteurs particulier contenant diff?rentes cat?gories (levels). Ces vecteurs sont num?riques, mais attention !!! Les valeurs num?riques ne sont pas des entiers ou des r?els, il s'agit plutot d'un codage binaire permettant de sp?cifier quelle est la cat?gorie correspondant ? chaque ?l?ment (variable qualitative). str(ToothGrowth) #On voit ici que la deuxi?me vecteur est un facteur is.factor(ToothGrowth[,2]) #Q10. A l'aide de l'indexation, extraire les lignes du tableau qui correspondent ? des cobayes pour lesquels on a donn? du jus d'orange et pour lesquels les odontoblastes mesurent plus de 10 micrometres. ToothGrowth[ToothGrowth$len>10 & ToothGrowth[,2]=="OJ",] #Il est possible de calculer des param?tres statistiques simples sur un jeu de donn?es. #Pour les variables num?riques (mean, min, max, median, range, var, sd) renvoient respectivement la moyenne, le minimum, le maximum, l'?tendue, la variance et l'?cart type. #Q11. Calculez tous ces param?tres pour la variable longeur des odontoblastes pour les cobayes ayant re?u de la vitamine C. Faire de m?me pour les cobayes ayant re?u du jus d'orange. #La fonction quantile permet d'extraire le quantile correspondant ? une fr?quence cumul?e donn?e. quantile(ToothGrowth[,1], 0.025) #On a ici la valeur pour laquelle 2.5% de la distribution est atteinte. #Pour les variables qualitative (facteur), on peut avoir une id?e de leur distribution gr?ce ? table table(ToothGrowth[,2]) #summary permet d'avoir une id?e de la variabilit?, variable par variable en fonction de son type summary(ToothGrowth) #Une fonction sympathique pour aller plus vite... tapply(ToothGrowth$len, ToothGrowth$supp, summary) #que fait tapply ####Importer un jeu de donn?es, le modifier, et le sauvegarder ####Faire des graphiques simples #Q12. cr?ez un r?pertoire que vous appelerez stat et un sous-r?pertoire data dans votre # r?pertoire personnel. Attention R est sensible ? la capitalisation des caract?res. # t?l?chargez le fichier "turtle.tsv" dans le sous-r?pertoire data # Ouvrez ce jeu de donn?es dans le tableur (libreoffice Calc). # Ouvrez ce jeu de donn?es dans un ?diteur de texte # Le s?parateur de champ correspond ? la mani?re dont sont s?par?s les diff?rents champs dans ce jeu de donn?es. # Quel est il dans ce jeu de donn?es? #Il s'agit ici d'un s?parateur tabulation # Regardez les propri?t?s de ce jeu de donn?e ? l'aide de la souris et de l'alin?a propri?t?. A l'aide de cet outil, notez l'emplacement du fichier dans l'arborescence de fichier ##Naviguer dans l'arborescence de fichier depuis R. #Afin de charger un fichier dans R et de le manipuler, il faut d'abord savoir quel est le r?pertoire actuel dans lequel R va chercher des donn?es et le modifer. # Pour v?rifier le r?pertoire courant depuis R getwd() #list.files() permet de lister les fichiers dans le r?pertoire courant list.files() #setwd() permet de modifer le r?pertoire, il faut alors indiquer le chemin jusqu'au r?pertoire cible depuis le r?pertoire courant setwd("stat") # permet d'entrer dansle r?pertoire stat depuis le r?pertoire courant list.files() setwd("data") #pour entrer dans un r?pertoire d'ordre inf?rieur on utilise ".." setwd("..") getwd() setwd("..") getwd() #il est possible d'indiquer le chemin complet pour atteindre le r?pertoire d'int?r?t setwd("stat/data") #On l'aura compris setwd("../..") permet de monter de deux niveau d'organisation dans l'arborescence de fichiers. #Notez bien que dans windows les / sont remplac?s par des \, si vous utilisez windows, vous ne pourrez pas faire un simple copier/coller des chemins vers les fichiers mais il faudra changer les \ par des / pour qu'ils soient lus dans R # Chargez les donn?es gr?ce aux commandes suivantes read.table(file="turtle.tsv",sep="\t",dec=",",header=T) #le jeu de donn?es s'affiche dans la console, mais on ne peut rien en # faire... d <- read.table(file="turtle.tsv",sep="\t",dec=",",header=T) # file -> le chemin vers le fichier, entre guillemets # sep -> le s?parateur de champ # dec -> le s?parateur d?cimal # header -> y-a-t-il des en-t?tes de colonnes dans le fichier ? (vrai ou faux) #le jeu de donn?es ne s'affiche plus, mais il est stock? dans l'objet d #on peut ensuite en exploiter le contenu edit(d) #si on veut changer des valeurs dans le tableau il faudra alors taper la commande d<-edit(d) #On peut aussi effectuer les changements voulus aux endroits voulu gr?ce ? l'indexation et l'assignation. #N'oubliez pas de quitter l'?diteur de donn?es pour retourner dans R. #Q13. #Quelques erreurs classiques dans le chargement... d <- read.table(file="turtle.tvs",sep="\t",dec=",",header=T) ### Q. Pourquoi cette commande est-elle impropre ? #mauvais nom de fichier (attention dans windows on ne voit pas toujours les extensions) d <- read.table(file="turtle.tsv",sep=" ",dec=",",header=T) ### Q. Pourquoi cette commande est-elle impropre ? #mauvais s?parateur d <- read.table(file="turtle.tsv",sep="\t",dec=",",header=F) ### Q. Pourquoi cette commande est-elle impropre ? #l'ent?te n'est pas renseign?, les vecteurs seront tous de mode caract?res car on va m?langer des valeurs avec des cha?nes de caract?res # En conclusion: toujours commencer par v?rifier que le jeu de donn?es # est correctement charg? # Ensuite, v?rifier que que les variables (contenu des colonnes) ont le type # qu'elles doivent avoir ! et que la dimension de la matrice des donn?es # est la bonne (?? de colonnes et de lignes??) # il suffit pour cela de cliquer sur le nom de colonne dans la fen?tre # cr??e par la fonction edit # ou bien de d'interroger R sur d #dimensions du tableau nrow(d) ncol(d) dim(d) #contenu du tableau str(d) #On constate que la premi?re colonne qui devrait ?tre une cat?gorie est un vecteur, on se propose donc d'en faire un facteur d[,1]<-as.factor(d[,1]) str(d) # NB une des rares choses qui d?pend de la machine et du syst?me d'exploitation # sur lequel R est install? c'est la fa?on d'indiquer le chemin vers un fichier. # Dans ce qui pr?c?de, R va chercher le fichier beak_size dans le # r?pertoire courant # Si jamais le fichier en question ?tait dans un r?pertoire appel? stat # dans mon r?pertoire personnel, ?a donnerait d <- read.table(file="~/stat/data/turtle.tsv",sep="\t",dec=",",header=T) # sous Linux d <- read.table(file="c:/Mes\ Documents/stat/data/turtle.tsv",sep="\t",dec=",",header=T) # ou quelque chose comme ?a sous windoze # R peut aussi lire directement des fichiers excel, openoffice ou bien # aller interroger des bases de donn?es Access ou SQL. # Personnellement je d?conseille les deux premi?res fonctionnalit?s, # sources de nombreux ennuis ? cause des fonctions # de formatage automatique qui existent dans la plupart des tableurs. #write.table permet d'?crire un jeu de donn?es et de le sauvegarder dans votre ordinateur. #Ici on va s?lectionner uniquement les valeurs des m?les pour les stocker dans un nouveau fichier "male.tsv". #Le fichier sera stock? dans le r?pertoire courant actuel, puisqu'aucun chemin n'est d?taill? dans la commande. #Notez ici qu'on va choisir un s?parateur de champ type tabulation. Il faut absolument ?viter que le s?parateur de champ serve ? quelque chose d'autre pour pouvoir facilement ouvrir le fichier. write.table(d[d$sex=="m",], file="male.tsv", sep="\t") #Quelques graphiques simples ###pour repr?senter des variables de type cat?goriques, on utilise les graphiques en barres (barplot) ou bien en camembert (pie) pie(table(d$sex)) barplot(table(d$sex)) #Q14. Dans ces graphiques, modifiez la couleur des barres ou des portions pour les m?les et les femelles (pour cela consultez l'aide en ligne de pie et barplot), n'h?sitez pas ? consulter les exemples pour vous donner des id?es. barplot(table(d$sex), col=c("pink", "blue")) ###Histogrammes pour les variables quantitatives #Repr?sentation de l'histogramme pour la longueur de la carapace. hist(d$len) #Notez qu'il est possible de cr?er vous m?me votre d?coupage de classe (voir l'aide en ligne). Par d?faut le d?coupage est fait de sorte qu'il soit joli ? regarder (en terme de bornes inf?rieures et sup?rieures pour les classes et en termes de nombre de barres d'histogramme). #On peut gr?ce ? cela repr?sentez sur le m?me graphique le d?coupage pour les m?le et les femelles. #dans un premier temps on repr?sente tout, mais on va assigner les valeurs produites par la fonction pour ensuite conserver le m?me d?coupage et superposer le graphique des m?les sur le pr?c?dent. Par diff?rences on trouvera les fr?quences des femelles. HH<-hist(d$len, col="pink") names(HH) HH$breaks hist(d$len[d$sex=="m"], col="blue", breaks=HH$breaks, add=T) #Plus compliqu? mais en utilisant une combinaison de hist et barplot h1 <- hist(d$len[d$sex=="m"],breaks=HH$breaks,plot=F) h2 <- hist(d$len[d$sex=="f"],breaks=HH$breaks,plot=F) barplot(rbind(h1$counts,h2$counts),beside=T,col=c("blue","pink"),names.arg=h1$mids,xlab="taille des tortues",ylab="nombre") legend("topleft",legend=c("m?les","femelles"),fill=c("blue","pink"), bty="n") #Graphiques type Bo?tes ? moustache. #Quand on compare une variable qualitative ? une variable quantitaive il est d'usage de r?aliser des graphiques type bo?tes ? moustaches. boxplot(d$len~d$sex) #ou plot(d$len~d$sex) #Le graphique type boite ? moutache repr?sente la valeur m?diane, l'espace interquartile, le minimum et le maximum, sauf si ces valeurs sont plus extr?mes que le quartile inf?rieur ou sup?rieur -/+ 1.5 fois l'espace interquartile. Dans ce cas, alors elles apparaissent comme des points isol?s, et la valeur la plus extr?me de la barre fine s'arr?te au maximum ou minimum en ignorant ces valeurs. Notez l'utlisation de l'op?rateur de formule ~ qui veut dire en fonction de. Il est l? aussi possible d'habiller le graphique avec de la couleur. plot(d$len~d$sex, col=c("pink", "blue")) #Par d?faut, les couleurs correspondent ? l'ordre des niveaux (par ordre alphab?tique f est avant m). #Graphiques bivari?s plot(d$width~d$len) #en utilisant l'op?rateur de formule, la valeur ? gauche de ~ correspond aux ordonn?es, celle qui est ? droite aux abscisses. pairs(d[,2:4]) #Q15. Que fait la fonction pairs ? #Elle permet d'obtenir sur une meme fenetre graphique toutes les combinaison de graphique bivari?s ? partir des colonnes s?l?ctionn?es dans le jeu de donn?es d ##Interagir avec la fen?tre graphique identify(d$width~d$len) #identify permet de savoir ? quelle observation correspond quel point. La fonction locator(), utilis?e telle quelle permet en cliquant sur le graphique de conna?tre les coordonn?es en abscisse et en ordonn?es. #La forme des symboles, la couleur des points et leur tailles peuvent ?tre chang?es, pour cela il faut alors sp?cifier, pour chaque observation quelles en seront les caract?ristiques. On utilise pour cela l'indexation factorielle. Par exemple si on veut obenir un vecteur de couleur correspondant au genre des tortues, on fait: c("pink", "blue")[d$sex] #Dans le graphique on peut ainsi modifier la couleur des symboles en fonction. plot(d$width~d$len, col=("pink", "blue")[d$sex]) #La taille des points, leur forme sont obenues respectivement avec les arguments cex et pch. Il existe 25 symboles, les 5 derniers peuvent ?tre rempli de couleur en sp?cifiant l'argument bg plot(1:25, 1:25, pch=1:25, bg="blue") #Q16. Constuire le graphique de la largeur en fonction de la longueur, en utilisant deux symboles dont le fond peut ?tre color? en fonction des deux sexes, une taille de symbole unique ?quivalent ? la valeur 2, et deux couleurs distinctes pour le fond en fonction du sexe ?galement. plot(d$width~d$len, pch=c(21,22)[d$sex], bg=("pink", "blue")[d$sex],cex=2) #Les param?tres graphiques peuvent ?tre modifi?s facilement gr?ce ? la fonction par. par(bg="yellow") par(bg="yellow", col.lab="red") plot(1:25, 1:25, pch=1:25, bg="blue") #Pour revenir aux param?tres par d?faut il suffit de fermer la fen?tre graphique. dev.off() plot(1:25, 1:25, pch=1:25, bg="blue") #Voir ?par pour tout ce qui est offert via cette fonction ####Sauvegarder un graphique # bonton "Export" de la fenetre en bas à gauche de R studio ########################################### #G?n?rer des donn?es r?guli?res ou al?atoires dans R #### ########################################### ## Construction d'un vecteur dont le contenu suit une certaine r?gularit? v <- rep(1,10) v v <- 1:10 v v <- seq(1,10,by=2) v v <- seq(1,10,length=15) v #Q17, que font rep et seq ? #rep r?p?te un vecteur un nombre de fois donn? #sex permet de faire une s?quence r?guli?re soit par incr?ment r?gulier (by), soit par pas r?gulier en sp?cifiant le nombre de pas entre le d?but et la fin de la s?quence. ##r??chantillonage sample(v) #r?chantillonage avec remise sample(v, replace=T) # construction d'un vecteur de nombres al?atoires suivant la loi normale v <- rnorm(100,mean=1,sd=0.1) ### Q.18. Ex?cutez cette fonction plusieurs fois et comparez le # r?sultat. Que se passe-t-il ? #Le r?sultat change ? chaque ?x?cution, mais la moyenne de l'?chantillon et son ?cart type est constant (? l'erreur d'?chantillonage pr?t) v <- rbinom(100,size=100,p=0.5) # de nombreuses autres distributions sont impl?ment?es dans R... # bien pratique quand on veut faire des simulations # La fonction de r?partition, la fonction quantile et la fonction densit? sont des fonctions amies des fonctions produisant des donn?es al?atoires commen?ant en rbinom, rnorm, runnif... #calcul de la fr?quence cumul?e pour un quantile donn? #loi normale pnorm(1.645, 0,1) #loi de student pt(1.645, 30) #calcul du quantile ? partir de la fr?quence cumul?e #loi normale qnorm(0.95, 0,1) #loi de student qt(0.95, 30) ####################################################################### #Cr?ation d'une fonction et intervalles de confiances sur la moyenne### ####################################################################### #Nous allons cr?er une fonction permettant d'obtenir l'estimateur de l'erreur type sur la moyenne et l'appliquer pour notre jeu de donn?es #L'erreur type est d?finie comme le ratio entre l'estimateur de l'?cart type et la racine carr? de l'?chantillonage. #Notre fonction prendra donc comme unique argument un vecteur de donn?es qui correspondra ? l'argument x. Entre les accolades, il faudra pr?ciser l'ensemble des op?rations sur cet argument. Notez ici l'utilisation de sqrt pour obtenir la racine carr?e. Il est recommand? d'?crire la fonction sur plusieurs lignes, et ensuite de la copier et la coller depuis sa d?claration jusqu'? la fermeture de l'accolade dans la console R pour qu'elle puisse ?tre mise en m?moire dans la session en cours. typeerror<-function(x) {n<-length(x) sdx<-sd(x) sdx/sqrt(n) } typeerror mode(typeerror) #typeerror est donc maintenant une fonction qui calculera l'erreur standard sur un ?chantillon repr?sent? par un vecteur de donn?es. Il est possible donc de l'appliquer sur nos donn?es. #calcul de l'erreur standard pour la taille de l'ensemble des tortues typeerror(d$len) #A partir de l? il est possible de calculer facilement l'intervalle de confiance pour la moyenne taille sur l'ensemble des tortues (il y a 48 tortues, donc on cherchera les quantiles de la distribution de students ? 48-1 degr?es de libert?). mean(d$len)+qt(0.025, 47)*typeerror(d$len) mean(d$len)+qt(0.975, 47)*typeerror(d$len) #Q19. Calculez les intervalles de confiances pour la moyenne des m?les et les femelles, comparez les r?sultats obtenus au boxplot de la taille en fonction du sexe. mean(d$len[d$sex=="m"])+qt(0.025, 23)*typeerror(d$len[d$sex=="m"]) mean(d$len[d$sex=="m"])+qt(0.975, 23)*typeerror(d$len[d$sex=="m"]) mean(d$len[d$sex=="f"])+qt(0.025, 23)*typeerror(d$len[d$sex=="f"]) mean(d$len[d$sex=="f"])+qt(0.975, 23)*typeerror(d$len[d$sex=="f"]) ####R?alisation d'une boucle: estimation de l'intervalle de confiance par bootstrap### #Le bootstrap est une technique de r??chantillonage avec remise permettant d'avoir une id?e de l'erreur d'?chantillonage associ?e ? un param?tre. Ici nous allons utiliser les donn?es pour r??chantilloner avec remise et recalculer le param?tre voulu sur l'?chantillon 1000 fois (ici la moyenne). mean(d$len) M1<-mean(sample(d$len, replace=T)) M2<-mean(sample(d$len, replace=T)) #Comparez les deux valeurs #A l'aide d'une boule nous allons stock? dans l'objet Moyb, le r?sultat de ce calcul pour 1000 r??chantillonage Moyb<-NULL #Dans un premier temps, on d?clare l'objet Moyb dans lequel seront stock?es les donn?es, on lui donne une taille et une valeur inexistante, mais on on le nomme pour ?viter un message d'erreur for (i in 1:1000) {Moyb[i]<-mean(sample(d$len, replace=T))} #Q20. Que ce passe -t-il ? chaque tour de boucle ? #A chaque tour de boucle i est passe ? l'?l?ment suivant dans le vecteur 1 ? 1000, ainsi Moyb[i] va stock? une moyenne ? partir d'un r??chantillonage avec remise dans d$len de m?me taille que d$len #Q21. Dessinez l'histogramme de Moyb, calculez son quantile ? 2.5 et 97.5%. Le comparer avec l'intervalle de confiance obtenu pr?c?demment. A l'aide de la fonction abline tracez un trait vertical rouge sur l'histogramme correspondant ? chaque quantile. hist(Moyb) q025<-quantile(Moyb, 0.025) q975<-quantile(Moyb, 0.975) abline(v=q025) abline(v=q975)