Lancement de R, les menus

Transcription

Lancement de R, les menus
Cours 2
Vecteurs,
matrices,listes,séries
temporelles
Compléments sur les
vecteurs
• Il y a quatre types de base: Numériques,alphanumériques,
logiques, facteurs
• A chaque type correspond ses opérateurs. Par exemple on
ne peut pas additionner des vecteurs alphanumériques.
Par contre on peut, si v est un vecteur numérique
v+2: ajoute 2 à tous les éléments
de v
v+w : attention si les deux
vecteurs ne sont pas de même longueur, donne un vecteur
de la longueur du plus grand,en dupliquant le plus court
• On peut tester ou modifier le mode d’un vecteur:
as.numeric()
:impose le mode
numérique
is.numeric()
:booléen TRUE ou
FALSE
as.character() :impose le mode
caractère
is.character() :booléen TRUE ou
FALSE
as.factor(),is.factor(),as.logical(),is.logical()…
• Les fonctions
factor(): contraint à être facteur
cut():contraint un vecteur
numérique à être un facteur
Conversion d ’objets
• Conversion en numérique:as.numéric()
FALSE->0
TRUE ->1 “ 1 ”, “ 2 ”,..>1,2,..“ A ”->NA
• Conversion en logique: as.logical() 0->FALSE
autres nombres ->TRUE
“ FALSE”->FALSE
“ TRUE” ->TRUE
autres caractères ->NA
• Conversion en caractère:as.character()
• 1,2,…-> “ 1 ”, “ 2 ”
FALSE- > “ FALSE ”
TRUE -> “ TRUE ”
Génération de nombres
aléatoires
• Rappel:
Un échantillon est une partie d'une population
sur laquelle s'éffectue 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:
• (1,60;1,80;1,72;1,78;1,63)
• Un échantillon simulé de taille 10 en
supposant que X suit une loi normale
de paramètres (1,75;15)
• 209.38 186.99 167.24 168.71 184.49
175.63 162.25 177.86 183.27 181.68
(Obtenu par x=rnorm(10,175,15);x)
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
3 2 4 3 4 3 2 3 1 3 5 3
5 3 5 2 5 5 1 6 2 3 4 3
4 3 2 2 3 2 1 2 5 6 5 2
3 1 3 3 4 6 1 2 6 4 1 2
2 1 1 4 2 4 3 1
2
3
2
3
7
2
4
2
3
3
4
4
4
4
4
4
2
2
2
3
1
2
1
3
4
4
1
1
4
3
3
4
4
5
la loi uniforme discrète U(n)(où les pi sont
tous égaux):sample()
Exemple a=sample(1:15,10);a
[1] 12 8 11 10 9 4 2 14 1 5
•
• la loi de Poisson P(λ):rpois()
p(X=k)=e^{-λ} λ^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),p(X=k) = p (1-p)^k
• rgeom(10,0.25)
[1] 1 2 0 0 3 2 1 2 1 0
•
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
Complément 1: distributions des caractéristiques
usuelles d'un usuelle d'un échantillon
• Le pb central de l'inférence statistique:
disposant d'un échantillon d'observations de
taille n, déduire les propriétés de la
population dont il est issu.(moyenne par
exemple)
• Si l'échantillon est représentatif,(divers
modes d'échantillonnage, les observations
deviennent des variables aléatoires ainsi que
les résumés numériques usuels:il convient donc
d'en chercher les lois de probabilité avant de
tenter d'extrapoler à la population.
• Exemple: on prélève au hasard n ampoules
électriques dans une production et on mesure
leur durée de vie, xi. Dans le cas d'un
échantillon représentatif, les différences
entre les xi peuvent etre considérées comme des
fluctuations de nature aléatoire.
suite
D' où l'hypothèse fondamentale de la théorie
de l'échantillonnage:
Les valeurs observées xi sont des réalisations
d'une même variable aléatoire X, appelée
variable parente.
Cela revient à postuler l'existence d'une var
aléatoire X « durée de vie d'une ampoule »,
dont on observe n réalisations xi, ou bien à
postuler l'existence de n var aléatoires Xi
toutes de même loi et dont on observe une
seule réalisation xi.
Un échantillon (x1,...xn) constitue n
réalisations indépendantes de la var X, ou
bien une réalisation unique du n-uplet
(X1,...Xn).
Par extension on appelle échantillon le nuple
(X1,...Xn).
Suite: définition d'une statistique
La théorie de l'échantillonnage se propose
d'étudier les propriétés du n-uple(X1,...Xn)et
des caractéristiques le résumant, à partir des
propriétés de X, en étudiant en particulier ce
qui se passe lorsque n (taille de
l'échantillon)est grand.
Statistique: Une statistique est une fonction
mesurable de X1,...Xn.
T=f(X1,...Xn)
Exemple 1 la moyenne
La statistique « moyenne empirique de
l'échantillon » T=1/n( Σ Xi) a pour moyenne
la moyenne de X,E(T)=E(X)
pour variance la variance de X divisé par n
V(T)=V(X) /n
loi forte des grands nombres: T tend presque
sûrement vers m
théorème central limite:T-E(X)/(σ/sqrt(n))tend
vers la loi normale centrée réduite N(0,1)
résultat fondamental en statistique, vrai
lorsque les Xi sont indépendantes.
Exemple 2 la variance
La statistique « variance empirique
l'échantillon »
de
S2=1/n Σ( Xi-T)2
a pour moyenne E(S2)=(n-1/n)V(X).On dit que
cette statistique est biaisée (E(S2)n'est pas
égal à V(X))
Théorème central limite:
[S2-(n-1/n)σ2]/sqrt(V(S2))tend vers
normale centrée réduite N(0,1).
résultat
vrai lorsque les Xi sont
indépendantes.
la loi
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
Génération de
matrices(suite)
• 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
• Indice linéaire (par colonne) M[v],M[-v]
exemple:M[-3] donne la matrice privée de
son troisième élément, soit un vecteur
• 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)
• det(): déterminant d ’une
matrice carrée
• solve():inverse d ’une matrice
, ou résolution d ’un système
d ’équations linéaire
• eigen(): calcul des valeurs
propres et vecteurs propres
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
Les listes
• Création de listes: avec la fonction list()
• Il n’y a aucune contrainte sur les objets qui y
sont inclus
Exemple: x=1:10;y= letters ;
L=list(x,y); crée une liste sans nom
L=list(chiffres=0:9,lettres=letters);L
$chiffres
[1] 0 1 2 3 4 5 6 7 8 9
$lettres
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p"
"q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
Les deux champs sont accessibles par L$chiffres;
L$lettres;
Les listes (exemple)
• On trouve souvent des listes
comme résultat d'une commande R
• exemple:lm() est une fonction
retournant pour un modèle
linéaire une liste contenant au
moins: coefficients,
résidus,valeurs
estimées,rangs, poids....
Les series temporelles
• La fonction ts() va créer une série
temporelle à partir d’un vecteur
(ou d’une matrice), et des options
suivantes
ts(data=,start=,end=,frequency=…)
data:un vecteur ou une matrice
start: le temps de la première
observation
end:le temps de la dernière
observation
frequency: le nombre d’observations
par unité de temps
t=ts(matrix(rpois(36,5),12,3),start=c(1961,1),
frequency=12)
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
1961
1961
1961
1961
1961
1961
1961
1961
1961
1961
1961
1961
Series 1 Series 2 Series 3
7
6
8
7
8
4
4
2
5
3
3
4
7
6
10
4
6
6
5
5
4
3
3
6
7
3
3
4
3
7
7
2
7
3
4
4
plot(t)
Etude empirique des fluctuations
d'échantillonnage
• Quelquefois, on est dans l'impossibilité de
calculer la distribution d'échantillonnage de
certaines caractéristiques utiles: soit parce
que n est trop petit,soit parce que la
distribution parente est inconnue
• On utilise alors des techniques de
simulation, qui substitue la puissance de
calcul d'un ordinateur à celle d'un
développement analytique:
Population de distribution connue:
• Si on connait la loi F de la variable parente
X, il suffit de simuler un très grand nombre
N d'échantillons de n valeurs de X. Pour
chaque échantillon, on calcule la statistique
cherchée, d'ou une distribution T1, ...Ti
• Si N est grand, la répatition empirique des
Ti est proche de la loi de la variable T
Population de distribution inconnue:la
méthode de rééchantillonnage bootstrap
• L'idée (B .EFRON) est la suivante:
• Si n est grand Fn* est proche de F, on aura
donc une bonne approximation de la loi de
T en utilisant Fn*à la place de F.
• On tire donc des échantillons de n
valeursdans la loi Fn*, ce qui revient à
rééchantillonner dans l'échantillon
• x1,...xn.
• Autrement dit à effectuer des tirages avec
remise des n valeurs parmi les n observées
• Les valeurs observées sont donc répétées.
• Lorsque n n'est pas très grand, on
peuténumérer tous les échantillons
possible équiprobables,(n^n),sinon on se
contente d'en tirer un nombre suffisemment
grand à l'aide d'une technique de tirage
dans une population finie
Echantillons artificiels
simulation
• Obtention de nombres aléatoires.(Les méthodes
les plus employées sont basées sur des suites
récurrentes...)
• Exemple de simulation de variable aléatoire de
Bernoulli de paramètre p: on tire un nombre au
hasard entre 0 et 1 s'il est inférieur à p
X=1, supérieur X=0. A partir d'une var de
Bernoulli, on utilise le fait qu'une var
Binomiale B(n,p) est la somme de n var de
Bernoulli B(p).
• Exemple de simulation de loi normale: si U et
V sont deux var uniformes sur [0,1] X et Y
définies comme ci-dessous sont deux var
normales centrées réduites:
• X=(-2ln(U))(1/2) cos(2 Π V)
• Y=(-2ln(U))(1/2) sin(2 Π V) ...
Echantillons artificiels
simulation
Exemple de simulation de loi gamma:
Exemple de simulation de loi de Poisson:
Voir
Saporta p281
Cours 3
data frames
data.frame
• En interne ce sont des listes, dont les
champs sont des colonnes
• 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
1
2
3
4
5
6
7
8
9
10
x y
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
fac
C
C
A
B
A
A
B
A
B
C
Fonctions pour les data
frames
x
1
2
3
4
5
6
7
8
9
10
y fac salle
1 1 B 1
1 2 A 2
1 3 B 1
1 4 A 2
1 5 C 1
1 6 C 2
1 7 B 1
1 8 C 2
1 9 B 1
1 10 A 2
• data.frame():
• names(),colnames()rownames()lis
te 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))
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 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
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
une loi B(n,p),c’est-à-dire
Exemple: dbinom(3,10,0.2)
P(X=k) sachant que X suit
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
0
2
4
6
c(-1, x)
8
10
0.0
0.2
0.4
c(0, z)
0.6
0.8
1.0
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 deX^2(8)
Fonction de répartition de la loi binomiale de
paramètres 10 et 0,2
0.6
0.4
0.2
0.0
c(0, z)
0.8
1.0
•
0
2
4
6
c(-1, x)
8
10
Exemple d'une loi continue: la loi normale
qnorm(0.2)
[1] -0.8416212
0.6
0.4
0.2
0.0
pnorm(x)
0.8
1.0
•
0
5
x
10
Représentation de données:
histogrammes
La fonction hist()
Exemple: v=rbinom(1000,10,0.4)
table(v)
v
0
1
2
3
4
7
8
4 44 110 215 253 194 125
hist(v)
5
42
6
13
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
exemples
essai=sample(1:20,200,replace=TRUE)
•
stem(essai)
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
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
• hist(essai)
•
Plot(density(essai))
density(essai);
density(x = essai)
Data: essai (200 obs.);
Bandwidth 'bw' = 0.8883
x
Min.
:-1.665
Min.
:0.0004156
1st Qu : 1.918
1st
Qu.:0.0295460
Median : 5.500
Median
:0.0946940
Mean
: 5.500
Mean
:0.0697013
3rd Qu.: 9.082
3rd
Qu.:0.1003626
Max.
:12.665
Max.
:0.1102250
y
Cours 4
Modes
Modes possibles
Plusieurs
modes
Vecteur vector
Numérique,caractère,complexe
logique
Non
Facteur factor
Numérique,caractère
Non
Tableau array
Numérique,caractère,complexe
logique
Non
Matrice matrix
Numérique,caractère,complexe
logique
Non
Data.frame
Numérique,caractère,complexe
logique
Oui
Série temporelle ts
Numérique,caractère,complexe
logique
oui
Liste list
Numérique, caractère, complexe
logique
oui
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 repertoirede
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)
Eviter d ’écrire des boucles avec
les fonctions apply()
lapply()sapply()
apply(X, MARGIN, FUN, ...) retourne un vecteur de
la taille appropriée, où
• X: tableau
• Margin
=1 pour les lignes, 2 pour les colonnes,
c(1,2) pour les lignes et les colonnes
• Fun: fonction '+', '%*%‘, mean, sum,...
• lapply sapply() même fonction pour les listes et
les vecteurs
Eviter d ’écrire des
boucles (2)
• Exemple 1
n=10
p=0.2
x=0:n
y=choose(n,x)*p^x*(1p)^(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)
Le type factor:Un exemple
• Un facteur est un objet vecteur qui peut
être utilisé pour spécifier une
classification discrète des composants
d’un autre vecteur de même longueur
• Facteurs non ordonné:variable qualitative
• Facteurs ordonnés:variable
ordonnée
qualitative
• prov=c("PA","PA","AG","RG","ME","CT","CT","SR","TP
","EN","CL","ME","PA","AG","RG","ME","CT","CT","SR
","TP","EN")
• length(prov)
• [1] 21
•
•
fprov=factor(prov) ;fprov
[1] PA PA AG RG ME CT CT SR TP EN CL ME PA AG RG
ME CT CT SR TP EN
• Levels: AG CL CT EN ME PA RG SR TP
• levels(fprov)
• [1] "AG" "CL" "CT" "EN" "ME" "PA" "RG" "SR" "TP"
•revenus=c(13000,14900,14000,16100,14500,1660
0,15900,15400,17000,19000,14600,17000,18500,1
5800,14500,16600,15900,15400,17000,19000,2000
0)
•revenu.par.province=tapply(revenus,fprov,mea
n)
•revenu.par.province
AG
CL
CT
EN
ME
PA
14900.00 14600.00 15950.00 19500.00
16033.33 15466.6
RG
SR
TP
15300.00 16200.00 18000.00
La fonction which()
• which(x, arr.ind = FALSE)
• x: un vecteur ou tableau logique
• arr.ind: logique est-ce que les indices du
tableau doivent être retournés lorsque x est un
tableau?
• Exemple: m = matrix(12:24,3,4) ;m
[1,]
[2,]
[3,]
[,1] [,2] [,3] [,4]
12
15
18
21
13
16
19
22
14
17
20
23
which(m %% 3 == 0)
[1] 1 4 7 10
which(m %% 3 == 0, arr.ind=TRUE)
row col
[1,]
1
1
[2,]
1
2
[3,]
1
3
[4,]
1
4
Cours
5
Les graphiques
Les graphiques
• Le résultat d’une fonction graphique ne peut pas
être assigné à un objet mais est envoyé à un
dispositif graphique (graphical device)
• Il y a deux sortes de fonctions graphiques:
-principales qui créent un nouveau graphe
-secondaires qui ajoutent des éléments au
graphe pré-existant
Les fenêtres graphiques
• On peut avoir plusieurs fenêtres, une seule est
active
• Ouvrir une fenêtre: xll(),pdf()…
• Liste des fenêtres ouvertes et leur numéro
dev.list()
• Active la fenêtre i: dev.set(i)
• Ferme la fenêtre i: dev.off(i)
• Partitionner une fenêtre split.screen():
exemple: split.screen(c(1,2)) 2 graphes en ligne
•
•
screen():sélectionne une fenêtre
erase.screen():efface, sauf si le fond d’écran
est transparent(valeur par défaut)
La commande par()
• Les graphes sont produits en
fonction de paramètres graphiques
définis par défaut et modifiables à
travers la commande par()
• Exemples: par(bg="cornsilk")
par(xlog=TRUE); par(mfrow=c(3,2))
divise la fenêtre graphique en 6
(par défaut 1 seul graphe par
fenêtre)
La commande par()
suite
• Il est prudent de conserver l ’ancien
paramétrage
• exemple:
op=par(no.readonly = TRUE)
#mémorise
sous le nom op l ’ancien paramétrage
par(mfrow=c(1,2))
#modifie le paramétrage
plot(1:10,sin(1:10)) plot(1:10,cos(1:10))
par(op)
# rétablit
l ’ancien paramétrage
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
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
barplot(), matplot(): : diagrammes en batons
curve(): tracé d ’une courbe
qqnorm(x):quantiles de x en fonction des quantiles de
la loi normale
qqlot(x,y):quantiles de y en fonction des quantiles de x
persp():vues en perspective
Exemple: la fonction
curve()
curve(sin,0, pi)
curve(x^3-3*x, -2, 2)
curve(x^2-2, add =
TRUE, col =
"violet")
curve(pnorm(x),-3,3, col="red")
curve(dnorm(x),-3,3,col="blue",add=TRUE)
Les arguments des fonctions
principales
add=TRUE
Force la fonction à agir comme une
fonction de bas niveau (superpose au
graphique précédent)
axes=FALSE
log=« x »
log=« y »
log=« xy »
Considère les axes comme
logarithmiques
type=
« p »dessine des points « l » dessine
une ligne, « s » ou « S » une
fonction en escalier…
xlab=
ylab=
Nom de l’axe des x des y
Fixe les limites des axes
xlim= ylim=
main=
Titre de la figure (en haut du
graphique)
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
• locator():positionne un point sur la fenêtre graphique
• NB: avec text() on peut afficher une équation utilisant
des expressions compatibles avec TEX
curve(dnorm(x),from=-3,to=3, main="densité
de la loi normale centrée réduite")
•
•
0.4
densité de la loi normale centrée réduite
0.2
0.3
abline(v=-1,col=3)
abline(v=1,col=3)
0.1
abline(v=3,col=4)
abline(v=-3,col=4)
abline(h=0)
0.0
dnorm(x)
abline(v=2,col=2)
abline(v=-2,col=2)
-3
-2
-1
0
x
1
2
3
Exemples de graphiques
-2
-1
x
0
1
2
plot(rnorm(100))
0
20
40
60
Index
80
100
1
0
-1
-2
rnorm(100)
2
plot(rnorm(100),type="l")
0
20
40
60
Index
80
100
• simdonnees=rexp(1000, rate=0.1)
hist(simdonnees,prob=T)
curve(dexp(x,rate=.1),add=TRUE)
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="yello
w",bty="l",tcl=0.4,main="commen
t customiser un graphique avec
R")
boxplot():boites à moustaches
boxplot(len ~ dose, data = ToothGrowth)
Guinea Pigs' Tooth Growth
35
len supp dose
30
1 4.2 VC 0.5
2 11.5 VC 0.5
6 10.0 VC 0.5
20
15
10
5 6.4 VC 0.5
tooth length
4 5.8 VC 0.5
25
3 7.3 VC 0.5
5
7 11.2 VC 0.5
9 5.2 VC 0.5
10 7.0 VC 0.5
0
8 11.2 VC 0.5
0.5
1
Vitamin C dose mg
2
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
Anderson's Iris Data -- 3 species
3.0
4.0
0.5
1.5
2.5
7.5
2.0
4.0
4.5
6.0
Sepal.Length
5
7
2.0
3.0
Sepal.Width
1.5
2.5
1
3
Petal.Length
0.5
Petal.Width
4.5 5.5 6.5 7.5
1 2 3 4 5 6 7
barplot(): diagrammes en batons
0
5
10
15
20
T =table(rpois(100,lambda=5))
r = barplot(T, col='gray')
1
2
3
4
5
6
7
8
9
10
11
Programmation
de base
Boucles et Tests
• For( in )
{
}
• While(
)
{
}
• Les exécutions conditionnelles (if .. else) peuvent être
évitées avec des indexations logiques. Exemples:
y=numeric(length(x));
for(i in 1:length(x))
{if(x[i]==b)y[i]=0 else y[i]=1}
Peut être remplacé par:
y[x==b]=0;
y[x!=b]=1;
• Les fonctions du type apply(),évitent d’écrire des
boucles.
Les fonctions
• On peut écrire ses propres fonctions:
• Pour pouvoir être exécutée une fonction doit être
chargée en mémoire, cela peut se faire de
plusieurs façons:
• Entrer les lignes au clavier,
• ou les copier /coller à partir d’un éditeur
• Enregistrer la fonction dans un fichier ascii et
la charger par la commande source()
• Si on souhaite que la fonction soit chargée au
démarrage, il peut les enregistrer dans un
workspace avec l’extension .Rdata qui sera chargé
en mémoire s’il est localisé dans le répertoire de
travail de démarrage
getwd(): indique le
repertoire de travail
•
•
•
•
Exemple
carre=function(x){print(x*x)}
carre(3);9
Il y a deux manières de spécifier les
arguments à une fonction:
par leur position
par leur nom
Exemple: fonc=function(arg1,arg2,arg3)
fonc(x,y,z); fonc(arg2=y,arg1=x,arg3=z);
• print() pour afficher le contenu d ’un
objet dans une fonction
• Arguments par défaut
• Exemple:
• Moy.et.etype=function(x=1:10)
{moyenne=mean(x);
etype=sd(x);
print(c(moyenne,etype));
}
moy.et.etype()
[1] 5.500000 3.027650
moy.et.etype(1:100)
[1] 50.50000 29.01149
Fonctions mathématiques de base
sum(x)
Somme des éléments
prod(x)
Produit des éléments de x
max(x), min(x)
Maximum, minimum des éléments de x
which.max(x)
Retourne l’indice du maximum des éléments de x
which.min(x)
Retourne l’indice du minimum des éléments de x
range(x)
Idem que c(min,max)
mean(x)
Moyenne des éléments
de x
median(x)
Médiane des éléments
de x
var(x) ou cov(x)
Variance des éléments de x(calculée sur n-1)
matrice des var et cov si x est une matrice
cor(x)
Matrice de corrélation si x est une matrice ou
un data frame
sd(x)
Ecart-type des éléments
de x
de x
Autres fonctions
round(x,n)
Arrondit les éléments de x à n
chiffres après la virgule
rev(x)
Inverse l’ordre des éléments de
x
sort(x)
Trie les éléments de x dans
l’ordre ascendant
rank(x)
Range les éléments de x
scale(x)
Centre et réduit les données
pmin(x,y,…)
Un vecteur dont le iéme élément
est le minimum entre x[i] et
y[i]
cumsum(x)
Un vecteur dont le ieme élément
est la somme de x[1]à x[i]
cumprod(), cummin(),cummax()
Idem pour produit, minimum,
maximum
match(x,y)
Retourne un vecteur de meme
longueur que x contenant les
éléments de x qui sont dans y
encore…
choose(n,k)
Coefficient binomial Cnk
na.omit()
Supprime les observations avec
données manquantes
na.fail()
Retourne un message d’erreur si
x contient au moins un NA
unique()
Si x est un vecteur ou un data
frame, retourne un objet
similaire mais avec les éléments
duppliqués supprimés
table()
Retourne un tableau des
effectifs des différentes
valeurs de x
subset()
Retourne une selection de x en
fonction de critères
sample(x,size)
Ré-échantillonnage aléatoire et
sans remise de size éléments
dans x
Les régressions
linéaires
Les analyses
statistiques avec R
Modèles linéaires ,lm()
modèles linéaires
généralisés,glm()
analyse de variance, aov()
généralités
• L ’argument principal
type:
réponse
~
est une formule du
prédicteur
exemples: data(I=InsectSprays)
~
aov(sqrt(count)
spray,data=I)
équivalent à :
~
aov(sqrt(I$count)
I$spray)
ou à aov(sqrt(I[,1])
~
I[,2])
Les formules
• y~model ou y est la réponse analysée et
model est un ensemble de termes pour
lesquels les paramètres sont estimés
• attention: les symboles arithmétiques ont
ici une signification particulière
• exemples:
y~x1+x2 désigne le modèle y=ax1+bx2+c
y~I(x1+x2) désigne le modèle y=a(x1+x2)+c
y~poly(x,2) désigne le modèle y=ax^2+bx+c
y~x1+x2 désigne le modèle y=ax1+bx2+c
y~x1-1 désigne le modèle y=ax1
Les fonctions génériques
• Les objets qui contiennent les résultats
d ’une analyse, ont un attribut
particulier, la classe.
• Certaines fonctions, dites génériques,
permettent d ’extraire des informations
d ’un objet résultat
• exemples: summary()qui a une action
différente sur un objet de classe lm() ,
aov(),...
apropos("^summary")
[1] "summary.aov"
"summary.glm"
[4] "summary.infl"
"summary.manova"
[7] "summary.mlm"
"summaryRprof"
[10] "summary"
"summary.data.frame"
[13] "summary.Date"
"summary.factor"
[16] "summary.matrix"
"summary.POSIXlt"
[19] "summary.table"
"summary.aovlist"
"summary.lm"
"summary.stepfun"
"summary.connection"
"summary.default"
"summary.POSIXct"
Les fonctions génériques
•
•
•
•
•
•
•
•
plot()
print()
résumé succint
summary()
résumé détaillé
df.residuals nbre de ddl résiduels
coef
coefficients estimés
residuals
résidus
deviance
déviance
fitted
valeurs ajustées par le
modèle
• logLik
logarithme de la
vraisemblance...
Un objet-résultat, produit par
aov(), lm()….
est généralement une liste,bien qu ’il ne
soit pas affiché comme tel,
dont les éléments peuvent être affiché par
la fonction names()
ex
names(res.reg)pour une régréssion
linéaire
"coefficients" "residuals"
"effects"
"rank"
"fitted.values" "assign"
"qr"
"df.residual" "xlevels"
"terms"
"model"
"call"
Analyses supplémentaires
à partir d ’un objet
add1():teste
successivement tous les
termes qui peuvent être ajoutés à un
modèle
drop1():teste successivement tous les termes
qui peuvent être enlevés à un modèle
anova(): calcule une table d ’analyse de
variance ou de deviance pour un ou
plusieurs modèles
predict(): calcule les valeurs prédites pour
des nouvelles données
update(): réajuste un modèle ...
Régréssion linéaire
simple
• Sur des données fictives:
x=1:100
x=sample(x,30,replace=TRUE)
x
[1] 62 18 9 67 43 38 57 12 41 29 69 76 77 46 42 75 32 74
[26] 71 81 76 94 34
6 40 51 88 61
3 38
y=3+7*x+rnorm(30,0,100)
Y
[1] 340.61710 254.86969 54.52298 463.78335 379.30676 177.27873 555.98297
[8] -13.48922 273.11081 187.46739 439.59869 380.92303 537.40362 414.12641
[15] 299.09269 494.05965 415.9
plot(x,y)
res.reg=lm(y~x);
Call:
• lm(formula = y ~ x)
Coefficients:
(Intercept)
x
13.22
6.71
Droite de régression:
y=6,71 *x +13.22
plot(x,y);
abline(res.reg)
summary(res.reg)
• Residuals:
Min
1Q
-142.29 -58.64
Median
-17.17
3Q
63.33
Max
187.99
• Coefficients:
•
Estimate Std. Error t value Pr(>|t|)
(Intercept) 13.2213
37.0548 0.357 0.724
x
6.7105
0.6587 10.188 6.37e-11
• Residual standard error: 90.65 on 28 degrees of
freedom
• Multiple R-Squared: 0.7875,
Adjusted Rsquared: 0.78
Plus sophistiquée...
• La croissance d ’une bactérie (par jour),
modélisé par N=N0 e^kt
t=2:12;
N=c(55,90,135,245,403,665,1100,1810,3000,4
450,7350);
Le modèle est le suivant;
• t=c(2:12);N=c(55,90,135,245,403,665,
1100,1810,3000,4450,7350)
• T=data.frame(t,N,y=log(N));T;
> T
t
N
y
1
2
55 4.007333
2
3
90 4.499810
3
4 135 4.905275
4
5 245 5.501258…..
Calcul de moyenne et
écart-type
• apply(T,2,mean);
t
N
7.000000 1754.818182
• apply(T,2,sd);
y
6.475094
t
N
3.316625 2326.625317
y
1.640357
plot(T$t,T$N)
plot(T$t,T$y)
droite de regression
• ll=lm(y~t,data=T);ll;
Call:
lm(formula = y ~ t, data = T)
Coefficients:
(Intercept)
3.0142
t
0.4944
abline(ll);
summary(ll)
• Call:
lm(formula = y ~ t, data = T)
• Residuals:
Min
1Q
-0.08656 -0.02117
Median
0.01500
3Q
0.02912
• Coefficients:
Estimate Std. Error t value
(Intercept) 3.014162
0.032947
91.49
t
0.494419
0.004289 115.27
--Signif. codes: 0 `***' 0.001 `**' 0.01
' 1
Max
0.04802
Pr(>|t|)
1.13e-14 ***
1.41e-15 ***
`*' 0.05 `.' 0.1 `
summary(ll)
suite
Residual standard error: 0.04499 on 9 degrees of
freedom
Multiple R-Squared: 0.9993,
Adjusted R-squared:
0.9992
F-statistic: 1.329e+04 on 1 and 9 DF, p-value:
1.413e-15
Régression linéaire
multiple
• Exemples:
Les tests statistiques
les test du chi-deux
La fonction
chisq.test(x,y,logical,p)
• Premier exemple:
on lance un dé 300 fois et on obtient le résultat suivant:
1
2
3
4
5
6
43
49
56
45
66
41
x=c(43, 49, 56, 45, 66, 41)
prob=rep(1/6,6)
chisq.test(x,p=prob)
•
Chi-squared test for given probabilities
• data: x
• X-squared = 8.96, df = 5, p-value = 0.1107
Second exemple sur un tableau
de contingence
Exemple d ’un tableau donnant la cécité en
fonction du sexe:
tab=matrix(c(442,514,38,6),nrow=2,byrow=TRUE)
colnames(tab)=c("homme","femme")
rownames(tab)=c("voyant","aveugle")
voyant
aveugle
homme femme
442
514
38
6
X2=chisq.test(tab,correct=FALSE)
On teste s ’il y a une relation entre
sexe et cécité (l ’hypothèse par
défaut est celle d ’indépendance)
Pearson's Chi-squared test
data: tab
X-squared = 27.1387, df = 1, p-value = 1.894e-07
attributes(x2)
$names
[1] "statistic" "parameter" "p.value"
"method"
"data.name" "observed"
[7] "expected" "residuals"
$class
[1] "htest »
par exemple:
x2$expected
homme femme
voyant 458.88 497.12
aveugle 21.12 22.88
valeurs attendues sous hypothèse
d ’indépendance
x2$residuals
homme
femme
voyant -0.787994 0.7570801
aveugle 3.673039 -3.5289413
sum(x2$residuals^2)
27.13874 la somme des carrés des résidus est
la valeur du chi-deux
• Soit le tableau de contingence suivant:
•
roux blond brun
• bleu
13
20
7
• marron
24
10
18
• le test du chi-deux d ’indépendance
s ’effectue ainsi:
• chisq.test(m)
•
Pearson's Chi-squared test
• data: m
• X-squared = 10.0494, df = 2, p-value =
0.006574
on teste l ’hypothèse nulle suivante
« H0:il y a indépendance entre la couleur
des yeux et celle des cheveux »
Test sur une moyenne:
prop.test()
• Pour comparer deux ou plusieurs
proportions sur des échantillons de
grande taille:
prop.test(x, n, p = NULL,alternative =
c("two.sided", "less", "greater"),
conf.level = 0.95, correct = TRUE)
Classification
La fonction kmeans()
Méthodes de type « nuées dynamiques »:
on suppose que les individus sont des points de R^n
muni de la distance euclidienne
On recherche un partitionnement des individus en classes
• Variance des classes minimale (classes homogènes)
• Variance entre classes maximale
• Rappel : théorème de Huygens: la somme de l ’inertie
interclasse et de l ’inertie intraclasse est constante
(inertie = moyenne des carrés des distances au centre de
gravité)
suite
• Exemple en dimension 2 sur le dataframe D
PROB LECT CARR OPER SYNO
PFB SUITE ANAL
D70
T
M
s
1
4.52 1.92 0.93 1.94 1.20 0.08 2.05 1.99 1.37 16.01 1.78 1.21
2
1.50 0.77 0.43 -0.32 1.20 1.26 2.05 1.99 2.30 11.19 1.24 0.85
3
1.77 0.19 1.94 1.19 1.20 0.59 2.05 1.50 1.37 11.80 1.31 0.61
4
1.22 0.19 2.19 0.43 1.20 0.92 2.05 0.51 0.75 9.10 1.01 0.76
5
1.22 1.92 -0.83 1.56 0.64 0.08 1.76 1.01 0.44 7.82 0.87 0.88
6
0.68 0.39 -0.83 -0.32 1.20 -1.77 1.76 0.76 0.18 1.70 0.19 1.08
7
2.05 0.77 0.68 0.43 0.36 1.60 1.76 0.51 1.06 9.23 1.03 0.63
8
0.42 0.39 -0.57 1.56 0.36 -0.93 1.76 0.26 0.44 2.86 0.32 0.90
9 -0.15 -0.19 1.44 -0.32 0.64 0.76 1.76 0.02 1.37 5.34 0.59 0.79
10 -0.42 -0.19 -0.57
1.19
0.64
E=D[,c(1,2)]
cl <- kmeans(E, 4, 20)
(donne 4 sous-nuages)
plot(E, col = cl$cluster) (tracé pour un objet de type
résultat de la fct kmeans)
points(cl$centers, col = 1:4, pch = 8)
Autre exemple
• data(airquality); a=airquality [,3:4]
• cl=kmeans(a,3,20)
• plot(a, col = cl$cluster) ;points(cl$centers, col =
1:4, pch = 8)
le résultat de la fct kmeans est une liste contenant :les
composants suivants:
•
•
cluster: un vecteur d’entiers indiquant la partition
( le sous-nuage) à laquelle est affecté chaque point
centers: la matrice des centres des sous-nuages
• withinss: The within-cluster sum of squares for each
cluster.
•
size: le nombre de points dans chaque sous-nuage
La fonction hclust()
La fonction cutree()