Des statistiques avec R
Génération de nombres aléatoires Rappel: Un échantillon est une partie d'une population sur laquelle s'effectue une étude statistique. On peut disposer d'échantillons issus d'une expérimentation, ou, si on connait la loi de la variable parente X,(de distribution connue) simuler ces observations: on parlera d'échantillon empirique (ou observé) et d'échantillon simulé. La taille d'un échantillon est le nombre d'observations de l'échantillon
Exemple 1 X: v.a.r taille de la population P Un échantillon de taille 5 issu d'une expérimentation: E=c(1.60,1.80,1.72,1.78,1.63) Un échantillon simulé la loi uniforme discrète U(n)(où les pi sont tous égaux):sample() E=sample(1:15,10);a; [1] 12 8 11 10 9 4 2 14 1 5
Exemple 2: lois discrètes La loi binomiale B(n,p), rbinom() P ( X = k )=[n!/p!(n-p)!] p^k ( 1 - p )^n-k rbinom(10,10,0.3) [1] 3 5 0 2 3 1 3 5 4 6 rbinom(100,10,0.3) [1] 4 3 5 2 3 4 4 4 0 0 2 2 4 4 1 4 3 2 4 3 4 3 2 3 1 3 5 3 3 4 4 2 2 1 3 5 3 5 2 5 5 1 6 2 3 4 3 2 2 4 2 1 1 4 4 3 2 2 3 2 1 2 5 6 5 2 3 3 4 2 3 4 4 3 1 3 3 4 6 1 2 6 4 1 2 7 3 4 3 4 3 5 2 1 1 4 2 4 3 1
la loi de Poisson P(l):rpois() (rappel: p(X=k)=e^{-l} l^k/k!) exemple: b=rpois(10, 5);b [1] 7 5 5 6 4 7 4 6 3 6 la loi géométrique g(p): rgeom() (rappel:p(X=k) = p (1-p)^k ) c=rgeom(10,0.25); c; [1] 1 2 0 0 3 2 1 2 1 0
La loi normale N(m,s): Exemples: Un échantillon simulé de taille 10 en supposant que X suit une loi normale de paramètres (1,75;15) x=rnorm(10,175,15);x [1]209.38 186.99 167.24 168.71 184.49 175.63 162.25 177.86 183.27 181.68 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
Lois de probabilité, distributions On peut évaluer les quantités suivantes: Fonctions de répartition Densité Quantiles Echantillons Simulés 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 répartition 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
Fonction de répartition de la loi binomiale de paramètres 10 et 0,2
F(x)=P(X<=x) >=q. qbinom(q,n,p) est le quantile , c’est-à-dire la plus petite valeur x telle que F(x)=P(X<=x) >=q. Exemple: qbinom(0.5,10,0.2) ; [1] 2 qchisq(.1,df=8) est le premier décile de X^2(8) (loi du chi-deux a 8 degrés de liberté)
Exemple d'une loi continue: la loi normale qnorm(0.2) [1] -0.8416212
Analyse de données On distinguera des données Quantitatives ou qualitatives, discrètes (binaires,...)ou continues... Des résumés numériques ou graphiques
Les résumés numériques pour calculer des statistiques sur un échantillon numérique Moyenne arithmétique mean() Médiane d'un échantillon median() Minimum, maximum min(), max() Calcul des percentiles quantile() Variance var() Écart-type sd() Covariance, coefficient de corrélation cov(),cor() Résumé statistique summary()
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 hist(v): trace l’histogramme summary(v): renvoie un résumé statistique du contenu de v,avec le min 1er quartile, moyenne, médiane,3iemme quartile et max quantile(v): renvoie les quantiles correspondant au vecteur de probabilité donné. Par défaut renvoie les quartiles Moins utilisées stem():arbre qqplot(x,y):trace les quantiles de x /quantiles de y
exemple > x=sample(1:50,20) > summary(x) Min. 1st Qu. Median Mean 3rd Qu. Max. 5.00 16.50 28.00 28.95 42.00 50.00 > summary(x)[2] 1st Qu. 16.5
Les résumés graphiques Pour des données discrètes ou catégorielles Diagramme en batons: barplot() Cette fonction prend comme argument un objet résultat de la fonction table() pour des données continues, hist(), boxplot()
barplot() tN=table(Ni = rpois(100, lambda=5)) r=barplot(tN, col=rainbow(20)) r [,1] [1,] 0.7 [2,] 1.9 [3,] 3.1 [4,] 4.3 [5,]....
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
Représentation de données discrètes: tracés d'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); puis hist(v,breaks=15, prob=TRUE,col=1:16, main="loi binomiale de param 10 et 0.4")
Analyse multivariée
exemple Un cas mixte, une donnée continue, une donnée discrète
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
exemples 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
Pour sauvegarder des graphiques Il faut: Choisir un format d'exportation (png, eps,pdf... Encadrer les commandes graphiques par un appel à pdf() et dev.off() (dans le cas d'un graphique sauvegardé au format pdf) Pour plus d'informations, ?Devices
Méthode En pratique, on pourra créer un répertoire 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)
Exemples
Exercice 1 : Dans une enquête sur les conditions de vie des ménages de banlieue, on dispose de la série statistique du nombre d’enfants de 10 ménages:
D=data.frame(men=1:11,nbenf=c(3,2,5,3,6,3 ,5,5,1,5,2));D; 1 1 3 2 2 2 3 3 5 4 4 3 5 5 6 6 6 3 7 7 5 8 8 5 9 9 1 10 10 5...
Calculer la moyenne du nombre d’enfants par ménage de deux façons différentes mean(D$nbenf); [1] 3.636364 sum(D$nbenf)/length(D$nbenf) [1] 3.636364
Construire le tableau de la distribution des fréquences de cette série df=D$nbenf/sum(D$nbenf) > df [1] 0.075 0.050 0.125 0.075 0.150 0.075 0.125 0.125 0.025 0.125 0.050
Représenter graphiquement cette distribution. plot(table(D$nbenf),main="diagramme en batons des effectifs") plot(table(D$nbenf),main="polygone des effectifs ", type="b", col=2)
plot(table(D$nbenf)/length(D$nbenf),xlab="nombre d'enfants", ylab="frequence")
Exercice 2 : Au poste de péage, on compte le nombre de voitures se présentant sur une période de 5mn. Sur 100 observations de 5mn, on obtient les résultats suivants:...
Construire le diagramme en bâtons et le polygone des fréquences cumulées de la série du nombre de voitures. D1=data.frame(nv=1:12,no=c(2,8,14 ,20,19,15,9,6,2,3,1,1)) plot(D1$nv,D1$no,type="h", main="diagramme en batons",xlab="nombre de voitures", ylab="nombre d'observations")
Polygone des fréquences cumuléees fc=cumsum(no) plot(D1$nv,fc,type="l", main="polygone des frequences cumulées",xlab="nombre de voitures", ylab="frequences cumulees")
Calculer la moyenne et l’écart-type de cette série. (attention il s'agit de moyennes et d'ecart type pondérés) moy=sum(D1$nv*D1$no)/100 [1] 5.07 et=sqrt(sum(0.01*D1$no*(D1$nv- moy)^2)) > et [1] 2.182911
Déterminer la médiane, les quartiles et tracer le box-plot. s=rep(D1$nv,D1$no);s summary(s) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.00 4.00 5.00 5.07 6.00 12.00 boxplot(s)
barplot(): diagrammes en batons T =table(rpois(100,lambda=5)) r = barplot(T, col='gray')