Begin'R
Les statistiques avec R
Navigation
[Retour au sommaire]
# Tests non-paramétriques d'homogénéité :Objectifs * Mettre en place un test non paramétrique d'homogénéité. | Rôle | Commande R | Arguments | Exemple | Exercice | |:--------------------------------------------------:|:-----------------:|:--------------------------:|:-----------------:|:---------------:| | Comparaison de 2 échantillons indépendants |`wilcox.test()` | `x`, `y`, `paired = FALSE` | [ici](#ExeInd) | | | Comparaison de 2 échantillons appariés |`wilcox.test()` | `x`, `y`, `paired = TRUE` | [ici](#ExeApp) | [ici](#ExoApp) | | Comparaison de plus de 2 échantillons indépendants |`kruskal.test()` |`x`, `g` | [ici](#ExeKW) | [ici](#ExoKW) | | Comparaison de plus de 2 échantillons appariés | `friedman.test()` |`y`, `groups` | [ici](#ExeFried) | | :Exemple {#ExeInd, toggle = popup} Dans deux forêts distinctes, on a mesuré les hauteurs respectivement de 13 et 14 arbres choisis au hasard et de manière indépendante. Les données récoltées sont les suivantes: |Forêt 1 | Forêt 2| |-------|--------| |23,4|22,5| |24,6|23,7| |25,0|24,3| |26,3|25,3| |26,6|26,1| |27,0|26,7| |27,7|27,4| |24,4|22,9| |24,9|24,0| |26,2|24,5| |26,5|26,0| |26,8|26,4| |27,6|26,9| ||28,5| Les hauteurs des deux forêts ont-elles la même distribution ? ```r foret1 <- c(23.4,24.6,25.0,26.3,26.6,27.0,27.7,24.4,24.9,26.2,26.5,26.8,27.6) foret2 <- c(22.5,23.7,24.3,25.3,26.1,26.7,27.4,22.9,24.0,24.5,26.0,26.4,26.9,28.5) wilcox.test(foret1, foret2, paired = FALSE) ``` ``` ## ## Wilcoxon rank sum exact test ## ## data: foret1 and foret2 ## W = 112, p-value = 0.3255 ## alternative hypothesis: true location shift is not equal to 0 ``` La valeur-$p$ étant supérieure à 5%, l'hypothèse $\mathcal{H}_0$ (qui stipule que les deux distributions sont équivalentes) ne peut pas être rejetée. :Exemple {#ExeApp, toggle = popup} Comparaison de deux vins soumis à 5 experts (chaque expert note les deux vins) sachant que : - le premier vin a obtenu : 13, 13, 14, 15, 15, 15. - le second vin a obtenu : 11, 13, 16, 16, 19. Dans un tel cas, les échantillons sont appariés (pas indépendants). Devant le faible nombre d'observations, un test de Wilcoxon est appliqué ici. Les deux échantillons étant appariés, il faut préciser `paired = TRUE`. ```r Notes1 <- c(13, 13, 14, 15, 15) Notes2 <- c(10, 12, 14, 15, 17) wilcox.test(Notes1, Notes2, paired = TRUE) ``` ``` ## Warning in wilcox.test.default(Notes1, Notes2, paired = TRUE): cannot compute ## exact p-value with zeroes ``` ``` ## ## Wilcoxon signed rank test with continuity correction ## ## data: Notes1 and Notes2 ## V = 4, p-value = 0.7893 ## alternative hypothesis: true location shift is not equal to 0 ``` D'après les résultats ci-dessus (valeur-$p$ > 5%), on ne peut pas rejeter l'hypothèse les distributions des deux séries de notes seraient équivalentes. :Exercice {#ExoApp, toggle = popup} Le but est d'étudier le rôle de l'école maternelle sur la "compréhension sociale" des enfants. Pour cela, 8 paires de jumeaux sont étudiées. L'un des jumeaux est envoyé à l'école, l'autre reste à la maison durant un trimestre. L'affectation se fait au hasard. Voici les résultats obtenus: | Paires | Scores enfants scolarisés | Scores enfants non scolarisés| |---------|-------------------------|--------------------------| |a|82|63| |b|69|42| |c|73|74| |d|43|37| |e|58|51| |f|56|43| |g|76|80| |h|65|62| Problématique: est-il possible de conclure, au seuil de 5%, à une différence significative entre la compréhension sociale des enfants restés à la maison et celle des enfants scolarisés ? 1. Effectuer un test des signes pour comparer les deux échantillons. [Qu'est ce qu'un test des signes ?](#signes) :Aide {#signes, toggle = popup} Il s'applique au cas de deux échantillons associés par paires. Il tire son nom du fait qu'il utilise les signes + et -, au lieu de données quantitatives. Il est basé uniquement sur l'étude des signes des différences observées entres les paires d'individus, quelles que soient les valeurs de ces différences. L'hypothèse nulle peut s'écrire: $P(+)=P(-)=1/2$ - $P(+)$ = la probabilité d'observer une différence positive - $P(-)$ = la probabilité d'observer une différence négative Lorsque l'hypothèse nulle est vraie et pour $N$ paires d'observations, le nombre de différences positives (ou négatives) suit la loi binomiale de paramètres $p = 1/2$ et $N$. Le test permet de comparer, grâce à cette distribution, le nombre observé de signes plus (ou moins) et le nombre attendu $N/2$. 2. Utiliser la fonction `wilcox.test()` pour comparer les deux échantillons :Corrigé {#rep_CompEchApp, toggle=collapse, title-display=show} 1. Après avoir saisi les deux jeux de données: ```r Sco <- c(82,69,73,43,58,56,76,65) NonSco <- c(63,42,74,37,51,43,80,62) ``` l'objet `Diff` est créé pour voir la différence entre les échantillons: ```r Diff <- Sco - NonSco Diff ``` ``` ## [1] 19 27 -1 6 7 13 -4 3 ``` $N=8$ différences non nulles sont observées dont $x=6$ différences positives. ```r binom.test(x = 6, n = 8, p = 0.5, alternative = "two.sided") ``` ``` ## ## Exact binomial test ## ## data: 6 and 8 ## number of successes = 6, number of trials = 8, p-value = 0.2891 ## alternative hypothesis: true probability of success is not equal to 0.5 ## 95 percent confidence interval: ## 0.3491442 0.9681460 ## sample estimates: ## probability of success ## 0.75 ``` D'après la valeur de la valeur-$p$ (supérieur à 5%), on ne peut pas rejeter l’hypothèse que les proportions de signes positifs et négatifs soient égales. 2. La fonction `wilcox.test()` est appliquée sur les données en spécifiant l'argument `paired = TRUE` comme les échantillons sont appariés. ```r wilcox.test(Sco, NonSco, paired = TRUE) ``` ``` ## ## Wilcoxon signed rank exact test ## ## data: Sco and NonSco ## V = 32, p-value = 0.05469 ## alternative hypothesis: true location shift is not equal to 0 ``` D'après la valeur de la valeur-$p$ (supérieure à 5%), on ne peut pas rejeter l’hypothèse d’égalité de score de compréhension sociale entre les enfants scolarisés et les enfants non scolarisés. :Exemple {#ExeKW, toggle = popup} On considère les données issues d'une étude sur la production de melons. | Jeu de données | Excel | CSV | Présentation | |-----------------|--------|-------------|----------------| | DonneesMelons | [](donnees/DonneesMelons.xlsx) | [](donnees/DonneesMelons.csv) | [](video/DonneesMelons.html) | On se demande si le poids (variable `Poids`) des melons est lié au créneau de plantation (variable `Creneau`). Sous l'hypothèse que les échantillons sont indépendants, le test de Kruskal-Wallis est mis en place à l'aide de la fonction `kruskal.test()` ```r Donnees <- read.csv2("DonneesMelons.csv", header = TRUE, stringsAsFactors = TRUE) Donnees$Creneau <- as.ordered(Donnees$Creneau) kruskal.test(Donnees$Poids, Donnees$Creneau) ``` ``` ## ## Kruskal-Wallis rank sum test ## ## data: Donnees$Poids and Donnees$Creneau ## Kruskal-Wallis chi-squared = 22.943, df = 4, p-value = 0.00013 ``` La valeur-$p$ étant inférieure à 5%, on peut conclure que le poids diffère significativement suivant la période de plantation. :Exemple {#ExeFried, toggle = popup} Supposons que l'on veuille étudier les résultats de 3 groupes (A, B, C) dans 4 conditions différentes. Chaque groupe contient 4 sujets, chacun ayant été assigné à chacune des quatre conditions, les données sont donc appariées selon la condition. Les résultats sont présentés dans le tableau suivant: | Conditions| I | II | III | IV| |-----------|---|----|-----|---| | Groupe A | 9 | 4 | 1 | 7 | | Groupe B | 6 | 5 | 2 | 8 | | Groupe C | 9 | 1 | 2 | 6 | On teste l'hypothèse $\mathcal{H}_0$ selon laquelle tous les échantillons, colonnes, proviennent de la même population. Le test de Friedman teste si les totaux des rangs par colonne sont significativement différents. ```r Donnees <- data.frame(y = c(9, 6, 9, 4, 5, 1, 1, 2, 2, 7, 8, 6), Groupe = c("A", "B", "C","A", "B", "C","A", "B", "C","A", "B", "C"), Condition = c("I","I","I","II","II","II","III","III","III","IV","IV","IV")) friedman.test(Donnees$y, Donnees$Condition, Donnees$Groupe) ``` ``` ## ## Friedman rank sum test ## ## data: Donnees$y, Donnees$Condition and Donnees$Groupe ## Friedman chi-squared = 7.4, df = 3, p-value = 0.06018 ``` La valeur-$p$ étant inférieure à 5%, on ne rejette pas l'hypothèse $\mathcal{H}_0$. :Exercice {#ExoKW, toggle = popup, title = "tests de Kruskal-Wallis et ANOVA"} On considère ici les données issues de l'étude i-Share. | Jeu de données | Excel | CSV | |-----------------|--------|-------------| | DonneesIShare | [](donnees/DonneesIShare.xlsx) | [](donnees/DonneesIShare.csv) | On se demande si la mauvaise alimentation (variable `malbouffe`) chez les étudiants est liée à leur lieu de vie (variable `domicile`). 1. Effectuer un test paramétrique pour répondre à la problématique. :Aide{#aide1, toggle=collapse} Le test paramétrique associé à une comparaison de plusieurs moyennes est l'anova 2. Effectuer un test non paramétrique pour répondre à la problématique et comparer les résultats avec le test paramétrique. :Aide{#aide2, toggle=collapse} Le test non paramétrique associé à une comparaison de plusieurs échantillons est le test de Kruskal-Wallis. :Corrigé {#rep_KW, toggle=collapse, title-display=show} 1. Le test paramétrique associé à une comparaison de plusieurs moyennes est l'anova. Nous utilisons donc la fonction `aov()`. ```r Donnees <- read.csv2("DonneesIShare.csv", header = TRUE, stringsAsFactors = TRUE) Anova <- aov(formula = Donnees$malbouffe ~ Donnees$domicile) summary(Anova) ``` ``` ## Df Sum Sq Mean Sq F value Pr(>F) ## Donnees$domicile 4 13485 3371 1346 <2e-16 *** ## Residuals 4995 12513 3 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ``` 2. Le test non paramétrique associé à une comparaison de plusieurs échantillons est le test de Kruskal-Wallis. Nous utilisons donc la fonction `kruskal.test()`. ```r kruskal.test(Donnees$malbouffe, Donnees$domicile) ``` ``` ## ## Kruskal-Wallis rank sum test ## ## data: Donnees$malbouffe and Donnees$domicile ## Kruskal-Wallis chi-squared = 2420.5, df = 4, p-value < 2.2e-16 ``` Les deux tests donnent des valeurs-$p$ inférieures à 5%. Nous pouvons donc conclure que la mauvaise alimentation est significativement liée à leur lieu de vie. :Remarque Les arguments `g` et `groups` sont des vecteurs de type facteur donnant l'appartenance de chaque élément de `x` ou `y` à un groupe. :Suite des Tests {#tests, toggle=collapse, title-display=hidden} [Introduction : exemple du Khi-deux](caps_7_1_objectifs&intro_chi-deux.html) [Tests de conformité et intervalles de confiance](caps_7_2_conformite_para.html) [Tests d'ajustement à une distribution théorique](caps_7_3_conformite_distrib.html) [Tests paramétriques d'homogénéité](caps_7_4_homogeneite_para.html) [Tests non-paramétriques d'homogénéité](caps_7_5_homogeneite_non_para.html) [Tests d'indépendance de deux variables qualitatives](caps_7_6_indep.html) [Tests de corrélation de deux variables quantitatives](caps_7_7_corr.html) [Résumé](caps_7_8_resume.html)