{"id":631,"date":"2017-01-11T18:45:30","date_gmt":"2017-01-11T17:45:30","guid":{"rendered":"http:\/\/perso.ens-lyon.fr\/lise.vaudor\/?p=631"},"modified":"2017-05-23T15:41:50","modified_gmt":"2017-05-23T13:41:50","slug":"comment-utiliser-un-modele-bayesien-pour-les-nuls","status":"publish","type":"post","link":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/comment-utiliser-un-modele-bayesien-pour-les-nuls\/","title":{"rendered":"Comment utiliser un mod\u00e8le bay\u00e9sien (pour les nuls)"},"content":{"rendered":"<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Modele_bayesien\/Lise_Vaudor_headband-1.png\" alt=\"\" \/><\/p>\n<p>Dans le billet pr\u00e9c\u00e9dent, j&rsquo;ai pr\u00e9sent\u00e9 le th\u00e9or\u00e8me de Bayes \u00e0 travers l&rsquo;exemple d&rsquo;un mod\u00e8le (tr\u00e8s tr\u00e8s simple) portant sur le comportement des ours. Ce mod\u00e8le mettait en relation deux variables C et G o\u00f9<\/p>\n<ul>\n<li>C est la variable indicatrice de l&rsquo;\u00e9v\u00e8nement \u00ab\u00a0L&rsquo;ours est en col\u00e8re\u00a0\u00bb (C=o ou C=n)<\/li>\n<li>G est la variable indicatrice de l&rsquo;\u00e9v\u00e9nement \u00ab\u00a0L&rsquo;ours grogne\u00a0\u00bb (G=o ou G=n).<\/li>\n<\/ul>\n<p><!-- --><\/p>\n<p>Il est possible d&rsquo;utiliser un mod\u00e8le bay\u00e9sien (m\u00eame un mod\u00e8le aussi simple que celui-ci) de diff\u00e9rentes mani\u00e8res, <strong>en fonction de la question que l&rsquo;on se pose<\/strong>, mais aussi <strong>en fonction des donn\u00e9es dont on dispose<\/strong>. Je vous pr\u00e9sente ci-apr\u00e8s quelques cas \u00ab\u00a0bien tranch\u00e9s\u00a0\u00bb&#8230;<\/p>\n<h1>Premier cas: on ne dispose de donn\u00e9es ni pour C, ni pour G<\/h1>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Modele_bayesien\/cas1-1.png\" alt=\"\" \/><\/p>\n<p>Imaginons que l&rsquo;on ait un <strong>mod\u00e8le th\u00e9orique<\/strong> de comportement pour des variables qu&rsquo;on n&rsquo;a pas observ\u00e9es. Il est tout de m\u00eame possible de \u00ab\u00a0tirer\u00a0\u00bb quelque chose du mod\u00e8le&#8230; Dans le billet pr\u00e9c\u00e9dent par exemple, on partait de<\/p>\n<ul>\n<li>l&rsquo;<strong>a priori<\/strong> quant \u00e0 la distribution de <strong>C<\/strong> (Pr(C))<\/li>\n<li>l&rsquo;<strong>a priori<\/strong> quant \u00e0 la <strong>table de probabilit\u00e9 conditionnelle de G sachant C<\/strong> (Pr(G\/C))<\/li>\n<\/ul>\n<p>et on parvenait \u00e0 en tirer des conclusions sur la mani\u00e8re dont il fallait interpr\u00e9ter un grognement d&rsquo;ours (\u00ab\u00a0Si un ours grogne, alors il y a 82% de chances qu&rsquo;il soit en col\u00e8re\u00a0\u00bb.)<\/p>\n<p>Evidemment, dans ce cas de figure, le r\u00e9sultat ne vaut pas tripette si on n&rsquo;est pas en mesure de d\u00e9fendre les a priori qui sous-tendent le mod\u00e8le&#8230; En l&rsquo;occurence, mes connaissances en \u00e9thologie ursine sont limit\u00e9es donc mes a priori et (par cons\u00e9quent) cette conclusion, ne valent pas tripette -sauf d&rsquo;un point de vue p\u00e9dagogique, bien s\u00fbr-.<\/p>\n<p>On dit de ce genre de construction de mod\u00e8le qu&rsquo;elle se base sur une <strong>connaissance d&rsquo;expert<\/strong>.<\/p>\n<h1>Deuxi\u00e8me cas: on dispose de donn\u00e9es pour G, mais pas pour C<\/h1>\n<p>Imaginons maintenant que l&rsquo;on dispose d&rsquo;observations pour G mais que l&rsquo;on est <strong>incapables de mesurer directement C<\/strong> (car on ne sait pas lire dans les pens\u00e9es de l&rsquo;ours pour d\u00e9terminer s&rsquo;il est en col\u00e8re ou non). C est alors une variable <strong>latente<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Modele_bayesien\/cas2-1.png\" alt=\"\" \/><\/p>\n<p>Dans ce cas on va partir de<\/p>\n<ul>\n<li>l&rsquo;<strong>a priori<\/strong> quant \u00e0 la distribution de C: Pr(C)<\/li>\n<li>l&rsquo;<strong>a priori<\/strong> quant \u00e0 la distribution de G sachant C: Pr(G\/ C)<\/li>\n<li>les <strong>observations<\/strong> de G: Pr(G)<\/li>\n<\/ul>\n<p>et on va en tirer une meilleure connaissance de C (Pr(C\/ G))<\/p>\n<h1>Troisi\u00e8me cas: on dispose de donn\u00e9es pour C, mais pas pour G<\/h1>\n<p>Ce cas n&rsquo;est pas tr\u00e8s vraisemblable pour mon exemple ursin car il sous-entend que nous disposerions d&rsquo;une machine \u00e0 lire les pens\u00e9es des ours MAIS que nous serions incapables d&rsquo;entendre leurs grognements&#8230; Menfin bon. Bref.<\/p>\n<p>Supposons donc qu&rsquo;on soit en mesure d&rsquo;observer C mais pas G. On va alors pouvoir utiliser le mod\u00e8le pour pr\u00e9dire la variable G (l'\u00a0\u00bboutput\u00a0\u00bb du mod\u00e8le) en fonction de C.<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Modele_bayesien\/cas3-1.png\" alt=\"\" \/><\/p>\n<p>On part donc de:<\/p>\n<ul>\n<li>les <strong>observations<\/strong> de C: Pr(C)<\/li>\n<li>l&rsquo;<strong>a priori<\/strong> quant \u00e0 la distribution de G sachant C: Pr(G\/ C)<\/li>\n<\/ul>\n<p>et on en d\u00e9duit la distribution de G.<\/p>\n<h1>Quatri\u00e8me cas<\/h1>\n<p>Dans ce dernier cas, on dispose de donn\u00e9es d&rsquo;observation \u00e0 la fois pour C et pour G.<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Modele_bayesien\/cas4-1.png\" alt=\"\" \/><\/p>\n<p>On va pouvoir alors utiliser ces donn\u00e9es pour ajuster le mod\u00e8le c&rsquo;est \u00e0 dire qu&rsquo;on part de:<\/p>\n<ul>\n<li>la structure du mod\u00e8le (ici, simplement le fait que G d\u00e9pende de C)<\/li>\n<li>les observations de C<\/li>\n<li>les observations de G<\/li>\n<\/ul>\n<p>et on en tire des renseignements quant \u00e0<\/p>\n<ul>\n<li>la distribution de C: Pr(C)<\/li>\n<li>la distribution de G sachant C: Pr(G\/ C)<\/li>\n<\/ul>\n<p>Voyez plut\u00f4t: si on part d&rsquo;un petit jeu de donn\u00e9es comme celui-ci:<\/p>\n<pre><code>data=data.frame(C=c(\"o\",\"o\",\"o\",\"n\",\"n\",\"n\",\"o\",\"n\",\"n\",\"n\",\"o\",\"o\",\"n\",\"n\",\"n\"),\n                G=c(\"o\",\"o\",\"n\",\"o\",\"n\",\"n\",\"o\",\"n\",\"o\",\"n\",\"n\",\"o\",\"n\",\"o\",\"n\"))\n<\/code><\/pre>\n<p>et que l&rsquo;on d\u00e9finit la structure du mod\u00e8le:<\/p>\n<pre><code>require(bnlearn)\nmodel=model2network(\"[C][G|C]\")\n<\/code><\/pre>\n<p>on peut alors ajuster le mod\u00e8le aux donn\u00e9es et en tirer une estimation des probabilit\u00e9s de C et de G sachant C:<\/p>\n<pre><code>fitted=bn.fit(model,data, method=\"mle\")\nprint(fitted$C)\n\n## \n##   Parameters of node C (multinomial distribution)\n## \n## Conditional probability table:\n##    n   o \n## 0.6 0.4\n\nprint(fitted$G)\n\n## \n##   Parameters of node G (multinomial distribution)\n## \n## Conditional probability table:\n##  \n##    C\n## G           n         o\n##   n 0.6666667 0.3333333\n##   o 0.3333333 0.6666667\n<\/code><\/pre>\n<p>Le fait d&rsquo;ajuster le mod\u00e8le aux observations montre qu&rsquo;un ours a Pr(C=o)= 40% de chances d&rsquo;\u00eatre en col\u00e8re, et qu&rsquo;un ours en col\u00e8re grogne dans Pr(G=o\/ C=o)= 67% des cas, tandis qu&rsquo;un ours qui n&rsquo;est pas en col\u00e8re grogne dans pr(C=o\/ C=n) 33% des cas.<\/p>\n<h1>Autres cas<\/h1>\n<p>En pratique, il est possible (voire fr\u00e9quent) d&rsquo;utiliser un m\u00e9lange des approches \u00e9voqu\u00e9es ci-dessus.<\/p>\n<p>Par exemple, on peut avoir un jeu de donn\u00e9es rassemblant des observations de C et G et les utiliser pour ajuster un mod\u00e8le (comme ci-dessus, dans le quatri\u00e8me cas \u00e9voqu\u00e9), puis utiliser ce mod\u00e8le pour pr\u00e9dire la variable C en fonction d&rsquo;observations de G (comme dans le deuxi\u00e8me cas \u00e9voqu\u00e9).<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Modele_bayesien\/cas5-1.png\" alt=\"\" \/><\/p>\n<p>Sans rentrer trop dans les d\u00e9tails, je montre comment faire cela ci-dessous. Pour utiliser un mod\u00e8le pour faire une pr\u00e9diction, nous avons besoin d&rsquo;utiliser un nouveau package, le package <code>gRain<\/code>. On convertit notre mod\u00e8le \u00ab\u00a0fitted\u00a0\u00bb issu du package <code>bnlearn<\/code> en un mod\u00e8le utilisable par <code>gRain<\/code>.<\/p>\n<pre><code>require(gRain)\ngrain.fitted=as.grain(fitted)\n<\/code><\/pre>\n<p>Puis on applique la fonction <code>predict<\/code> de ce package <code>gRain<\/code> \u00e0 un nouveau jeu de donn\u00e9es pour lequel on a seulement deux observations (G=o, et G=n) mais pas de donn\u00e9e renseignant C.<\/p>\n<p>On pr\u00e9dit la valeur de C en fonction des observations G et des param\u00e8tres du mod\u00e8le ajust\u00e9:<\/p>\n<pre><code>predicted=predict(grain.fitted,\n                   newdata=data.frame(C=c(NA,NA),\n                                      G=c(\"o\",\"n\")),\n                   response=\"C\",\n                   predictors=\"G\",\n                   type=\"distribution\")\nprint(predicted$pred$C)\n\n##              n         o\n## [1,] 0.4285714 0.5714286\n## [2,] 0.7500000 0.2500000\n<\/code><\/pre>\n<p>D&rsquo;apr\u00e8s le mod\u00e8le, donc, la probabilit\u00e9 que l&rsquo;ours soit en col\u00e8re dans le premier cas (o\u00f9 il a grogn\u00e9) est de 57% tandis que les chances qu&rsquo;il soit en col\u00e8re dans le deuxi\u00e8me cas (o\u00f9 il n&rsquo;a pas grogn\u00e9) sont de 25%.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans le billet pr\u00e9c\u00e9dent, j&rsquo;ai pr\u00e9sent\u00e9 le th\u00e9or\u00e8me de Bayes \u00e0 travers l&rsquo;exemple d&rsquo;un mod\u00e8le (tr\u00e8s tr\u00e8s simple) portant sur le comportement des ours. Ce mod\u00e8le mettait en relation deux variables C et G o\u00f9 C est la variable indicatrice de l&rsquo;\u00e9v\u00e8nement \u00ab\u00a0L&rsquo;ours est en col\u00e8re\u00a0\u00bb (C=o ou C=n) G est la variable indicatrice de l&rsquo;\u00e9v\u00e9nement \u00ab\u00a0L&rsquo;ours grogne\u00a0\u00bb (G=o ou G=n). Il est possible d&rsquo;utiliser un mod\u00e8le bay\u00e9sien (m\u00eame un.. <a href=\"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/comment-utiliser-un-modele-bayesien-pour-les-nuls\/\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-631","post","type-post","status-publish","format-standard","hentry","category-tous-les-posts"],"_links":{"self":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/631","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/comments?post=631"}],"version-history":[{"count":12,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/631\/revisions"}],"predecessor-version":[{"id":644,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/631\/revisions\/644"}],"wp:attachment":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/media?parent=631"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/categories?post=631"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/tags?post=631"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}