{"id":264,"date":"2015-07-01T07:00:18","date_gmt":"2015-07-01T07:00:18","guid":{"rendered":"http:\/\/blog.tiran.info\/?p=264"},"modified":"2015-07-01T07:00:18","modified_gmt":"2015-07-01T07:00:18","slug":"anova-a-un-facteur-avec-r","status":"publish","type":"post","link":"https:\/\/blog.tiran.stream\/?p=264","title":{"rendered":"ANOVA \u00e0 un facteur avec R"},"content":{"rendered":"<p style=\"text-align: justify;\">Dans la continuit\u00e9 du <a href=\"http:\/\/blog.tiran.info\/anova-a-un-facteur-avec-oracle\">pr\u00e9c\u00e9dent billet<\/a>, en utilisant le m\u00eame jeu de donn\u00e9es, je r\u00e9alise cette fois-ci le test ANOVA avec R.<\/p>\n<p style=\"text-align: justify;\"><strong>Chargement et pr\u00e9paration des donn\u00e9es<\/strong><\/p>\n<p style=\"text-align: justify;\">Les donn\u00e9es sont charg\u00e9es dans un dataframe \u00ab\u00a0petrol\u00a0\u00bb dont on ne conserve que les champs d&rsquo;int\u00e9r\u00eat pour la suite de l&rsquo;analyse. Les prix sont convertis au format num\u00e9rique (ils sont sous forme de facteur initialement) et on supprime les lignes anciennes (plus d&rsquo;une semaine):<\/p>\n<pre style=\"text-align: justify;\">&gt; petrol &lt;- read.csv2(\"C:\/RTI\/Stats\/prix_des_carburants_j_7.csv\", encoding=\"UTF-8\")\n&gt; petrol &lt;- petrol[,c(3,14,15,22)]\n&gt; names(petrol) &lt;- c(\"Axe\",\"MAJ\",\"Gazole\",\"Marque\")\n&gt; \n&gt; petrol$Gazole &lt;- as.numeric(levels(petrol$Gazole))[petrol$Gazole]\n&gt; \n&gt; petrol &lt;- petrol[which(!is.na(petrol$Gazole)),]\n&gt; \n&gt; petrol$MAJ &lt;- as.Date(substr(petrol$MAJ,1,10))\n&gt; petrol &lt;- petrol[which(petrol$MAJ&gt;=as.Date(\"2015-06-03\")),]\n&gt; \n\n<\/pre>\n<p style=\"text-align: justify;\"><strong>Groupement des donn\u00e9es<\/strong><\/p>\n<p style=\"text-align: justify;\">On adjoint un champ type_distrib qui va servir \u00e0 grouper les lignes par canal de distribution: \u00ab\u00a0Grande Distribution\u00a0\u00bb, \u00ab\u00a0Distributeur\u00a0\u00bb et \u00ab\u00a0Distrib. Low Cost\u00a0\u00bb. Tout comme lors de la r\u00e9alisation du test par Oracle, on utilise les marques des stations comme crit\u00e8re de classification. On exclut cette fois encore les stations d&rsquo;autoroute et les stations ind\u00e9pendantes:<\/p>\n<pre style=\"text-align: justify;\">&gt; petrol$type_distrib &lt;- \"?\"\n&gt; \n&gt; petrol$type_distrib[which(petrol$Marque %in% c(\"Agip\",\"Esso\",\"BP\",\"Avia\",\"Total\",\"Elan\",\"Shell\",\"Dyneff\",\"VITO\"))] &lt;- \"Distributeur\"\n&gt; \n&gt; petrol$type_distrib[which(petrol$Marque %in% c(\"Intermarch\u00e9\",\"Syst\u00e8me U\",\"Auchan\",\"Leclerc\", \"Carrefour\", \"Carrefour Market\", \"Carrefour Contact\", \"Atac\", \"Casino\", \"Colruyt\",\"CORA\",\"G\u00e9ant\",\"Netto\", \"Leader Price\",\"Ecomarch\u00e9\",\"Intermarch\u00e9 Contact\",\"Super Casino\",\"Supermarch\u00e9 Match\",\"Simply Market\",\"Shopi\"))] &lt;- \"Grande Distribution\"\n&gt; \n&gt; petrol$type_distrib[which(petrol$Marque %in% c(\"Esso Express\", \"Total Access\"))] &lt;- \"Distrib. Low Cost\"\n&gt; \n&gt; petrol$type_distrib[which(petrol$Axe==\"A\")] &lt;- \"?\"\n&gt; petrol &lt;- petrol[which(petrol$type_distrib!=\"?\"),]\n&gt; \n&gt; table(petrol$type_distrib[])\n\n  Distrib. Low Cost        Distributeur Grande Distribution \n                358                1203                3834 \n&gt;<\/pre>\n<p style=\"text-align: justify;\">Les effectifs sont identiques \u00e0 ceux pr\u00e9c\u00e9demment obtenus avec Oracle.<\/p>\n<p style=\"text-align: justify;\"><strong>V\u00e9rification de l\u2019homosc\u00e9dasticit\u00e9<\/strong><\/p>\n<pre style=\"text-align: justify;\">&gt; aggregate(Gazole~type_distrib, data=petrol, var)\n         type_distrib       Gazole\n1   Distrib. Low Cost 0.0002230324\n2        Distributeur 0.0010942950\n3 Grande Distribution 0.0007174682\n&gt;<\/pre>\n<p style=\"text-align: justify;\">On retrouve les m\u00eame variances que lors de l&rsquo;analyse men\u00e9e avec Oracle.\u00a0L&rsquo;amplitude de la diff\u00e9rence de ces derni\u00e8res\u00a0appelle \u00e0 la vigilance (cf post pr\u00e9c\u00e9dent).<\/p>\n<p style=\"text-align: justify;\"><strong>R\u00e9alisation du test ANOVA<\/strong><\/p>\n<pre style=\"text-align: justify;\">&gt; anova_res &lt;- aov(Gazole~type_distrib, data=petrol)\n&gt; summary(anova_res)\n               Df Sum Sq Mean Sq F value Pr(&gt;F)    \ntype_distrib    2  7.940   3.970    5164 &lt;2e-16 ***\nResiduals    5392  4.145   0.001                   \n---\nSignif. codes:  0 \u2018***\u2019 0.001 \u2018**\u2019 0.01 \u2018*\u2019 0.05 \u2018.\u2019 0.1 \u2018 \u2019 1\n&gt;<\/pre>\n<p style=\"text-align: justify;\">La p-value est tr\u00e8s faible et on rejette l&rsquo;hypoth\u00e8se nulle. Il y a donc au moins un groupe dont la moyenne de prix est statistiquement diff\u00e9rente des autres.<\/p>\n<p style=\"text-align: justify;\">Contrairement \u00e0 l&rsquo;analyse r\u00e9alis\u00e9e avec Oracle, on dispose cette fois-ci de tests post-hoc permettant de d\u00e9terminer l&rsquo;origine de la diff\u00e9rence.<\/p>\n<p style=\"text-align: justify;\"><strong>R\u00e9alisation du test post-hoc<\/strong><\/p>\n<p style=\"text-align: justify;\">On utilise ici un <a href=\"https:\/\/en.wikipedia.org\/wiki\/Tukey's_range_test\" target=\"_blank\">test HSD de Tuckey<\/a> dont l&rsquo;hypoth\u00e8se nulle est qu&rsquo;il n&rsquo;y a pas de diff\u00e9rence significative entre les moyennes des groupes.<\/p>\n<pre style=\"text-align: justify;\">&gt; tukey_res &lt;- TukeyHSD(anova_res)\n&gt; tukey_res\n  Tukey multiple comparisons of means\n    95% family-wise confidence level\n\nFit: aov(formula = Gazole ~ type_distrib, data = petrol)\n\n$type_distrib\n                                             diff          lwr          upr     p adj\nDistributeur-Distrib. Low Cost         0.08912650  0.085213249  0.093039754 0.0000000\nGrande Distribution-Distrib. Low Cost -0.00329578 -0.006887925  0.000296364 0.0799709\nGrande Distribution-Distributeur      -0.09242228 -0.094570300 -0.090274265 0.0000000\n\n&gt;<\/pre>\n<p style=\"text-align: justify;\">L&rsquo;hypoth\u00e8se H0 est rejet\u00e9e pour deux combinaisons &#8211; \u00e0 savoir, \u00ab\u00a0Distributeur\u00a0\u00bb\/\u00a0\u00bbDistrib. Low Cost\u00a0\u00bb et \u00ab\u00a0Distributeur\u00a0\u00bb\/\u00a0\u00bbGrande Distribution\u00a0\u00bb. On peut donc dire qu&rsquo;il existe une diff\u00e9rence statistiquement significative entre les moyennes de prix entre le groupe \u00ab\u00a0Distributeur\u00a0\u00bb et les groupes \u00ab\u00a0Distrib. Low Cost\u00a0\u00bb et \u00ab\u00a0Grande Distribution\u00a0\u00bb.<\/p>\n<p style=\"text-align: justify;\">En revanche, la p-value d\u00e9passe le seuil de 5% pour la combinaison \u00ab\u00a0Grande Distribution\u00a0\u00bb\/\u00a0\u00bbDistrib. Low Cost\u00a0\u00bb. On ne peut donc pas affirmer qu&rsquo;il existe une diff\u00e9rence de moyenne significative entre ces deux groupes.<\/p>\n<p style=\"text-align: justify;\"><strong>Analyse graphique<\/strong><\/p>\n<p style=\"text-align: justify;\">La repr\u00e9sentation de la distribution des prix par groupe via un boxplot (dont on exclut les valeurs extr\u00eames &#8211; \u00e0 savoir, 11 valeurs hors de la fen\u00eatre 1.1\u20ac &#8211; 1.4\u20ac) permet de corroborer visuellement le r\u00e9sultat du test HSD de Tukey.<\/p>\n<pre>&gt; boxplot(Gazole~type_distrib, data=petrol[which(petrol$Gazole&gt;1.1 &amp; petrol$Gazole&lt;1.4),])<\/pre>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/blog.tiran.stream\/wp-content\/uploads\/2015\/06\/boxplt-anova.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-269\" src=\"https:\/\/blog.tiran.stream\/wp-content\/uploads\/2015\/06\/boxplt-anova.png\" alt=\"boxplt-anova\" width=\"450\" height=\"377\" \/><\/a><br \/>\nOn peut aussi repr\u00e9senter au sein d&rsquo;un m\u00eame graphique les histogrammes des 3 groupes. Le recouvrement est clair entre les groupes \u00ab\u00a0Distributeur Low Cost\u00a0\u00bb et \u00ab\u00a0Grande Distribution\u00a0\u00bb alors que l&rsquo;histogramme du groupe \u00ab\u00a0Distributeur\u00a0\u00bb est clairement d\u00e9cal\u00e9 vers la droite.<\/p>\n<pre style=\"text-align: justify;\">&gt; library(ggplot2)\n&gt; ggplot(petrol[which(petrol$Gazole&gt;1.1 &amp; petrol$Gazole&lt;1.4),], aes(Gazole, fill = type_distrib)) + geom_histogram(alpha = 0.5, position = 'identity') + xlab(\"Prix\") + ylab(\"Nombre de stations\") + scale_fill_discrete(name=\"Canal de distribution\")\nstat_bin: binwidth defaulted to range\/30. Use 'binwidth = x' to adjust this.\n&gt;\n<\/pre>\n<p><a href=\"https:\/\/blog.tiran.stream\/wp-content\/uploads\/2015\/06\/hist-anova.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-270\" src=\"https:\/\/blog.tiran.stream\/wp-content\/uploads\/2015\/06\/hist-anova.png\" alt=\"hist-anova\" width=\"550\" height=\"461\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans la continuit\u00e9 du pr\u00e9c\u00e9dent billet, en utilisant le m\u00eame jeu de donn\u00e9es, je r\u00e9alise cette fois-ci le test ANOVA<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[12,14,16],"tags":[],"class_list":["post-264","post","type-post","status-publish","format-standard","hentry","category-r","category-statistique","category-tests-dhypotheses"],"_links":{"self":[{"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=\/wp\/v2\/posts\/264","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=264"}],"version-history":[{"count":0,"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=\/wp\/v2\/posts\/264\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}