Le Notebook R

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.

In [ ]:
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.

In [ ]:

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.

Les vecteurs

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):

In [ ]:
vec1 <- c(5,8,3)
vec1

On peut également concaténer des vecteurs :

In [ ]:
vec2 <- c(vec1,0,vec1)
vec2

Voici quelques exemples de calcul avec des vecteurs :

In [ ]:
vec1+2
In [ ]:
5*vec1
In [ ]:
vec1+vec1
In [ ]:
vec1*vec1
In [ ]:
vec1^2

Vous constatez que c'est très simple. Mais attention aux dimensions des vecteurs:

In [ ]:
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 !).

Fonctions mathématiques pour les vecteurs

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:

  • sum
  • prod
  • length
  • min
  • max
  • which.min
  • which.max
  • sort
  • order
  • mean
  • var
  • sd
  • median

Exercice 1

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.)

Générer des pseudo-variables aléatoires

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]$:

In [ ]:
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:

In [ ]:
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:

In [ ]:
n <- 20
mu <- -5
sig <- sqrt(2)
rnorm(n,mu,sig)

Exercice 2

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.

  • Tout d'abord, créez un nouveau dossier (nommé, par exemple, TPstatistique) dans lequel vous allez enregistrer tous les fichiers associés à ce cours.
  • Ensuite, changez le répertoire de travail pour ce nouveau dossier. Pour cela, cliquez dans RStudio sur Session $\rightarrow$ Set Working Directory $\rightarrow$ Choose Directory et puis sélectionner votre dossier TPstatistique.
  • Puis, ouvrez un nouveau script: File $\rightarrow$ New File $\rightarrow$ R Script
  • Ecrivez en première ligne du script un commentaire du genre '# Exercice 3 du TP 1'. Rappel: tout commentaire commence par le symbole #, et c'est du texte qui ne sera pas interpréter par R lors de l'exécution de cette ligne.
  • Enfin, cliquez sur le bouton dans la barre à outils pour enregistrer le script dans votre dossier TPstatistique. Choissisez un nom de fichier à peu près intelligent, comme p. ex. exo_TP_1.

Exercice 3

La moyenne empirique est un estimateur de la moyenne. Vérifions empiriquement la qualité de cet estimateur par des simulations.

  • Considérons la loi normale $\mathcal N(10,1)$. Générez un échantillon de taille 20 et calculez la moyenne empirique associée. Comparez le résultat à la moyenne théorique. Répétez plusieurs fois les mêmes instructions afin de vérifier si la valeur de la moyenne empirique est à peu près stable sur des échantillons différents.
  • Faites la même chose pour la loi normale $\mathcal N(10,10)$ et des échantillons de taille $20$. Qu'observez vous?
  • La loi normale est une loi symétrique et donc son coefficient d'asymétrie vaut 0. Vérifiez que le coefficient d'asymétrie empirique $\alpha_{\mathbf x}$ est près de 0 pour des échantillons d'une loi normale. Testez des lois normales de différents paramètres et des tailles d'échantillon variées. Rappelons la définition du coefficient d'asymétrie empirique $\alpha_{\mathbf x}$ associé à l'échantillon $(X_1,\dots,X_n)$: $$\alpha_{\mathbf x} =\frac{\frac1n\sum_{i=1}^n(X_i-\bar X_n)^3}{s_{\mathbf x}^3},\qquad\text{où }\qquad s_{\mathbf x}=\sqrt{\frac1n\sum_{i=1}^n(X_i-\bar X_n)^2}.$$
  • Même question pour le coefficient d'aplatissement empirique $\beta_{\mathbf x}$ d'un échantillon de la loi normale qui est censé d'être près de 0. Rappelons sa définition: $$\beta_{\mathbf x} =\frac{\frac1n\sum_{i=1}^n(X_i-\bar X_n)^4}{s_{\mathbf x}^4}-3.$$
  • Ajoutez un commentaire dans votre script avec un résumé de vos conclusions.

Exercice 4

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).

  • Pour tout $k$ dans $\{1, 10, 100,1000\}$ générez un échantillon de taille $1000$ de la loi de $\chi^2_k$, et comparez la moyenne empirique associée à la moyenne de la loi normale $\mathcal N(k,2k)$. Commentez.
  • Même question pour la variance empirique $s_{\mathbf x}^2$: Pour tout $k$ dans $\{1, 10, 100,1000\}$ générez un échantillon de taille $1000$ de la loi de $\chi^2_k$, et comparez la variance empirique associée à la variance de la loi normale $\mathcal N(k,2k)$. Commentez.
  • Même question pour le coefficient d'asymétrie.
  • Même question pour le coefficient d'appaltissement.
  • Ajoutez un commentaire dans votre script avec un résumé de vos conclusions.
In [ ]: