Représentations graphiques des données

Dans ce TP nous apprendrons à faire des représentations graphiques des données, mais tout d'abord nous allons découvrir R Markdown, un outil simple et pratique pour développer du code et à la fois créer un document bien commenté et agréable à lire.

R Markdown

R Markdown (disponible dans RStudio) est très simple à utiliser et s'apprend en deux minutes !

  • Dans RStudio cliquez sur File $\rightarrow$ New File $\rightarrow$ R Markdown.
  • Choissisez html comme Default Output Format.
  • Un nouveau fichier Markdown s'ouvre avec un exemple qui permet de comprendre la syntaxe.
  • Pour produire le fichier html, il faut cliquer sur Knit HTML.

Exercice 0

  1. Pour vous familiariser avec R Markdown, jouer un peu avec les commandes dans l'exemple de RStudio. Vous pouvez également regarder le fichier rmarkdown-cheatsheet.pdf disponible sur Sakai.
  2. Télécharger et exécuter le fichier Rmd_template.Rmd et étudier-le. Ce template contient de nombreux exemples qui vous pourront être utiles, car désormais vous devez utiliser R Markdown pour faire les exercices de TP.
  3. Créer un nouveau fichier Rmd pour les exercices de cette séance.

Nuages des points et la fonction plot

La fonction principale permettant de tracer des graphiques avec R est la fonction plot.

Elle prend deux vecteurs x et y en arguments avec les coordonnées des points à tracer.

L'option type permet d'indiquer à R si il faut tracer un nuage des points (par défaut) ou s'il faut relier les points par une ligne en utilisant type='l' (c'est la lettre l et pas le chiffre 1).

Reprenons les données ToothGrowth :

In [ ]:
library(datasets)
attach(ToothGrowth)
plot(len,dose)
In [ ]:
len_ord <- sort(len)
plot(len_ord,len_ord^2,type='l')

Les nombreuses options de la fonction plot permettent de choisir les propriétés du graphique. Voici une liste des principales options de la fonction plot :

  • col spécifie la couleur (p.ex. col='green' ou col=3 pour des points/lignes verts)
  • pch permet de jouer sur la forme des points : pch=0 pour des carreaux, pch=1 pour des cercles (par défaut), pch=2 pour des triangles etc.
  • lty permet de choisir le type de ligne : par défaut lty=1 le trait est continu, mais il est aussi possible d'obtenir des tirets (lty=2), des pointillés (lty=3), etc.
  • lwd permet de régler l'épaisseur du trait
  • xlab et ylab permet de définir le nom des axes
  • main permet d'ajouter un titre
  • xlim et ylim permet de fixer la limite inférieure et supérieure des axes
In [ ]:
plot(len_ord,len_ord^2,type='l',col=5,lwd=3,main = 'en couleur',xlim=c(-20,35))

Exercice 1

Pour les données des cathédrales représenter le nuage des points hauteur et longeur. Ajouter un titre aux axes, jouer avec la couleur et la forme de points.

Tout appel de la fonction plot efface le graphique précédent. Afin de superposer un nuage de points ou une courbe au graphique existant, on utilise une des fonctions suivantes :

  • points(x,y,...) pour superposer un nuage de points
  • lines(x,y,...) pour superposer une nouvelle courbe
  • abline(a,b,...) pour superposer une droite avec ordonnée à l'origine a et pente b

A la place des trois points ... on peut préciser les mêmes options graphiques que celles présentées pour la fonction plot().

In [ ]:
plot(len_ord,len_ord^2,type='l',col=5,lwd=3,main = 'en couleur')
points(runif(100,0,35),runif(100,0,1000),pch=8)
abline(0,1000/35,col=2,lty=4)

Exercice 2

  1. Représenter le même nuage des points de la hauteur et longueur des cathédrales en deux couleurs avec une couleur par style. Pour cela on peut d'abord tracer tous les points des cathédrales gothiques en une couleur et ensuite superposer à ce graphique les points des cathédrales romanes en une autre couleur. Rajouter une légende avec la fonction legend pour expliquer le code couleur.
  2. Rajouter la droite de régression $x\mapsto \hat a + \hat b x$ au graphique. Rappel : dans le modèle linéaire de la régression simple avec $Y=\mathbf X\left(a \atop b\right)+\varepsilon$ où $\mathbf X=\left(\mathbf{1},X\right)$ et $\mathbf{1} =(1,\dots,1)^T$ et $X=(x_1,\dots,x_n)^T$ l'estimateur par la méthode des moindres carrés de $\left(a \atop b\right)$ est donné par $$\hat b = \frac{s_{xy}}{s_x^2}\quad\text{ et }\qquad\hat a= \bar y - \bar x \hat b,$$ où $s_x^2$ est la variance empirique des $x_i$ et $s_{xy}$ la covariance empirique des $x_i$ et $y_i$.

