Tester l'indépendance de deux variables discrètes



I. Chi-carré d'indépendance


Le chi carré d'indépendance est une mesure d'association entre deux variables discrètes. L'hypothèse nulle testée est celle d'indépendance : deux variables sont dites indépendantes lorsqu'il n'existe aucun lien entre elles.
Supposons qu'une expérience soit menée pour tester l'effet de deux traitements sur une pathologie. En parallèle, une série de patients servant de contrôles reçoivent un placebo. L'état par rapport à la pathologie est soit "pas d'amélioration", "amélioration" ou "guérison". Les résultats de l'expérience peuvent être synthétisés dans un tableau de la manière suivante:

Pas d'améliorationAméliorationGuérison
Traitement I102159
Traitement II81577
Placebo302496

L'hypothèse nulle dans ce genre de problème est évidemment que les traitements ne se comportent pas mieux que le placebo, c'est-à-dire que les proportions d'améliorations et de guérisons sont identiques dans les 3 cohortes. On reconnait ici un problème mis sous la forme d'une table de contingence. Encore une fois, il serait possible de calculer les attendus, la valeur de χ² et la valeur p associée. La fonction chisq.test(<table>) fait tout cela à la fois. Cette fois, le premier argument est une matrice contenant la table, et il n'y a pas lieu de fournir des probabilités (les attendus sont déduits des observés, comme expliqué dans le cours théorique). Le code pour tester l'hypothèse nulle serait donc ici:


values<-c(10,21,59,8,15,77,30,24,96)
table<-matrix(data=values,nrow=3,ncol=3,byrow=TRUE)
table
##      [,1] [,2] [,3]
## [1,]   10   21   59
## [2,]    8   15   77
## [3,]   30   24   96
chisq.test(table)
## 
##  Pearson's Chi-squared test
## 
## data:  table
## X-squared = 10.795, df = 4, p-value = 0.02896

On obtient une valeur de χ² égale à 10.795. Le nombre de degré de liberté est de 4 ((Nombre de lignes - 1)*(Nombre de colonnes - 1) = (3-1)*(3-1)). La probabilité d'obtenir la table observée si l'hypothèse nulle est vraie est de 0.02896. Etant donné que cette probabilité est inférieure au seuil de 0.05, on peut conclure au rejet de l'hypothèse nulle. Les proportions d'améliorations et de guérisons dépendent donc du traitement.



Si on ne s'intéresse qu'aux guérisons, il est évidemment possible de remplacer la table utilisée dans le problème précédent par une autre dans laquelle les deux premières colonnes ont été fusionnées, ce qui donnerait:


Pas de guérisonGuérison
Traitement I3159
Traitement II2377
Placebo5496


On peut évidemment refaire une analyse telle que celle réalisée ci-dessus:

values<-c(31,59,23,77,54,96)
table<-matrix(data=values,nrow=3,ncol=2,byrow=TRUE)
table
##      [,1] [,2]
## [1,]   31   59
## [2,]   23   77
## [3,]   54   96
chisq.test(table)
## 
##  Pearson's Chi-squared test
## 
## data:  table
## X-squared = 5.0838, df = 2, p-value = 0.07872

Dans ce cas-ci, la probabilité d'obtenir la table observée si l'hypothèse nulle est vraie est de 0.07872. Etant donné que cette probabilité est supérieure au seuil de 0.05, on NE peut PAS conclure au rejet de l'hypothèse nulle. Les proportions de guérison sont donc indépendantes du traitement.

En enregistrant la fonction dans une variable, il est possible d'avoir accès à des informations supplémentaires concernant le test de chi-carré, telles que les valeurs attendues:

c2<-chisq.test(table)
c2$expected
##          [,1]      [,2]
## [1,] 28.58824  61.41176
## [2,] 31.76471  68.23529
## [3,] 47.64706 102.35294


Une alternative au test de chi-carré est de procéder à une comparaison de proportions (de guérisons) entre les trois catégories, à l'aide de la fonction prop.test. Le code serait le suivant:

guerisons<-c(59,77,96)
effectifs<-c(90,100,150)
prop.test(guerisons,n=effectifs,correct=FALSE)
## 
##  3-sample test for equality of proportions without continuity
##  correction
## 
## data:  guerisons out of effectifs
## X-squared = 5.0838, df = 2, p-value = 0.07872
## alternative hypothesis: two.sided
## sample estimates:
##    prop 1    prop 2    prop 3 
## 0.6555556 0.7700000 0.6400000

On peut constater que le résultat obtenu est exactement le même que celui obtenu avec le test de chi-carré.




II. Test exact de Fisher


On sait que, lorsque les effectifs sont trop petits (les attendus sont inférieurs à 10, par exemple), le χ² ne donne plus une approximation suffisante. On doit alors se tourner vers des tests exacts. Dans le cas de tables de contingence, le test exact correspondant est le test exact de Fisher, qui calcule la probabilité globale de toutes les tables s'écartant aussi fort, voire plus fort, de la table attendue que la table effectivement observée. Illustrons sur le problème suivant. Pour montrer que les problèmes dermatologiques affectent plus certaines races de chiens que d'autres, un vétérinaire a mis 12 chiens dans un environnement propice au développement de dermatoses. Parmi les 5 caniches, 1 seul a développé une dermatose, alors que 6 des 7 sharpeïs sont affectés. On demande si ces données expérimentales permettent de conclure à un effet de la race.
On peut encore une fois représenter ces données sous la forme d'une table de contingence:


DermatosesIndemnesTOTAL
Caniches145
Sharpeïs617
TOTAL7512


Comme d'habitude, on émettra l'hypothèse nulle qu'il n'y a pas d'effet de race. Dans ce cas, comme il y a au total 7 chiens affectés sur les 12 utilisés, on s'attendrait à avoir 7/12 des 5 caniches (soit, à peu moins que 3) affectés et 7/12 des 7 sharpeïs (soit, un peu plus que 4) également affectés . On voit qu'on a moins d'affecté que prévu chez les caniches (et plus chez les sharpeïs). On peut, en employant la loi hypergéométrique (voir cours théorique), calculer la probabilité de la table observée si l'hypothèse nulle est vraie. On peut également calculer la probabilité associée aux tables qui s'écartent encore plus de ce qui était prévu: il y en a une seule dans le cas présent, celle où aucun caniche ne serait affecté alors que tous les sharpeïs le seraient. Calculons donc la probabilité de ces deux tables:

p1<-dhyper(1,5,7,7)
p2<-dhyper(0,5,7,7)
p1+p2
## [1] 0.04545455
#OU directement
phyper(1,5,7,7)
## [1] 0.04545455


On peut arriver au même résultat en utilisant la fonction fisher.test(<valeurs>,alternative="less",conf.int=FALSE). L'argument "alternative" est utilisé ici pour spécifier qu'on ne s'intéresse qu'aux tables ayant en première ligne et première colonne une valeur inférieure (less) ou égale à celle effectivement observée (soit, 1 ici). L'argument "conf.int" est utilisé pour supprimer l'affichage de l'intervalle de confiance du Odds Ratio, que nous ne considérerons pas ici. Le code est donc:

table<-matrix(data=c(1,4,6,1),nrow=2,ncol=2,byrow=TRUE)
table
##      [,1] [,2]
## [1,]    1    4
## [2,]    6    1
fisher.test(table, alternative="less", conf.int=FALSE)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  table
## p-value = 0.04545
## alternative hypothesis: true odds ratio is less than 1
## sample estimates:
## odds ratio 
## 0.06251988

Ou avec la table encodée dans l'autre sens:

table<-matrix(data=c(6,1,1,4),nrow=2,ncol=2,byrow=TRUE)
table
##      [,1] [,2]
## [1,]    6    1
## [2,]    1    4
fisher.test(table, alternative="greater", conf.int=FALSE)
## 
##  Fisher's Exact Test for Count Data
## 
## data:  table
## p-value = 0.04545
## alternative hypothesis: true odds ratio is greater than 1
## sample estimates:
## odds ratio 
##   15.99491

Les probabilités obtenues sont les mêmes. Par contre l'odds ratio estimé est différent. Dans le premier cas, il correspond au rapport de odds des Caniches sur les Sharpeïs. Alors que dans le deuxième cas, il correspond au rapport de odds des Sharpeïs sur les Caniches.