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 Nicolas Gast s'occupent des TDs.

Le planning avec les salles de cours est disponible ici.

La page de l'an dernier est ici.

Programme du cours

  • 11 Septembre 2015 (8:00 - 9:30 / 9:45 - 11:15): TD (AL/NG) Prise en main de R. Pour cela, voir la section sur R un peu plus bas.
  • 11 Septembre 2015 (11:30 - 13:00): Cours (JMV)
  • 22 Septembre 2015 (10:15 - 11:45): Cours (AL)
  • 25 Septembre 2015 (9:45 - 11:15 / 11:30 - 13:00): TD Analyse de données et statistiques descriptives.
  • 29 Septembre 2015 (10:15 - 11:45): Cours Présentation de la notion de variable aléatoire
  • 06 Octobre 2015 (10:15 - 11:45): Cours Générateurs de loi uniforme et de lois discrètes
  • 13 Octobre 2015 (10:15 - 11:45): Cours
  • 15 Octobre: rendu du DM1. Voir section plus bas.
  • 16 Octobre 2015 (9:45 - 11:15 / 11:30 - 13:00): TD: Génération de nombres aléatoires.
  • 20 Octobre 2015 (10:15 - 11:45): Cours/TD Génération de structures.
  • 23 Octobre 2015 (9:45 - 11:15 / 11:30 - 13:00): TD Le coupon collector également connu sous le nom de panini!.
  • 6 Novembre 2015 (9:45 - 11:15 / 11:30 - 13:00): TD Un tour au casino! Illustration/utilisation de la loi des grands nombres. Voici le Rmd correspondant. Ceux qui voudraient voir une petite applet permettant de simuler quelque chose d'équivalent peuvent aller voir ici. Vous y trouverez même des informations sur la résolution formelle du problème.
  • 10 Novembre 2015 (10:15 - 11:45): Cours Loi continue
  • 13 Novembre 2015 (9:45 - 11:15 / 11:30 - 13:00): TD 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).
  • 17 Novembre 2015 (10:15 - 11:45): Cours Loi normale, propriétés importantes
  • 20 Novembre 2015 (9:45 - 11:15 / 11:30 - 13:00): TD Fin de la fiche de TD précédente et début de la fiche sur le rejet.
  • 24 Novembre 2015 (10:15 - 11:45): Cours Convergence en loi.
  • 27 Novembre 2015 (9:45 - 11:15 / 11:30 - 13:00): TD Fin de la fiche sur le rejet.
  • 1 Décembre 2015 (10:15 - 11:45): Cours Convolution, convergence en loi et Théorème Central Limite.
  • 4 Décembre 2015 (9:45 - 11:15 / 11:30 - 13:00): TD Intervalle de confiance.
  • 8 Décembre 2015 (10:15 - 11:45): Cours Estimation et biais.
  • 11 Décembre 2015 (9:45 - 11:15 / 11:30 - 13:00): TD Fin de la fiche précédente.
  • 15 Décembre 2015 (10:15 - 11:45): Cours Notion de Test
  • 18 Décembre 2015 (9:45 - 11:15 / 11:30 - 13:00): TD Révisions et open bar sur le DM.
  • Janvier 2015: Examen. À toute fin utile, voici ceux des années précédentes.

Devoirs

DM1: analyse de données

Le but de ce DM est de vérifier que vous avez compris les principales étapes à suivre lorsque l'on analyse un jeu de données. Vous disposerez donc d'un jeu de données individuel (voir tableau plus bas) et devez nous rendre votre analyse en utilisant le stub Rmd suivant: RICM4_PS_DM1.Rmd. Vous pouvez au choix nous renvoyer par mail le fichier html résultant ou mieux, le déposer sur rpubs.

Le devoir est à rendre pour le 15 octobre au soir.

Les types de données sont les suivants.

