Statistiques unidimensionnelles Cours de R Statistiques unidimensionnelles
Généralités sur R R est un système d ’analyse statistique et graphique, clone de S+(très cher), basé sur le langage S (statistiques),écrit essentiellement en C R est gratuit, compatible avec toutes les plate-formes Les fichiers pour installer R sont disponibles à partir du site du CRAN (Comprehensive R Archive Network)
Généralités (suite) R est un langage interprété et pas compilé constitué de packages et de bibliothèques langage orienté objet on agit sur ces objets avec des opérateurs arithmétiques, logiques ou de comparaison, et avec des fonctions Avec R une fonction s’écrit toujours avec des parenthèses, même si elle ne contient rien Exemples: mean(); var(x)
Aides au démarrage Une commande est exécutée dés que l'on utilise la touche entrée plusieurs commandes sur la même ligne séparées par des; pour voir le contenu d ’un objet, taper son nom Commentaires aprés le symbole #
L’aide en ligne Exemples: help(mean) ou help(« mean ») ou ?mean() ouvre une page sur le modèle suivant:
mean(base) R Documentation Arithmetic Mean Description Generic function for the (trimmed) arithmetic mean. Usage mean(x, ...) ## Default S3 method: mean(x, trim = 0, na.rm = FALSE, ...) Arguments x :An R object. Currently there are methods for numeric data frames, numeric vectors and dates. A complex vector is allowed for trim = 0, only. trim: the fraction (0 to 0.5) of observations to be trimmed from each end of x before the mean is computed. na.rm a logical value indicating whether NA values should be stripped before the computation proceeds. ...
See Also weighted.mean, mean.POSIXct Value For a data frame, a named vector with the appropriate method being applied column by column. If trim is zero (the default), the arithmetic mean of the values in x is computed, as a numeric or complex vector of length one. If any argument is not logical (coerced to numeric), integer, numeric or complex, NA is returned, with a warning. If trim is non-zero, a symmetrically trimmed mean is computed with a fraction of trim observations deleted from each end before the mean is computed. References Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole. See Also weighted.mean, mean.POSIXct Examples x <- c(0:10, 50) xm <- mean(x) c(xm, mean(x, trim = 0.10)) mean(USArrests, trim = 0.2)
Lancement de R, les menus(sous windows)
La barre de menus de l’éditeur Ouvrir un script Enregistrer un script Soumettre une ligne de code Passer d’un fenêtre à l’autre imprimer
La barre de menus de RGui Ouvrir un script Charger une image Sauvegarder une image Copier coller Arrêter le calcul en cours imprimer
Pour débuter Pour créer un objet on utilise l’opérateur d'affectation = Exemples:n=5 M=c(1,2,3) k=c(T,F) Il faut respecter la casse: n est différent de N Voir l’ensemble des objets créés: objects() tous les objets ls(pat=« n ») objets dont le nom commence par la lettre n rm() remove() élimine des objets ex: rm(n,M,k) c() ,objects(), ls() sont des fonctions Pour mettre une ligne en commentaire: # Pour afficher des valeurs: print() dans le script ou le nom de la valeur dans R
suite… Un objet est caractérisé par son nom, son contenu, mais aussi ses deux attributs son mode: il en existe quatre principaux: numérique, caractère, complexe et logique sa longueur: nombre d’éléments de l’objet Pour connaître son mode et sa longueur, on peut utiliser respectivement les fonctions mode() et length() Une valeur manquante est représentée par NA, Une valeur de mode caractère est représentée entre guillemets doubles
Génération de vecteurs En saisissant les valeurs séparées par des virgules à l’aide de la fonction c() : v=c(1,2,3) En générant des suites numériques avec l’opérateur : v=1:10 Avec les fonctions seq(): génère des suites régulières rep(): duplique une suite sample():tirage aléatoire En utilisant d’autres vecteurs et des opérations numériques + ,- ,* , / , ^ ou logiques (&,I,!,>,<,>=,<=,==,!=) Si v1 et v2 sont deux vecteurs de même longueur, v3=v1+v2 V3=v1/v2 V3=v1^2 V3=v1>v2 length(v) donne la longueur de v
Séléction d’éléments dans un vecteur Deux modes de sélection dans un vecteur v Utiliser les indices de position des éléments de v Utiliser un vecteur booléen de même longueur que v, valant TRUE aux positions des éléments à sélectionner Exemples: v= -3:2 v[3] v[c(4,6)] a=c(4,6); v[a] l=c(TRUE, TRUE, TRUE,FALSE,TRUE,FALSE); v[l] l=v>0; v[l] Utilisation d’indices négatifs pour dé-selectionner exemple w=v[-4]
Génération de nombres aléatoires Exemples: sample():échantillon, tirages avec ou sans remise, permutations exemples: v1= sample(1:10):permutation de{1,2,..,10} v2= sample(1:10,3): tirage sans remise (par défaut )de 3 éléments parmi 10 v3= sample(1:2,10,replace=TRUE): tirage avec remise de 10 valeurs 1 ou 2 au hasard pour un tirage non uniforme on précise le vecteur probabilité(p1,…pn) avec pi=1. exemple:v4=sample(1:5,3,prob=c(0.1,0.2,0.1,0.5,0.1)) rnorm(100):génère 100 observations issues de la loi normale de paramètres 0 et 1 (par défaut) rnorm(100, mean=2,var=3): génére 100 observations issues de la loi normale de paramètres 2 et 3
Distribution d’un ensemble d’observations Quelques fonctions: si v est un ensemble d’observations, table(v): compte les fréquences des éléments de v summary(v): renvoie un résumé statistique du contenu de v,avec le min 1er quartile, moyenne, médiane,3iemme quartile et max min(), max(),mean(), var(), cov(), cor(),... quantile(v): renvoie les quantiles correspondant au vecteur de probabilité donné. Par défaut renvoie les quartiles
Quelques fonctions graphiques principales plot(x): valeurs de x en ordonnées plot(x,y): nuage de points y en ordonnées x en abcisses x et y étant des nombres ou des vecteurs de même longueur coplot():trace tous les nuages conditionnels boxplot():boites à moustaches pairs(): plusieurs nuages, tous les nuages possible sur toutes les colonnes possible du data frame hist():histogramme ( des fréquences par défaut) barplot(), matplot(): : diagrammes en batons curve(): tracé d ’une courbe Moins utilisées stem():arbre qqplot(x,y):trace les quantiles de x /quantiles de y
barplot(): diagrammes en batons x=rpois(100,lambda=5) T =table(x) r = barplot(T, col='gray')
Représentation de données: histogrammes La fonction hist() Exemple: v=rbinom(1000,10,0.4) table(v) v 0 1 2 3 4 5 6 7 8 4 44 110 215 253 194 125 42 13 hist(v)
hist(x,breaks= « Sturges »,prob=FALSE) X un vecteur de valeurs pour lequel on souhaite un histogramme breaks:soit -un vecteur chaine de caractère donnant un algorithme pour calculer le nombre d'intervalles -un nombre donnant le nombre d'intervalles prob=FALSE:fréquences prob=TRUE: fréquences relatives ou probabilités
la fonction curve() curve(sin,0, pi)
curve(x^3-3*x, -2, 2) curve(x^2-2, add = TRUE, col = "violet")
La fonction stem() stem(essai) essai=sample(1:20,200,replace=TRUE) 1 | 0000000000000000 1 | 2 | 0000000000000000000000000 2 | 3 | 00000000000000000000000 3 | 4 | 0000000000000000 4 | 5 | 00000000000000000000 5 | 6 | 000000000000000000000 6 | 7 | 00000000000000000 7 | 8 | 00000000000000000000000000 8 | 9 | 00000000000000000 9 | 10 | 0000000000000000000
curve(pnorm(x),-3,3, col="red") curve(dnorm(x),-3,3,col="blue",add=TRUE)
simdonnees=rexp(1000, rate=0.1) hist(simdonnees,prob=T) curve(dexp(x,rate=.1),add=TRUE)
Les arguments des fonctions principales Titre de la figure (en haut du graphique) main= Nom de l’axe des x des y Fixe les limites des axes xlab= ylab= xlim= ylim= « p »dessine des points « l » dessine une ligne, « s » ou « S » une fonction en escalier… type= Considère les axes comme logarithmiques log=« x » log=« y » log=« xy » axes=FALSE Force la fonction à agir comme une fonction de bas niveau (superpose au graphique précédent) add=TRUE
Fonctions graphiques secondaires points():comme plot(), mais superpose au graphique précédent lines(),segments() :trace des segments text(),mtext(): ajout de texte arrows(): ajoute des flèches abline(h=): lignes horizontales abline(v=): lignes verticales abline(a,b): ligne de pente b, ordonnée à l’origine a legend(x,y): ajoute la légende au point (x,y) title(): ajout du titre
fonction plot() x=rnorm(10);plot(x)
plot(x,type="l")
x=rnorm(10);y=rnorm(10); plot(x,y,xlab="dix valeurs au hasard", ylab="dix autres valeurs")
plot(x,y,xlab="dix valeurs au hasard", ylab="dix autres valeurs", xlim=c(2,2),ylim=c(2,2), pch=22,col="red",bg="yellow")
x=rnorm(10);y=rnorm(10); plot(x,y,xlab="dix valeurs au hasard", ylab="dix autres valeurs",xlim=c(-2,2),ylim=c(-2,2),pch=22,col="red",bg="yellow",bty="l",tcl=0.4,main="comment customiser un graphique avec R")
Statistiques bi-dimensionnelles
Génération de matrices Ce sont des vecteurs qui possèdent un argument supplémentaire, qui est lui-même un vecteur de longueur 2, sa dimension, et qui définit le nombre de lignes et de colonnes ex: M=matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL) Sélection dans une matrice,sous-matrices M[1,2],M[c(2,3),c(3,4)] M[i,],M[,j]: sélection d’une ligne ou d’une colonne M[c(1,5,4),]: sélection de plusieurs lignes (1,5 et 4) Dimension d’une matrice: dim(): renvoie la dimension de la matrice. On peut aussi imposer cette dimension
exemple: v=1:12; M=matrix(v);dim(M)=c(3,4);M; [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 M[M[,1]>0,]:sélectionne la sous matrice pour laquelle les valeurs dans la première colonne sont positives
Opérations sur les matrices Les opérateurs habituels fonctionnent élément par élément Le produit matriciel algébrique:%*% t():transposition diag(): si v est un vecteur, diag(v)crée une matrice diagonale ayant v sur la diagonale si M est une matrice, diag(M) extrait la diagonale de M sum():si v est un vecteur ou une matrice, sum(v) calcule la somme de tous les éléments de v sum(v,na.rm=TRUE):somme sans tenir compte des NA
Opérations sur les matrices suite apply(M,margin,fun,…):applique à M la fonction fun (ou un opérateur, mais qui doit alors être mis entre guillemets),margin indique si l’action doit être appliquée sur les lignes ( margin=1), les colonnes ( margin=2), ou les deux ( margin=c(1,2)) exemples: apply(M,1,sum):le résultat est une colonne formée des sommes des lignes de la matrice apply(M,2,sum):pareil pour les colonnes
data.frame En apparence ce sont des matrices, avec comme différence essentielle que les différentes colonnes peuvent être de modes distincts:alphanumériques, booléennes, facteurs… Les lignes et les colonnes sont nommées et on peut y accéder par leur indice de position ou par leur nom… exemple: L= LETTERS[1:3]; D=data.frame(=rep(1,10),y=1:10,fac=sample(L,10, repl=TRUE)); La troisième colonne est D[,3]ou D[,”fac”]ouD$fac C’est le type par défaut résultant de la lecture de fichiers externes et nécéssaire pour exporter des tableaux de R x y fac 1 1 1 C 2 1 2 C 3 1 3 A 4 1 4 B 5 1 5 A 6 1 6 A 7 1 7 B 8 1 8 A 9 1 9 B 10 1 10 C
Fonctions pour les data frames names(),colnames()rownames()liste des noms de ligne et de colonnes dimnames():liste ayant 2 champs: les noms de lignes et les noms de colonne dim():liste donnant les dimensions du data frame cbind():concaténation en colonne rbind():concaténation en ligne Exemple:cbind(d,salle=rep(c(1,2),5)) x y fac salle 1 1 1 B 1 2 1 2 A 2 3 1 3 B 1 4 1 4 A 2 5 1 5 C 1 6 1 6 C 2 7 1 7 B 1 8 1 8 C 2 9 1 9 B 1 10 1 10 A 2
La fonction data() : Cette fonction permet de lire des données internes un data frame ou de lister les data frame existants Exemples: data() # liste de tous les data frame dans le package par défaut « datasets » data(USArrests) # charge le data frame USArrests help(USArrests) # donne des informations sur le data frame « USArrests », si elles existent data(package = .packages(all.available = TRUE))# Donne la liste de tous les data frames de tous les packages disponibles try(data(package = "rpart") )# liste des data frame dans le package rpart
La fonction library() Exemples: library():donne la liste des packages (ou bibliothèques)disponibles On peut en charger d’autres par le CRAN par exemple library(cluster);data(agriculture);permet de charger le data frame « agriculture » du package « cluster » data(agriculture, package=« cluster »); permet aussi de charger ce data frame
boxplot():boites à moustaches boxplot(len ~ dose, data = ToothGrowth) len supp dose 1 4.2 VC 0.5 2 11.5 VC 0.5 3 7.3 VC 0.5 4 5.8 VC 0.5 5 6.4 VC 0.5 6 10.0 VC 0.5 7 11.2 VC 0.5 8 11.2 VC 0.5 9 5.2 VC 0.5 10 7.0 VC 0.5
pairs(): plusieurs nuages, tous les nuages possible sur toutes les colonnes possible du data frame pairs(iris[1:4], pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)]) iris Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa
Importer des fichiers ascii Pour les lectures et écritures dans un fichier,R utilise le repertoire de travail. getwd():permet de connaître ce repertoire setwd():permet de modifier le repertoire de travail exemple setwd(« c:/data ») R peut lire des données stockées dans un fichier texte (ascii):read.table() la sortie est un data.frame arguments de cette fonction: file= nom du fichier sep= séparateur (espace par défaut) header= booléen (=TRUE si le nom des colonnes est en tête, FALSE sinon)
Exemple: fichier c:\ArR\fic.txt read.table(file=,sep=,header=) F=read.table(« c:\\ArR\\fic.txt », sep=« \t»,header=TRUE); Variantes:read.csv(), read.delim(),read.fwf()…ou des fichiers dans d ’autres formats(Excell,SAS,SPSS), bases de données SQL… les fonctions ne sont pas toujours dans le package base
et exporter Ecriture d’un fichier write.table() arguments: file= nom du fichier append= booléen si TRUE ajoute au fichier existant, si FALSE ecrase le fichier existant col.names= booléen si TRUE écrit les noms de colonnes row.names= idem pour les lignes
Sauvegarder certains objets en binaire ou en ASCII et les restaurer Fonctions: dump(): sauve en ascii des objets R source():recharge les objets sauvés par dump(),par exemple un script sauvegardé sous le nom test.R sera rappelé par source(« test.R », echo=TRUE) save(): comme dump() mais en binaire load(): comme source() mais en binaire
En pratique, on pourra créer un repertoire de travail par analyse de données, et y déposer: les fichiers de données brutes le fichier script contenant les commandes R le workspace et les fichiers résultats(textes et graphiques)
Lois de probabilité, distributions On peut évaluer les quantités suivantes: Fonctions de répartition Densité Quantiles Simulations Les fonctions ont le même nom avec des préfixes différents r: donne des échantillons d: donne les valeurs P(X=j) p: donne les valeurs P(X<=x) q: donne la valeur y telle que P(X=x)=y Exemples: dnorm(),pnorm(),qnorm(),rnorm() :loi normale dbinom(),pbinom(),qbinom(),rbinom():loi binomiale dt(),pt(),qt(),rt():loi de student dpois(), ppois(), qpois(), tpois():loi de poisson …
exemples dbinom(k, n, p) donne la valeur P(X=k) sachant que X suit une loi B(n,p),c’est-à-dire Exemple: dbinom(3,10,0.2) 0.2013266 rbinom(10,n,p) donne un échantillon de taille 10 extrait d’une population suivant une loi B(n,p): Exemple: rbinom(10,10,0.2) [1] 5 2 3 2 4 0 4 2 0 2 pbinom(k,n,p) donne P(X<=k) sachant que X suit une loi B(n,p),c’est-à-dire la valeur de la fonction de distribution F(k) Exemples:pbinom(1,10,0.2) [1] 0.3758096 pbinom(2,10,0.2) [1] 0.6777995 qbinom(q,n,p) est le quantile, c’est-à-dire la plus petite valeur x telle que P(X<=x)>=q Exemple: qbinom(0.5,10,0.2) [1] 2 qchisq(.1,df=8) est le premier décile deX^2(8)
Exemple 1 n=10 p=0.2 x=0:n y=choose(n,x)*p^x*(1-p)^(n-x) #ou bien y=dbinom(x,n,p) plot(x,y,type="h" ,lwd=10) Exemple 2 prod(1:8); 40320 identique à factorial(8)
exemples dbinom(k, n, p) donne la valeur P(X=k) sachant que X suit une loi B(n,p),c’est-à-dire Exemple: dbinom(3,10,0.2) 0.2013266
rbinom(10,n,p) donne un échantillon de taille 10 extrait d’une population suivant une loi B(n,p): Exemple: rbinom(10,10,0.2) [1] 5 2 3 2 4 0 4 2 0 2 pbinom(k,n,p) donne P(X<=k) sachant que X suit une loi B(n,p),c’est-à-dire la valeur de la fonction de distribution F(k) Exemples: pbinom(3,10,0.2); 0.8791261 pbinom(1:10,10,0,2) ; [1] 0.1073742 0.3758096 0.6777995 0.8791261 0.9672065 0.9936306 0.9991356 0.9999221 0.9999958 1.0000000
Exemple d'une loi continue: la loi normale qnorm(0.2) [1] -0.8416212
Fonctions mathématiques de base Ecart-type des éléments de x sd(x) Matrice de corrélation si x est une matrice ou un data frame cor(x) Variance des éléments de x(calculée sur n-1) matrice des var et cov si x est une matrice var(x) ou cov(x) Médiane des éléments de x median(x) Moyenne des éléments de x mean(x) Idem que c(min,max) range(x) Retourne l’indice du minimum des éléments de x which.min(x) Retourne l’indice du maximum des éléments de x which.max(x) Maximum, minimum des éléments de x max(x), min(x) Produit des éléments de x prod(x) Somme des éléments de x sum(x)
Autres fonctions Retourne un vecteur de meme longueur que x contenant les éléments de x qui sont dans y match(x,y) Idem pour produit, minimum, maximum cumprod(), cummin(),cummax() Un vecteur dont le ieme élément est la somme de x[1]à x[i] cumsum(x) Un vecteur dont le iéme élément est le minimum entre x[i] et y[i] pmin(x,y,…) Centre et réduit les données scale(x) Range les éléments de x rank(x) Trie les éléments de x dans l’ordre ascendant sort(x) Inverse l’ordre des éléments de x rev(x) Arrondit les éléments de x à n chiffres après la virgule round(x,n)
encore… Ré-échantillonnage aléatoire et sans remise de size éléments dans x sample(x,size) Retourne une selection de x en fonction de critères subset() Retourne un tableau des effectifs des différentes valeurs de x table() Si x est un vecteur ou un data frame, retourne un objet similaire mais avec les éléments duppliqués supprimés unique() Retourne un message d’erreur si x contient au moins un NA na.fail() Supprime les observations avec données manquantes na.omit() Coefficient binomial Cnk choose(n,k)