introduction objet dans le sexe

Transcription

introduction objet dans le sexe
Master Mathématiques et Applications
Spécialité Statistique
Septembre 2016
Fiche 1
Introduction à R
1
Introduction
On commencera par ouvrir une session sous RStudio. Une fois la session ouverte, R attend une
instruction, ce qu’indique le signe ”>” en début de ligne. Chaque instruction doit être validée par
Entrée pour être exécutée. Si l’instruction est correcte, R redonne la main, ce qu’indique ”>”. Si
l’instruction est incomplète, R retourne le signe ”+”. Il faut alors compléter l’instruction ou sortir
de cette situation et récupérer la main en tapant Ctrl + c ou Echap. Si l’instruction est erronée,
un message d’erreur apparaı̂t. La création d’un objet peut se faire par affectation avec un des trois
opérateurs “<-”, “->”, “=” en donnant un nom à cet objet :
> x<-2016
2
Création d’objets
2.1
Scalaires
— calculs directs :
> 2+3
> 3^2-5*log(100)+sqrt(8)
— création :
> x<-2*cos(-5)
> y<-pi^2
> x*y
> a<-cos(x*y)
> a
> a<-sqrt(a)
> a
2.2
Scalaires chaı̂nes
> x<-"il fait"
> y<-"beau"
> paste(x,y)
2.3
2.3.1
Vecteurs
Création
Pour construire un vecteur, différentes méthodes sont possibles. Voici les principales :
1
— Construction par la fonction collecteur c :
> x <- c(5.6,-2,78,42.3)
> x
> x <- c(x,3,c(12,8))
> x
— Construction par l’opérateur séquence “ :” :
> 1:6
— Construction par la fonction seq (séquence régulière) :
> seq(1,6,by=0.5)
> seq(1,6,length=5)
— Construction par la fonction rep (réplication) :
> rep(1,4)
> rep(c(1,2),each=3)
2.3.2
Extraction
L’extraction s’effectue à partir des indices des éléments du vecteur que l’on souhaite extraire :
>
>
>
>
x<-15:25
x[2]
x[2:5]
x[c(1,3,5,7)]
2.3.3
Opérations
Les opérations sur les vecteurs s’effectuent élément par élément :
>
>
>
>
x<-1:5
y<-3:7
x+y
x*y
On peut aussi appliquer des opérateurs booléens ==, !=, >, >=, etc. Par exemple :
> x>3
> x[x<=3]
2.4
2.4.1
Matrices
Création
La principale méthode pour créer une matrice est d’utiliser la fonction matrix qui prend en arguments les coefficients de la matrice ainsi que son nombre de lignes (ou de colonnes) :
>
>
>
>
m <- matrix(1:6,ncol=2)
m
m <- matrix(1:8,nrow=2)
m
Par défaut, R range les valeurs par colonne. Pour ranger par ligne, on utilise l’argument byrow :
> m <- matrix(1:8,nrow=2,byrow=T)
> m
2
2.4.2
Extraction
L’emplacement d’un élément dans une matrice est donné par ses indices de ligne et de colonne :
> m[1,3]
Il est rare qu’on ait besoin de ne sélectionner qu’un élément d’une matrice. Usuellement, on
sélectionne une ou plusieurs lignes et/ou une ou plusieurs colonnes. Exemples :
— Sélection par des entiers positifs :
> m[2,]
— Sélection par des entiers négatifs :
> m[-1,]
> m[1:2,-1]
2.4.3
>
>
>
>
>
Opérations
m <- matrix(1:4,ncol=2)
n <- matrix(3:6,ncol=2,byrow=T)
m+n
m*n
m%*%n
Exemples de fonctions classiques en algèbre linéaire :
> det(m)
> solve(m)
> eigen(m)
2.5
Les listes
Les listes permettent de regrouper différents objets. Elles permettent, par exemple, de stocker dans
un même objet un vecteur et une matrice :
>
>
>
>
vec<-c(1,2,3)
mat<-matrix(1,ncol=2,nrow=3)
L<-list(vec,mat)
L
L’objet L ainsi créé est une liste de longueur 2. Le premier élément est le vecteur vec, le second la
matrice mat. On extrait les éléments d’une liste à l’aide de doubles crochets :
> L[[1]]
Il est également possible, et souvent utile, de donner des noms aux différents éléments d’une liste.
Ceci peut se faire grâce à la fonction names :
> names(L)<-c("vecteur","matrice")
> L
Dans ce cas, l’extraction peut toujours se faire via les doubles crochets ou bien à partir des noms
des différentes composantes, le symbole $ séparant le nom de la liste du nom de la composante :
> L$vecteur
3
De nombreuses fonctions de R renvoient un résultat sous la forme d’une liste, c’est le cas par exemple
de la fonction eigen vue ci-dessus, dont on liste les éléments via la fonction ls. Exemple :
>
>
>
>
>
m <-matrix(1:4,ncol=2)
dec<-eigen(m)
ls(dec)
dec$values
dec$vectors
2.6
Data-frames
Les data-frames sont les objets typiques pour faire des statistiques sous R. Ce sont des listes
particulières dont les composantes sont de même longueur, mais de types éventuellement différents.
Les tableaux de données utilisés en statistique, de forme (individus,variables), doivent être mis sous
la forme d’un data-frame. En effet, un tableau de données est constitué de variables quantitatives
et/ou qualitatives mesurées sur les mêmes individus. Les data-frames permettent de tenir compte
de la nature de chaque variable. Considérons un jeu de données de 6 individus et deux variables :
>
>
>
>
age<-c(17,28,64,8,25,36)
sexe<-c("H","F","F","H","H","F")
donnees<-data.frame(age,sexe)
donnees
L’extraction d’éléments peut se faire :
— comme pour une matrice :
> donnees[3,1]
> donnees[4,]
> donnees[,2]
— comme pour une liste :
> donnees[[2]]
> donnees$sexe
La fonction names permet de retrouver les noms des variables, ce qui peut être utile lorsque le
tableau de données contient beaucoup de variables :
> names(donnees)
3
3.1
Programmer en R
Les boucles (for ou while)
De manière générale, la boucle for s’écrit :
> for (i in vecteur) {
+
expr1
+
expr2
+
...
+ }
Une autre possibilité de boucle est la condition while. Sa syntaxe générale est la suivante :
4
> while (condition) {
+
expr1
+
expr2
+
...
+ }
3.2
Les conditions (if, else)
Sous sa forme générale, la condition if, else s’écrit :
> if (condition) {
+
expr1
+
expr2
+
...
+ } else {
+
expr3
+
expr4
+
...
+ }
Attention, l’ordre else doit être sur la même ligne que l’accolade fermante ”}” de la clause if.
3.3
Les fonctions
Une fonction permet d’effectuer un certain nombre d’instructions R, qui dépendent généralement
d’arguments spécifiés en entrée. La fonction fournit un résultat unique, qui est désigné à l’intérieur
de la fonction par return. En l’absence de cette instruction, la fonction renvoit comme résultat le
dernier résultat obtenu dans celle-ci. Donnons un exemple simple, à savoir la somme des n premiers
entiers. Le nombre n est un entier qui est l’argument d’entrée, le résultat est simplement la somme
demandée :
somme <- function(n) {return(sum(1:n))}
La fonction est ensuite appelée grâce à son nom (ici, somme), suivi du (ou des) argument(s) en
entrée entre parenthèses. Ainsi :
> somme(3)
4
Exercices
On utilisera R Markdown pour répondre à ces exercices et les sauvegarder dans un fichier que l’on
intitulera par exemple “Fiche1”.
4.1
Sélection et tri dans un data-frame
Le data-frame iris est disponible sous R. Il suffit de taper data(iris) pour le charger.
1. Obtenir un résumé de ce jeu de données grâce à la fonction summary. Quelles sont ses
dimensions ?
2. Retrouver les dimensions de ce jeu de données grâce à la fonction dim.
5
3. Visualiser ses cinq premières lignes.
4. Créer un nouveau data-frame, que vous appellerez iris2, comportant uniquement les données
de la modalité versicolor de la variable Species.
5. Trier par ordre croissant les données de iris2 en fonction de la variable Petal.Length (vous
pourrez utiliser la fonction order). Stocker le résultat dans un data-frame iris3. Vérifier le
résultat sur les premières lignes de ce nouveau data-frame grâce à la fonction head.
4.2
Retrouver un nombre mystère
On étudie le nombre de tirages au hasard nécessaires pour retrouver un nombre fixé entre 1 et n.
1. Choisir un entier entre 0 et n = 10, le stocker sous le nom myst. Ensuite, créer une boucle
qui, à chaque itération, tire un entier au hasard entre 0 et n = 10 jusqu’à obtenir myst (on
pourra utiliser la fonction sample dont on consultera l’aide). En sortie de boucle, le nombre
de tirages effectués sera renvoyé.
2. A partir de la question précédente, créer une fonction prenant en entrée les entiers n et myst,
et donnant en sortie le nombre de tirages nécessaires pour retrouver myst.
3. Pour n = 10 et le même myst qu’en première question, appliquer cette fonction M = 100
fois et stocker le résultat dans un vecteur res. Donner la moyenne de res et son écart-type.
Quels sont les résultats attendus théoriquement ?
4.3
La conjecture de Syracuse
L’algorithme de Syracuse, ou algorithme 3x+1, fonctionne comme suit : à partir d’un entier naturel
n ∈ N? , si n est pair on le divise par deux, si n est impair on le multiplie par 3 et on ajoute 1. On
répète ensuite l’opération avec le nombre obtenu, la conjecture étant qu’on finit par atteindre 1 et
boucler indéfiniment : en effet, à partir de ce nombre, on tombe sur le cycle 1,4,2.
1. Créer une fonction syracuse prenant un entier n en entrée, générant cette suite de Syracuse
et s’arrêtant lorsque l’on atteint 1. La fonction renverra en sortie la suite des nombres
obtenus. Indication : on pourra utiliser la fonction cbind pour concaténer la suite obtenue
au fur et à mesure de l’algorithme.
2. Grâce à une boucle, appliquer cette fonction à tous les entiers de 1 à 100 et stocker dans un
vecteur les 100 longueurs des suites associées (on ne demande pas de stocker les 100 suites).
A l’aide de la fonction plot, représenter sur un graphique les 100 longueurs.
3. Parmi les 100 suites créées, quelle est la longueur maximale atteinte ? Pour quel entier est-elle
atteinte ? Pour celui-ci, représenter la suite de Syracuse associée.
6