{"id":1051,"date":"2011-12-15T18:58:51","date_gmt":"2011-12-15T17:58:51","guid":{"rendered":"https:\/\/abcdr.guyader.pro\/?p=1051"},"modified":"2018-04-07T23:42:13","modified_gmt":"2018-04-07T22:42:13","slug":"comment-ajuster-des-fonctions-avec-les-moindres-carres-nls","status":"publish","type":"post","link":"https:\/\/thinkr.fr\/abcdr\/comment-ajuster-des-fonctions-avec-les-moindres-carres-nls\/","title":{"rendered":"Comment ajuster des fonctions avec les moindres carr\u00e9s ? nls"},"content":{"rendered":"<p>La mani\u00e8re la plus simple d&rsquo;ajuster une fonction \u00e0 des donn\u00e9es est la m\u00e9thode \u00ab\u00a0g\u00e9om\u00e9trique\u00a0\u00bb des moindres carr\u00e9s (minimiser la somme des carr\u00e9s des \u00e9carts correspond \u00e0 maximiser la vraisemblance avec une loi normale).<\/p>\n<p>La fonction<br \/>\n<strong>nls<\/strong><br \/>\n de R permet de r\u00e9aliser ceci de mani\u00e8re simple.<\/p>\n<p>Voyons deux exemples :<\/p>\n<pre><code>\n    #exemple mod\u00e8le de croissance exponentiel\n    #on cr\u00e9e une fonction qui correspond \u00e0 un mod\u00e8le de Malthus\n    malthus&lt;-function(t,N0,r){N0*exp(r*t)}\n    t&lt;-seq(0:100)\n    NO&lt;-2\n    r&lt;-0.05\n    plot(malthus(t,NO,r)~t,type='l',col='green',lwd=2)\n\n    #on cr\u00e9e des donn\u00e9es en ajoutant du bruit\n    sim&lt;-malthus(t,NO,r)+rnorm(t,sd=0.3*malthus(t,NO,r))\n    plot(sim~t,pch=20)\n    #on ajuste la fonction sur les donn\u00e9es simul\u00e9es en utilisant les moindres carr\u00e9s\n\n    fitmalthus&lt;-nls(sim~malthus(t,a,b),start=list(a=1,b=0.01))\n    fitmalthus\n    summary(fitmalthus)\n\n\n    #on v\u00e9rifie\n\n    plot(sim~t,pch=20)\n    lines(malthus(t,NO,r)~t,type='l',col='green',lwd=2)\n    lines(malthus(t,coef(fitmalthus)[1],coef(fitmalthus)[2])~t,type='l',col='red',lwd=2)\n\n\n    #exemple 2 avec une fonction logistique\n\n\n    logist&lt;-function(t,v,w,z){v\/(1+w*exp(-z*t))}\n    v&lt;-10;w&lt;-8;z&lt;-0.09;x&lt;-seq(from=-100,to=100)\n    plot(logist(x,v,w,z)~x,type='l',col='blue',lwd=2)\n\n\n    #on cr\u00e9e des donn\u00e9es avec du bruit\n\n    noisy&lt;-rnorm(x,mean=logist(x,v,w,z),sd=0.9)\n    plot(noisy,pch=20)#notez qu'il y a des valeurs n\u00e9gatives pas r\u00e9alistes...\n    fitlog&lt;-nls(noisy~logist(x,a,b,c),start=list(a=5,b=5,c=0.02))\n    fitlog\n    summary(fitlog)\n\n\n    #on v\u00e9rifie\n\n    plot(noisy~x,pch=20,col=\"grey\")\n    lines(logist(x,v,w,z)~x,type='l',col='blue',lwd=2)\n    lines(logist(x,coef(fitlog)[1],coef(fitlog)[2],coef(fitlog)[3])~x,type='l',col='red',lwd=2) \n<\/code><\/pre>\n<p>\nCes deux exemples cachent en fait de nombreuses difficult\u00e9s :<br \/>\nPour que l&rsquo;algorithme converge, vous devez donner des valeurs de d\u00e9part des param\u00e8tres assez proches de la r\u00e9alit\u00e9 &#8211;&gt; essayez d&rsquo;ajuster vos courbes \u00e0 l\u2019\u0153il afin d&rsquo;obtenir les meilleurs param\u00e8tres de d\u00e9part possibles. Sinon vous pouvez utiliser la fonction nls2 et l&rsquo;algorithme brute force, ou passer \u00e0 la vraisemblance voire au merveilleux monde des mcmc&#8230;<br \/>\nLa fonction nls pr\u00e9sente, comme beaucoup de fonctions R, de nombreux arguments qui vous permettront peut \u00eatre d&rsquo;ajuster vos fonctions comme vous le souhaitez : control, trace, weights etc.<br \/>\nEnfin vous pouvez r\u00e9cup\u00e9rer de nombreuses informations \u00e0 partir de l&rsquo;objet cr\u00e9\u00e9 lors de l&rsquo;ajustement : r\u00e9sidus, valeur des param\u00e8tres estim\u00e9s etc&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La mani\u00e8re la plus simple d&rsquo;ajuster une fonction \u00e0 des donn\u00e9es est la m\u00e9thode \u00ab\u00a0g\u00e9om\u00e9trique\u00a0\u00bb des moindres carr\u00e9s (minimiser la somme des carr\u00e9s des \u00e9carts correspond \u00e0 maximiser la vraisemblance avec une loi normale). La fonction nls de R permet de r\u00e9aliser ceci de mani\u00e8re simple. Voyons deux exemples : #exemple mod\u00e8le de croissance exponentiel #on cr\u00e9e une fonction qui correspond \u00e0 un mod\u00e8le de Malthus malthus&lt;-function(t,N0,r){N0*exp(r*t)} t&lt;-seq(0:100) NO&lt;-2 r&lt;-0.05 plot(malthus(t,NO,r)~t,type=&rsquo;l&rsquo;,col=&rsquo;green&rsquo;,lwd=2) #on cr\u00e9e des donn\u00e9es en ajoutant du bruit sim&lt;-malthus(t,NO,r)+rnorm(t,sd=0.3*malthus(t,NO,r)) plot(sim~t,pch=20) #on ajuste la fonction sur les donn\u00e9es simul\u00e9es en utilisant les moindres carr\u00e9s fitmalthus&lt;-nls(sim~malthus(t,a,b),start=list(a=1,b=0.01)) fitmalthus summary(fitmalthus) #on v\u00e9rifie plot(sim~t,pch=20) lines(malthus(t,NO,r)~t,type=&rsquo;l&rsquo;,col=&rsquo;green&rsquo;,lwd=2) lines(malthus(t,coef(fitmalthus)[1],coef(fitmalthus)[2])~t,type=&rsquo;l&rsquo;,col=&rsquo;red&rsquo;,lwd=2) #exemple 2 avec<a class=\"more-link\" href=\"https:\/\/thinkr.fr\/abcdr\/comment-ajuster-des-fonctions-avec-les-moindres-carres-nls\/\">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":[11,14],"tags":[],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-melen","4":"post-1051","6":"format-standard","7":"category-inference","8":"category-modelisation"},"acf":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p9O7Sx-gX","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts\/1051","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=1051"}],"version-history":[{"count":2,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts\/1051\/revisions"}],"predecessor-version":[{"id":3955,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/posts\/1051\/revisions\/3955"}],"wp:attachment":[{"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/media?parent=1051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/categories?post=1051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thinkr.fr\/abcdr\/wp-json\/wp\/v2\/tags?post=1051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}