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.