{"id":296,"date":"2015-01-14T13:30:16","date_gmt":"2015-01-14T12:30:16","guid":{"rendered":"http:\/\/perso.ens-lyon.fr\/lise.vaudor\/?p=296"},"modified":"2017-05-23T15:44:52","modified_gmt":"2017-05-23T13:44:52","slug":"regression-lineaire-erreur-et-incertitude","status":"publish","type":"post","link":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/regression-lineaire-erreur-et-incertitude\/","title":{"rendered":"R\u00e9gression lin\u00e9aire: erreur et incertitude"},"content":{"rendered":"<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Regression_lineaire_Erreur_1\/Lise_Vaudor_headband.png\" alt=\"plot of chunk\nLise_Vaudor_headband\" \/><\/p>\n<p>Dans ce billet, je souhaite montrer comment estimer l&rsquo;<strong>incertitude<\/strong> associ\u00e9e \u00e0 l&rsquo;<strong>estimation des param\u00e8tres<\/strong> (pente et ordonn\u00e9e \u00e0 l&rsquo;origine) d&rsquo;un mod\u00e8le de <strong>r\u00e9gression lin\u00e9aire simple<\/strong>. Pour ce faire, je vais:<\/p>\n<ul>\n<li>montrer comment le calcul d&rsquo;incertitude d\u00e9rive de r\u00e9sultats <strong>analytiques<\/strong> (i.e. d&rsquo;\u00e9quations qui permettent, si on le souhaite, de calculer l&rsquo;incertitude \u00ab\u00a0\u00e0 la main\u00a0\u00bb),<\/li>\n<li>fournir les <strong>lignes de code<\/strong> permettant de calculer (et repr\u00e9senter) ce m\u00eame r\u00e9sultat <strong>sous R<\/strong>,<\/li>\n<li>illustrer (pour l&rsquo;intervalle de confiance autour de la pente) l&rsquo;origine de cette incertitude par des <strong>simulations<\/strong><\/li>\n<\/ul>\n<h2>La r\u00e9gression lin\u00e9aire simple: mod\u00e8le, ajustement du mod\u00e8le<\/h2>\n<p>Consid\u00e9rons un <strong>mod\u00e8le de r\u00e9gression simple<\/strong>:<\/p>\n<pre><code>    $$Y=aX + b + E_r$$\n<\/code><\/pre>\n<p>o\u00f9:<\/p>\n<ul>\n<li><em>X<\/em> est la variable explicative<\/li>\n<li><em>Y<\/em> est la variable \u00e0 expliquer<\/li>\n<li><em>a<\/em> est le param\u00e8tre de pente de la r\u00e9gression<\/li>\n<li><em>b<\/em> est le param\u00e8tre d&rsquo;ordonn\u00e9e \u00e0 l&rsquo;origine de la r\u00e9gression<\/li>\n<li><em>E<\/em><sub><em>r<\/em><\/sub> est l&rsquo;erreur r\u00e9siduelle<\/li>\n<\/ul>\n<p>Le mod\u00e8le de r\u00e9gression simple repose sur une <strong>hypoth\u00e8se de distribution normale<\/strong> pour l&rsquo;erreur r\u00e9siduelle <em>E<\/em><sub><em>r<\/em><\/sub>:<\/p>\n<pre><code>    $$E_r \\sim \\mathcal{N}(0,\\sigma_r)$$\n<\/code><\/pre>\n<p>Consid\u00e9rons un jeu de donn\u00e9es d&rsquo;exemple. Pour \u00eatre s\u00fbre que ces donn\u00e9es suivent une loi de r\u00e9gression, et pour connaitre exactement les vrais param\u00e8tres de cette loi, je vais en fait les <strong>simuler<\/strong>:<\/p>\n<pre><code>n=15        # taille de l'\u00e9chantillon\nsigma_x=4.56  # variabilit\u00e9 de X\nsigma_r=2.67  # variabilit\u00e9 des r\u00e9sidus\na=3.44        # param\u00e8tre \"vrai\" de pente\nb=1.33        # param\u00e8tre \"vrai\" d'ordonn\u00e9ee \u00e0 l'origine\n\n## Simulation de valeurs pour X:\nX=rnorm(n,3,sigma_x)\n## Simulation de valeurs pour l'erreur r\u00e9siduelle:\nE_r=rnorm(n,0,sigma_r)\n## Simulation de valeurs pour Y:\nY=a*X+b+E_r\n<\/code><\/pre>\n<p>Je sais donc exactement comment <em>X<\/em> et <em>Y<\/em> ont \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9es, et quelles sont les <strong>valeurs r\u00e9elles<\/strong> des param\u00e8tres de la loi de r\u00e9gression&#8230;<\/p>\n<p>Cependant, je vais maintenant faire <strong>comme si je n&rsquo;en savais rien<\/strong>, afin de pouvoir, <em>in fine<\/em>, comparer les <strong>valeurs estim\u00e9es<\/strong> des param\u00e8tres \u00e0 leurs <strong>vraies valeurs<\/strong>.<\/p>\n<p>Voici comment ajuster un mod\u00e8le de r\u00e9gression simple sous R (et <strong>estimer<\/strong> les valeurs de param\u00e8tres):<\/p>\n<pre><code>reg=lm(Y~X)\na_est=reg$coeff[[2]]  \nb_est=reg$coeff[[1]]\n\nprint(c(a,a_est))\n\n## [1] 3.440 3.423\n\nprint(c(b,b_est))\n\n## [1] 1.33 1.44\n<\/code><\/pre>\n<p>On obtient bien des <strong>estimations<\/strong> de <em>a<\/em> et <em>b<\/em> <strong>proches quoique diff\u00e9rentes des valeurs r\u00e9elles<\/strong> du fait du <strong>hasard d&rsquo;\u00e9chantillonnage<\/strong>.<\/p>\n<pre><code>plot(X,Y)\nabline(b,a, col=\"red\", lwd=2)\nabline(b_est,a_est,col=\"blue\", lwd=2)\nlegend(\"topleft\",\n       c(\"valeurs r\u00e9elles des param\u00e8tres\", \"valeurs estim\u00e9es des param\u00e8tres\"), \n       col=c(\"red\",\"blue\"),\n       lwd=2)\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Regression_lineaire_Erreur_1\/regression_estimee_vs_reelle.png\" alt=\"plot of chunk\nregression_estimee_vs_reelle\" \/><\/p>\n<h2>Incertitude autour du param\u00e8tre de pente, <em>a<\/em><\/h2>\n<h1>Calcul analytique<\/h1>\n<p>Voici comment se calcule <strong>analytiquement<\/strong> l&rsquo;incertitude autour de param\u00e8tre de pente:<\/p>\n<p>Soit <em>A<\/em> la variable al\u00e9atoire correspondant \u00e0 la valeur de pente estim\u00e9e. La valeur observ\u00e9e de <em>A<\/em> est <em>a<\/em>.<\/p>\n<p>La variance de A est:<\/p>\n<pre><code>    $$s_a^2=\\frac{s_r^2}{n \\sigma_x^2}$$\n<\/code><\/pre>\n<p>Par ailleurs, si l&rsquo;on d\u00e9finit la variable al\u00e9atoire<\/p>\n<pre><code>    $$T=\\frac{a-A}{s_a}$$\n<\/code><\/pre>\n<p>alors T suit une loi de Student \u00e0 <em>\u03bd<\/em>\u2004=\u2004<em>n<\/em>\u2005\u2212\u20052 ddl.<\/p>\n<p>On peut donc calculer un intervalle de confiance d&rsquo;ordre 1\u2005\u2212\u2005<em>\u03b1<\/em> pour la pente:<\/p>\n<pre><code>    $$IC=[a-t_{1-\\alpha\/2}s_a, a + t_{1-\\alpha\/2}s_a]$$\n<\/code><\/pre>\n<p>Le principe de ce calcul est en quelque sorte le suivant: \u00e0 partir des <strong>hypoth\u00e8ses du mod\u00e8le<\/strong>, on est en mesure de pr\u00e9dire (par un raisonnement math\u00e9matique) comment la <strong>la variable al\u00e9atoire correspondant \u00e0 la pente estim\u00e9e<\/strong> se distribue <strong>autour de la pente r\u00e9elle<\/strong>. C&rsquo;est \u00e0 partir de cette distribution que l&rsquo;on peut proposer un <strong>intervalle de confiance<\/strong> pour la valeur de pente.<\/p>\n<h1>V\u00e9rification par simulations<\/h1>\n<p>V\u00e9rifions ci-apr\u00e8s le calcul de la variance de A en tirant 1000 fois au hasard une variable <em>E<\/em><sub><em>r<\/em><\/sub> conforme au mod\u00e8le:<\/p>\n<pre><code># Variance r\u00e9elle de A\ns_a=sqrt((sigma_r^2)\/(n*sigma_x^2))\nprint(s_a)\n\n## [1] 0.1512\n\n# Variance estim\u00e9e de A\ns_a_est=sqrt((sd(reg$residuals)^2)\/((n-1)*sd(X)^2))\nprint(s_a_est)\n\n## [1] 0.1533\n\ns_a_est=sqrt(((sd(reg$residuals)*((n-1)\/n))^2)\/(n*(sd(X)*((n-1)\/n))^2))\nprint(s_a_est)\n\n## [1] 0.1481\n\n# Variance de A illustr\u00e9e par des simulations\nv_A=rep(NA,1000)\nfor (i in 1:1000){\n    E=rnorm(n,0,sigma_r)\n    Y=a*X+b+E\n    mylm_tmp=lm(Y~X)\n    v_A[i]=mylm_tmp$coeff[2]\n}\ns_a_sim=sd(v_A) \nprint(s_a_sim)\n\n## [1] 0.1551\n<\/code><\/pre>\n<p>V\u00e9rifions que la variable <em>T<\/em> suit bien une loi de Student \u00e0 <em>n<\/em>\u2005\u2212\u20052 degr\u00e9s de libert\u00e9:<\/p>\n<pre><code>T_obs=(a-v_A)\/s_a_sim\nhist(T_obs, col=\"blue\", freq=F, main=\"distribution de T\", breaks=20)\n# Distribution th\u00e9orique de la variable T:\nT_theo=pt(seq(-10,10,by=0.1),df=n-2)\nT_theo=diff(T_theo)\/0.1\npoints(seq(-9.95,9.95,by=0.1),T_theo, type=\"l\", col=\"red\", lwd=2)\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Regression_lineaire_Erreur_1\/pente_Student.png\" alt=\"plot of chunk\npente_Student\" \/><\/p>\n<p>Calculons alors l&rsquo;intervalle de confiance pour <em>\u03b1<\/em>\u2004=\u20040.05:<\/p>\n<pre><code>IC_a_inf=a_est-qt(0.975,n-2)*s_a_est\nIC_a_sup=a_est+qt(0.975,n-2)*s_a_est\nprint(c(IC_a_inf,IC_a_sup))\n\n## [1] 3.103 3.743\n<\/code><\/pre>\n<p>Comparons ce r\u00e9sultat \u00e0 celui renvoy\u00e9 par la fonction <code>confint<\/code> de R, fonction \u00ab\u00a0cl\u00e9s en main\u00a0\u00bb pour le calcul des intervalles de confiance autour des param\u00e8tres de r\u00e9gression:<\/p>\n<pre><code>confint(reg)\n\n##               2.5 % 97.5 %\n## (Intercept) -0.4405  3.321\n## X            3.0793  3.766\n<\/code><\/pre>\n<p>Le r\u00e9sultat est bien le m\u00eame&#8230; \u00e0 quelques diff\u00e9rences d&rsquo;arrondi et de calcul de variance pr\u00e8s&#8230; Ouf!<\/p>\n<p>Vous constatez ici qu&rsquo;il est bien plus simple d&rsquo;obtenir ce r\u00e9sultat sous R en utilisant les fonctions disponibles, que de le calculer \u00e0 la main (et encore bien plus que de comprendre d&rsquo;o\u00f9 il sort, quand on n&rsquo;a pas les bases en maths pour \u00e7a!). C&rsquo;est \u00e0 la fois la force et la faiblesse de R&#8230; ses fonctions vous facilitent la vie en vous procurant des r\u00e9sultats simplement&#8230; mais encore faut-il \u00eatre bien s\u00fbr de comprendre de quoi il retourne pour ne pas faire des erreurs d&rsquo;interpr\u00e9tation.<\/p>\n<h2>Incertitude autour du param\u00e8tre d&rsquo;ordonn\u00e9e \u00e0 l&rsquo;origine, <em>b<\/em><\/h2>\n<p>Int\u00e9ressons-nous maintenant au deuxi\u00e8me param\u00e8tre de la r\u00e9gression, celui correspondant \u00e0 l&rsquo;<strong>ordonn\u00e9e \u00e0 l&rsquo;origine<\/strong>.<\/p>\n<h1>Calcul analytique<\/h1>\n<p>Voici comment calculer <strong>analytiquement<\/strong> l&rsquo;incertitude autour de ce param\u00e8tre (on retrouve exactement le m\u00eame type de raisonnement que pour la pente):<\/p>\n<p>Soit <em>B<\/em> la variable al\u00e9atoire correspondant \u00e0 la valeur d&rsquo;ordonn\u00e9e \u00e0 l&rsquo;origine estim\u00e9e. La valeur observ\u00e9e de <em>B<\/em> est <em>b<\/em>.<\/p>\n<p>La variance de B est:<\/p>\n<pre><code>    $$s_b^2=s_r^2\\left(\\frac{1}{n}+\\frac{\\bar(x)^2}{n \\sigma_x^2}\\right)$$\n<\/code><\/pre>\n<p>Par ailleurs, si l&rsquo;on d\u00e9finit la variable al\u00e9atoire<\/p>\n<pre><code>    $$T=\\frac{b-B}{s_b}$$\n<\/code><\/pre>\n<p>alors T suit une loi de Student \u00e0 <em>\u03bd<\/em>\u2004=\u2004<em>n<\/em>\u2005\u2212\u20052 ddl.<\/p>\n<p>On peut donc calculer un intervalle de confiance d&rsquo;ordre 1\u2005\u2212\u2005<em>\u03b1<\/em> pour la pente:<\/p>\n<pre><code>    $$IC=[b-t_{1-\\alpha\/2}s_b, b + t_{1-\\alpha\/2}s_b]$$\n<\/code><\/pre>\n<p>La fa\u00e7on de calculer cet intervalle de confiance \u00e0 la main et de l&rsquo;illustrer par des simulations \u00e9tant extr\u00eamement proche des m\u00e9thodes que nous avons utilis\u00e9es pour la pente, je vous en fais gr\u00e2ce&#8230; (et je vous demande donc de me croire sur parole quant \u00e0 la formule analytique&#8230;). Par ailleurs, nous avons d\u00e9j\u00e0 \u00e9voqu\u00e9 la fonction <code>confint<\/code> qui permet de calculer cet intervalle de confiance sous R.<\/p>\n<h2>Repr\u00e9sentation des incertitudes sur le graphe<\/h2>\n<p>Voici comment l&rsquo;on pourrait <strong>repr\u00e9senter graphiquement<\/strong> les <strong>intervalles de confiance<\/strong> autour de la pente et de l&rsquo;ordonn\u00e9e \u00e0 l&rsquo;origine du mod\u00e8le de r\u00e9gression:<\/p>\n<pre><code>layout(1:2)\nplot(X,Y, main=\"incertitude sur la pente\")\nabline(reg$coeff, lwd=2, col=\"red\")\nIC_a=confint(reg)[2,]\nabline(b_est,IC_a[1], col=\"blue\")\nabline(b_est,IC_a[2], col=\"blue\")\n\nplot(X,Y, main=\"incertitude sur l'ordonn\u00e9e \u00e0 l'origine\")\nabline(reg$coeff, lwd=2, col=\"red\")\nIC_b=confint(reg)[1,]\nabline(IC_b[1],a_est, col=\"blue\")\nabline(IC_b[2],a_est, col=\"blue\")\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Regression_lineaire_Erreur_1\/intervalles_de_confiance_parametres_regression.png\" alt=\"plot of chunk\nintervalles_de_confiance_parametres_regression\" \/><\/p>\n<p>On est donc en mesure de repr\u00e9senter <strong>l&rsquo;incertitude sur <em>a<\/em> (sous r\u00e9serve que l&rsquo;estimation de <em>b<\/em> soit correcte)<\/strong>, et <strong>l&rsquo;incertitude sur <em>b<\/em> (sous r\u00e9serve que l&rsquo;estimation de <em>a<\/em> soit correcte<\/strong>.<\/p>\n<p>Mais, me direz-vous, comment combiner ces deux incertitudes pour repr\u00e9senter <strong>l&rsquo;incertitude sur l&#8217;emplacement de la droite de r\u00e9gression<\/strong>, dans son ensemble?<\/p>\n<p>Eh bien, on ne peut pas les combiner \u00ab\u00a0directement\u00a0\u00bb: il s&rsquo;agit en fait d&rsquo;un autre r\u00e9sultat analytique (eh oui!), puisqu&rsquo;on cherche \u00e0 estimer un intervalle de confiance non pas autour de la pente <em>a<\/em>, ou de l&rsquo;ordonn\u00e9e \u00e0 l&rsquo;origine <em>b<\/em>, mais un <strong>autour d&rsquo;un point de la droite<\/strong> <em>Y\u2004=\u2004aX\u2005+\u2005b<\/em><\/p>\n<p>Pour consulter et comprendre le r\u00e9sultat analytique, vous pouvez par exemple consulter <a href=\"http:\/\/tice.inpl-nancy.fr\/modules\/unit-stat\/chapitre7\/Chapitre7.pdf\">ce document<\/a> issu des cours de statistiques de l&rsquo;\u00e9cole des Mines de Nancy.<\/p>\n<p>En pratique, voici la mani\u00e8re de calculer cet intervalle de confiance en utilisant les fonctions disponibles sous R:<\/p>\n<pre><code>plot(X,Y)\nabline(reg,col=\"red\")\nnewX=seq(from=min(X), to=max(X), length.out=100)\nprd&lt;-predict(reg,newdata=data.frame(X=newX),interval = c(\"confidence\"), \nlevel = 0.90,type=\"response\")\nlines(newX,prd[,2],col=\"blue\",lty=2)\nlines(newX,prd[,3],col=\"blue\",lty=2)\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/Regression_lineaire_Erreur_1\/intervalle_de_confiance_autour_droite_regression.png\" alt=\"plot of chunk\nintervalle_de_confiance_autour_droite_regression\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans ce billet, je souhaite montrer comment estimer l&rsquo;incertitude associ\u00e9e \u00e0 l&rsquo;estimation des param\u00e8tres (pente et ordonn\u00e9e \u00e0 l&rsquo;origine) d&rsquo;un mod\u00e8le de r\u00e9gression lin\u00e9aire simple. Pour ce faire, je vais: montrer comment le calcul d&rsquo;incertitude d\u00e9rive de r\u00e9sultats analytiques (i.e. d&rsquo;\u00e9quations qui permettent, si on le souhaite, de calculer l&rsquo;incertitude \u00ab\u00a0\u00e0 la main\u00a0\u00bb), fournir les lignes de code permettant de calculer (et repr\u00e9senter) ce m\u00eame r\u00e9sultat sous R, illustrer (pour.. <a href=\"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/regression-lineaire-erreur-et-incertitude\/\">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-296","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\/296","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=296"}],"version-history":[{"count":23,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/296\/revisions"}],"predecessor-version":[{"id":319,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/296\/revisions\/319"}],"wp:attachment":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/media?parent=296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/categories?post=296"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/tags?post=296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}