RICM4: Probabilité et Simulation

Table of Contents

Sitemap

---> misc
| ---> 2016
| ---> 2015
| ---> 2014
| ---> 2013
| ---> 2012
`--> Agenda

Informations Générales

Jean-Marc Vincent est chargé des cours. Arnaud Legrand et Florence Perronnin s'occupent des TDs.

Le planning avec les salles de cours est disponible ici.

Voici les annales des quicks des années précédentes.

Programme du cours

  • 8 Septembre 2016 (8:00 - 9:30): Cours (JMV)
  • 9 Septembre 2016 (9:45 - 13:00): TD (FP) Prise en main de R. Pour cela, voir la section sur R un peu plus bas.
  • 13 Septembre 2016 (8:00 - 9:30): Cours (JMV) Élements de probabilités
  • 16 Septembre 2016 (9:45 - 13:00): TD (AL) Notion de variable aléatoire et de modélisation. Lien avec la programmation en R. Illustration avec:

    • le calcul de la probabilité d'avoir 2 garçons dans une famille de 5 enfants;
    • l'évolution de la proportion de personnes ayant les yeux bleus dans une population donnée

    Voici le "corrigé", qui n'est autre que ce qu'on a écrit ensemble agrémenté de quelques notes. Et voici les sources en R+Markdown.

  • 21 Septembre 2016 (8:00 - 9:30): Cours (JMV) Générateurs de loi uniforme et de lois discrètes
  • 23 Septembre 2016 (9:45 - 13:00): WEI!!! Pas de TD.
  • 27 Septembre 2016 (8:00 - 9:30): Cours (JMV) Quick
  • 30 Septembre 2016 (9:45 - 13:00): Développement personnel!!! Toujours pas de TD. ☹
  • 4 Octobre 2016 (8:00 - 9:30): Cours (JMV): Correction du Quick
  • 7 Octobre 2016 (9:45 - 13:00): TD (FP) Génération de nombres aléatoires et Simulation de lois uniformes
  • 14 Octobre 2016 9:45 - 13:00): TD (AL) Fin des TDs précédents (correction détaillée de "comment faire une pièce juste avec une pièce biaisée", et de "Parmi ces générateurs de dés, certains trichent, lesquels ?" en illustrant en quoi les opérations sur les variables aléatoires sont des transformations de leurs mesures).
  • 21 Octobre 2016 (9:45 - 13:00): TD (FP) Simulation de lois discrètes.
  • 4 November 2016 (9:45 - 13:00): TD (AL) Analyse de données avec ggplot2! (partie 2)
  • 8 November 2016 (10:15 - 11:45): Cours (AL) Correction du DM et présentation de données de façon descriptive (partie 1 et 3).
  • 18 November 2016 (9:45 - 13:00): TD (FP) Correction de "Génération de lois discrètes"
  • 25 November 2016 (9:45 - 13:00): TD (AL) Analyse de données et statistiques descriptives.
  • 2 Decembre 2016 (9:45 - 13:00): TD (FP) génération de lois continues
  • 6 Decembre 2016 (8:00 - 9:30): Cours (JMV): Correction du Quick
  • 9 Decembre 2016 (9:45 - 13:00): TD (AL) Génération selon la loi normale
    • Rappel de ce que c'est qu'une variable aléatoire continue, fonction de répartition, une densité de probabilité (http://fr.wikipedia.org/wiki/Fonction_de_r%C3%A9partition), l'inverse de la fonction de répartition…
    • Une "correction" du TP: http://rpubs.com/alegrand/10381.
    • Voici aussi un lien qui explique comment superposer une densité sur un histogramme.
    • Au final, on a vu trois méthode pour générer une loi normale:
      • En utilisant l'inverse de la fonction de répartition (qnorm(runif())). Mais cette méthode demande de savoir inverser la fonction de répartition, ce que l'on ne sait faire que via des approximations numériques;
      • En sommant d'autres variables aléatoires (par exemple une douzaine de lois uniformes sur \([0,1]\)). Cette méthode a le mérite d'être simple mais demande beaucoup d'appels à la fonction random. Elle n'est pas parfaite mais donne une bonne approximation;
      • Avec la méthode de Box-Muller: en générant un angle uniforme dans \([0,2\pi]\) et un rayon au carré selon une loi exponentielle, on obtient un point dont chacune des coordonnées sont indépendantes et générées selon une loi normale! C'est une méthode très très élégante, qui produit deux nombre pour deux appels à random, mais qui utilise des fonctions mathématiques un peu coûteuses (log, cos, sin, pi).
  • 16 Decembre 2016 (9:45 - 13:00): TD (FP) Intervalles de confiance

DM

DM1: Évolution de la couleur des yeux au fil des âges

Voici l'énoncé du DM. Deadline de rendu le 4 novembre à minuit. Voici un corrigé. Voici mes commentaires sur ce que les étudiants ont rendu.

DM2: Au menu

Il y a 8 sujets possibles et le travail est individuel. Toutes les explications sont données dans l'énoncé.

Le devoir est à rendre avant le 3 janvier à minuit.

ABONNENC ALICIA
(Sujet 1: B+) Calcul de proba: il n'y a pas N! arêtes mais N(N-1)/2. B pour les expériences sur le graphe complet, TB pour l'étude du premier individu infecté dans les lignes/grilles. Ça aurait été intéressant de regarder l'influence du nombre d'individus infectés au départ. Il manque les IC. "On choisit un arc : La moitié dont horizontaux l’autre verticaux" voulez-vous dire "vertical avec une proba de 1/2" ? Graph2D il y a un bug dans votre fonction step2d :-( La numérotation des noeuds que vous avez choisie rend difficile la validation de l'intuition car il n'y a pas de "région évidente" pour les bords.
ALLARD ESTELLE
(Sujet 1: B-) Comme le nombre d'individus infectés au départ varie dans chaque expérience, la variance doit être plus élevée et on ne peut pas dire grand chose avec 15 expériences. Il aurait fallu faire des IC ou au moins essayer des valeurs plus grandes… c'est un facteur à isoler en fait. Pour le calcul de l'espérance c'est dommage de ne pas la comparer avec vos simulations (d'ailleurs vous trouvez 4900 au lieu de 200 sur le graphique….). Pour la question 2, "On remarque une fois de plus la proportionnalité" : non, le graphique ne montre pas de propotionnalité (juste une croissance). Pour la grille 2D je n'ai pas compris comment vous numérotez vos noeuds. Or cette numérotation est essentielle pour comprendre votre dernier graphique. Pour les expériences de la Q2, 10 répétitions c'est vraiment très peu (d'ailleurs vous ne calculez pas les IC).
AMAURIN ALEXANDRE
(Sujet 7: D ) Génération de labyrinthe très compliquée et non commentée. Il semble que vous fasseiz simultanément la génération et la vérification. C'est risqué et surtout invérifiable. Vous éliminez la 1ere case mais pas la dernière… vous pourriez au moins essayer valider votre algo en faisant un échantillon et en mesurant les probas d'obstacle. Aucune expérience : c'est vraiment insuffisant.
AMODRU-FAVIN HUGO
(Sujet 1: ) Pour la Q2, bonne recherche côté représentation graphique. Attention à ne pas voir des exponentielles partout ! Ni pour la ligne 1d (où vous présentez une approximation linéaire), ni pour la grille 2d (croissante, convexe à la rigueur…) on ne peut dire que c'est exponentiel. Il faudrait tracer une courbe semi-log pour pouvoir le montrer.
BECHER HERVÉ
(Sujet 6: ) non reçu
BLANC ANTOINE
(Sujet 8: D ) Plusieurs options s'offraient à vous: venir nous voir, envoyer un mail, essayer vos fonctions de génération d'arbre et de calcul de hauteur pour "voir ce que ça donnait"… en l'absence de la moindre tentative c'est dur de donner des points.
BOISADAM ANTOINE
(Sujet 4: A+) Bonnes explications, bon code. TB représentation des réseaux obtenus. Génération uniforme. Q2: il faudrait commenter votre fonction de calcul de connexité car elle est un peu obscure. Bonne tentative de calcul des IC, malheureusement il y a quelques confusions. 10 répétitions c'est trop peu pour appliquer le TCL. Que signifie confiance=20? Dans la dernière partie c'est une très bonne idée de regarder l'influence de n sur le theta critique mais vous ne le tracez pas vraiment, dommage.
BONHOURE GILLES
(Sujet 2: B-) Bien dans l'ensemble mais un peu court. Q1: Vectoriser! Bien pour la simulation des graphes et l'étude de la connexité. Il manque les IC. En revanche, dommage de ne pas avoir cherché à calculer la probabilité critique. Il faudrait aussi regarder plusieurs valeurs de n.
BROCHIER AYMERIC
(Sujet 1: ) non reçu
CHAMBONNET SIMON
(Sujet 7: ) non reçu
CHEVALIER MAXIME
(Sujet 4: B ) Code globalement OK. Ce serait plus judicieux d'introduire les fonctions à mesure des besoins et de les commenter. En particulier le calcul de connexité, et "calculP" don’t on ne connaît pas le but. Belle représentation des réseaux. Q2: bonne précaution avec geom_smooth (votre commentaire). Ce serait intéressant d'afficher le nuage de points sur la même courbe (ou au moins avant) afin de visualiser et de valider votre courbe lissée. Vous faites confiance à geom_smooth pour le calcul d'IC mais comment fait-il sans l'échantillon? Vous ne lui donnez que la moyenne empirique pour chaque theta, même pas la taille d'échantillon. L'analyse est un peu courte…
COCHINHO LOUIS
(Sujet 3: B-) Pour la matrice d'adjacence il n'est pas nécessaire de parcourir toute la matrice: seul le triangle supérieur (au-dessus de la diagonale) suffit (ou inférieur, par symétrie). 1ere figure: c'est super d'avoir fait 500 répétitions. Du coup, après avoir tracé le nuage de points ce serait bien de calculer un IC. Puis, de faire varier N et p et de tracer les courbes du nombre moyen de pts isolés en fonction de n puis de p. Pour la densité, pourquoi utiliser rnorm et non rpois? Les densités tracées ne correspondent pas aux histogrammes. D'ailleurs attention a ce que vous pouvez conclure de la ressemblance de 2 histogrammes. TB idée de faire varier c. Il faudrait commenter les courbes. Graphes bicolores: il manque les axes. Que tracez-vous? Pourquoi vos histogrammes sont si tassés à gauche? Ce que vous calculez dans la fonction intervalle n'est pas un intervalle de confiance. Pour la connexité, pourquoi tracez-vous des histogrammes de variable normale? O veut juste regarder la proba de connexité quand n grandit.
DALLE ORIANE
(Sujet 1: A-) TB d'avoir pensé à regarder le régime transitoire. Pour Tn, c'est bien de calculer les IC mais pourquoi les moyennes mesurées ne sont-elles pas dans ces intervalles? Pour l'espérance conditionnelle au nombre d'individus infectés au départ, pourquoi refaire le calcul? Il y avait tout ce qu'il fallait dans la fonction de départ. Je ne comprends pas bien ce que vous mesurez mais on s'attend à une courbe décroissante, ce qui n'est pas le cas ici. Ligne 1D : bien mais il faudrait plus de 20 expériences pour les IC. Grille 2d: TB.
DELISE ANTOINE
(Sujet 3: ) non reçu
DEREYMEZ MAXIME
(Sujet 2: C+) Des commentaires dans le code seraient bienvenus :-) Ce serait bien de chercher la proba critique, et de faire varier n. Il manque aussi les IC.
FERNANDES DE ALMEIDA HÉLOÏSE
(Sujet 4: A-) Q1: bonne génération de capteurs et matrice d'adjacence. Il manque la visualisation graphique du réseau obtenu, dommage. La conclusion est confuse car on ne comprend pas ce que vous entendez par "nombre de connexions", Est-ce le degré moyen? Le nombre d'arêtes? Q2:attention aux graphiques "lissés": vous affichez dans les 3 cas des probabilités négatives pour la connexité! (faibles valeurs de theta). il faudrait éviter ces artefacts ou, a minima, les indiquer et les commenter. Le lissage laisse aussi supposer que la probabilité de connexité diminue avec theta si ce dernier est faible ou élevé… enfin, il n'y a pas de calcul d'IC (votre "marge" graphique n'est pas un IC).
FERRERA ALEXANDRE
(Sujet 8: A ) Q1: bonne génération d'arbres uniformes. Q2: bien pour les courbes. Avec une légende et des IC ce serait parfait. Mais contrairement à vous je trouve que la courbe bleue s'approche de la courbe verte, et non de la rouge… Enfin, les coefficients c et c' sortent de votre chapeau et on aimerait savoir comment vous les avez choisis. Il faudrait donner une méthode plus précise pour les calculer.
FU QIANQIAN
(Sujet 4: C+) Generation par rejet (2e algo): OK. En effet, la génération polaire n'est pas uniforme, pouvez-vous dire pourquoi? Attention contrairement à votre remarque il n'y a pas de points en dehors du cercle, sauf pour la fonction que vous réécrite à la question Q2 (pourquoi??) . Attention vos graphes de connexion ne sont pas cohérents (certains points éloignés sont connectés alors qu'ils n'ont pas de liens vers des capteurs plus proches). Attention aux noms de fonction: if_connex calcule en fait une matrice d'adjacence. Pour la fonction connext je ne comprends pas ce qu'elle fait, il faudrait expliquer/commenter. Calcul d'IC: je ne vois pas où sont vos répétitions (ni comment geom_smooth peut le savoir). Joli découpage de facteurs avec ggplot, il faudrait commenter ce trio de courbes.
FUSTES RAPHAÊL
(Sujet 3: D ) Attention, la connexité d'un graphe n'est pas garantie même en l'absence de points isolés. La fonction est_connexe est fausse du coup. Analyse expérimentale : dommage qu'il n'y ait pas de labels explicites sur les axes sur les courbes :-( sinon, pour la question 4, la vérification pour 1 valeur de n et 2 valeurs de c, sans répétition, ne permet pas de conclure ! Il vous faut tracer la proba de connexité en fonction de n (à c fixé) et en fonction de c (à n fixé). Et faire des stats sur un nombre suffisant (IC) de répétitions.
GALLIER ROMANE
(Sujet 7: C+) Je ne comprends pas pourqoi votre code ne permet pas de générer des labyrinthes de taille 10. Au moins pour de faibles valeurs de p… À défaut, n=3 c'est vraiment petit. Vous ne précisez pas sur votre graphique le nombre de répétitions d'expériences pour chaque valeur de p. Si c'est 10 comme dans la foncrion d'affichage, vous pourriez réduire un peu pour accélérer le calcul, tout en calculant les intervalles de confiance afin de les présenter sur la courbe. Attention, votre abcisse s'intitule "Probabilité d'apparition" mais affiche des valeurs supérieures à 1, ce qui n'a pas de sens (il faut normaliser votre vecteur d'abcisse). Il aurait fallu étoffer un peu les expériences et l'analyse.
GEOURJON ANTHONY
(Sujet 5: C ) Le but était justement de vous faire coder un générateur de permutation :-) TB pour la première question. Pour N=10, 2 possibilités immédiates : soit vous réduisez N pour voir à quel moment ça bloque; soit vous isolez votre permutation aléatoire dans une fonction que vous testez séparément sur un petit échantillon… Q3: 3 alllocations c'est bien pour voir ce qui se passe mais c'est trop peu pour conclure ! Il faut prendre un grand nombre d'allocation et regarder la distribution obtenue, avec les IC. Sinon vous ne pouvez pas comparer avec la permutation triée (il faut comparer les IC).
GAMBRO ANTOINE
(Sujet 1: A-) Code OK pour le graphe complet. 10 expériences, c'est vraiment peu. Bien pour le calcul de la proba conditionnelle. Pour valider le modèle ça aurait été super de mettre observations et prédictions dans le même graphique. Il aurait été intéressant de faire varier plusieurs paramètres (nb d'individus infectés au départ, position…)
GUERRY LUCAS
(Sujet 5: ) non reçu
HOMBERG NICOLAS
(Sujet 8: ) non reçu
LACHARTRE DENIS
(Sujet 6: B+) TB pour les graphes d'Erdos-Renyi. Pour B-A attention, vous surestimez un peu la proba d'attachement car votre boucle sur j devrait s'arrêter à i-1 (sinon les noeuds s'attachent à eux-mêmes). Il aurait été intéressant de refaire l'expérience plusieurs fois pour valider la forme "à peu près linéaire" de la dernière courbe; et de calculer sa pente.
LAW CHRISTOPHER
(Sujet 2: B-) Code ok. Un peu juste sur l'analyse expérimentale : pas d'IC, pas de calcul de proba critique, pas de variation de n.
LEMAIRE TIMOTHÉE
(Sujet 2: B-) L'intuition annoncée dit que le nombre de noeuds joue un rôle important et réduit l'influence de p. Il serait donc utile de vérifier cette intuition en faisant varier n. Pour le graphique, la variabilité est importante, il faudrait tracer les moyennes… avec les IC. Les explications sur le code de simulation (et la représentation de votre grille) ne sont pas limpides. On ne comprend pas non plus comment est estimée la probabilité critique. Au lieu de regarder uniquement la proba de connectivité totale, il pourrait aussi être intéressant de regarder le nombre de noeuds connectés au centre.
LESAGE LUCAS
(Sujet 6: C ) Q1 et Q2: B. Q3: vous n'avez pas changé la valeur de p, du coup vous générez encore des graphes Erdos-Renyi… et ne pouvez pas conclure.
MARCHAND CHARLES
(Sujet 8: ) non reçu
MOREAU GWENAËL
(Sujet 5: ) non reçu
MOTTET LOIC
(Sujet 5: ) non reçu
NASSIK AHMED AMINE
(Sujet 3: D ) Non, (c+log n)/n ne tend pas vers c quand n tend vers l'infini. Les histogrammes ne répondent pas à la question. Pour trouver une limite quand N->infini, il faut faire varier N. Il faudrait aussi tester plusieurs valeurs de c (pas seulement 2). Comment les avez-vous choisies?? Le nombre d'expériences aussi semble insuffisant pour les hitogrammes (calculez les IC pour voir). Q2, l'adéquation avec la loi de Poisson n'est pas du tout convaincante. "il faudrait faire des tests plus nombreux" : en effet. Q3: une vérification expérimentale sur 1 seule valeurn'est pas très concluante. Il faudrait montrer vos autres expérimentations et indiquer le procédé de décision.
ODIEVRE BORIS
(Sujet 4: ) non reçu
PELLICER MARION
(Sujet 6: B-) Q1:Pour Erdos-Renyi, on ne voit rien sur votre graphique ! Il faudrait déjà élimiter les noeuds de degré nul pour le calcul des log. De + c'est un nuage de points (avec 1 seul graphe généré) donc le lissage n'est pas très informatif.Q3 : La génération du graphe B-A a l'air correcte mais le lissage affiché n'est pas du tout linéaire… ce serait bien de regarder avec d'autres graphes aléatoires si la forme est similaire. La conclusion de la Q3 est un peu contestable du coup, car on ne voit pas une forme très convaincante. Je n'ai pas compris votre dernier encadré.
RIVOAL ALICE
(Sujet 8: C ) TB pour la génération. Pour la hauteur moyenne, au bout d'un certain nombre de stats, avec 1 seul paramètre, on a vraiment envie de voir une courbe… Bonne remarque sur la mesure de dispersion, cela aurait été intéressant (et peu coûteux) de calculer l'écart-type. Pour l'espérance, c'est dommage de ne calculer que 10 arbres par valeur de n (mieux vaut sous-échantillonner n avec plus d'arbres!) . Il manque la courbe principale. Quand vous dites vous appuyer sur vos camarades pour la valeur de c, c'est bien de le dire, mais c'est hasardeux de le faire (il faudrait vérifier leur estimation) et surtout il faudrait préciser qui exactement.
ROCHER LAMBERT
(Sujet 3: A ) TB dans l'ensemble. Le code est limpide et les explications très claires. 1000 expériences c'est très bien. Un IC c'est mieux :-) Sinon, vous ne prouvez que les pts isolés sont au nombre de exp(-c) que pour une valeur particulière. Il aurait fallu le vérifier pour plusieurs valeurs de c, en traçant un graphique par exemple. Idem pour la connexité. Il faudrait faire varier n et faire varier c afin de pouvoir conclure.
ROUQUIER CLÉMENT
(Sujet 3: ) non reçu
SAVARY RÉMI
(Sujet 7: ) non reçu
SIEST DAMIEN
(Sujet 5: ) non reçu
TURRIN VINCENT
(Sujet 6: A ) Intuition : oui mais attention à ne pas confondre loi exponentielle et loi de puissance. Q2: OK mais explication un peu confuse. Q3: TB. Quelques répétitions d'expériences auraient été bienvenues.
VEGREVILLE THIBAUD
(Sujet 2: ) non reçu
VIAL-GRELIER AYMERIC
(Sujet 7: D ) Code non fonctionnel. Si vous aviez joint le Rmd, j'aurais pu essayer de regarder d'où cela venait… avez-vous testé séparément les fonctions? Vous n'avez même pas affiché un seul petit labyrinthe (même invalide…). Aucune expérience…
ZENNOUCHE DOURIA
(Sujet 2: D ) Le code de simulation de grille fonctionne correctement. Il pourrait être amélioré en le vectorisant. Il aurait aussi été utile de le commenter un peu plus (vous savez ce que vous avez fait, mais il faudrait l'expliquer) et les dessins pourraient être plus lisibles. Mais surtout, il manque la partie principale du DM, l’étude de la connectivité…

À propos de l'utilisation de R

Dans ce cours, nous illustrerons l'intégralité de nos exemples et de nos études avec R. Voici donc quelques informations à toutes fins utiles…

Tout d'abord, je vous recommande très fortement d'installer une version récente de R (au moins 3.2.0 pour ne pas être ennuyé avec des problèmes de dépendances non résolubles).

Installing R and Rstudio

Virtual Machine

Here is a (4.5GB ☹ sic!) virtualbox image with everything already setup.

Mac OSX

Last year, a nice RICM4 student, Remi Gattaz, has taken the time to explain how to install a bunch of useful stuff. Here it is. In particular he gave many tips for MacOSX…

Linux

Here is how to proceed on debian-based distributions:

sudo apt-get install r-base r-cran-ggplot2 r-cran-reshape 

Make sure you have a recent (>= 3.2.0) version or R. For example, here is what I have on my machine:

R --version
R version 3.2.0 (2015-04-16) -- "Full of Ingredients"
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
http://www.gnu.org/licenses/.

If it's not the case, it may be because you're running debian stable or a LTD ubuntu. You want to include testing packages… Ask your local linux guru or run a VM (see previous section) if you're affraid to break your OS. For the braves, let's keep going!

Rstudio and knitr are unfortunately not packaged within debian so the easiest is to download the corresponding debian package on the Rstudio webpage and then to install it manually (depending on when you do this, you can obviously change the version number).

wget https://download1.rstudio.org/rstudio-0.99.903-amd64.deb
sudo dpkg -i rstudio-0.99.903-amd64.deb
sudo apt-get -f install # to fix possibly missing dependencies

You will also need to install knitr. To this end, you should simply run R (or Rstudio) and use the following command.

install.packages("knitr")

If r-cran-ggplot2 or r-cran-reshape could not be installed for some reason, you can also install it through R by doing:

install.packages("ggplot2")
install.packages("reshape")

You may have trouble when installing some R packages. If so, try to install these ones:

sudo apt-get install libcurl4-openssl-dev libssl-dev

Producing documents

The easiest way to go is probably to use R+Markdown (Rmd files) in Rstudio and to export them via Rpubs to make available whatever you want.

We can roughly distinguish between three kinds of documents:

  1. Lab notebook (with everything you try and that is meant mainly for yourself)
  2. Experimental report (selected results and explanations with enough details to discuss with your advisor)
  3. Result description (rather short with only the main point and, which could be embedded in an article)

We expect you to provide us the last two ones and to make them publicly available so as to allow others to comment on them.

Learning R

First of all, note that R is a really particular language. I encourage you to read this newcomer’s (angry) guide to R as it mentions several common pitfals. For a quick start, you may want to look at R for Beginners. A probably more entertaining way to go is to follow a good online lecture providing an introduction to R and to data analysis such as this one: https://www.coursera.org/course/compdata.

A quite effective way is to use SWIRL, an interactive learning environment that will guide through self-paced lesson.

install.packages("swirl")
library(swirl)
install_from_swirl("R Programming")
swirl()

Finally, you may want to read this excellent tutorial on data frames (attach, with, rownames, dimnames, notions of scope…)

Learning ggplot2, plyr / dplyr, reshape / tidyR

I recently stumbled on this nice ggplot2 tutorial.

Hadley Wickam provides a nice tour of dplyr and gentle introduction to tidyR.

The Rstudio team has designed a nice series of cheatsheets on R and in particular one on ggplot2 and on R/markdown/knitr.

Bibliographie