Introduction au logiciel R par Anne Philippe
Introduction au logiciel R par Anne Philippe
1. Objets et Opérations
2. Les fonctions
Notes de Cours sur le logiciel R
3. Les graphiques
8. Inférence statistique
1 2
9. Séries Chronologiques
Installation Documentations
3 4
Au démarrage Sous linux
> apparaît
automatiquement en
début de chaque ligne
de commandes
+ apparaît en début de
ligne si la ligne
précédente est
incomplète
5 6
Les démos :
# pour o b t e n i r l a l i s t e d e s demos
> demo ( )
> demo ( g r a p h i c s )
Les exemples :
La fonction example exécute les exemples
généralement inclus à la fin des fichiers • Ctrl R exécute la ligne sur laquelle se trouve le curseur ou les lignes
d’aide. d’un bloc sélectionné.
7 8
Librairies
10 11
Fonctions is/as Créer des vecteurs
12 13
14 15
Quelques matrices particulières : diagonale, Toeplitz
16 17
Concaténer des vecteurs/matrices Extraire des éléments d’un vecteur ou d’une matrice
> mat=m a t r i x ( v e c t , n c o l =3 , nrow=3)
> v e c t=c ( 1 . 5 : 9 . 5 )
[ ,1] [ ,2] [ ,3]
> vect
• rbind [1 ,] 1.5 4.5 7.5
[ 1 ] 1.5 2.5 3.5 4.5 5.5
[2 ,] 2.5 5.5 8.5
6.5 7.5 8.5 9.5
[3 ,] 3.5 6.5 9.5
• cbind
Colonne/ligne d’une matrice
Extraire un élément
> x =1:10
> mat [ , 1 ] > mat [ 3 , ]
> y=x ^2 > vect [ 1 ] > mat [ 2 , 1 ]
[ 1 ] 1.5 2.5 3.5
> rbind (x , y ) [ 1 ] 1.5 [ 1 ] 2.5
[ 1 ] 3.5 6.5 9.5
[ ,1] [ ,2] [ ,3] [ ,4] [ ,5] [ ,6] [ ,7] [ ,8] [ ,9] [ ,10]
x 1 2 3 4 5 6 7 8 9 10
y 1 4 9 16 25 36 49 64 81 100 Extraire un bloc ou plusieurs coordonnées
> cbind ( x , y ) > mat [ 2 : 3 ,1:2] > vect [ c (1 ,3 ,7)]
x y [ ,1] [ ,2] [ 1 ] 1.5 3.5 7.5
[1 ,] 1 1 [1 ,] 2.5 5.5
[2 ,] 2 4 [2 ,] 3.5 6.5
[3 ,] 3 9
[4 ,] 4 16 Attention : vect[-j] retourne le vecteur vect sans la j ème coordonnée
[5 ,] 5 25
[6 ,] 6 36 > vect[ c (1 ,3 ,7)] retourne 2.5 4.5 5.5 6.5 8.5 9.5
etc
18 19
Opérations sur les Matrices/Vecteurs
20 21
Soit FUN une fonction définie sur les scalaires qui retourne un scalaire.
Quelques opérations particulières sur les matrices
Par exemple
> a=m a t r i x ( 1 , n c o l =2 , nrow=2)
> a sqrt square root
[ ,1] [ ,2] abs absolute value
[1 ,] 1 1 sin cos tan trigonometric functions ( radians )
[2 ,] 1 1 exp log e x p o n e n t i a l and n a t u r a l l o g a r i t h m
> a+3 #m a t r i c e + s c a l a i r e log10 common l o g a r i t h m
[ ,1] [ ,2] gamma lgamma gamma f u n c t i o n and i t s n a t u r a l l o g
[1 ,] 4 4
[2 ,] 4 4 Lorsque le paramètre d’entrée est un vecteur (respectivement une
> a+c ( 1 : 2 ) #m a t r i c e + v e c t e u r matrice), la fonction FUN est appliquée sur chacune des composantes.
[ ,1] [ ,2]
L’objet retourné est un vecteur (respectivement une matrice).
[1 ,] 2 2
[2 ,] 3 3 s
Exemple
Si A = (ai,j ) est une matrice, alors exp(A) retourne une matrice
constituée des éléments e ai,j .
22 23
Quelques fonctions sur les matrices Objets booléens et instructions logiques
• Le produit matriciel est obtenu avec % ⇤ % • Les opérations logiques : < , > , <= , >= , != [différent],
• Calcul des valeurs/vecteurs propres :eigen == [égal] retournent TRUE ou FALSE.
• Calcul du déterminant : det • La comparaison entre deux vecteurs est une comparaison terme à
• t(A) retourne la transposée de la matrice A terme.
• décomposition de Choleski :chol (X) retourne R telle que • Si les vecteurs ne sont pas de même longueur, le plus court est
X = R 0 R où R est une matrice triangulaire supérieure et R 0 est la complété automatiquement.
transposée de R.
> a= 1 : 5 ; b =2.5
• décomposition svd : svd(X) retourne (U,D,V) telles que X = UDV 0 > a<b
où U et V sont orthogonales et D est diagonale. [ 1 ] TRUE TRUE FALSE FALSE FALSE
solve Il est possible de définir plusieurs conditions à remplir avec les opérateurs
24 25
Applications > ( s q r t ( 2 ) ^ 2 == 2 )
[ 1 ] FALSE
• extraire les composantes >8
vect[vect>8] : vect>8 est un vecteur de TRUE et FALSE, on Une solution
extrait les composantes affectées à TRUE.
> a l l . equal ( sqrt (2)^2 ,2)
• extraire les composantes >8 ou <2 [ 1 ] TRUE
vect[(vect>8) | (vect<2)] #ou
>isTRUE ( a l l . e q u a l ( s q r t ( 2 ) ^ 2 , 2 ) )
• extraire les composantes >8 et <10
vect[(vect>8) & (vect<10)]
26 27
Fonction which
Ces fonctions retournent un scalaire :
P Q
• sum() (somme i xi ), prod() (produit i xi ), mean() (moyenne
Soit vec un vecteur logique. La fonction which(vec) retourne les 1
P n
i=1 xi )
indices des coordonnées du vecteur vec qui prennent la valeur TRUE n
• max(), min()
> x =(1:10)^2
> x • length() (longueur du vecteur),
[1] 1 4 9 16 25 36 49 64 81 100
• dim(), ncol(), nrow() (dimension de la matrice/nombre de
> which ( x== 2 5 )
[1] 5 lignes / nombre de colonnes.)
> which ( x > 2 1 )
[1] 5 6 7 8 9 10 Ces fonctions retournent un vecteur :
Pn
• cumsum() (sommes cumulées (x1 , x1 + x2 , . . . , i=1 xi ), cumprod()
Exemple
(produits cumulés),
Les commandes x[x>1] et x[which(x>1)] retournent le même vecteur.
• sort (tri), order, unique
Cas particulier remarque : sort(x) = x[order(x)]
• which.max(x) retourne which(x==max(x)) • fft() (transformé de Fourier)
28 29
32 33
C’est une structure qui regroupe des objets (pas nécessairement de même
• Pour visualiser la liste des composantes d’une liste
type). On crée les listes avec la fonction list
>names ( r d n )
Exemple [ 1 ] " s e r i e " " t a i l l e " " type "
On construit une liste appelée rnd qui contient 3 objets : > summary ( r d n )
L e n g t h C l a s s Mode
• un vecteur dans serie serie 100 none numeric
taille 1 none numeric
• un scalaire dans taille type 1 none character
• une chaîne de caractères dans type
• Pour atteindre les composantes d’une liste
La syntaxe est la suivante >r d n $ t a i l l e OU >r n d [ [ 2 ] ]
>r d n= l i s t ( s e r i e =c ( 1 : 1 0 0 ) , t a i l l e =100 , t y p e=" a r i t h m " ) [ 1 ] 100 [ 1 ] 100
attention
attention
Si la liste a été créée sans spécifier de noms aux variables, il n’y a pas de
Une liste peut être créée sans donner des noms aux variables c’est a dire
nom par défaut et la seule la première syntaxe est utilisable.
rdn=list(c(1:100),100,"arithm") .
34 35
Importer/exporter des données
• Pour extraire les objets d’une liste 1. Importer une suite : x=scan("data.dat") : pour créer un vecteur
>a t t a c h ( r d n ) à partir de données stockées dans un fichier, ici data.dat.
" s e r i e " " t a i l l e " " type "
2. Importer un tableau :
• supprimer les objets créés à la ligne précédente : x=read.table("data.dat")
x=read.table("data.dat", header=TRUE)
>detach ( r d n )
L’instruction header=TRUE permet de préciser que la première ligne
du fichier contient le nom des colonnes du tableau.
3. Exporter : write, write.table
36 37
39 40
La fonction return interdit les sorties avec plusieurs arguments : il faut On peut affecter des valeurs par défaut aux paramètres d’entrée d’une
les regrouper dans un seul objet sous la forme d’une liste. fonction.
PF = f u n c t i o n ( n , p r o b a . p i l e )
Modification de la fonction PF
{
u=r u n i f ( n ) #nb a l é a t o i r e s u i v a n t U n i f ( 0 , 1 ) par défaut on suppose que la pièce est équilibrée.
p f =(u<p r o b a . p i l e )
PF = f u n c t i o n ( n , p r o b a . p i l e =1/ 2 )
p f = as . i n t e g e r ( p f )
{
f =mean ( p f )
u=r u n i f ( n ) #nb a l é a t o i r e s u i v a n t U n i f ( 0 , 1 )
r e t u r n ( l i s t ( e c h a n t i l l o n = pf , f r e q u e n c e = f ) )
p f =(u<p r o b a . p i l e )
}
p f = as . i n t e g e r ( p f )
return ( pf )
Exécution de la fonction : }
PF ( 4 , 1 / 2 ) l= PF ( 4 , 1 / 2 )
$echantillon l$echantillon Les commandes
[1] 0 0 1 0 [1] 0 0 1 1 PF ( 1 0 ) OU PF ( 1 0 , 1 / 2 )
$frequence l$f
[ 1 ] 0.25 [ 1 ] 0.5
retournent le même résultat
41 42
Paramètres d’entrée Remarque sur les valeurs par défaut
Il y a trois façons de spécifier les paramètres d’entrée d’une fonction Modification de la fonction PF :
on inverse l’ordre des paramètres d’entrée :
• par la position : les paramètres d’entrée sont affectés aux premiers
PF = f u n c t i o n ( p r o b a . p i l e =1/ 2 , n )
arguments de la fonction. PF(3,1/2) : les paramètres d’entrée sont {
n=3 et proba.pile=1/2 ...
}
• par le nom : il s’agit du moyen le plus sûr, les noms des arguments
sont précisés de manière explicite. On peut alors écrire PF ( 1 0 )
PF(proba.pile=1/2 ,n=3), l’ordre n’est plus prioritaire E r r e u r d a n s . I n t e r n a l ( r u n i f ( n , min , max ) ) : ’ n ’ e s t manquant
PF ( n=10)
• avec des valeurs par défaut : ces valeurs par défaut seront utilisées si
[1] 0 0 1 0 1 0 1 0 1 0
les paramètres d’entrée ne sont pas spécifiés. On peut alors écrire
PF(3) ou PF(n=3) : les paramètres d’entrée sont n=3 et la valeur
IL est donc préférable de placer les paramètres sans valeur par défaut en
par défaut pour proba.pile c’est à dire 1/2.
premier dans la déclaration des variables d’entrée.
43 44
• f une fonction de deux variables f : (x, y ) 7! f (x, y ) Soit f une fonction dont le paramètre d’entrée x est un scalaire.
• x et y deux vecteurs de même dimension. Vectorize transforme la fonction f en une fonction vectorielle c’est à
La commande f(x,y) retourne le vecteur constitué des éléments f (xi , yi ) dire une fonction qui évalue la fonction f en chaque point d’un vecteur
. d’entrée.
Si x et y ne sont pas de même dimension, celui de plus petite dimension Soit x = (x1 , ..., xn ), on veut évaluer f aux points xi .
est répété. # on t r a n s f o r m e l a f o n c t i o n { f } en une f o n c t i o n v e c t o r i e l l e df .
> df = Vectorize ( f , ’ x ’ )
Tableaux croisés >y=d f ( x )
1 2 3 4
y
0 20 40 60 80
Index
plot(x,y,pch=3)
1 2 3 4
y
-4 -2 0 2 4
49
Quelques arguments de la fonction plot Graphique en 3D
type=p
x < seq ( 10 , 1 0 , l e n g t h= 3 0 )
y < x
4
f < f u n c t i o n ( x , y ) { r < s q r t ( x^2+y ^ 2 ) ; 10 ⇤ s i n ( r ) / r }
2
0
• pour fixer les limites des axes 0 5 10 15 20 25 30 z < outer ( x , y , f )
p e r s p ( x , y , z , t h e t a = 3 0 , p h i = 3 0 , expand = 0 . 5 , c o l = " l i g h t b l u e " )
Index
4
sur la première courbe tracée
2
0
0 5 10 15 20 25 30
nuage de points.
4
x
2
0
• pch : type de points 0 5 10 15 20 25 30
z
Index
y
type=h
x
• col : couleur
4
x
2
0
0 5 10 15 20 25 30
Index
50 51
commentaire
5
x=rnorm ( 2 0 )
400
y=r e x p ( 2 0 )
#nuage de p o i n t s
300
y
4
plot (x , y)
200
#a j o u t e r un nuage de p o i n t s
3
100
p o i n t s ( x + . 1 , y + . 1 , pch =2)
y
100 200 300 400 500 600 700 800
#a j o u t e r une l i g n e
l i n e s ( s o r t ( x ) , y , l t y =2)
2
x
#a j o u t e r une l i g n e h o r i z o n t a l e
a b l i n e ( h=3)
1
#t e x t e + f r a m e t i t l e
z
0
-1 0 1 2
y
x x
52 53
légende legend Autour de la fonction plot
legend ( 1 , 1 . 9 , c ( " x^2 1" , " s i n " , " c o s " ) , c o l = c ( 3 , 4 , 6 ) ,
l t y = c (2 , 1, 1 ) , pch = c ( 1, 3 , 4))
prédéfinis :
[ 1 ] " p l o t . data . frame " " plot . default "
[3] " plot . density " " plot . factor"
1.0
top
1.0
topright, inset = .02
topleft, inset = .05
(x,y)
(x,y)
(x,y) [ 5 ] " plot . formula " " plot . function "
[ 7 ] " plot . histogram " " plot . lm "
0.5
0.5
x^2 - 1
0.0
y
(x,y) (x,y) (x,y)
-0.5
-0.5
[ 1 7 ] " p l o t . xy "
bottomleft bottom bottomright
-1.0
(x,y) (x,y) (x,y)
-1.0
-3 -2 -1 0 1 2 3
x 54 55
• sur une fonction (par ex sin) Les outils graphiques matplot et pairs sont adaptés aux matrices dont
p l o t ( s i n , x l i m=c( p i , p i ) ) les colonnes correspondent à des variables.
1.0
Exemple
300
• sur un tableau
0.5
sin (x)
200
>data ( i r i s )
0.0
x=r p o i s ( 1 0 0 0 , 1 )
>i r i s
100
-0.5
y=t a b l e ( x )
-1.0
y
0
4
• sur un histogramme ou une
20
...
0.3
15
Frequency
densité
Density
Cette fonction représente sur un même graphique les colonnes d’une Cette fonction représente tous les nuages de points possibles entre les
matrice ou d’une data.frame. différentes colonnes.
Sepal.Length
Sepal.Width
1 2 3 4 5 6 7
iris
Petal.Length
Petal.Width
58 59
0 50 100 150
1. On commence par fixer les axes des abscisses et des ordonnés à Distance Between Brownian Motions
-5 0 5 10 15 20
l’aide d’un graphique vide.
Distance
p l o t ( c ( 1 , 9 ) , c ( 0 , 2 ) , t y p e="n" )
Time
polygon ( c ( 4 . 5 , 5 . 5 , 5 . 5 , 4 . 5 ) ,c (0 ,0 ,1 ,1))
n=100
3. Arguments supplémentaires z . h a u t=c ( 0 , cumsum ( rnorm ( n ) ) )
z . b a s= c ( 0 , cumsum ( rnorm ( n ) ) )
p o l y g o n ( 1 : 9 , c ( 2 , 1 , 2 , 1 ,NA, 2 , 1 , 2 , 1 ) , c o l=c ( " r e d " , " b l u e " ) ,
b o r d e r=c ( " g r e e n " , " y e l l o w " , lwd =3 , l t y =c ( " d a s h e d " , " s o l i d " ) )
xx < c ( 0 : n , n : 0 )
yy < c ( z . bas , r e v ( z . h a u t ) )
etape 1 etape 2 etape 3
#g r a p h i q u e v i d e p o u r f i x e r l e s d i m e n s i o n s
2.0
2.0
2.0
1.5
1.5
#t r a c e r l e p o l y g o n e
c(0, 2)
c(0, 2)
c(0, 2)
1.0
1.0
1.0
0.5
0.5
0.0
0.0
2 4 6 8 2 4 6 8 2 4 6 8
60 61
• Pour sauvegarder un graphique :
• utilisation de la fonction dev.print.
• pour obtenir un fichier postscript :
dev.print(postscript, file="essai.ps")
• pour obtenir un fichier pdf :
dev.print(pdf, file="essai.pdf")
62
Référence :
Représentation par des points (par défaut si deux vecteurs en entrée), par
une ligne et par une ligne en modifiant la couleur noire par défaut.
63 64
Option de la fonction qplot hitogramme avec qplot
On conserve les options "xlab", "ylab", "xlim" et "ylim". S’il y a un seul vecteur en entrée le graphique par défaut est un
histogramme. On controle la largeur des classes avec binwidth. Par
Pour changer la couleur ou le type de point
défaut, l’histogramme est dessiné avec 30 classes.
y = rnorm ( 2 0 )
x= 1 : 2 0 x=rnorm ( 1 0 0 )
q p l o t ( x , y , s h a p e = I ( 1 : 2 0 ) , c o l o u r=I ( rainbow ( 2 0 ) ) q p l o t ( x , c o l o u r=I ( " p u r p l e " ) , f i l l =I ( " p i n k 3 " ) , b i n w i d t h =.05)
qplot (x , y , c o l o u r=I ( rainbow ( 2 0 ) ) , s i z e=I ( ( 1 : 2 0 ) / 2 ) ) q p l o t ( x , c o l o u r=I ( " p u r p l e " ) , f i l l =I ( " p i n k " ) , b i n w i d t h =.5)
q p l o t x , c o l o u r=I ( " p u r p l e " ) , f i l l =I ( " p i n k 1 " ) , b i n w i d t h =1)
65 66
69 70
Instructions conditionnelles
La syntaxe
if (condition) {instructions} permet de calculer les instructions
uniquement si la condition est vraie.
Structures de contrôle et if (condition) { A } else {B} calcule les instructions A si la
Itérations condition est vraie et les instructions B sinon.
Par exemple,
if (x>0) y=x*log(x) else y=0
Remarque : Si les instructions se limitent à un seul calcul comme dans
cet exemple on peut utiliser la fonction ifelse
y=ifelse(x>0,x*log(x),0)
71
Opération non vectorielle Itérations
Dans la condition, x a une longueur supérieure à 1. Seul le premier for(var in seq) {commandes}
élément est utilisé : • while :
(x>2) correspond à (x[1] >2) while(cond) { commandes}
2. ifelse permet d’appliquer une instruction conditionnelle sur • repeat :
chacune des coordonnées d’un vecteur.
repeat { commandes ; if (cond) break }
> i f e l s e ( x <2 , "A" , "B" )
[ 1 ] "A" "B" "B" "B" "B" "B" "B"
1. Dans une boucle for, le nombre d’itérations est fixé.
Alternative :
2. La durée d’execution des boucles while/repeat peut être infinie !
> g = f u n c t i o n ( x ) i f ( x >2) p r i n t ( "A" ) e l s e p r i n t ( "B" )
>vg = V e c t o r i z e ( g , ’ x ’ )
> vg ( 1 : 1 0 ) 72 73
Exemple Exemple
74 75
Exemple Exemple
78 79
Supprimer une boucle en utilisant apply replicate
3
A l e a = m a t r i x ( rnorm ( n⇤N, 0 , 1 ) , n c o l= N)
med = a p p l y ( A l e a , 2 , q u a n t i l e , p r o b s =1/ 2 )
2
Density
> r e p l i c a t e ( 5 , mean ( rnorm ( 1 0 ) ) )
[1] 0.22137912 0.09330663 0.12511439 0.02613061 0.19182371
1
0
−0.2 0.0 0.2 0.4
med
80 81
Ces fonctions calculent la même fonction sur tous les éléments d’un
vecteur ou d’une liste.
La syntaxe :
La fonction replicate permet de programmer sans boucle le code
suivant lapply(X,FUN, ARG.COMMUN)
n =100
N=500 • La fonction lapply applique une fonction FUN à tous les éléments
med = 1 :N du vecteur ou de la liste X.
f o r ( i i n 1 :N) med [ i ] = q u a n t i l e ( rnorm ( n , 0 , 1 ) , p r o b s =1/ 2 )
• Les valeurs de X sont affectées au premier argument de la fonction
FUN.
La syntaxe est la suivante
• Si la fonction FUN a plusieurs paramètres d’entrée, ils sont spécifiés
med = r e p l i c a t e ( 5 0 0 , q u a n t i l e ( rnorm ( 1 0 0 , 0 , 1 ) , p r o b s =1/ 2 ) )
après le nom de la fonction : ARG.COMMUN
• Cette fonction retourne le résultat sous la forme de listes.
• sapply est une fonction similaire à lapply mais le résultat est
retourné sous forme de vecteurs, si possible.
82 83
Exemple d’utilisation de lapply Supprimer une boucle à l’aide de la fonction sapply
cars est une liste constituée de deux vecteurs speed et dist Il est très souvent possible de supprimer les boucles for en utilisant
On calcule la moyenne et les quantiles des deux composantes de la liste. lapply ou sapply.
> cars
speed d i s t Soit x = (x1 , ...., xt ) une série représentant l’évolution du prix d’une
1 4 2
action sur une durée de t jours.
2 4 10
3 7 4 On veut calculer Mi le prix maximum sur la période 1 à i pour
>l a p p l y ( c a r s , mean )
i = 1, ..., t.
$speed $dist
[ 1 ] 15.4 [ 1 ] 42.98
1. avec une boucle
>l a p p l y ( c a r s , q u a n t i l e , p r o b s = ( 0 : 4 ) / 4 ) M = 1: t
$speed for ( i in 1: t )
0% 25% 50% 75% 100% {
4 12 15 19 25 M[ i ] = max ( x [ 1 : i ] )
$dist }
0% 25% 50% 75% 100%
2 26 36 56 120 2. sans boucle
FUN . max = f u n c t i o n ( n , y ) max ( y [ 1 : n ] )
84 85
M = s a p p l y ( 1 : t , FUN . max , y = x )
La fonction aggregate permet aussi d’évaluer une fonction sur des sous
Comparaison de trois programmations for/replicate/apply
( n= 10^3 , M= 10^4)
user system e l a p s e d
wfor 0.680 0.051 0.760
wrep 0 . 6 1 8 0.018 0.632
#b o u c l e wapp 1 . 1 3 2 0.157 1.286
> x =1:M
> f o r ( i i n 1 :M) ( n= 10^2 , M= 10^5)
x [ i ] = mean ( r u n i f ( n ) ) user system e l a p s e d Autour des lois de probabilités
#r e p l i c a t e wfor 3.160 0.239 3.451
> x=r e p l i c a t e (M, mean ( r u n i f ( n ) ) ) wrep 2 . 5 2 2 0.066 2.611
#a p p l y wapp 3 . 0 3 1 0.253 3.456
> Z=m a t r i x ( r u n i f ( n⇤M) , n c o l=M)
> x=a p p l y ( Z , 2 , mean ) ( n= 10 , M= 10^6)
user system e l a p s e d
wfor 32.077 0.419 43.655
wrep 3 7 . 2 1 9 0.481 41.147
wapp 2 9 . 9 1 1 0.392 30.357
88
89 90
Exemple : loi gaussienne de moyenne 0 et de variance 1
0.4
1.0
0.8
x=seq ( 5 , 5 , . 0 1 )
0.3
0.6
dnorm(x)
pnorm(x)
• qwww(↵,... ) : calcule le quantile d’ordre ↵ u=seq ( 0 , 1 , . 0 1 )
0.2
0.4
0.1
0.2
• rwww(n,...) retourne un échantillon de taille n
0.0
0.0
p l o t ( x , dnorm ( x , 0 , 1 ) , t y p e=" l " ) -4 -2 0 2 4 -4 -2 0 2 4
x x
rnorm(10)
qnorm(u)
0
-2
p l o t ( rnorm ( 1 0 , 0 , 1 ) )
-4
0.0 0.2 0.4 0.6 0.8 1.0 2 4 6 8 10
u Index
91 92
Soit Z une variable aléatoire à valeurs dans {x1 , ....., xk } telle que On simule suivant la loi uniforme sur l’ensemble {1, ..., 6}.
On simulen = 100 réalisations de façon indépendante
p(Z = xi ) = probi
# Les r é a l i s a t i o n s
pour tout i = 1...k > DE
[1] 3 2 5 3 4 5 4 4 2 4 2 5 2 6 5 6 4 3 5 4 5 1OO
3 lancers
5
• La fonction sample est un générateur de nombres aléatoires pour les [24] 3 5 4 4 5 5 4 4 4 3 5 5 2 5 3 5 4 3 1 3 1 3 4
[47] 2 5 6 2 1 5 1 6 2 1 2 3 5 1 3 4 2 3 1 2 6 1 6
20
lois discrète à support fini.
[70] 6 4 1 3 4 5 6 1 6 3 5 4 1 5 2 2 2 3 3 2 2 6 6
• La syntaxe est sample(x, n, replace= TRUE, prob)
15
[93] 6 4 2 5 5 1 5 4
table(DE)
où # c a l c u l du nombre de 1 , . . . , 6 d a n s
10
#l ’ é c h a n t i l l o n s i m u l é :
• x contient les valeurs prises par Z
> t a b l e (DE)
5
• prob contient les valeurs des probabilités.
DE
lorsque l’option prob n’est pas spécifié, par défaut c’est la loi
0
1 2 3 4 5 6 1 2 3 4 5 6
93 94
Construire une fonction càdlàg constante par morceaux Exemple : loi binomiale
La fonction stepfun retourne un objet de type function qui défini une On trace la fonction de répartition de la loi binomiale B(10, 1/2)
fonction constante par morceaux et continue à droite.
points . discont = 0:10
La syntaxe est F . p o i n t s . d i s c o n t = pbinom ( p o i n t s . d i s c o n t , 1 0 , 0 . 3 )
F=stepfun(x, z)
F = stepfun ( points . discont , c (0 ,F . points . discont ) )
où p l o t ( F , v e r t i c a l =FALSE , c o l =4 , main=" f c t r e p l o i b i n o m i a l e " , y l a b="F" )
1.0
● ● ● ● ●
0.8
aux points de discontinuités x. ●
0.6
f(x)
Pour représenter graphique la fonction F on utilise plot ou lines (pour
0.4
●
0.2
●
0.0
0 2 4 6 8 10
x
Application : les fonctions de répartition des lois discrètes
95 96
> mean ( x )
boxplot
[ 1 ] 3.734162 data : sqrt(islands)
> var ( x )
120
[ 1 ] 9.134685
100
> quantile (x , c (.25 ,.5 ,.75))
80
25% 50% 75%
60
Comment représenter graphiquement l’échantillon d’une variable
1.794741 2.990066 4.326417
40
Q1 mediane Q3
20
• continue
0
>b o x p l o t ( x ) • discrète
• qualitative ?
Construction du boxplot :
Les points représentent les valeurs
Comment représenter un tableau de données numériques ?
aberrantes. Elles sont définies comme
les observations en dehors de l’intervalle
98 99
0.4
0.15
plot (y)
0.00 0.02 0.04 0.06
Density
19
0.10
0.2
Density
Density
11 h i s t ( x , p r o b a=T)
0.05
5
lines (y)
0.0
32
1 0 0 2 3 2
0.00
-3 -2 -1 0 1 2 3 4
0 20 40 60 80 100 140 0 20 40 60 80 100 140 z=seq ( min ( x ) , max ( x ) , 0 . 0 1 )
dat
sqrt(islands) sqrt(islands)
#s u p e r p o s e d e n s i t é t h é o r i q u e
WRONG histogram
density.default(x = dat) l i n e s ( z , dnorm ( z , 0 , 1 ) , l t y =2)
les options
0.4
15
Frequency
Density
aussi utiliser nclass pour fixer le nombre de classes. proba =T : l’aire en dessous de la
0
0.0
sqrt(islands) -4 -2 0 2 4
0 4 8
clear
des modalités dans l’échantillon.
clear partly.cloudy cloudy
> table ( c e n t r a l . park . cloud )
c e n t r a l . park . cloud
partly.cloudy
c l e a r par tly . cloudy cloudy
modalités ordonnés par effectif croissant
11 11 9
cloudy
0 4 8
102 cloudy clear partly.cloudy
103
John
> sales
John J a c k P e t e r
30
Jack
> N [ 1 ] 6 16 3 6 8 10 9 9 10
45 44 46 etc
20
> t = t a b l e (N)
10
Représentation graphique
15
Peter
N
pie ( sales )
0
2 3 4 5 6 7 8
nb d'appels
10
John Jack Peter
barplot ( s a l e s ) 9 10 11 12 13 14 15 16 17
5
2 4 3
Modification de l’axe des ordonnés pour améliorer la lisibilité du
0
7 16 15 25 18 23 18 25 jours
graphique : 9 6 9 4 2
>
47
b a r p l o t ( s a l e s , y l i m=c ( 4 0 , 4 7 ) , xpd=F )
rouge).
44
43
0.12
John Jack Peter
J= 2 : 1 7
table(N)/length(N)
104 105
0.08
p l o t ( t a b l e (N) / l e n g t h (N) , y l a b=" " )
0.04
p o i n t s ( J , d p o i s ( J , mean (N ) ) )
0.00
2 3 4 5 6 7 8 9 11 13 15 17
N
La fonction barplot pour des variables quantitatives Comparaison de 2 variables quantitatives indépendantes
10 15 20 25
10 12 14 16
2 4 6 8 10 12 14 16
15
Attention : Les labels des barres ne coincident pas avec la coordonnée
N2
10
8
sur l’axe des abscisses.
6
5
5
4
0
Illustration : on veut ajouter sur graphique précédent la densité de la loi
1 2 2 5 8 12 17 5 10 15
fréquence
2 4 6 8 10 12 14 16
2 4 6 8 10 12
Lien entre des variables qualitatives dépendantes Autres graphiques pour résumer la table de contingence
prev grade
Données : pour 122 étudiants, on 1 B+ B+
2 A- A-
dispose de la note obtenue cette 3 B+ A-
14
14
20
A A
année (A+ ....F) et celle de l”année 4 F F A- A-
12
12
5 F F B+ B+
précédente B B
15
6 A B
10
10
B- B-
7 A A C+ C+
C C
8
8 C D D D
10
F F
6
table(grades)
> table(grades)
4
5
A A- B+ B B- C+ C D F
grade
2
prev A A- B+ B B- C+ C D F
A 15 3 1 4 0 0 3 2 0
0
A
A- 3 1 1 0 0 0 0 0 0 A B+ B- C F A A- B B- C F A B+ B- C F
grade
B 0 1 1 4 3 1 3 0 2
B- 0 1 0 2 0 0 1 0 0
C C+B- B
108 109
Utilisations des couleurs Utilisation des couleurs, de la taille et du type de marques
Données : pour 150 enfants, on relève les informations suivantes : age / On représente la taille en fonction du poids.
poids / taille /sexe
Pour visualiser le lien entre les
60
60
> kid.weights
variables : on utilise la fonction
50
50
age weight height gender 150
height
height
1 58 38 38 M
40
40
2 103 87 43 M
On peut ajouter en option la couleur
30
30
3 87 50 48 M
20
20
4 138 98 61 M des points définies à partir de la 0
10
10
5 82 47 47 F
variable gender
20 40 60 80 100 120 140 20 40 60 80 100 120 140
weight weight
80 120
80 120
age age
La couleur des points est définie par Le type de points est définie par la
40
40
0
0
la variable gender variable gender
60 100 140
60 100 140
weight weight
20
50
height height
proportionnelle à l’age des individus.
30
30
10
10
0 40 80 120 10 30 50 0 40 80 120 10 30 50
plot ( weight , height , c e x =ag e /max ( ag e ) ⇤ 2 , c o l=as . i n t e g e r ( g e n d e r ) )
p l o t ( w e i g h t , h e i g h t , c o l = rainbow ( 1 5 0 ) [ ag e ] , pch=as . i n t e g e r ( g e n d e r ) )
p a i r s (X [ , 1 : 3 ] ) p a i r s (X [ , 1 : 3 ] , c o l=X [ , 4 ] ) 110 111
0.4
0.4
1. On simule un échantillon
0.3
0.3
Density
Density
suivant la loi gaussienne de
0.2
0.2
0.1
0.1
taille 1000
0.0
0.0
2. On trace l’histogramme pour
-4 -2 0 2 4 -4 -2 0 2 4
x x
0.4
0.4
3. On compare l’histogramme
0.3
0.3
Density
Density
0.2
0.2
avec la densité théorique de loi
0.1
0.1
gaussienne (courbe en rouge)
0.0
0.0
-4 -2 0 2 4 -4 -2 0 2 4
x x
112
Précision sur la fonction density Illustration sur un mélange gaussien
Soit X1 , · · · , Xn n variables aléatoires i.i.d. suivant la loi de densité f . On teste la fonction density sur des données simulées 2 suivant un
La fonction density calcule l’estimateur de f suivant mélange de lois gaussiennes :
n ✓ ◆ 1 1 3 1
ˆ 1X 1 x Xk f (x) = p e
1
2 (x 5)2
+ p e
1
2 (x+5)
2
fn (x) = kern 4 2⇡ 4 2⇡
n bwn bwn
k=1
same bandwidth, bandwidths = 0.1 bandwidths = 1
6 different kernels
0.4
0.15
0.10
0.3
Density
Density
0.10
gaussian epanechnikov rectangular
0.2
1.0
1.0
1.0
0.05
0.8
0.8
0.8
0.08
0.1
0.6
0.6
0.6
Density
Density
Density
0.00
0.0
0.4
0.4
0.4
−5 0 5 −10 −5 0 5 10
0.2
0.2
0.2
0.06
Density
0.0
0.0
0.0
N = 50 Bandwidth = 0.1 N = 50 Bandwidth = 1
−1.0 0.0 0.5 1.0 −1.0 0.0 0.5 1.0 −1.0 0.0 0.5 1.0
bandwidths = 2 bandwidths = 3
0.04
triangular biweight cosine
0.08
1.0
1.0
1.0
0.8
0.8
0.8
0.06
0.08
0.6
0.6
0.6
0.02
Density
Density
Density
Density
Density
0.4
0.4
0.4
0.04
0.04
0.2
0.2
0.2
0.02
0.0
0.0
0.0
0.00
−1.0 0.0 0.5 1.0 −1.0 0.0 0.5 1.0 −1.0 0.0 0.5 1.0
0.00
0.00
−10 −5 0 5 10
−10 −5 0 5 10 −15 −5 0 5 10 15
• la dimension de la fenêtre bw. Par défaut le paramètre est optimisé N = 50 Bandwidth = 2.096 N = 50 Bandwidth = 2 N = 50 Bandwidth = 3
La fonction de répartition empirique est définie par Soit X1 , . . . , Xn une suite de variables aléatoires iid, si E |X1 | < 1 alors
n
1X n
F̂n (t) = 1] 1t] (Xi )
n!1
! F (t) 1X
n p.s. Sn = Xi ! E (X1 )
i=1 n
i=1
C’est un estimateur de la fonction de répartition.
evolution de Sn en fonction de n : cas gausien
n=5000
1.5
1.0
1.0
#l o i gaussienne
0.5
0.8
x=rnorm ( n , 0 , 1 )
0.0
> x= rnorm ( 1 0 0 )
y=cumsum ( x ) / ( 1 : n ) 0 1000 2000 3000 4000 5000
c(0:(n − 1))/n
0.6
>Fn=e c d f ( x )
p l o t ( y , t y p e= ’ ’ l ’ ’ ) Index
0 1 2 3 4
> l i n e s ( z , pnorm ( z ) , c o l =1 , lwd =2)
0.2
Cauchy ou S t u d e n t ( 1 d d l )
yc
x c=r t ( n , 1 )
0.0
y c=cumsum ( x c ) / ( 1 : n )
-2
−3 −2 −1 0 1 2 3
p l o t ( yc , t y p e= ’ ’ l ’ ’ ) 0 1000 2000 3000 4000 5000
sort(x) Index
115 116
Les fonctions pour les tests statistiques classiques : Exemple : Test de Student t.test()
117 118
On construit un générateur de nombres aléatoires suivant la loi normale Pour différentes valeurs de n = 1, 5, 10
en utilisant le Théorème Central Limite appliqué à des variables aléatoires
1. On teste la normalité à l’aide de deux procédures de test, le test de
iid suivant la loi uniforme sur (0, 1).
Kolmogorov et celui de Shapiro.
2. On compare la fonction de répartition empirique et la fonction de
Méthode de simulation non exacte ....
répartition théorique.
U = 1, . . . , Un iid suivant la loi uniforme 3. On compare l’estimation de la densité par un histogramme et la
r n densité théorique.
n 1 1X
(Ūn ) ) X ⇠ N(0, 1) Ūn = Ui X = simU ( 1 0 0 0 , n )
12 2 n
i=1
t e s t 1=k s . t e s t (X , " pnorm " , 0 , 1 ) $p . v a l u e
La générateur s’écrit t e s t 2 = s h a p i r o . t e s t (X) $p . v a l u e
simU< f u n c t i o n ( t a i l l e , s i z e )
p l o t ( s o r t (X ) , ( 1 : s i z e ) / s i z e , t y p e=" s " , c o l=" o r a n g e " )
{
l i n e s ( seq ( 3 , 3 , . 1 ) , pnorm ( seq ( 3 , 3 , . 1 ) ) , c o l=" r e d " )
y = m a t r i x ( r u n i f ( t a i l l e ⇤ s i z e ) , n c o l=s i z e )
t i t l e ( p a s t e ( "n=" , n , " e t p v a l u e ( k s )=" , f l o o r ( c ( t e s t 1 ) ⇤ 1 0 0 ) / 1 0 0 ) )
( a p p l y ( y , 1 , mean) 1/ 2 ) ⇤ s q r t ( t a i l l e / 1 2 )
h i s t (X , c o l=" o r a n g e " , x l i m=c ( 3 , 3 ) , p r o b a=T , main=" " )
}
l i n e s ( seq ( 3 , 3 , . 1 ) , dnorm ( seq ( 3 , 3 , . 1 ) ) , c o l=" r e d " )
t i t l e ( p a s t e ( " p v a l u e ( s h a p i r o )=" , f l o o r ( c ( t e s t 2 ) ⇤ 1 0 0 ) / 1 0 0 ) )
119 120
Les résultats Régression linéaire
(1:size)/size
(1:size)/size
0.8
0.8
0.8
Pour réaliser une régression linéaire, par la méthode des moindres carrés,
0.0
0.0
0.0
on utilise la fonction lm .
−1.5 −0.5 0.5 1.0 1.5 −2 −1 0 1 2 3 −3 −2 −1 0 1 2 Sur les données cars
sort(X) sort(X) sort(X) > lm ( c a r s $ d i s t ~ c a r s $ s p e e d )
120
Call :
100
lm ( f o r m u l a = c a r s $ d i s t ~ c a r s $ s p e e d )
80
pvalue(shapiro)= 0 pvalue(shapiro)= 0.03 pvalue(shapiro)= 0.18 Coefficients :
cars$dist
60
( Intercept ) cars $speed
0.4
Density
Density
Density
40
0.3
17.579 3.932
20
0.00
0.0
0.0
> p l o t ( c a r s $ speed , c a r s $ d i s t )
0
> a b l i n e ( r e g , c o l =3 , lwd = 2 ) 5 10 15 20 25
−3 −2 −1 0 1 2 3 −3 −2 −1 0 1 2 3 −3 −2 −1 0 1 2 3 cars$speed
X X X 121 122
49 23 49
23
40
0.5
35
2
Standardized residuals
20
1
Residuals
0
0
-1
-20
39
-2
Cook's distance
49
23
1.5
35
35
2
Standardized residuals
Standardized residuals
• etc
1.0
1
0
0.0
-2
-2 -1 0 1 2 0 20 40 60 80
123 124
Régression non paramétrique Polynômes Locaux
>data ( c a r s )
>a t t a c h ( c a r s )
>p l o t ( s p e e d , d i s t )
> l i n e s ( ksmooth ( s p e e d , d i s t , " n o r m a l " , b a n d w i d t h =2) , c o l =2)
> l i n e s ( ksmooth ( s p e e d , d i s t , " n o r m a l " , b a n d w i d t h =5) , c o l =3)
120
> l i n e s ( ksmooth ( s p e e d , d i s t , " n o r m a l " , b a n d w i d t h =10) , c o l =4)
100
>data ( c a r s )
80
>c a r s . l o = l o e s s ( d i s t ~ s p e e d , c a r s )
dist
60
>p = p r e d i c t ( c a r s . l o )
20 40 60 80 100 120
>p l o t ( c a r s )
40
> l i n e s ( seq ( 5 , 3 0 , 1 ) , p$ f i t , c o l =3)
20
0
dist
5 10 15 20 25
speed
0
5 10 15 20 25
speed
125 126
127
Exemple
Pour créer une série chronologique, on utilise la fonction ts
> data ( USAccDeaths ) > b r u i t . b l a n c=t s ( rnorm ( 1 0 0 ) , f r e q u e n c y = 1 , s t a r t = c ( 1 ) , end=c ( 1 0 0 ) )
> USAccDeaths >p l o t ( b r u i t . b l a n c )
>a c f ( b r u i t . b l a n c , t y p e=" c o r r e l a t i o n " )
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec #ou t y p e =" c o v a r i a n c e " ou t y p e =" p a r t i a l "
1973 9007 8106 8928 9137 10017 10826 11317 10744 9713 9938 9161 8927
1974 7750 6981 8038 8422 8714 9512 10120 9823 8743 9129 8710 8680
1975 8162 7306 8124 7870 9387 9556 10093 9620 8285 8466 8160 8034
Series Bruit.Blanc
1976 7717 7461 7767 7925 8623 8945 10078 9179 8037 8488 7874 8647
1977 7792 6957 7726 8106 8890 9299 10625 9302 8314 8850 8265 8796
1.0
1978 7836 6892 7791 8192 9115 9434 10484 9827 9110 9070 8633 9240
0.8
> p l o t ( USAccDeaths )
0.6
Bruit.Blanc
ACF
0.4
7000 8000 9000 10000 11000
0.2
-1
USAccDeaths
0.0
-2
-0.2
0 20 40 60 80 100 0 5 10 15 20
Time Lag
1973 1974 1975 1976 1977 1978 1979
Time
128 129
−0.4
y= f i l t e r ( x , method = ’ ’ r e c u r c i v e ’ ’ , f i l t e r =c ( 2 , 3 ) ) 0.0 0.5 1.0 1.5 0.2 0.6 1.0 1.4
>p a c f ( USAccDeaths )
>p e r i o d o g r a m ( USAccDeaths )
Ces fonctions permettent en particulier de créer un générateur de
periodogram
1500000
processus ARMA.
0
0.0 0.1 0.2 0.3 0.4 0.5
freq
130 131
modélisation et prévision AR
132 133
• ARMAacf pour le calcul des covariances théorique d’un modèle X [t] = a[1]X [t 1]+...+a[p]X [t p]+e[t]+b[1]e[t 1]+...+b[q]e[t q]
ARMA
on utilise la fonction arima, la syntaxe est
• ARMAtoMA pour le développement en MA infinie d’un modèle ARMA
out=arima(x,order=c(p,0,q))
• arima.sim pour simuler des trajectoires d’un modèle ARMA ou
la sortie out est une liste contenant :
ARIMA
out$coef : estimation des coefficients,
out$resid : estimation des résidus e[t]
ATTENTION x doit être une série chronologique (x=ts(x))
134 135
modélisation et prévision SARIMA Exemple
Plus généralement, la fonction arima permet d’estimer les paramètres data ( USAccDeaths )
d’un modèle SARIMA a = c ( USAccDeaths )
USAcc= t s ( a [ 1 : 6 0 ] , f r e q u e n c y =12 , s t a r t=c ( 1 9 7 3 , 1 ) )
Ap (L)↵P (Ls )Y [t] = Q (L
s
)Bq (L)e[t] avec Y [t] = (I L)d (I Ls )D X [t]
f i t = a r i m a ( USAcc , o r d e r=c ( 0 , 1 , 1 ) , s e a s o n a l= l i s t ( o r d e r=c ( 0 , 1 , 1 ) ) )
Call :
la syntaxe est la suivante :
a r i m a ( x = USAcc , o r d e r = c ( 0 , 1 , 1 ) ,
o u t=a r i m a ( x , o r d e r=c ( p , d , q ) , s e a s o n a l = l i s t ( order = c (0 ,1 , 1)))
s e a s o n a l= l i s t ( o r d e r=c (P , D,Q) , p e r i o d=s ) ) Coefficients :
ma1 sma1
la sortie est une liste contenant : 0.4343 0.4419
Approx s t a n d a r d e r r o r s :
out$coef : estimation des coefficients, ma1 sma1
out$aic : critère AIC, 0.1368 0.0122
out$resid : estimation des résidus e[t] s i g m a ^2 e s t i m a t e d 1 1 4 2 7 6 : l o g l i k e l i h o o d = 341.73 , a i c = 687.46
option : include.mean=F ou T
136 137
p = p r e d i c t ( f i t , n . ah ea d =12)
[ 9 ] " p r e d i c t . mlm"
USAccDeaths
l i n e s ( p$ p r e d , c o l=" r e d 3 " )
l i n e s ( p$ p r e d +1.96 ⇤p$ se , c o l=" b l u e 2 " )
8000
Time
138 139
Lissage exponentiel La librairie forecast
370
cette fonction peut aussi être utilisée 3. modélisation automatique ARIMA.
360
pour 4. modélisation automatique SARIMA .
350
Observed / Fitted
• des modèles multiplicatifs
Par défaut cette librarie utilise le traitement parallèle pour accélérer les
340
• le lissage simple si l’on impose 330
calculs dans la sélection automatique des modèles .
les coefficients.
320
Time
140 141