Ceci est un notebook. Le notebook est un document interactif, qui permet de mélanger du texte et des lignes de code (pour nous, c'est du code R). Il est possible d'exécuter le code, de le modifier, et d'ajouter (ou de supprimer) des cellules de code ou de commentaire. Vous avez la possibilité d'enregistrer les modifications par le bouton correspondant dans la barre à outils en haut.
Dans la cellule de code suivante, vous voyez des instructions en R. Pour les exécuter, il faut d'abord cliquer dans la cellule pour la sélectionner, puis appuyer sur la fléche vers la droite dans la barre à outils.
x <- 17
x
y <- x + 3
y
Vous voyez que R exécute les instruction et les résultats s'affichent juste en-dessous de la cellule.
Les variables x et y sont désormais définies et connues à R. Dans la suite, vous pouvez les utiliser et travailler avec. Autrement dit, les notebooks sont un moyen pour excéctuer du code progressivement. (Bien sûr, il est aussi possible d'exécuter les instructions d'un script R au fur et à mesure, mais c'est plus joli dans un notebook.)
Maintenant, c'est à vous. Dans la cellule suivante, calculez le carré de y et exécutez l'instruction.
Au fur et à mesure que vous exécutez des cellules de code, vous voyez apparaître des numéros entre crochets à gauche de la cellule. Ces numéros vous aident à garder une trace de l'ordre dans lequel vous exécutez les cellules. Juste pour voir, revenez à la première cellule de code et modifiez la valeur de y. Puis, réexécutez la cellule. Cela change la sortie de la première cellule, mais pas de la deuxième (alors que la valeur de y a changé). Les numéros entre chrochets vous permettent donc de vous répérer plus facilement.
Parfois, quand on vient d'exécuter plein de cellules, on perd un peu le contrôle, et on ne sait plus quelles sont les valeurs actuelles des différentes variables. Dans ce cas, il vaut mieux de reprendre à zéro. Pour cela, sélectionnez Kernel en haut de la page et choissisez Restart. Vous pouvez observer que tous les numéros entre crochets disparaissent ainsi que toutes les sorties en-dessous des cellules de code. Un Restart du Kernel revient alors à supprimer tous les objets créés.
Vous pouvez modifier un notebook comme bon vous semble. P. ex. pour ajouter une cellule, cliquer sur le symbole + dans la barre à outils. Cela crée une nouvelle cellule juste en-dessous de la dernière cellule sélectionnée. Par défaut, il s'agit d'une cellule de code dans laquelle vous pouvez écrire des instructions en R. Si la nouvelle cellule doit contenir du texte, il suffit de modifier son type par le menu déroulant en changeant Code en Markdown. Le Markdown permet d'écrire du texte, le formatage est très simple. Si cela vous intéresse, double-cliquez sur les cellules de type Markdown dans ce notebook pour voir comment ajouter un titre, mettre du texte en gras ou en italique, créer une liste etc. N'oubliez pas qu'il faut aussi exécuter les cellules Markdown en appuyant sur la flèche vers la droite dans la barre à outils.
Nous avons déjà vu comment définir une variable qui stocke une valeur numérique. En statistique, on aura plutôt besoin de vecteurs de valeurs numériques. On peut en créer par la fonction c( ) (c comme concaténer):
vec1 <- c(5,8,3)
vec1
On peut également concaténer des vecteurs :
vec2 <- c(vec1,0,vec1)
vec2
Voici quelques exemples de calcul avec des vecteurs :
vec1+2
5*vec1
vec1+vec1
vec1*vec1
vec1^2
Vous constatez que c'est très simple. Mais attention aux dimensions des vecteurs:
vec1+vec2
Vous constatez que malgré le message d'erreur (prenez l'habitude de les lire !), R produit un résultat. Ici, R répète le vecteur vec1 deux fois afin de créer un vecteur de la taille du vecteur vec2. C'est une technique courante de R lorsque les dimensions ne correspondent pas : répéter l'objet le plus petit jusqu'à ce que le calcul souhaité fait sens. (Mais assurez vous que ça correspond bien au calcul que vous souhaitez faire !).
En R il existe un grand nombre de fonctions mathématiques prédéfinies et très utiles en pratique. Voici une liste de fonctions pour vecteurs:
Essayez de comprendre chacune des fonctions ci-dessus. Pour cela, lancez RStudio, définissez quelques vecteurs jouets, appliquez les fonctions ci-dessus et essayez de comprendre la sortie. Si vous n'arrivez pas à comprendre une fonction, consultez l'aide en utilisant la fonction help() ou la commande ? suivi du nom de la fonction qui vous intéresse. (L'application RStudio est accessible depuis le menu Pédagogie $\Rightarrow$ Mathématiques disponible sur le bureau.)
En R il existe des fonctions qui génèrent des réalisations de variables aléatoires d'une loi donnée. Par exemple, la commande suivante génère 10 réalisations de la loi uniforme $U[0,1]$:
runif(10)
Exéctuez la commande de nouveau et constatez que les valeurs changent ! En fait, la fonction runif( ) est un générateur de pseudo-variables aléatoires. On dit pseudo, parce qu'on a l'impression que ce sont des réalisations d'une vraie variable aléatoire. (C'est tout un champs de recherche de fabriquer des générateurs de pseudo-variables aléatoires (c'est-à-dire des algorithmes) qui imitent au mieux le vrai aléa.)
De même, il existe un générateur des (pseudo-)réalisations de la loi normale standard:
rnorm(5)
Vous avez constaté que l'argument des fonctions runif et rnorm est le nombre de réalisations souhaité.
Pour générer des réalisations de la loi normale $\mathcal N(\mu,\sigma^2)$ de moyenne $\mu$ et de variance $\sigma^2$, on utilise toujours la fonction rnorm( ) avec deux arguments supplémentaires pour indiquer les valeurs souhaitées des paramètres de la loi normale. Notez qu'en R ce sont les valeurs de la moyenne $\mu$ et de l'écart-type $\sigma$ (et non de la variance $\sigma^2$) qu'il faut passer à la fonction rnorm( ). Ainsi, on obtient $20$ réalisations de la loi normale $\mathcal N(-5,2)$ par les instructions:
n <- 20
mu <- -5
sig <- sqrt(2)
rnorm(n,mu,sig)
A partir de l'exercice suivant, nous voulons écrire toutes nos commandes dans un script R. Pour le faire proprement, il y a quelques petites démarches préparatives à faire.
La moyenne empirique est un estimateur de la moyenne. Vérifions empiriquement la qualité de cet estimateur par des simulations.
Soient $X_1,X_2,\dots$ des variables aléatoires indépendantes de loi normale standard. Posons $Y_k = \sum_{i=1}^kX_i^2$. Souvenez-vous que la loi de $Y_k$ est la loi du khi-deux $\chi^2_k$ à $k$ degrés de liberté.
D'après le théorème central limite, on a $$\sqrt{\frac k2}\left(\frac1k \sum_{i=1}^kX_i^2 -1\right)= \frac1{\sqrt{ 2k}} (Y_k-k) \stackrel{\mathcal L}{\longrightarrow}\mathcal N(0,1),\qquad k\to\infty.$$ On en déduit que la loi de $Y_k$ est approximativement la loi normale $\mathcal N(k,2k)$ pour $k$ suffisamment grand: $$\chi^2_k\approx\mathcal N(k,2k).$$
Le but de cet exercice consiste à vérifier empiriquement à partir de quelle valeur de $k$ cette approximation est bonne. Plus précisément, nous allons comparer des indicateurs statistiques de la loi de $Y_k$ aux valeurs théoriques correspondantes de la loi normale $\mathcal N(k,2k)$.
En R on génère $n$ réalisations de la loi du khi-deux $\chi^2_d$ à $d$ degrés de liberté par la commande rchisq(n,d).