PING
ping réguliers vers une machine non spécifiée sur une durée d'environ 25 minutes à une fréquence d'un ping toutes les 0.2 secondes. Les unités des mesures sont en milisecondes.
CACHE
taux d'accès réussi (i.e., ne générant pas de défaut de cache) au cache à avec une période d'échantillonnage de 100ms lors de l'exécution d'un programme.
HPC
durée de l'exécution des différents appels à la fonction DGEMM lors d'une factorisation de Cholesky à l'aide de StarPU. Les unités de mesures sont en milisecondes.
ARRADA data.csv (CACHE) C Euh… est-ce que tu trouves vraiment que X2 a l'air stationnaire ? Est-ce que tu trouves vraiment que les valeur sont uniformes ?
BERTRAND-DALECHAMPS data.csv (PING) A Très bien les abline pour indiquer les phases! Il aurait mieux valu faire des histogrammes pour chaque phase car les valeurs auraient pu se superposer… Attention aussi à ne pas résumer une distribution bi-modale par un boxplot.
BLANC data.csv (HPC) B- L'interprétation sur les causes de variation de la durée est erronée. Sans plus d'information sur les données, vous auriez du vous abstenir ou bien vraiment indiquer que c'est une possibilité qui demanderait une investigation plus poussée. Bonne identification des deux régimes autour de 2.8. Mais, elles auraient pu être analysées avec un histogramme et un boxplot. Par contre le boxplot de la conclusion n'a aucun de sens…
BRANGER data.csv (PING) A Bonne identification des phases. Attention au terme aberration qui n'a pas forcément de sens ici. L'analyse des pics l'histogramme pour P4 est douteuse (le mode a-t-il vraiment un sens ici?)
BRUEL data.csv (CACHE) A Super. Très bien l'annotation des plot.ts et des. Par contre non pour "la boîte à moustache nous confirme bien que le régime est stationnaire"
BUI data.csv (HPC) A Attention à la notion d'état stationnaire qui a trait à une stabilité de comportement au cours du temps. Dire que l'état stationnaire est compris entre 2 et 4 est inadapté ici. La limite sur ylim était un tout petit peu trop basse. Dommage que vous n'ayez pas étudié séparément le phénomène réguliers (vers 2) et le reste.
CRASTES DE PAULET data.csv (PING) B Ici, le phénomène est clairement non stationnaire avec des dépendances temporelles fortes (avez-vous regardé de plus près). Il y a clairement une valeur minimale. Il est amusant de voir que le début de l'expérience est assez stable donc trompeur.
CROUZET data.csv (CACHE) A Bien, même si c'était un jeu de données facile. Pourquoi avoir imposé breaks=5 ?
DELAPORTE data.csv (HPC) A- Tu as bien repéré les différentes phases (tout début, jusqu'à 800, jusqu'à la fin). "Nous ne pouvons pas savoir si ce sont des aberrations ou non. Nous les enlèverons donc pour la suite." Quoi ?!? Et du coup, tu ne les étudies pas ? Sinon, aucun commentaire sur le caractère multi-modal de X1 qui fait que le box plot n'a pas grand sens. Attention au terme "uniformément" mal utilisé.
DUNAND data.csv (CACHE) A OK. C'était un jeu de données facile. Vous avez p-e coupé un peu tôt. Le régime stationnaire arrive plutôt vers 400.
ELLAPIN data.csv (CACHE) B- Tu as dégagé la première valeur en lisant les données… Utilise header=F. Les coupures à 20, 124 et 619 me paraissent un peu arbitraires… J'aurais distingué juste 2 phases (0:700 et 700:2000). Vu ce que tu dis, pourquoi faire un hist(cacheV)? Même question pour R2 avec en plus un boxplot ?!?.
FAURE data.csv (PING) C Vous ne vous êtes pas trop foulé, ça va ?
FOUNAS data.csv (CACHE) B Est-il raisonnable de résumer avec un boxplot ? N'essayez pas d'interpréter ou de conclure avec si peu d'information…
GATTAZ data.csv (CACHE) A Progression logarithmique = bof, non… Histogramme inutile + évolution variance = très bien. Évolution pente = étrange.
GERRY data.csv (HPC) B Attention au terme phase qui fait référence à un intervalle de temps sur lequel il se passe quelque chose. Et attention au terme stationnaire qui est très mal utilisé. Je n'ai pas votre code, je ne sais pas comment vous avez sélectionné les pics.
HABLOT data.csv (HPC) A Bonne identification des différents "phases". Vérifier régulièrement la taille de l'échantillon est une bonne habitude.
HALLAL data.csv (HPC) A "pas aberrantes mais traitées à part". Bien! L'identification des différents "modes" et leur analyse est très bien.
HAMMOUTI data.csv (PING) C Quoi ?!? Pas de time series ? Attention, regarder un histogramme sans aucune idée sur la stationnarité n'a aucun sens! La découpe en 2 parties était bien mais sans time series, tu loupes l'essentiel
HATTINGUAIS data.csv (CACHE) A- Était-il légitime de résumer ces données avec un histogramme ? Si la distribution est symétrique, unimodale, pourquoi ne pas avoir résumé avec un boxplot ?
LECHEVALLIER data.csv (CACHE) B- Mais pourquoi commencer par un boxplot?!? Progression logarithmique = bof, non. Tiens même idée que GATTAZ pour l'évolution de la variance. Sans plot.ts(data_lineaire), tout ceci est étrange…
LECORPS data.csv (PING) A OK pour le côté stationnaire. Le dump de l'histogramme: berk! head(histinfo$counts,n=20) ?
LUCIDARME data.csv (PING) B Vous n'avez visiblement pas compris l'intérêt de faire du R+markdown… Prendre breaks=70 plutôt que breaks=7 aurait permis de mettre en avant le côté discret de la mesure. Séparer à 14 était probablement plus judicieux que 5 groupes arbitraires.
MACE data.csv (CACHE) A Pfff. Un .rar ? Sérieusement ? Évitez ça la prochaine fois. Sinon, exponentiel, ça n'a pas du tout cette forme là! Le reste est OK.
MATHIEU data.csv (HPC) A- Bonne idée de faire un plot en plus du plot.ts pour mieux distinguer les différents modes. Vous auriez du augmenter breaks dans votre premier histogramme. Pourquoi ne pas résumer le premier palier (<3) par un boxplot ? Pourquoi ne pas avoir fait l'histogramme pour le reste
MEDEWOU data.csv (CACHE) B- Argh. Utf8! Périodique ? Pas vraiment… Pourquoi découper en 3 ? Attention aux termes "uniforme" vs. "stationnaire". On sent que certains concepts sont peu clairs.
MOURET data.csv (CACHE) A Bien pour les phases, la stationnarité, l'analyse des histogrammes. Par contre traiter les pics à part n'est justifié que s'ils sont très peu fréquents avec des valeurs très différentes. Je ne pense pas que c'était le cas ici.
NAVARRO data.csv (CACHE) A OK. Rien à signaler. Étude méthodique même s'il est difficile de conclure.
NDIAYE data.csv (PING) B+ Pourquoi diviser arbitrairement en 4 périodes de temps de durée identique ? N'avez vous pas remarqué des périodes plus "à part" en zoomant ? OK, pour les analyse de forme mais parfois vous en faites trop sans vraiment expliquer pourquoi.
NIOGRET data.csv (PING) B Argh. Utf8! Il y avait un changement de régime et vous avez caché le code. Avez-vous essayé de changer le nombre de breaks ?
NOGUERON data.csv (CACHE) C Il n'y a pas que la valeur à considérer pour "exclure" des données. Votre dataRestrict contient toujours la phase de montée en charge… Vous n'observez pas d'asymétrie ? Mais que vous faut-il ?
NOUGUIER data.csv (HPC) A Bien pour l'étude des deux phénomènes superposés. Un histogramme plus fin pour le régime principal aurait été mieux et un boxplot adapté. Attention au terme "erroné" qui n'a pas de sens ici.
OUNISSI data.csv (CACHE) B Vu de près, Phase1_1 n'a pas l'air très stationnaire. Comment avez-vous identifié les breaks? Ne pouviez vous pas les superposer au premier plot.ts pour plus de lisibilité?
POPEK data.csv (CACHE) A Attention au terme de loi exponentielle. Ça n'a pas le sens que vous croyez et il y a d'autres courbes avec cette forme… Mais c'est une bonne idée. Si tu avais écrit la formule correspondant, tu aurais sûrement trouvé comment le vérifier. Sinon, est-ce que regarder l'histogramme de tout data a du sens selon toi ?
RACHEX data.csv (PING) A Bien vu les deux phases! Bravo. :) Le filtrage puis zoom pour arriver sur l'histogramme asymétrique était très bien aussi.
RAMEL data.csv (CACHE) A Rien à signaler. C'était un jeu de données relativement simple mais c'est étudié tout à fait proprement.
REVEL data.csv (PING) B Jamais vous ne mentionnez le caractère bi-modal. Vous ne pouvez pas résumer une distribution multi-modale par un box-plot… Enfin, attention à ce que vous appelez valeur "aberrante" et pourquoi chercher à les supprimer ? Est-ce justifié ?
SUN data.csv (PING) - Rien reçu.
TITH data.csv (HPC) A Votre choix de retirer certaines valeurs dans X3High m'a semblé assez arbitraire. Le reste est bien.
VOUTAT data.csv (HPC) B+ Bien le zoom sur l'histogramme mais l'exclusion des valeurs qui ne vous plaisent pas est un peu rapide. Plusieurs phénomènes se superposent ici. J'aurais donc aimé un commentaire sur le coté bi-modal du dernier histogramme et une analyse des valeurs "aberrantes".
WEI data.csv (HPC) C Un plot.ts au début aurait été bien. Aucun commentaire sur le caractère multi-modal ? Quel sens à un boxplot ici ?
ZEGAOUI data.csv (PING) - Rien reçu.
ZHAO data.csv (CACHE) A OK. C'était un jeu de données facile.
CAVALCANTI LIMA data.csv (HPC) - Rien reçu.
DORNELES FERREIRA DE SOUZA data.csv (CACHE) - Rien reçu.
STOIAN data.csv (CACHE) - Rien reçu.

