Logiciel R – Tutorial avec applications statistiques
Transcription
Logiciel R – Tutorial avec applications statistiques
Logiciel R – Tutorial avec applications statistiques Christophe Biernacki 2013/2014 1 1– Préliminaires 1 Préliminaires Notes de cours Généralités – Logiciel gratuit bien adapté à la manipulation de données, au calcul (en particulier statistique) et à la visualisation graphique. – Disponible pour divers environnements : UNIX, Windows, Mac. à l’adresse web suivante http://cran.r-project.org – Version payante similaire : S ou S-plus. – Divers packages spécifiques disponibles (analyse de données multivariées, séries temporelles, etc.) en plus du package de base. – Nombreux jeux de données disponibles (dont des classiques en statistique). Commandes élémentaires Lancer R R Depuis cueil. Quitter R > quit() > q() Ne pas oublier les parenthèses. Aide en ligne > help(quit) > help.start() Aide sur la commande quit. Aide HTML. > QUIT() > Quit() Ne fonctionnent pas. Noms de variables et de fonctions > help.start() Le point « . » est autorisé et permet de donner des noms explicites. Séparation commandes > help(quit); help(help) > help(quit) > help(help) Soit par un point-virgule « ; ». Soit par un retour à la ligne. Commande sur plusieurs lignes > help( + quit) R ajoute automatiquement « + » au début de la nouvelle ligne. Commentaires > help() # utilisez l’aide ! Après le dièse « # », toute la suite de ligne est un commentaire. Exécution de commandes > source("commandes.R") Les commandes sont ici dans le fichier commandes.R. Redirection sorties vers fichier > sink("fichier.sorties") Les sorties sont ici stockées dans le fichier fichier.sorties. Restore l’affichage des sorties à l’écran. Majuscules minuscules renciées et diffé- des des un Affichage d’un message > sink() > print("Hello !") l’environnement d’ac- Cette commande est utile pour afficher des informations lors du déroulement d’un programme par exemple. 2 1– Préliminaires Espace de travail ou workspace > objects() > rm(var1,var2) > rm(list=ls()) > save.image("travail.RData") > save.image("travail.RData") Visualise les objets R (variables et fonctions). Supprime les variables var1 et var2. Supprime tous les objets. Sauve l’espace de travail dans le fichier travail.RData Charge un espace de travail sauvegardé. Bibliothèque, packages et jeux de données Liste des packages dans la bibliothèque standard > library() Liste toutes les packages disponibles. Chargement d’un package à partir d’une bibliothèque ou library > library(stats) Cette commande est obligatoire pour utiliser les fonctionnalités (fonctions, données) d’un package (ici stats). Installation d’un nouveau package à partir du site du CRAN > install.packages("Rmixmod") > library(Rmixmod) On télécharge (besoin d’une connection internet avec le CRAN) puis on installe le package de classification Rmixmod. Liste des jeux de données > data() Liste tous les jeux de données disponibles Chargement d’un jeu de données > data(iris) Charge le jeu de données iris : la variable iris est maintenant un objet de l’espace de travail. Informations sur un jeu de données > help(iris) Aide sur le jeu de données iris. Manipulations élémentaires de variables Affectation > > > > > Affectations simultanées > x = y = 1 Les variables x et y sont affectées à 1 en une seule commande. Dernière valeur > 1/x Le résultat est affiché à l’écran. Comme il n’y a pas affectation à une variable, le résultat est perdu. En fait, il est disponible dans .Last.value jusqu’à ce qu’une autre commande soit exécutée. x = 1 x <- 1 x -> 1 x_1 assign("x",1) Différentes façons d’affecter la valeur 1 à la variable x. 3 1– Préliminaires Valeurs lières particu- > > > > > NA 1/0; -1/0 0/0; Inf-Inf 1>0 1<0 Valeur manquante. Respectivement Inf et -Inf. NaN (Not a Number). Valeur logique TRUE ou T. Valeur logique FALSE ou F. 4 1– Préliminaires Travaux pratiques TP 1 1. Créer un répertoire nommé TPenR. Lancer R et définir ce répertoire comme celui de travail. 2. Définir deux variables x et y à deux valeurs différentes. 3. On souhaite maintenant échanger le contenu de x et de y sans passer par l’intermédiaire d’une troisième variable. Proposer une stratégie et l’essayer. 4. Créer un fichier de commandes echange qui permutera automatiquement le contenu de x et de y. Les nouvelles valeurs de x et de y seront d’une part affichées à l’écran et d’autre part disponibles dans le fichier nommé xETy. Par ailleurs, un message à l’écran devra informer l’utilisateur que le fichier de commande a été totalement exécuté. TP 2 Utiliser l’aide pour comprendre et utiliser les commandes suivantes : 1. history(). 2. .Last.value. TP 3 Quitter R en sauvegardant l’environnement de travail dans le fichier mon1erTP. 5 2– Structures de données 2 Structures de données Notes de cours Vecteurs numériques (classe numeric) Création d’un vecteur de nombres > x = c(1,5,6,11) Vecteur (1, 5, 6, 11) affecté à x. Affectation clique > x = c(1,5,6,11); y=c(2,3) > z = 2*x + y + 1 y est répété deux fois et 1 quatre fois pour s’adapter à la longueur de x. Il faut que la longueur de x soit multiple de la longueur de y. Fonctions arithmétiques de base > xˆ2 > exp(x); sin(x); sqrt(x)#... Toutes les composantes au carré. ... Autres fonctions > length(x) > max(x); min(x); range(x) > sort(x) Nombre de composantes. Maximum, minimum, vecteur des 2 valeurs. Somme des composantes, moyenne, variance. Tri par ordre croissant. Séquences > > > > Vecteur (1, 2, . . . , 9, 10). Idem (by=incrément). Idem. Respectivement (0, 1) et 1. Réplications > c(x,x,x,x,x) > rep(x,times=5) x est mis bout à bout 5 fois. Idem. Composantes > > > > > 1ère composante. Trois 1ères composantes. Dernière composante. 1ère et 3e composantes. Toutes les composantes sauf la 1ère et la 3e . cy- > sum(x); mean(x); var(x) 1:10 seq(from=1,to=10,by=1) seq(length=10,from=1,by=1) 1:2-1; 1:(2-1) x[1] x[1:3] x[length(x)] x[c(1,3)] x[-c(1,3)] Vecteurs logiques (classe logical) Création d’un vecteur de booléens > y = x > 3 > x >= 3; x == 3; x != 3 Opérateurs > y1 & y2 > y1 | y2 > !y1 y est un vecteur de même longueur que x (vecteur numérique) avec des TRUE aux composantes de x strictement plus grandes que 3 et des FALSE ailleurs. Autres exemples : inégalité large, égalité, différent. Intersection (« et » booléen). Union (« ou » booléen). Négation. 6 2– Structures de données Sélection de composantes d’un vecteur numérique > x[x>3] Vecteur numérique composé uniquement des composantes de x strictement supérieures à 3. Transformation logique/numérique > x>3 + 10 TRUE et les FALSE deviennent respectivement 1 et 0 pour y ajouter 10. 1. 0. as.numeric(TRUE) as.numeric(FALSE) Vecteurs de chaînes de caractères (classe character) Création d’un vecteur de chaînes de caractères > y = c("Jean","Louise") y est un vecteur composé de deux chaînes de caractères. Concaténation > paste("un","essai",sep="") > paste("un","essai",sep=" ") Donne la chaîne "unessai". Donne la chaîne "un essai". Nom des composantes d’un vecteur numérique > > > > Chaque composante de note correspond au nom d’un élève. Transformation numérique/caractère eleve = c("Jean","Louise") note = c(8,12) names(note)=eleve note("Louise") > as.character(12) La 2e note, soit 12. Le nombre 12 devient la chaîne de caractères "12". Listes (classe list) Une liste est une collection ordonnée d’objets qui peuvent être de différentes classes. C’est donc un outil très pratique pour disposer, sous la forme d’une seule variable de type liste, de plusieurs variables de différents types. On verra en particulier tout l’intérêt plus tard pour les objets de type fonctions. Création d’une liste > lst=list(nom="Paul",age=31, + age.enfants=c(1,6,9)) Liste à trois composantes de différentes classes. Composantes > lst[[2]]; lst$age > lst[["age"]] Commandes équivalentes pour obtenir la seconde composante age. Âge du 3e enfant (9). Commandes équivalentes pour obtenir l’âge des tous les enfants. > lst$age.enfants[3] > lst$age.enfants; lst$age.en Concaténation > list.AB = c(list.A,list.B) Une nouvelle liste associant deux listes. Tableaux multidimensionnels (classe array) Création d’un tableau > x=array(0,dim=c(2,3,4)) > x=array(1:24,dim=c(2,3,4)) > x=array("abc",dim=c(2,3,4)) > x=array("TRUE",dim=c(2,3,4)) Dimensions > dim(x) Tableau à 3 dimensions (2×3×4) et rempli de zéros. Rempli avec 1, 2, . . ., 24. Rempli avec la chaîne de caractères "abc". Rempli avec le booléen TRUE. Vecteur numérique composé des dimensions du tableau. 7 2– Structures de données Opérateurs associés > D = 2*A*B + C + 1 > A %o% B > outer(A,B,"*") > outer(A,B,"+") > aperm(A,c(3,2,1)) Composantes > A[2,1,3] > A[,1,3] > A[„3] Possible si les tableaux A, B et C ont mêmes dimensions (1 est implicitement transformé en un tableau de mêmes dimensions). Produit cartésien de tableaux numériques avec opérateur * : les dimensions sont concaténées. Idem. Idem avec opérateur +. Permute les dimensions : ici, la dimension 1 devient la dimension 3 et réciproquement. Élément 2 de la dimension 1, 1 de la dimension 2 et 3 de la dimension 3. Vecteur de tous les éléments de dimension 1 et correspondants à la 1ère composante de la dimension 2 et la 3e composante de la dimension 3. Tableau de dimension 2 (matrice). Structures de données hétérogènes (classe data.frame) Les structures de données hétérogènes ou data frame sont des listes particulières. Elles se présentent comme des matrices dont les colonnes peuvent être de différents types (numérique, logique, chaînes de caractères). Elles se manipulent aussi de façon très semblables aux matrices. Création d’un data frame > x = data.frame( + nom=c("Paul","Isa"), + age=c(18,23),male=c(T,F)) > y = edit(data.frame()) Composantes > x[["age"]]; x[[2]] > x$age; x[,2] > attach(x) > detach(x) data frame de dimension 2 × 3 avec des chaînes de caractères en 1ère colonne, du numérique en seconde et des booléens en dernière. Création à partir d’un tableur. Commandes équivalentes. Les composantes nom, age, male sont disponibles directement sous leur nom sans ajouter le préfixe x. Par exemple, age est maintenant équivalent à x$age. Opération inverse. Matrices (classe matrix) Une matrice est simplement un tableau à deux dimensions. Néanmoins, un certain nombre de facilités spécifiques existent. Création d’une matrice > A = matrix(1,nrow=2,ncol=3) > B = edit(matrix()) Dimensions > nrow(A); ncol(B) Matrice de 1 à 2 lignes et 3 colonnes. Création à partir d’un tableur. Nombre de lignes et de colonnes respectivement. 8 2– Structures de données Composantes > A[,3] > A[1,] > A[1:2,2:3] 1er élément de la ligne et 3e de la colonne. Toute la 3e colonne. Toute la 1ère ligne. Sous-matrice composée des deux 1ères lignes et des deux dernières colonnes. Nommer les lignes et colonnes > > > > rownames(A); colnames(A) rownames(A)=c("chat","chien") colnames(A)=c("a","b","c") A[1,3]; A["chat","c"] Noms de lignes et de colonnes. Nomme les lignes. Nomme les colonnes. Commandes équivalentes. Opérateurs associés > > > > A+B; A*B; Aˆ2 #... A %*% B t(A) diag(v) Opérations termes à termes. Produit matriciel. Transposée. v est un vecteur : donne une matrice diagonale avec v sur la diagonale. A est une matrice : extrait le vecteur diagonal de A. k est un nombre : donne la matrice identité de dimension k. Inverse de A. Commandes équivalentes mais la seconde commande est numériquement plus efficace. Liste des vecteurs propres et des valeurs propres de A. Valeurs propres de A. Vecteurs propres de A. Déterminant de A. Moyenne des lignes. Somme des colonnes. > A[1,3] > diag(A) > diag(k) > solve(A) > solve(A) %*% v; solve(A,v) > eigen(A) > > > > > Concaténation eigen(A)$values eigen(A)$vectors det(A) apply(A,1,mean) apply(A,2,sum) > rbind(A,B,C) > cbind(A,B,C) Met A, B et C bout à bout verticalement. Met A, B et C bout à bout horizontalement. Facteurs (classe factor) Un facteur est un objet qui se présente comme un vecteur qui contient des noms de catégories. Cette structure va au-delà du simple vecteur de caractères puisqu’elle permet de gérer de façon spécifique les données catégorielles (ou qualitatives). Création d’un facteur > f=factor(c("a","b","a")) Facteur avec 3 composantes et 2 modalités "a" et "b". Niveaux d’un facteur > levels(f) Niveaux (ou modalités) du facteur. 9 2– Structures de données Travaux pratiques TP 1 Créer en un minimum de commandes : 1. La table de multiplication. 2. La table d’addition. 3. Une matrice 20 × 20 avec les nombres 1 à 799 de deux en deux et répartis de façon croissante colonne par colonne. Les noms des lignes seront lig. 1, lig. 2, etc. et les noms de colonne seront col. 1, col. 2, etc. 4. La matrice précedente où les multiples de 3 sont remplacés par la valeur 0. Combien y avait-il de multiples de 3 ? 5. Un vecteur contenant les valeurs non nulles de la matrice précédente. 6. Une liste à deux composantes : la 1ère, nommée petit, contient les valeurs inférieures strictement à la moyenne des valeurs du vecteur, la 2nd , nommée grand,contient les autres valeurs. 7. La liste précédente avec la composante petit ayant ses éléments classés par ordre décroissant. 8. Une matrice 50 × 50 avec des 1 partout sauf des 0 sur la diagonale (une ligne de commande suffit). TP 2 On veut résoudre le système linéaire Ax = b avec A = 1 1 1 1012 et b = (1 2)′ . 1. Créer la matrice A à partir du tableur intégré à R. 2. Essayer deux commandes différentes pour résoudre le système. 3. Identifier sur cet exemple celle qui est la plus précise. TP 3 1. Charger le jeux de données iris. 2. À quelle structure de données appartient-il ? 3. À quelle structure de données appartiennent chacune de ses colonnes ? De ses lignes ? 4. Proposer une méthode qui évitera dans l’avenir de retaper à chaque fois le mot iris dès qu’on veut accéder à la structure de données. 5. Donner, en une seule commande, le nom de toutes les espèces de fleur présentes dans le jeux de données. 10 3– Éléments de langage – programmation 3 Éléments de langage – programmation Notes de cours Lecture de données depuis un fichier On s’intéresse ici à la lecture la plus classique. Il s’agit de lire un fichier de données organisé de la façon suivante : – La première ligne contient le nom des variables. – Chaque ligne suivante correspond à un nouvel individu décrit par les variables précédentes. Le début de la ligne contient le nom de cet individu. Fichier "titanic.data" 1 2 3 4 5 7 8 Class 1st 2nd 3rd Crew 1st 1st 2nd Sex Male Male Male Male Female Male Male Age Child Child Child Child Child Child Adult Survived No No No No No Yes Yes Freq 0 0 35 0 0 5 14 Lecture intégrale d’un tableau > x=read.table("titanic.data") La variable x est de type data frame avec les noms de lignes et de colonnes correspondant. Édition de données > xnew = edit(x) Modification de x dans un tableur. Commandes de contrôle Éxécution tionnelle condi- > if (x>y) + {print("x > y" )} else + {print("x <= y" )} Les accolades {} délimitent les deux groupes de commandes : celui où la condition est réalisée et celui où elle ne l’est pas. Éxécution tive répéti- > > + > + + Boucle. Boucle conditionnelle while. for (i in 1:10) {print(i)} i=0;while (i<=3) {print(i);i=i+1} i=0;repeat {i=i+1; if (i<=3){print(i)} else {break}} Boucle conditionnelle repeat. La commande break est indispensable pour sortir de la boucle. Fonctions (objet de classe function) Une fonction permet de stocker un ensemble de commandes dans l’espace de travail sous une forme interne particulière. C’est un outil performant, pratique et généralement indispensable. 11 3– Éléments de langage – programmation Création fonction d’une > som = function(a,b){a+b} > fix(som) Exécution > som(3,7) > som(a=3,b=7); som(b=7,a=3) Fonction som calculant la somme des deux nombres a et b. Méthode plus pratique pour créer une fonction : R ouvre un éditeur de texte. Appel de la fonction som avec a=3 et b=7. Commandes équivalentes à la précédente. Modification > fix(som); som=edit(som) > som = edit() Commandes équivalentes. Si R donne un message d’erreur à la sortie de la modification (avant toute exécution donc !), il faut réagir ABSOLUMENT en utilisant cette commande. Cela signifie qu’il y a une erreur de syntaxe et qu’il ne peut compiler la fonction sous la forme d’un objet interne. Si cette commande n’est pas exécutée, les modifications sont perdues. Sorties multiples > som.prod = function (a,b) + {s=a+b;p=a*b;p} Une fonction ne renvoie que le résultat de la dernière commande. Ici, ce sera seulement p, s étant perdu. Pour sortir plusieurs résultats en même temps d’une fonction, il faut créer une liste avec ces résultats. Ici, la fonction donne une liste de 1ère composante s et de 2e p. > som.prod = function (a,b) + {list(s=a+b,p=a*b)} Arguments par défaut > som = function(a,b=0){a+b} > som(1,0); som(1) Par défaut b vaut 0. Si b n’est pas spécifié, il sera mis à 0. Commandes équivalentes. Opérateur binaire > "%+%"=function(a,b){max(a,b)} Nouvel opérateur binaire. Appel de cet opérateur. > 10 %+% 3 Argument indéfini > som2=function(c,...){ + som(...)+c} > som2(4,1,2) L’argument ... est passé directement à la fonction som appelée à l’intérieur de la fonction som2. Appel correspondant. 3– Éléments de langage – programmation 12 Travaux pratiques TP 1 1. Écrire une fonction qui donne la forme irréductible d’une fraction. 2. Créer l’opérateur binaire %sur% qui effectue la même opération. TP 2 Programmer la fonction factorielle sous forme d’une fonction R récursive (c’est-à-dire qui s’appelle elle-même). TP 3 1. Entrer les données « titanic » du cours dans le fichier titanic.data. 2. Charger les données dans l’espace de travail. Quelle est la structure de données utilisée par R? 3. Avec le tableur intégré à R, supprimer les variables Sex et Freq du 3e individu. Que se passe-t-il ? Que donne la somme de la dernière colonne dans ces conditions ? TP 4 On s’intéresse à la série Sn = 1 + 22 + 32 + . . . + n2 . 1. Calculer Sn de deux façons différentes : avec boucle puis sans aucune boucle (méthode vectorielle). 2. Pour n = 105 par exemple, mesurer avec une commande R la différence de temps de calcul entre les deux méthodes. Conclusion. 13 4– Introduction aux graphiques 4 Introduction aux graphiques Notes de cours Gestion de la fenêtre graphique Création d’une fenêtre graphique > x11(); X11(); windows() Commandes équivalentes pour ouvrir une nouvelle fenêtre graphique vierge. Sélection d’une fenêtre graphique > dev.list() Vecteur des numéros de fenêtres graphiques ouvertes. La fenêtre graphique numéro 1 est activée. > dev.set(1) Fermeture d’une fenêtre graphique > dev.off(1) > graphics.off() Fractionnement d’une fenêtre graphique > split.screen(c(2,3)) > screen(5) Sauvegarde d’une fenêtre graphique dans un fichier > dev.print(postscript, + file="essai.ps") Ferme la fenêtre graphique numéro 1. Ferme toutes les fenêtres graphiques. Fractionnement de la fenêtre graphique active en 6 graphiques (2 en ligne et 3 en colonne). Active le 5e graphique de la fenêtre active (donc celui en 2e ligne et 2e colonne). Sauvegarde la fenêtre graphique active dans le fichier postscript "essai.ps". Fonctions haut niveau Les fonctions haut niveau créent un nouveau graphique dans la fenêtre graphique active, éventuellement avec des caractéristiques complémentaires (axes, labels, titres, etc.). Si un graphique existait déjà dans la fenêtre, alors il est effacé. 4– Introduction aux graphiques Commande rique géné- > plot(x) > plot(x,y) > plot(M) > plot(L) > plot(x,y,type="p",pch="+") > plot(x,y,type="l") > plot(x,y,type="b",pch="o") > plot(x,y,type="n") > plot(x,y,log="x") > plot(x,y,axes=FALSE) > plot(x,y,xlab="X",ylab="Y") Données riées multiva- > pairs(X) 14 x vecteur numérique : x en ordonnée, index des composantes en abscisse. x et y vecteurs numériques : x en abscisse, y en ordonnée. M matrice deux colonnes : 1ère colonne en abscisse, 2e colonne en ordonnée. L liste avec 2 éléments x et y : L$x en abscisse, L$y en ordonnée. Points individuels seuls avec symbole "+". Lignes seules. Points "o" et lignes simultanées. N’affiche rien mais prépare le graphique (création, axes) : utile pour les fonctions bas niveau. Échelle logarithmique en abscisse. Graphique sans axes. Nom des axes. Affiche toutes les paires de colonnes de la matrice X sur le même graphique. Fonctions bas niveau Les fonctions bas niveau ajoutent des informations (points, lignes, légendes, titres) à un graphique déjà créé par une fonction haut niveau. Il faut donc avoir déjà utilisé une fonction haut niveau auparavant. Ajout de points ou lignes > points(x,y,pch="+") > lines(x,y) > lines(x,y,col="blue") > lines(x,y,lty=2) Ajout de texte > text(x,y,noms) > > + + + title("Titre du graphique") legend("topright", c("courbe 1","courbe 2"), col=c("blue","red"), lty=c(1,2)) Commande similaire à plot(x,y,type="p",pch="+") mais sans effacer le graphique. Commande similaire à plot(x,y,type="l") mais sans effacer le graphique. Idem en couleur bleue. Idem en pointillés. En chaque position (x,y), affiche la composante correspondante du vecteur de chaînes de caractères noms. Titre du graphique. Légende placée en haut à droite avec les deux libellés courbe 1 et courbe 2, le 1er associé à une ligne continue bleue, le 2nd à une ligne pointillée rouge. 15 4– Introduction aux graphiques Travaux pratiques 2.5 TP 1 1. Afficher une projection du jeu de données iris sur toutes les paires d’axes dans une même fenêtre graphique. Une seule commande suffit. 2. Faire plusieurs constatations visuelles. 3. Écrire une fonction projetant sur une paire d’axes les individus en affectant un symbole et une couleur différente selon leur espèce d’appartenance. Cette fonction ajoutera aussi le nom des axes et une légende (voir la figure ci-dessous). Par défaut, cette fonction devra sélectionner les deux 1ers axes. 1.5 1.0 0.5 Petal.Width 2.0 * ** * * **** * * * * ** * **** * * * * **** * ** * o** ** * ** * * * *o o oo * o ooo o o o ooo ** * o ooooooo oo o o o o oo o o o oo + + + +++ + +++ + +++ ++++ + + +++ + ++ 1 + setosa o versicolor * virginica 2 3 4 5 6 7 Petal.Length −1.0 0.5 sin(x) 1.0 TP 2 Programmer deux fonctions qui affichent les fonctions sinus et cosinus sur [0, 2π] : – superposées dans le même graphe (fonction sin.cos) – dans deux graphes différents se partageant la même fenêtre graphique (fonction sin.cos.2). Les figures suivantes donnent une illustration du résultat à obtenir. 0 1 2 3 4 5 6 4 5 6 0.0 0 1 2 3 x 4 5 6 −1.0 cos(x) −0.5 sin(x) cos(x) −1.0 f(x) x 0 1 2 3 x 16 5– Fonctionnalités statistiques 5 Fonctionnalités statistiques Notes de cours Le logiciel R est particulièrement bien fourni en boîtes à outils statistiques. Parmi les fonctionnalités présentées ici, certaines sont disponibles dans des bibliothèque autres que la bibliothèque standard (base). Il faudra alors préalablement charger les bibliothèques utiles, généralement stats (anciennement bibliothèque mva). Rappelons la commande pour cela : > library(stats). Lois de probabilités Densités et probabilités individuelles > dnorm(1,0,2) > dnorm(1,0,2,log=TRUE) > dbinom(3,10,1/3) > # autres lois : lire l’aide Densité de N (0, 22 ) évaluée en 1. Idem mais donne la log densité. Probabilité individuelle de B(10, 31 ) évaluée en 3. Nombreuses lois continues et discrètes disponibles. Fonctions de répartition > > > > pnorm(1,0,2) pnorm(1,0,2,log.p=TRUE) pbinom(3,10,1/3) # autres lois : lire l’aide f.r. de N (0, 22 ) évaluée en 1. Idem mais donne la log f.r. f.r. de B(10, 13 ) évaluée en 3. Nombreuses lois continues et discrètes disponibles. Fractiles (ou quantiles) > qnorm(0.9,0,2) > qbinom(0.9,10,1/3) > # autres lois : lire l’aide Fractile de N (0, 22 ) évalué en 0.9. Fractile de B(10, 31 ) évalué en 0.9. Nombreuses lois continues et discrètes disponibles. Génération de nombres aléatoires > rnorm(10,0,2) Un vecteur de 10 réalisations indépendantes de N (0, 22 ). Un vecteur de 10 réalisations indépendantes de B(10, 13 ). Nombreuses lois continues et discrètes disponibles. Rééchantillonnage avec remise de 100 éléments parmi les nombres 1, . . . , 10. > rbinom(10,10,1/3) > # autres lois : lire l’aide > sample(1:10,100,replace=T) Statistiques descriptives Indicateurs numériques > mean(x);var(x);min(x) #... > weighted.mean(c(0,1),c(3,4)) > summary(x) > table(f) Statistiques de base. Moyenne pondérée de 0 et 1 avec poids respectifs 3 et 4. Résumés numériques (moyenne, fractiles, minimum, etc.) sur le vecteur ou la matrice x (fonction générique valable pour d’autres classes). Tableau de contingence pour le facteur f. 5– Fonctionnalités statistiques Graphiques > hist(x) > hist(x,freq=FALSE) > hist(x,breaks=c(1,2,7) > hist(x,breaks=5) > rug(x) > boxplot(x) > plot(ecdf(x)) > plot(ecdf(x,do.p=F, + verticals=T)) > qqnorm(x);qqline(x) > barplot(x) > pie(x) 17 Histogramme en effectif du vecteur x. Histogramme en fréquence. Histogramme en deux classes : [1,2[ et [2,7[. Histogramme en 5 classes. Affiche en surimpression la position réelle des individus. Boîte à moustaches pour un vecteur x. Si x est une liste, autant de boîtes à moustaches sur le même graphique que de composantes. Si x est un data frame, autant de boîtes à moustaches sur le même graphique que de colonnes. Affiche la f.r. empirique du vecteur x. Idem sans points et avec liaison verticale. Droite de Henry pour visualiser l’écart à la normalité. Affiche des barres de hauteur égale à chaque composante du vecteur x. Camembert du vecteur x. Statistiques inférentielles Estimations et tests paramétriques classiques > t.test(x) > t.test(x,mu=3,alter="less") > t.test(x,y) > prop.test(10,20,p=0.4) > prop.test(c(3,5,2),c(4,9,5)) > var.test(x,y) Estimation (ponctuelle et par intervalle) de la moyenne. Réalise aussi le test d’égalité à 0 de µ. Idem avec intervalle de confiance unilatéral à gauche et hypothèse alternative du test µ < 3. Estimation par intervalle de la différence des moyennes des deux populations. Réalise aussi le test d’égalité des deux moyennes (test de Student). À partir de 10 succès sur 20 essais, intervalle de confiance sur la proportion de succès et test sur son égalité à 0.4. Test d’égalité des proportions de succès de trois populations. Intervalle de confiance sur le rapport de la variance des deux populations et test de leur égalité. 5– Fonctionnalités statistiques Estimations et tests non paramétriques classiques > ks.test(x,pgamma,3,2) Régression linéaire > reg=lm(y ∼ x) 18 Test d’adéquation de Kolmogorov-Smirnov pour décider si x provient d’une G(3, 2). Test de comparaison de > ks.test(x,y) Kolmogorov-Smirnov pour décider si x et y proviennent de la même population. > shapiro.test(x) Test de Shapiro-Wilk pour la normalité. Test d’adéquation du χ2 : > chisq.test(p.empi,p=p.theo) p.empi correspond aux probabilités empiriques, p.theo, aux probabilités théoriques. Test du χ2 d’indépendance pour > chisq.test(x) une table de contingence x. > dens=density(x,kernel="gaus") Estimation par noyau gaussien d’une densité. Affichage de la densité estimée. > plot(dens$x,dens$y) > > > > > reg$call reg$coefficients reg$residuals reg$fitted.values summary(reg) > plot(reg) > lm(y ∼ 1+x) > lm(y ∼ 0+x) > lm(y ∼ -1+x) > lm(y ∼ poly(x,2)) > lm(y ∼ 1+x+I(xˆ2)) > lm(y ∼ x1+x2+x3) > lm(y ∼ X) Modèle y = Xb + e avec constante : estimation par moindres carrés. Rappel du modèle de régression. Vecteur des coefficients estimés. Résidus. Estimation de y. Test de non régression, R2 ajusté, etc. Affichages divers (résidus, Cook, etc.). Variante pour l’appel du modèle avec constante. Modèle passant par l’origine. Idem. Régression polynomiale d’ordre 2. Idem. Régression multiple. Idem avec X une matrice. 19 5– Fonctionnalités statistiques Travaux pratiques TP 1 (statistiques descriptives) On désire faire des statistiques descriptives sur les données iris. 1. En une seule commande, obtenir tous les indicateurs numériques de base associés à chacune des variables quantitatives et qualitatives. 2. Tracer sur un même graphique chacune des « boîtes à moustaches » associée à chaque variable quantitative (une commande est encore suffisante). 3. Tracer un camembert puis un bar plot de la variable qualitative. 4. Tracer sur un premier graphique la droite de Henry pour la variable Sepal.Length. Sur un autre graphique, faire de même avec uniquement les individus de l’espèce versicolor. Conclusion ? TP 2 (loi des grands nombres) Il s’agit d’illustrer la loi forte des grands nombres : si X1 , . . . , Xn est une suite de variables aléatoires i.i.d. avec E|X1 | < ∞, alors n 1X p.s. Xi −→ E(X1 ). n i=1 1. Générer une réalisation x1 , . . . , xn de la suite X1 , . . . , Xn avec n = 50000 dans le cas d’une loi normale X1 ∼ N (0, 1). 1 Pm 2. Calculer xm = m i=1 xi pour m = 1, . . . , n. 3. Tracer xm en fonction de m. Conclusion ? 4. Procéder de même avec la loi de Cauchy. Conclusion ? TP 3 (théorème central limite) Il s’agit d’illustrer maintenant le théorème central limite : si X1 , . . . , Xn est une suite de variables aléatoires i.i.d. avec E|X1 | < ∞ et E(X12 ) < ∞, alors P √ n1 ni=1 Xi − E(X1 ) D p −→ N (0, 1). n V ar(X1 ) 1. Générer R réalisations x1,r , . . . , xn,r de la suite X1 , . . . , Xn dans le cas d’une loi gamma X1 ∼ G(1, 1) (r = 1, . . . , R). On a donc E(X1 ) = 1 et V ar(X1 ) = 1. On prendra n = 1000 et R = 500. Pn 2. Calculer xn,r = n1 i=1 xi,r pour chaque r. √ 3. Tracer (1) un histogramme de n(xn,r − 1) sur le même graphique que la densité que la loi N (0, 1) et (2) la fonction de répartition empirique de cette suite sur le même graphique que la fonction de répartition de N (0, 1). Essayer avec d’autres valeurs de n. Conclusion ? 4. Procéder de même avec la loi binomiale B(10, 0.8). TP 4 (intervalles de confiance) 1. Générer n = 10 réalisations i.i.d. d’une v.a. N (0, 1). Donner un intervalle de confiance bilatéral de niveau 99% sur la moyenne, la variance étant supposée inconnue elle aussi. 2. Estimer le niveau du test par le niveau empirique. Le niveau empirique correspond à la fréquence de présence du vrai centre (ici 0) dans l’intervalle de confiance. Conclusion ? TP 5 (tests d’adéquation) 1. Réécrire le test d’adéquation du χ2 à une loi normale en considérant les deux paramètres moyenne et variance comme inconnus (la fonction chisq.test fournie dans R ne prend pas le bon nombre de degrés de liberté). 2. On considère un échantillon x1 , . . . , xn de N (0, 1). 5– Fonctionnalités statistiques 20 (a) Tester l’hypothèse d’adéquation à une loi normale. On utilisera trois tests différents : χ2 , Kolmogorov-Smirnov et Shapiro-Wilk. On prendra n = 100 et un risque α = 1%. On pourra prendre le découpage en classes suivant pour le test du χ2 : ] − ∞, −1[, [−1, 0[, [0, 1[, [1, ∞[. (b) Quel est le risque empirique associé à chaque test. 3. On considère maintenant un échantillon x1 , . . . , xn de U[−2,2] . Dans le cadre de l’hypothèse d’adéquation à une loi normale, estimer la puissance (pour n = 100) associée à chaque test quand α = 5%. Classer alors les trois tests par ordre de préférence. TP 6 (régression) On considère le modèle de régression Y = 10+x+5 sin(x)+ǫ avec ǫ ∼ N (0, 4). 1. Pour des valeurs xi = i (i = 1, . . . , 30), générer un échantillon y1 , . . . , y30 i.i.d. à partir du modèle précédent. Tracer les couples de points (xi , yi ) ainsi que la vraie courbe. 2. On suppose maintenant ignorer le modèle qui a généré les données. (a) Estimer par moindres carrés les paramètres du modèle Y = a + bx + ǫ. Tracer la courbe estimée sur le graphique précédent. Vérifier graphiquement la normalité des résidus. Que peut-on supposer ? (b) Estimer par moindres carrés les paramètres du modèle Y = a + bx + c sin(x) + dx2 + ǫ. Ajouter la courbe estimée au graphique précédent. Faire le test de nullité des coefficients. Que laisse supposer ce test ? (c) Estimer par moindres carrés les paramètres du modèle Y = a + bx + c sin(x) + ǫ. Ajouter la courbe estimée au graphique précédent. (d) Sélectionner le meilleur modèle au sens du critère AIC. Conclusion ? Aurait-on pu choisir le modèle avec le critère du R2 ? Du R̄2 ? Essayer. (e) Vérifier graphiquement la normalité des résidus de ce modèle,les résidus studentisés, la distance de Cook. TP 7 (efficacité asymptotique et maximum de vraisemblance) On considère un échantillon X1 , . . . , Xn i.i.d. de N (θ, 1), θ étant un paramètre inconnu. 1. On s’intéresse dans un 1er temps à l’estimation de θ par maximum de vraisemblance (MV). (a) Donner l’estimateur θ̂n du MV de θ ainsi que sa loi. Quels sont le biais et l’efficacité de cet estimateur ? (b) Visualiser le biais et l’efficacité de cet estimateur pour différentes tailles d’échantillon. 2. On s’intéresse maintenant à l’estimation de P (X ≤ θ). Répondre alors aux mêmes questions qu’auparavant. Comparer aussi les résultats avec le cas précédent. TP 8 (estimation non paramétrique par noyaux) 1. Écrire la fonction get.sample qui génère un échantillon de taille n = 100 dont la moitié provient d’une loi uniforme entre 0 et 2 et l’autre moitié provient d’une loi normale de centre 5 et de variance 1. 2. Écrire la fonction show.all qui trace trois densités sur le même graphique : (i) la vraie densité, (ii) la densité estimée avec noyau uniforme et (iii) la densité estimée avec noyau normal. Pour commencer, on prendra une valeur de fenêtre h = 0.5. 3. Faire varier n et h pour observer leur influence sur la qualité de l’estimation. Utiliser une fonction R qui calcule une fenêtre optimale et visualiser la solution proposée.