Histogramme

La fonction hist est utilisée pour tracer des histogrammes. Essayons-le :

In [ ]:
hist(len)

Dans le cours, nous avons défini l'histogramme comme une fonction qui intègre à 1, ce qui n'est visiblement pas le cas de la fonction tracée ci-dessus. En fait, la commande hist(len) représente le nombre d'observations (les effectifs) par sous-intervalle. L'option frequ=FALSE permet de changer l'échelle afin d'obtenir un histogramme comme défini dans le cours.

In [ ]:
hist(len,freq=FALSE)

L'histogramme est une approximation de la densité de la loi des données. Afin de comparer la distribution des données à une loi théorique, on peut superposer la densité de la loi théorique à l'histogramme des observations. Pour "tester" si la loi de la longueur de cathédrale est une loi normale, on rajoute la densité de la loi normale de paramètres $\mu=$ moyenne empirique de la longueur et $\sigma^2=$ variance empirique de la longueur. Pour cela on utilise la fonction dnorm (pour la densité de la loi normale) et de la fonction curve (pour tracer une courbe).

In [ ]:
mu <- mean(len)
sig <- sd(len)
hist(len,freq=FALSE,ylim=c(0,.06),xlim=c(-10,50))
curve(dnorm(x,mu,sig),add=TRUE)

L'adéquation entre l'histogramme et la densité n'est pas bonne. On dirait que la loi de la longueur de cathédrale est plus concentrée autour de la moyenne qu'une loi normale et le "pic" de l'histogramme est bien trop large pour une gaussienne.

La fonction hist a d'autres paramètres optionnels qui permettent de paramétrer précisement la forme de l'histogramme, notamment l'option breaks pour définir la partition utilisée (voir l'aide pour les détails).

Exercice 3

  1. Tracer l'histogramme de la variable hauteur de cathédrale.
  2. Modifier le nombre de sous-intervalles utilisé pour construire l'histogramme. Tester des différentes tailles de partition. D'après vous, quel est le nombre optimal de sous-intervalles ?
  3. Même question pour l'histogramme de la variable longueur.
  4. Superposer à l'histogramme de la longueur de cathédrale la densité d'une loi normale. Au vu du graphique, semble-t-il envisageable de modéliser la longueur de cathédrale par une loi normale ?

Fonction de répartition empirique

La fonction ecdf calcule la fonction de répartition d'un vecteur d'observations. Pour la tracer, on tape :

In [ ]:
Fn <- ecdf(len)
plot(Fn)

Exercice 4

Tracer la fonction de répartion empirique de la hauteur. Rajouter la fonction de répartition de la loi normale de paramètre $\mu=$ moyenne empirique de la hauteur et $\sigma^2=$ variance empirique de la hauteur en utilisant la fonction pnorm. Commentez le graphique.

QQ plot

Le QQ-plot est un outil graphique pour comparer la distribution de deux vecteurs. S'ils ont la même distribution, les points s'alignent sur la première bissectrice. La commande qqplot(x,y) trace le QQ-plot des vecteurs x et y.

Pour mieux juger l'adéquation des distributions, on peut rajouter la première bissectrice par la commande abline(0,1)

In [ ]:
x <- rnorm(100,10,1)
y <- runif(60,6,14)
qqplot(x,y) 
abline(0,1)

La commande qqnorm(x) trace le QQ-plot qui compare la loi du vecteur x à la loi normale standard $\mathcal N(0,1)$. Si les points s'alignent sur la première bissectrice, les observations suivent la loi normale $\mathcal N(0,1)$.

Pour vérifier si la loi des observations appartient à la famille de lois normales, il est courant de standardiser les données de façon suivante

x.std <- (x-mean(x))/sd(x)

et puis de tracer le QQ-plot qui compare x.std à la loi normale standard par la commande qqnorm(x.std). Si les points s'alignent sur la première bissectrice, la loi de x est (à peu près) normale.

Exercice 5

  1. Comparer les lois de la hauteur et de la longueur des cathédrales par un QQ-plot.
  2. Tracer des QQ-plots pour juger si les variables hauteur et longueur suivent une loi normale.

Boxplot

La commande boxplot(x) trace le boxplot du vecteur x. Exemple :

In [ ]:
boxplot(len)

Pour tracer les boxplots de plusieurs variables (par exemple des vecteurs x et y) côte à côte, on écrit boxplot(x,y).