Dans l'ensemble, ceux qui ont A, c'est bien. Tous ceux qui ont B- ou C, il faut impérativement que vous regardiez ce qui ne va pas. Quelques remarques:

  • Il est interdit de faire un boxplot sans avoir fait un hist auparavant et il est interdit de faire un hist sans avoir fait un plot.ts et/ou un plot auparavant!
  • "Ces valeurs se produisent assez fréquemment, et donc n’ont pas l’air d’être aberrantes; Elles seront traitées à part." Oui! Attention à l'usage abusif du terme aberrant.
  • Pour le PING, il y avait souvent plusieurs phases car j'ai débranché deux fois mon cable réseau quand j'ai fait les mesures et mon ordi a donc basculé sur le wifi.
  • Pour le HPC comme pour le ping, il pouvait y avoir des distributions multi-modales (même une fois les "outliers" mis de côté).
  • Pour le HPC, les mesures sont faites sur un GPU. Les perturbations extrêmes régulières correspondent souvent au fait qu'un autre kernel a été exécuté juste avant et qu'il y a une sorte de temps de reconfiguration nécessaire (ou un cache à flusher). La fréquence de ces perturbation augmente au cours du temps car la proportion de ces autres kernels par rapport au DGEMM augmente au cours de la factorisation.

À 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

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

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 http://download1.rstudio.org/rstudio-0.99.484-amd64.deb
sudo dpkg -i rstudio-0.99.484-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")

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

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