Ce document a été généré directement depuis RStudio en utilisant l’outil Markdown. La version .pdf se trouve ici mais elle ne permet pas de se rendre compte de l’interactivité de certains graphiques…

Packages à installer

Depuis le CRAN :

install.packages(c("devtools",      # devtools
                   "dplyr",         # piping
                   "gapminder",     # données gapminder
                   "ggcorrplot",    # graphiques corrélation
                   "ggridges",      # données ggridges
                   "ggplot2",       # graphiques ggplot2
                   "ggpol",         # jitter et boxplot
                   "kableExtra"     # tableaux customisés 
                   "RColorBrewer",  # couleurs 
                   "stargazer",     # tableaux 
                   "survival",      # modèle de survie
                   "survminer",     # plot de survie
                   "plotly",        # graphiques interractifs 
                   "vcd",           # mosaic plot
                   "visreg"),        # effets conditionnels des modèles
                 dependencies = TRUE)

1 Fonctions graphiques de base VS ggplot2

Il est possible de réaliser des graphiques statistiques sous R de multiples façons. Même si de nombreuses fonctions provenant de différents packages font la même chose, deux stratégies semblent se dégager pour réaliser des graphiques statistiques :

En général, les utilisateurs décident d’adopter l’une ou l’autre façon de faire, rarement les deux. L’idée de cette section est d’essayer de faire une revue des avantages de l’un et de l’autre et si possible déterminer à quel moment il est intéressant d’utiliser l’un plutôt que l’autre.

La stratégie a été la suivante : une grande majorité des utilisateurs de ggplot2 choisissent d’utiliser ce package parce que celui-ci leur permet de réaliser des graphiques élégants en modifiant le moins possible les paramétrages par défaut. On va donc partir de graphiques obtenus avec ggplot2, supposés “élégants” et essayer d’obtenir des graphiques équivalents en utilisant la syntaxe de base.

Cette section est fortement inspirée de cette page :

Pour une introduction aux graphiques de base et au package ggplot2 :

1.1 Graphiques standards

Par graphique standard, on entend les graphiques de type diagrame en barre, histogramme, nuage de points, boîtes à moustaches parallèles, etc. Dans le contexte où on compare les fonctions graphiques de base à celles du package ggplot2, les graphiques standards seront opposés à des graphiques de types “conditionnels”. Les graphiques conditionnels correspondent à des graphiques standards qu’on va réaliser conditionnellement à une variable souvent qualitative.

1.1.1 Diagramme en barre

On va commencer par un diagramme en barre. On va utiliser les données diamonds qui sont incluses dans le package ggplot2 et qui donnent des informations sur la vente de plus de 50000 diamants. Parmi les variables observées, le prix, le carat, la qualité de la coupe, la couleur, etc.

## Le chargement a nécessité le package : ggplot2

On rappelle qu’avec ggplot2, les commandes s’enchaînent avec l’opérateur +. La première opération consiste à spécifier le jeu de données sur lequel on travaille (fonction ggplot()). Ensuite, on spécifie le nom de la variable qui nous intéresse (avec la fonction aes()). Une des spécificités de l’univers tidyverse est qu’une fois le nom du data.frame spécifié, il suffit d’appeler directement les variables par leurs noms, sans préciser à quelle data.frame elles appartiennent.

Enfin, on donne la fonction correspondant au graphique que l’on souhaite représenter. Pour un diagramme en barre, cela se fait avec la fonction geom_bar(). Si on souhaite utiliser des couleurs différentes par barre, une façon de le faire sans avoir à spécifier aucun nom de couleur, consiste à ajouter dans la fonctions aes() l’option fill= suivi du nom d’une variable qualitative que l’on souhaite représenter. Il peut s’agir de la même variable pour laquelle on souhaite tracer des barres, mais il peut aussi s’agir d’une autre variable (dans ce cas, chaque barre sera découpée par étages selon les modalités de la seconde variable).

Pour représenter un diagramme en barres avec les graphiques de base, on a besoin de construire une table de contingences associée à une variable qualitative.