Quand on passe à la fonction boxplot un tableau en argument, R trace un boxplot pour chaque variable (chaque colonne). Parfois des variables qui ne sont pas de type numérique sont automatiquement transformées pour pouvoir tracer un boxplot. Mais attention : ces transformations automatiques n'ont pas toujours beaucoup de sens comme dans l'exemple ci-dessous pour la variable supp.

In [ ]:
boxplot(ToothGrowth)

Souvent on souhaite comparer les boxplots d'une même variable pour des différents sous-groupes. Cela est facile si la variable qui définie les groupes est de type facteur (factor). La commande qui trace tous les boxplots pour les différents groupes utilise la fonction plot et elle est de la forme

plot(x ~ var.facteur)

In [ ]:
class(supp)
In [ ]:
plot(len~supp)

Exercice 6

  1. Tracer les boxplots des variables hauteur, longueur et rapport longueur/hauteur dans une seule fenêtre et commentez. Utiliser l'option names de la fonction boxplot afin d'indiquer les noms de variable dans le graphique.
  2. Vérifier avec la fonction class que la variable style est de type facteur. Tracer les boxplots de chacune des variables hauteur, longueur et rapport longueur/hauteur pour les deux styles. Commentez.

Devoir à rendre

Les données

On considère un tableau de données sur des personnes anorexiques qui ont été suivi pendant quelque temps. Certaines patientes ont suivis une thérapie (soit une thérapie familiale 'FT', soit la thérapie Cognitive Behavioural Treatment 'CBT'), d'autres n'ont suivi aucun traitement (c'est le groupe de contrôle 'Cont' ). Le tableau contient pour chaque individu le type de la thérapie et son poids au début et à la fin de l'étude (en livre).

  1. Téléchargez le fichier DonneesAnorexie.txt et importez les données sous forme d'un tableau (dataframe). Familiarisez-vous avec les données.
  2. Changez l'unité de mesure du livre au kilogramme (1 livre = 0.453 kg).

Analyse des données

Ce tableau de données sur l'anorexie a été établi lors d'une étude clinique. L'objectif de l'étude est de comparer les trois types de traitements et leurs effets sur les patients. Quelle thérapie est la plus efficace? Il-y-a t'il des traitements qui n'ont pas de résultat positif voire négatif sur la santé des patients?

Nous formulons ici quelques questions précises, auxquelles vous devez réfléchir et chercher des réponses en utilisant des outils de la statistique descriptive, notamment des représentations graphiques. C'est à vous de choisir les bons outils pour répondre aux cinq questions suivantes.

Question 1

Tout d'abord, on veut savoir si l'étude a été correctement menée. En particulier, on veut vérifier si la composition des trois groupes de patients qui suivent des traitements différents à été bien faite. Plus précisément, afin de pouvoir comparer les résultats, il faut qu'au début de l'étude les trois groupes soient similaires. Comparer les nombres de patients par groupe, et comparer les distributions du poids des patients au début de l'étude.

Question 2

Vu que les trois groupes ne sont pas identiques au début de l'étude, il se pose la question comment évaluer le succès d'un traitement. Est-ce raisonnable de comparer simplement le poids des patients à la fin d'étude? Ou ne serait-il pas plus pertinent de comparer les variations de poids durant l'étude (c'est-à-dire les prises/pertes de poids)?

Question 3

Le groupe de contrôle ('Cont') est constitué de patients qui n'ont pas suivi de traitement particulier. Comment a évolué le poids de ses patients durant l'étude?

Question 4

Etudier l'impact des différents traitements sur le poids des patients. Comparer les trois méthodes. Quel traitement semble le meilleur?

Question 5

Analyser la distribution des différentes variables liées aux poids par type de traitement. Est-ce envisageable de les modéliser par une loi normale.

Modalités du devoir

Le devoir doit être préparé en binôme.

Il est dû au plus tard le 22 novembre avant minuit. Tout document rendu après cette date ne sera pas noté.

Le devoir est à déposer dans votre boîte de dépôt Sakai.

Vous devez indiquer le nom de chacun des deux auteurs sur les documents à rendre.

Vous devez rendre un rapport pour répondre aux Questions 1 à 5 ci-desssus. Faites comme si vous travaillez dans un hôpital et que vous rédigez un rapport pour votre supérieur, qui s'intéresse avant tout aux résultats et aux interprétations statistiques, et beaucoup moins au code. Le rapport doit bien sûr contenir des figures. Soyez précis et concis à la fois.

Utilisez R Markdown pour rédiger votre rapport.

Deposez dans la boîte à dépôt le fichier Rmd ainsi que le fichier html.

In [ ]: