{"id":553,"date":"2011-11-08T15:13:04","date_gmt":"2011-11-08T14:13:04","guid":{"rendered":"https:\/\/abcdr.guyader.pro\/?p=553"},"modified":"2018-04-07T23:59:01","modified_gmt":"2018-04-07T22:59:01","slug":"comment-estimer-les-parametres-dune-loi-de-probabilite-avec-r","status":"publish","type":"post","link":"https:\/\/thinkr.fr\/abcdr\/comment-estimer-les-parametres-dune-loi-de-probabilite-avec-r\/","title":{"rendered":"Comment estimer les param\u00e8tres d&#039;une loi de probabilit\u00e9 avec R ?"},"content":{"rendered":"<p>On cherche souvent \u00e0 mod\u00e9liser un \u00e9chantillon par une loi de probabilit\u00e9. <br \/>A partir d&rsquo;un jeu de donn\u00e9es, comment peut-on trouver les param\u00e8tres d&rsquo;une loi pr\u00e9alablement fix\u00e9e?<\/p>\n<p>Plusieurs m\u00e9thodes peuvent \u00eatre utilis\u00e9es.<\/p>\n<p>On prend l&rsquo;exemple ici du d\u00e9lai entre l&rsquo;infection d&rsquo;un individu et la d\u00e9tection de cet individu comme malade.<br \/>On mod\u00e9lise ici ce d\u00e9lai (en jours) par une loi de Weibull (on peut aussi essayer les lois gamma et lognormale par exemple)<\/p>\n<p>La m\u00e9thode la plus simple est d&rsquo;utiliser la fonction fitdistr du package MASS.<br \/>Cette fonction permet d&rsquo;ajuster de nombreuses lois par maximum de vraisemblance. Regardons ce que \u00e7a donne pour une loi Weibull.<\/p>\n<pre><code><br \/><br \/>#on charge le package Mass<br \/> library(MASS) <br \/><br \/># on appelle z le d\u00e9lai entre infection et d\u00e9tection, z est un vecteur contenant les donn\u00e9es<br \/><br \/>z&lt;-c(14,14,14,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,23)<br \/><br \/>#toujours visualiser ses donn\u00e9es, ici un histogramme est le plus adapt\u00e9!<br \/><br \/> hist(z) <br \/><br \/># on utilise la fonction fitdistr pour une loi Weibull, regarder ?fitdistr<br \/><br \/> paraw &lt;- fitdistr(z,densfun=\"weibull\") <br \/> logLik(paraw)\u00a0 # on peut avoir le loglikelihood<br \/><br \/># on visualise les r\u00e9sultats sur un graphique : histogramme+ loi <br \/><br \/> hist(z,freq=FALSE) # penser \u00e0 frep=FALSE!!<br \/> lines(dweibull(0:max(z),shape=paraw$estimate[1],scale=paraw$estimate[2]),type='l',col='green',lwd=2)<br \/><br \/>#on simule une loi de weibull avec dweibull en utilisant les param\u00e8tres estim\u00e9s<br \/>#regarder ?dweibull, <br \/>#on peut simuler de nombreuses lois sur R par exemple, gamma avec dgamma(), normale avec dnorm()...<br \/><br \/><\/code><\/pre>\n<p>On peut \u00e9galement \u00e9crire directement la vraisemblance et trouver le maximum de vraisemblance.<br \/>Dans cet exemple on utilise le package bbmle<\/p>\n<pre><code><br \/><br \/>library(bbmle) <br \/><br \/>#on \u00e9crit la vraisemblance pour une weibull (loglikelihood ici)<br \/><br \/> weiblikfun&lt;-function(shape,scale){<br \/>\u00a0\u00a0 \u00a0-sum((dweibull(z,shape=shape,scale=scale,log=TRUE)))}<br \/><br \/># on cherche \u00e0 minimiser le loglikelihood avec mle2, regarder ?mle2!!!!<br \/><br \/> w&lt;-mle2(weiblikfun,start=list(shape= 10,scale=20)) <br \/><br \/>w #donne les param\u00e8tres estim\u00e9s<br \/>confint(w) #donne des intervalles de confiance<br \/><br \/> <\/code><\/pre>\n<p>Enfin on peut estimer les param\u00e8tres dans un cadre bay\u00e9sien en lan\u00e7ant des MCMC.<br \/>Le plus simple est d&rsquo;utiliser le Gibbs sampler via Winbugs ou OpenBugs.<br \/>On peut lancer ces derniers via R et le package R2WinBUGS\u00a0par exemple.<br \/>Enfin on peut analyser le resultat des MCMC via le package coda.<\/p>\n<pre><code> <br \/><br \/> library(R2WinBUGS)<br \/>library(coda) <br \/><br \/>#on met en forme les donn\u00e9es pour Winbugs (en liste)<br \/> data&lt;-list(T=z,N=length(z))<br \/><br \/> <\/code><\/pre>\n<p>Il faut \u00e9crire un code Winbugs dans un fichier txt et le mettre dans le r\u00e9pertoire courant.<br \/>Voil\u00e0 ce que \u00e7a peut donner pour une weibull (ceci correspond \u00e0 modelweibull.txt plac\u00e9 dans le r\u00e9pertoire courant):<\/p>\n<pre><code><br \/><br \/> #model<br \/><br \/>model{<br \/><br \/>#priors<br \/><br \/>v~dgamma(0.01,0.01)<br \/><br \/>#v~dlnorm(0,0.0001)<br \/>lambda~dbeta(1,1)<br \/><br \/>s&lt;-pow((1\/lambda),(1\/v))<br \/><br \/>#likelihood<br \/>for(i in 1:N) {<br \/><br \/>T[i]~dweib(v,lambda)<br \/><br \/>}<br \/><br \/>} <br \/> <\/code><\/pre>\n<p>Enfin on lance le tout et on regarde le comportement des MCMC!<\/p>\n<pre><code> <br \/><br \/> rweibull&lt;-bugs(data,inits=NULL,parameters.to.save=c(\"v\",\"s\"),<br \/>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0model.file=\"modelweibull.txt\",n.chains=4,n.iter=100000,codaPkg=TRUE)<br \/><br \/>rweibull.coda&lt;-read.bugs(rweibull)<br \/>summary(rweibull.coda)<br \/>xyplot(rweibull.coda)<br \/>acfplot(rweibull.coda)<br \/>densityplot(rweibull.coda,col=\"blue\")<br \/>rejectionRate(rweibull.coda)<br \/><br \/> <\/code><\/pre>\n<p>Ce long exemple peut \u00eatre utilis\u00e9 pour d&rsquo;autres lois. Je vous conseille vivement de bien regarder les expressions analytiques utilis\u00e9es pour chaque fonction. Par exemple la loi de Weibull peut \u00eatre \u00e9crite de diff\u00e9rentes fa\u00e7ons. Vous aurez peut \u00eatre remarqu\u00e9 que les fonctions utilis\u00e9es dans R et winbugs n&rsquo;utilisent pas la m\u00eame expression: ATTENTION!!<\/p>\n<p>Enfin, il est souvent possible de mod\u00e9liser des donn\u00e9es par diff\u00e9rentes lois, il s&rsquo;agit ensuite de trouver celle qui correspond le mieux&#8230;.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>On cherche souvent \u00e0 mod\u00e9liser un \u00e9chantillon par une loi de probabilit\u00e9. A partir d&rsquo;un jeu de donn\u00e9es, comment peut-on trouver les param\u00e8tres d&rsquo;une loi pr\u00e9alablement fix\u00e9e? Plusieurs m\u00e9thodes peuvent \u00eatre utilis\u00e9es. On prend l&rsquo;exemple ici du d\u00e9lai entre l&rsquo;infection d&rsquo;un individu et la d\u00e9tection de cet individu comme malade.On mod\u00e9lise ici ce d\u00e9lai (en jours) par une loi de Weibull (on peut aussi essayer les lois gamma et lognormale par exemple) La m\u00e9thode la plus simple est d&rsquo;utiliser la fonction fitdistr du package MASS.Cette fonction permet d&rsquo;ajuster de nombreuses lois par maximum de vraisemblance. Regardons ce que \u00e7a donne pour une loi Weibull. #on<a class=\"more-link\" href=\"https:\/\/thinkr.fr\/abcdr\/comment-estimer-les-parametres-dune-loi-de-probabilite-avec-r\/\">Read More &rarr;<\/a><\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","rop_custom_images_group":[],"rop_custom_messages_group":[],"rop_publish_now":"initial","rop_publish_now_accounts":{"twitter_399453572_399453572":""},"rop_publish_now_history":[],"rop_publish_now_status":"pending","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5,11],"tags":[],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-melen","4":"post-553","6":"format-standard","7":"category-bayesien","8":"category-inference"},"acf":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p9O7Sx-8V","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts\/553","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/comments?post=553"}],"version-history":[{"count":2,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts\/553\/revisions"}],"predecessor-version":[{"id":4085,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts\/553\/revisions\/4085"}],"wp:attachment":[{"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/media?parent=553"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/categories?post=553"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/tags?post=553"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}