Une des caractéristiques de ggplot2 est de représenter des lignes verticales et horizontales pour aider à la lecture du graphique. Pour faire cela avec les graphiques de base, on peut utiliser la fonction grid() qui précise le nombre de barres horizontales et verticales à représenter ou bien utiliser la fonction abline() qui donne les coordonnées où tracer les droites. Pour représenter la graduation de l’axe des ordonnées horizontalement, on utilise l’option las=1 dans les paramatrès généraux de la fonction par().

Pour ce type de graphique, il n’y a pas de gros écarts en termes de nombre de lignes de codes entre les deux styles de graphique.

Remarque : en revanche, pour reproduire exactement le même graphique (fond en gris, marges, etc.) en utilisant une syntaxe de base, cela demanderait un peu plus de travail. On le fait ici pour le barplot pour que l’utilisateur se rende compte des lignes de codes qui sont implicitement exécutées dans l’appel de fonctions de type ggplot2 :

1.1.2 Séries temporelles

On va considérer une série temporelle mensuelle, supposons qu’il s’agit d’un indice boursier aggrégé mensuellement :

Pour associer des dates à ces valeurs, nous allons utiliser le type d’objet Date. On utilise ici une méthode générique de la fonction seq() appliquée à des dates :

Pour représenter cette série avec ggplot2, il faut d’abord créer un data.frame :

Ensuite, il suffit d’utiliser de préciser dans la fonction aes() que la variable date_serie est associée à x et la variable serie à y. C’est la fonction geom_line() qui indique qu’on va relier les points par des lignes brisées :

En utilisant les graphiques de base, cela se fait assez bien car le format Date est également reconnu par la fonction générique plot(). On obtient donc un résultat similaire avec seulement quelques lignes de code supplémentaire.

1.1.3 Histogramme et fonction de densité

Pour représenter un hstogramme et une densité avec ggplot2, cela se fait avec les fonctions geom_histogram() et geom_density(). L’option bins= dans la fonction geom_histogram() permet de donner le nombre de barres. L’option adjust = permet d’ajuster le degré de lissage de la foncion non paramétrique de la densité. Pour ajouter la fonction paramétrique d’une loi gaussienne, on utilise la fonction stat_function() :

En utilisant les fonctions de base, on peut reproduire quelque chose d’équivalent sans que cela soit trop coûteux. A noter toutefois que l’option nclass= de la fonction hist() ne donnera pas nécessairement exactement le nombre de classes souhaité, car un algorithme est utilisé pour déterminer ce nombre.

1.1.4 Nuage de points

Afin d’avoir des représentations graphiques moins lourdes, on va se restreindre à un sous-échantillon de taille 5000. En effet, pour certains graphiques, lorsque le nombre d’observations est important, sa lecture devient difficile.

Pour représenter un nuage de points et une droite de régression non paramétrique, cela se fait dans ggplot2 avec les fonctions geom_point() et geom_smooth(). Cette dernière permet de tracer une droite de régression linéaire (option method=“lm”) ou alors une droite de régression non paramétrique (option method=“loess”), basée sur les modèles GAM (Hastie et Tibshirani, 1986). Un intervalle de confiance est également représenté par défaut pour cette dernière méthode.

## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'

En utilisant les fonctions de base, il faut passer par les fonctions lm() pour calculer les coefficients de la droite de régression linéaire et la fonction loess() permet d’obtenir une droite de régression non paramétrique basée quant à elle sur la méthode des polynômes locaux. Pour représenter une droite de régression non paramétrique basée sur la méthode GAM, le lecteur pourra se référer au package gam.

1.1.5 Boîtes à moustaches parallèles

Avec ggplot2, les boîtes à moustaches parallèles se font à partir de la fonction geom_boxplot() :

Pour obtenir un graphique similaire avec les fonctions de base, on peut utiliser la fonction boxplot() :

Conclusion : pour des graphiques “standards”, on constate donc que le match “fonctions de base” VS “fonctions ggplot2” n’a pas vraiment de gagnants. Par ailleurs, ici nous sommes restés sur des graphiques simples avec un minimum d’onrnementations. Le package ggplot2 repose sur une représentations de données de type data.frame; du coup, pour faire certains ajouts tels que des points particuliers, des lignes brisées ou des étiquettes, cela peut s’avérer plus compliqué que d’utiliser simplement les fonctions graphiques de base. Malheureusement, il n’est pas possible de combiner les fonctions graphiques de base avec les fonctions du package ggplot2.

1.2 Graphiques conditionnels

Un avantage du package ggplot2 sur les fonctions graphiques de base repose sur la très bonne gestion des graphiques conditionnels. Les graphiques conditionnels correspondent à des graphiques standards qu’on va réaliser conditionnellement à une variable souvent qualitative.

Il y a deux façons de faire un graphique conditionnel :

  • on va afficher dans un même graphique une information relative aux modalités d’une variable qualitative (ex : dans un nuage de points, on va représenter une droite de régression associée à chacune des modalités d’une variable qualitative).

  • on va faire autant de graphiques qu’il existe de modalités d’une variable qualitative (ex : on va faire un histogramme d’une variable quantitative pour chaque modalité d’une variable qualitative).

1.2.1 Utilisation des options fill= et colour=

L’utilisation des options fill= et colour= à l’intérieur de la fonction aes() ou des fonctions de type geom_XXX(), vont permettre de réaliser le premier type de graphique.

1.2.1.1 Fonctions de densités

On souhaite savoir si la distribution de la price est la même selon les modalités prises par la variable qualitative cut. Pour ce faire, on va ajouter l’option fill= dans la fonction aes() suivie du nom de la variable qualitative. L’option fill= permet de remplir chaque courbe de densité par une couleur prédifinie dans ggplot2. Si on avait utilisé l’option colour=, on aurait obtenu uniquement des traits de couleurs différentes. L’option alpha= permet quant à elle de définir le degré de transparence des couleurs.

Pour réaliser un tel graphique en utilisant les fonctions de base, cela nécessite de réaliser les étapes suivantes :

  • découper la variable quantitative en fonction des modalités, ceci pouvant se faire avec la fonction split(),

  • appliquer la fonction density() sur chaque sous-échantillon,

  • ouvrir une fenêtre graphique en définissant correctement les marges,

  • représenter une courbe de densité par modalité en utilisant une couleur pour chaque courbe à définir (pour obtenir les mêmes couleurs que celles obtenues proposées dans ggplot2, on pourra voir ce lien : https://stackoverflow.com/questions/8197559/emulate-ggplot2-default-color-palette).

Conclusion : on voit donc que ggplot2 a très bien pris en compte la représentation de graphiques conditionnellement à une variable qualitative. Un autre atout est la gestion des paramètres graphiques par défaut (de type couleur, légende, etc). C’est pour ces deux raisons que ggplot2 rencontre un tel succès. Il est important de souligner que derrière l’utilisation de toutes ces fonctions, se cachent des tas de lignes de codes qui rendent possibles cette utilisation simplifiée.

Remarque : pour remplir les aires sous les courbes de densités avec les graphiques de base, on aurait pu utiliser la fonction polygon()

1.2.1.2 Nuages de points

L’utilisation d’une variable qualitative conditionnelle peut s’avérer très intéressante à utiliser sur un nuage de points, pour savoir notamment si le lien entre les variables quantitatives \(Y\) et \(X\) sont les mêmes en fonction d’une variable qualitative. Ici on a changé la palette de couleur en utilisant les palettes de couleurs inspirés du package RColorBrewer (voir la note suivante concernant les palettes de couleurs style RColorBrewer : https://www.nceas.ucsb.edu/~frazier/RSpatialGuides/colorPaletteCheatsheet.pdf).

## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

Pour réaliser un graphique équivalent avec les fonctions graphiques de base, il faut procéder comme on l’a fait dans l’exemple précédent. On splite dans un premier temps le data.frame en fonction de la variable qualitative, on applique ensuite les fonctions predict() et loess() aux sous-échantillons avant de représenter les courbes les unes après les autres en utilisant les couleurs choisies.

## Le chargement a nécessité le package : RColorBrewer

1.2.1.3 Boîtes à moustaches

Pour réaliser des boîtes à moustache parallèles conditionnelement à une variable qualitative, cela se fait en seulement 3 lignes de codes avec ggplot2.

La fonction par défaut boxplot() permet de faire quelque chose de similaire en paramétrant suffisament bien les options. Pour afficher la boîte de légendes en-dehors du cadre, on a utilisé l’option xpd=T et modifié le paramètre de la marge à droite.

1.2.2 Utilisation des facet

L’utilisation des fonctions de type facet_XXX() dans ggplot2 permet de créer autant de fenêtre graphiques qu’il y a de modalités dans la variable conditionnelle.

Si on reprend l’exemple précédent de la distribution conditionelle de la variable price en fonction de la variable cut, plutôt que de représenter toutes les distributions dans la même fenêtre graphique, on peut vouloir représenter chaque distribution dans une fenêtre graphique différente. Cela se fait avec les fonctions de type facet_XXX().

Réaliser le type de graphique ci-dessus avec les fonctions de base de R devient extrêmement compliqué : il faut d’abord découper la fenêtre en 6, puis utiliser une boucle for pour appeler la fonction plot() dans chaque sous-compartiment, etc.. Avant l’arrivée du package ggplot2, le package lattice qui fait partie des packages de base, permet également de faire des graphiques conditionnels en quelques lignes de codes. Ici, nous ne présentons pas d’exemples d’utilisation de ce package, mais le lecteur pourra trouver des exemple de comparaison entre ggplot2 et lattice dans ce document :

Exercice 4.1

  • Trouver le code en syntaxe ggplot qui permette d’obtenir le grahique suivant obtenu en syntaxe de base:

  • Trouver le code en syntaxe de base qui permette d’obtenir le graphique suivant obtenu avec la syntaxe ggplot:

2 Présentation de graphiques originaux

On présente ici une liste de graphiques originaux, la plupart inspirée de la syntaxe ggplot2, mais pas uniquement.

2.1 Mélange boîte à moustache/diagramme de dispersion

Le graphique suivant (issu du package ggpol) permet de représenter une “demi” boîte à moustache et un diagramme de dispersion à la place de la demi boîte. Le diagramme de dispersion n’est pas représenté sur une unique droite. En effet, si plusieurs valeurs sont identiques, il n’est pas possible de les distinguer sur une droite. C’est pourquoi les données ne sont pas toutes représentées sur la même droite (elles sont jitter en anglais). L’intérêt de ce graphique est limité, mais il permet toutefois d’apprécier le volume de données correspondant à chaque partie de la boîte à moustache.

2.2 Violin plot

Le but de ce graphique est de représenter sur un même graphique une boîte à moustache et un estimateur non paramétrique de la densité. L’objectif est de visualiser sur un même graphique les informations spécifiques apportées par l’un et par l’autre. Plus précisément la boîte à moustache est intéressante pour visualiser les valeurs extrêmes alors que l’estimateur non paramétrique de la densité permet d’avoir une idée de l’allure de la distribution.

L’estimation non paramétrique est représentée verticalement (alors que celle-ci est généralement représentée horizontalement); de plus, il y a un effet miroir dans le but d’harmoniser le dessin avec la boîte à moustache. Dans l’exemple ci-dessous, on a représenté le “violin plot” de la variable price en fonction des modalités de la variable cut.

2.3 Ridgeline plots

Ce graphique (issu du package ggridges) est particulièrement intéressant car il permet de visualiser des estimateurs non paramétriques de densité conditionnement à une variable qualitative. Contrairement à un des graphiques vue dans la section précédente, il est possible d’apprécier correctemment la forme de chaque estimateur car ceux-ci sont représentés sur une ligne différente, tout en conservant la même échelle.

2.4 Barres d’erreurs

Le graphique suivant permet de représenter sur un graphique les barres d’erreurs correspondant aux intervalles de confiance à \(95\%\) autour des moyennes observées, en utilisant l’hypothèse de normalité. Attention, cela ne remplace pas un test statistique, mais cela permet d’apprécier visuellement si deux moyennes observées semblent significativement différentes l’une de l’autre.

Pour réaliser ce graphique, il faut d’abord mettre en forme les données à la ggplot2, c’est-à-dire sous forme de data.frame, correctement disposé (tidy).

Ensuite, on peut représenter les différentes moyennes et les barres d’erreurs.

2.5 Cleveland dot chart

Le Cleveland dot chart est un graphique qui permet de visualiser une variabe quantitative de façon brute. On représente en général en ordonnées l’identifiant d’une observation (comme une marque de voiture, un pays, etc.) et en abscisse la valeur observée. Cet outil est particulièrement intéressant lorsque les observations sont triées. Cela permet d’apprécier un ordre de grandeur des différences observées.

Dans l’exemple ci-dessous, les données proviennent du package gapminder sur les espérances de vie observées dans les pays d’Asie en 2007.

2.6 Area chart

Ce graphique est intéressant pour représenter des données de composition (autrement dit des variables dont la somme est constante) qui évoluent au cours du temps. Dans l’exemple ci-dessous, on a représenté des parts de marché qui écoluent au cours du temps.

2.7 Correlation plot

Le graphique de corrélation permet d’apprécier le degré de corrélation entre plusieurs variables. Ce graphique provient du package ggcorrplot et a été profondémment épuré. On en effet, une matrice de corrélation est symétrique et constante sur la diagonale; par conséquent, on ne peut garder que l’information provenant de la partie supérieure (ou inférieure). C’est ce que fait le graphique suivant.

2.8 Représenter les effets des variables explicatives

Dans ce paragraphe, nous allons voir des graphiques qui permettent de réprésenter certaines informations provenant de modèles statistiques.

2.8.1 Régression linéaire

La fonction visreg() du package visreg permet de représenter les effets d’une variable explicative sur la variable à expliquer. Pour cela, on représente sur le nuage de points les valeurs prédites avec une doite bleue. On notera que pour calculer les valeurs prédites à partire du modèle estimé, les autres variables du modèle sont prises constantes et égales à la médiane pour les variables quantitatives et au mode pour les variables qualitatives (plus de détails sur : https://journal.r-project.org/archive/2017/RJ-2017-046/RJ-2017-046.pdf).

Pour les variables qualitatives, les valeurs prédites sont représentées par des traits bleus sur des diagrames de dispersion conditionnels aux modalités de la variable explicative.

2.8.2 Régression logistique

Une façon de représenter les résultats d’une régression logistique est de représenter la probabilité que l’événement d’intérêt \(Y=1\) arrive, conditionnelement à une variable explicative. C’est ce que fait la fonction visreg() dans un modèle de régression logistique.

2.8.3 Modèle de survie

Dans un modèle de survie, on peut être intéresser de représenter la fonction estimée de survie en fonction du temps et conditionnellement à une variable qualitative (dans l’exemple ci-dessous le sexe). C’est ce que fait le package survminer. Le package survival permet de faire les estimations du modèle.

## Warning in data(lung): data set 'lung' not found

2.9 Mosaic plot

Le mosaic plot permet de représenter le croisement de modalités de variables qualitatives. Il permet notamment de vérifier quels sont les croisements qui sont en sur ou sous effectifs par rapport à une situation où les deux variables seraient indépendantes.

## Le chargement a nécessité le package : grid

Exercice 4.2

  • Sur les données lung utilisées précédemment, réaliser un “mosaic plot” entre les variables status et sex.

  • Toujours sur les données lung, réaliser un graphique de type “ridge plot” sur la variable variable age en fonction des modalités de la variable status.

  • Réaliser un graphique des corrélations sur les variables ph.karno, pat.karno, meal.cal, wt.loss du jeu de données lung.

3 Présenter des tableaux de résultats

Lorsqu’on présente un tableau de résultats (par exemple les résultats d’une régression) dans un document de type rapport ou présentation, il est préférable de ne pas insérer les sorties de R à l’état brut. D’une part, l’esthétique du format de sortie n’est pas agréable à lire et d’autre part, si on prend par exemple les sorties de la fonction lm(), il y a énormément de valeurs qu’on ne prend pas la peine de commenter en général.

Plutôt que de faire du copier/coller des chiffres qui nous intéressent depuis R, il existe un certain nombres de fonctions dans R qui retournent du code, par exemple html ou LaTeX, prêt à être insérer directement dans un document de type html ou LaTeX.

L’utilisation de ce type de fonctions est facilitée dans les fichiers R Markdown. En effet, on peut utiliser l’option results = ‘asis’ dans un chunk pour indiquer que le résultat retourné sera dans le format du document de sortie (soit html si le document final est en html, soit LaTeX si le document final est pdf).

3.1 La fonction \(kable()\)

Il s’agit d’une fonction incluse dans le package knitr, qui est le package permettant de compiler des fichiers Sweave ou R Markdown dans plusieurs formats de sortie. Cette fonction s’applique sur des objets de type matrix ou data.frame. Pour l’utiliser dans R Markdown, il suffit de faire :

Ce qui produira le résultat suivant. Ici, on a ajouté l’option echo = F dans le chunk pour ne pas afficher le code R :

mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2

Il existe un certain nombre d’options dans la fonction \(kable()\) :

  • digits= définit le nombre de chiffres décimales à afficher,

  • align= (‘r’, right, ‘l’, left ou ‘c’, center) indique la position des valeurs à l’intérieur des cellules.

  • caption= ajoute une légende.

Une amélioration de la fonction kable() est la fonction kbl() du package kableExtra. Celle ci permet de représenter les valeurs dans un tableau avec des couleurs et/ou des tailles de police différentes. Par ailleurs, en cherchant un peu plus loin, il est également possible d’insérer des images ou des petits graphiques statistiques dans les cellules du tableau (voir la page suivante pour plus d’informations lien.)

On représente ici les 5 premières lignes du jeu de données iris:

3.2 La fonction \(stargazer()\)

La fonction \(stargazer()\) du package stargazer est un plus général que la fonction kable() car elle prend en compte non seulement des objets de type matrix et data.frame, mais aussi lm.

On l’utilise ainsi dans un document R Markdown :

3.2.1 Table de données brutes

Pour afficher une table de données brutes, on utilise la fonction stargazer(). Parmi les nombreuses options de cette fonction, on en cite ici quelques-unes :

  • summary=F signifie que la table doit être représentée à l’état brut (par défaut, la fonction appliquée à un data.frame va faire un résumé statistique du data.frame),

  • digits=1 indique qu’un seul chiffre après la virgule sera représenté,

  • type= indique le format dans lequel la table sera retournée, par exemple “latex” (par défaut) ou “html”.

  • header=F précise de ne pas ajouter la date, l’heure, etc. à laquelle la table a été crée,

  • rownames=F précise de ne pas afficher le nom des lignes,

  • title= permet de donner un titre à la table,

Dans R Markdown, on a ajouté dans le chunck l’option results = ‘asis’ pour indiquer que R allait ressortir un résultat qui est dans le format du support de sortie utilisé (que ce soit html ou latex)

Tableau de données
Sepal.Length Sepal.Width Petal.Length Petal.Width Species binary
5.1 3.5 1.4 0.2 setosa 1
4.9 3 1.4 0.2 setosa 1
4.7 3.2 1.3 0.2 setosa 1
4.6 3.1 1.5 0.2 setosa 1
5 3.6 1.4 0.2 setosa 1
5.4 3.9 1.7 0.4 setosa 1

3.2.2 Tableau de résumé

Par défaut, la fonction va créer un tableau de résumé statistique :

Résumé
Statistic Mean St. Dev. Min Pctl(25) Median Pctl(75) Max
Sepal.Length 5.843 0.828 4.300 5.100 5.800 6.400 7.900
Sepal.Width 3.057 0.436 2.000 2.800 3.000 3.300 4.400
Petal.Length 3.758 1.765 1.000 1.600 4.350 5.100 6.900
Petal.Width 1.199 0.762 0.100 0.300 1.300 1.800 2.500

3.2.3 Tableaux de régression

Un des gros avantages de la fonction stargazer() est qu’elle permet de synthétiser des modèles de régression.

Résultat de régression
Dependent variable:
Sepal.Length
(1) (2)
Speciesversicolor 0.930***
(0.103)
Speciesvirginica 1.582***
(0.103)
Sepal.Width -0.223
(0.155)
Constant 5.006*** 6.526***
(0.073) (0.479)
Observations 150 150
R2 0.619 0.014
Adjusted R2 0.614 0.007
Residual Std. Error 0.515 (df = 147) 0.825 (df = 148)
F Statistic 119.265*** (df = 2; 147) 2.074 (df = 1; 148)
Note: p<0.1; p<0.05; p<0.01

Elle permet également de comparer des modèles entre eux. Pour en savoir plus, on pourra consulter le document suivant :

Exercice 4.3

Insérer dans un document Markdown :

  • le tableau de corrélation des variables quantitatives du jeu de données iris.

  • le tableau de régression du jeu de données iris

4 Graphiques interactifs

4.1 Via plotly

Ici, nous allons présenter quelques exemples d’utilisations du package plotly qui permet de faire des graphiques interactifs en utilisant une interface web via la bibliothèque plotly.js écrite en JavaScript.

Il ne s’agit ici que d’une brève introduction, le lecteur pourra consulter le lien suivant pour plus d’informations :

Lorsqu’on utilise les fonctions de ce package depuis RStudio, la fenêtre graphique qui s’ouvre depuis RStudio rend possible l’interactivité. Cela a pour effet de créer un graphique dans lequel il est possible d’obtenir des informations supplémentaires lorsqu’on place le curseur sur des zones de celui-ci.

De plus, lorsqu’on intègre ce type de graphique dans un document R Markdown, cela garde l’interactivité dans la page html créée.

Son utilisation est la suivante : on appelle la fonction plot_ly() dans lequel :

  • le 1er argument est le nom du jeu de données,

  • l’argument x = ~ donne le nom de la variable d’intérêt,

  • l’argument color = ~ donne le nom d’une variable conditionnelle,

  • l’argument type = donne le type de graphique qu’on souhaite représenter.

Par exemple, pour une boîte à moustache, on utilise la syntaxe suivante :

;

Pour un nuage de points, on utilise la syntaxe suivante :

;

On peut si on le souhaite coupler les graphiques ggplot2 avec l’interactivité de plotly. Pour cela, on peut reprendre n’importe lequel des graphiques présentés dans la section précédente et utiliser la fonction ggplotly() pour rendre possible l’interaction :

;

Autres packages permettant de faire des graphiques intercatifs :

4.2 Via D3

“D3.js (ou D3 pour Data-Driven Documents) est une bibliothèque graphique JavaScript qui permet l’affichage de données numériques sous une forme graphique et dynamique. Il s’agit d’un outil important pour la conformation aux normes W3C qui utilise les technologies courantes SVG, JavaScript et CSS pour la visualisation de données” (définition donnée par Wikipedia).

Il existe un certain nombre de packages R qui permettent de créer des graphiques en D3. Parmi ces packages, on nommera r2d3 (voir https://rstudio.github.io/r2d3/ pour plus d’informations).

On présente ici un exemple provenant d’un autre package (networkD3), qui permet de représenter des donnéds de flux.

5 Mini-introduction à shiny

shiny est un package développé par RStudio qui permet la création de pages web interactives, sans avoir à connaître ni HTML, ni CSS, ni JavaScript.

On renvoit le lecteur vers la page web RStudio (http://shiny.rstudio.com/gallery/) pour voir des exemples d’applications réalisées avec shiny.

Pour utiliser shiny, cela se fait de manière exrêmement intuitive depuis RStudio.

Cette section s’inspire fortement de la présentation suivante :

Le lecteur pourra également consulter cette présentation de Christophe Bontemps (TSE) :

5.1 Un premier exemple

Dans un premier temps, on commence par créer deux fichiers qu’il faudra enregister dans un même répertoire.

  • le premier fichier, en général nommé “ui.R”, va contenir le code qui permet de paraméter la disposition des différents éléments que l’on souhaite afficher dans la page web. Dans l’exemple par défaut, on découpe la page web en deux parties : une partie à gauche qui contient des éléments informatifs (un titre, etc.) ainsi que des paramètres que l’utilisateur pourra éventuellement modifier. La partie à droite contiendra un graphique que l’on souhaite représenter.
Screenshot de shiny

Screenshot de shiny

  • le second fichier, en général nommé “server.R” contient le code qui va permettre de constuire le graphique que l’on souhaite représenter dans la partie à droite de l’application. Pour construire ce graphique, on utilisera des paramètres qui ont été définis par l’utilisateur depuis l’interface.

L’idée est donc que les deux fichiers dépendent l’un de l’autre. En effet, dès que l’utilisateur va modifier des paramètres sur l’interface, cela va modifier des objets dans le fichier “ui.R” ce qui aura pour conséquence d’appeler le fichier “server.R” afin de représenter le nouveau graphique qui aura pris en compte la modification effectuée par l’utilisateur.

On va commencer par un exemple simple. Pour cela, depuis RStudio, aller dans “File”, puis “New File”, puis “Shiny web app”. Donner un nom à votre api, laisser les options par défaut et choisir le répertoire dans lequel vous aller sauvegarder vos deux fichiers.

Le fichier “ui.R” créé par défaut est celui-ci. Nous avons ajouté ici les commentaires pour expliquer les différentes étapes de création de la page web :

Le fichier “server.R” créé par défaut est celui-ci :

Depuis RStudio, lorsque vous avez ouvert l’un des deux fichiers “ui.R” ou “server.R” il est possible de lancer l’application en cliquant sur le bouton “Run App”. Cela a pour effet d’ouvrir une fenêtre html depuis RStudio où apparaît d’une part sur la gauche l’interface (codée dans le fichier “ui.R”) et sur la droite le graphique (codé dans le fichier “server.R”). Dans cet exemple, lorsqu’on bouge le curseur de la réglette, cela a pour effet de modifier le graphique automatiquement.

Remarque : tant que vous n’aurez pas fermé la fenêtre html, vous n’aurez pas la main sur la console R de RStudio.

5.2 Quelques fonctionnalités de shiny

5.2.1 Dans la partie de gauche

Dans l’exemple ci-dessus, nous avons seulement inséré une réglette dans la partie sidebarPanel(). On aurait pu ajouter d’autre types d’outils très intéressants en utilisant une des fonctions ci-dessous :

  • textInput() : saisie d’une chaîne de caractères,
  • numericInput() : saisie d’une valeur numérique,
  • selectInput() : choix parmi une ou plusieurs valeurs sous forme de liste déroulante,
  • sliderInput() : réglette de valeurs numériques,
  • radioButtons() : choix de valeurs avec des boutons,
  • fileInput() : choisir un fichier (en général de données).

5.2.2 Dans la partie de droite

Dans l’exemple ci-dessus, nous avons affiché dans la partie de droite seulement un graphique. Pour cela nous avons utilisé la fonction renderPlot() depuis le fichier “server.R” et plotOutput() depuis le fichier “ui.R”. On peut également affiché :

  • du texte : on utilisera la fonction renderPrint() depuis le fichier “server.R” et textOutput() depuis le fichier “ui.R”
  • des tables de données : on utilisera la fonction renderDataTable() depuis le fichier “server.R” et dataTableOutput() depuis le fichier “ui.R”
  • des images : on utilisera la fonction renderImage() depuis le fichier “server.R” et imageOutput() depuis le fichier “ui.R”

5.3 Publier ses applications

Une fois vos applications développées en local, il est possible de les rendre accessible à tous grâce aux serveurs de chez RStudio qui propose des offres d’hébergement. La première offre est gratuite au-dessous d’un certain nombre d’applications et temps d’utilisation. Pour plus d’informations, consulter : https://www.rstudio.com/products/shiny/shiny-server/