Le test exact de Fisher

snedecor

Ronald Aylmer Fisher

\bullet Historique :

\begin{tabular}{|l|c|c|} \hline Bloc & 20/05/2013-V1 & 29/05/2020-V2 \\ \hline Historique &  & Cr\'eation \\ \hline Sommaire &  & Cr\'eation \\ \hline Pr\'esentation & Cr\'eation & MAJ \\ \hline Le test & Cr\`eation & MAJ \\ \hline Tendance lorsque... & Cr\'eation & MAJ \\ \hline Annexe th\'eo... & Cr\'eation & MAJ \\ \hline Exemple & Cr\'eation & MAJ \\ \hline Appli... info... & Cr\'eation & Devient Appli... sous R \\ \hline Appli... sous SAS &  & Cr\'eation \\ \hline Bibliographie & Cr\'eation & MAJ \\ \hline \end{tabular}

\bullet Sommaire :

  • Présentation
  • Le test
    • Calcul de la p-valeur dans le cadre d’un test unilatéral 
    • Le test de Fisher-Freeman-Halton
    • L’algorithme de Mehta et Pater
    • Tendance pour le rejet de H_0
  • Tendance lorsque n \rightarrow + \infty
  • Annexe théorique
  • Exemples
  • Application sous R
  • Application sous SAS
  • Bibliographie

\bullet Présentation :

Publié en 1922 par Ronald Aylmer Fisher, le test des probabilités exactes de Fisher est une approche non paramétrique permettant de tester si deux variables qualitatives (nominales ou ordinales) distinctes X ^1, X ^2 à deux modalités sont indépendantes. C’est en 1951 que le test exact de Fisher a été étendu aux tableaux à plus de deux dimensions par G. H. Freeman et J. H. Halton devenant le test de Fisher-Freeman-Halton, mais ce nom est très peu utilisé et c’est celui de son ancêtre qui est resté.

Le test exact de Fisher est une alternative au test du \chi ^2 lorsque la condition sur les effectifs théoriques n’est pas respectée ou bien lorsque les effectifs marginaux sont particulièrement déséquilibrés.

En général, ce test est à éviter sur des tableaux d’effectifs croisés trop grands du fait du nombre important de calculs que cela implique. Néanmoins, certains logiciels ont implémenté des algorithmes permettant de l’exécuter quelle qu’en soit la dimension ou quelle qu’en soit la taille d’échantillon.

\bullet Le test :

Hypothèse préliminaire : variables qualitatives non appariées.

L’idée du test exact de Fisher est de comparer la distribution observée avec l’ensemble des combinatoires possibles et issues d’une distribution aléatoire. Le test exact de Fisher est, à la base, développé pour les tableaux de taille 2 \times 2 mais on verra plus loin sa version étendue.

On peut alors présenter le tableau des effectifs croisés de X ^1 et X ^2 :

\begin{tabular}{|l|c|c|} \hline  & X1 : modalit\'e 1 & X1 : modalit\'e 2 \\ \hline X2 : modalit\'e 1 & a & b \\ \hline X2 : modalit\'e 2 & c & d \\ \hline \end{tabular}

On se retrouve donc dans le cadre d’une distribution hypergéométrique et la formule générale pour la statistique du test exact de Fisher est donnée par :

p' = \frac{(a + b)! (c + d)! (a + c)! (b + d)!}{a! b! c! d! n!}

Le calcul de la p-valeur est assez laborieuse à obtenir. En effet, il faut comparer la statistique de test associée aux données observées à celles obtenues sur chacune des K configurations conservant les mêmes effectifs marginaux (a + b), (c + d), (a + c), (b + d) et de déterminant,nommé également « éloignement » :

|a \cdot d - c \cdot b|_{\mbox{Configuration } k} \geq |a \cdot d - c \cdot b|_{\mbox{Observ\'e}}

Dans un cadre bilatéral, la p-valeur vaut alors :

p = p' + \sum_{k = 1} ^K p_k \cdot 1_{p_k \geq p'}

p_k désigne la valeur de la statistique de test calculée sur la configuration numéro k. La p-valeur est comparée directement au seuil de confiance fixé \alpha.

L’hypothèse H_0 est :

Indépendance des deux variables / \pi_{X^1} = \pi_{X^2}

Les hypothèses alternatives sont alors,

H_1 : \pi_{X^1} > \pi_{X^2}, pour un test unilatéral à droite ;

H_1 : \pi_{X^1} < \pi_{X^2}, pour un test unilatéral à gauche ;

H_1 : \pi_{X^1} \neq \pi_{X^2}, pour un test bilatéral.

Calcul de la p-valeur dans le cadre d’un test unilatéral :

Pour un test unilatéral exact de Fisher on considère directement le déterminant sans valeur absolue. Par conséquent, dans le cadre unilatéral à gauche la formule est la même que pour le test bilatéral. Et pour un test unilatéral à droite :

p = 1 - \sum_{k = 1} ^K p_k \cdot 1_{p_k > p'}

Le test de Fisher-Freeman-Halton :

Freeman et Halton ont proposé une généralisation du test exact de Fisher. En partant du tableau croisé obtenu sur X ^1, X ^2 à, respectivement, K_1, K_2 modalités :

\begin{tabular}{|l|c|c|c|c|c|c|} \hline X1-X2 & Modalit\'e 1 & ... & Modalit\'e k2 & ... & Modalit\'e K2 & Totaux \\ \hline Modalit\'e 1 & n1,1 & ... & n1,k2 & ... & n1,K2 & n1. \\ \hline . & . & . & . & . & . & . \\ \hline Modalit\'e k1 & nk1,1 & ... & nk1,k2 & ... & nk1,K2 & nk1,. \\ \hline . & . & . & . & . & . & . \\ \hline Modalit\'e K1 & nK1,1 & ... & nK1,k2 & ... & nK1,K2 & nK1,. \\ \hline Totaux & n.,1 & ... & n.,k2 & ... & n.,K2 & n.,. \\ \hline \end{tabular}

La statistique de test vaut alors :

p = \frac{n_{1,.}! \times \cdots \times n_{K1,.}! \times n_{.,1}! \times \cdots \times n_{.,K2}!}{n_{1,1}! \times \cdots \times n_{K1,K2}! \times n_{.,.}!}

La mesure d’éloignement se calcul de la même manière que pour le test exact de Fisher.

Le test de Fisher-Freeman-Halton est reconnu comme étant conservateur du fait de sa méthode de calcul faisant intervenir un plus grand nombre de configurations que dans le cas du test exact de Fisher.

L’algorithme de Mehta et Patel :

Comme on l’a vu, le problème majeur qui réside dans le test exact de Fisher est le nombre de configurations à déterminer et à vérifier pour le calcul de la p-valeur. Ainsi, sur un tableau de dimensions très grandes et d’effectif important, le temps de calcul nécessaire explose considérablement et le recours à un logiciel, même puissant, n’est pas une solution suffisante puisque la mémoire physique utilisée sera vite dépassée par l’amas de configurations à dérouler.

Mehta et Patel propose un algorithme basé sur la stratégie des réseaux acycliques, soit un réseau ouvert et non cyclique impliquant un nœud initial et un nœud final, permettant d’estimer rapidement ces configurations, de les sélectionner et de sommer leur statistique de test pour le calcul immédiat du test exact de Fisher.

Soit le tableau d’effectifs croisés T de taille L \times C issu des variables X ^1, X ^2 et L_i = \sum_{j = 1} ^C T_{i,j} effectifs marginaux en ligne. Notons A l’ensemble de toutes les configurations possibles vérifiant la condition sur les effectifs marginaux.

L’idée de l’algorithme de Mehta et Patel est de définir l’ensemble des configurations possibles, et issues des données observées, isomorphes à l’ensemble A. Ainsi, la longueur des chemins du réseaux menant à l’une des configurations d’intérêt est égale à la valeur de sa statistique de test. Le problème à résoudre revient alors à déterminer et sommer la longueur des chemins qui sont inférieurs à la statistique de test calculée sur les données observées.

Le réseau se construit de la manière suivante : on compte autant d’étapes que de colonnes C et chaque étape possède un certain nombre de nœuds L hormis la dernière et la première qui n’en dispose que d’un seul. On démarre à la dernière étape C et on remonte récursivement au nœud initial 0. Le dernier nœud est écrit comme un vecteur de taille 1 \times L, (L_{1,C}, \cdots, L_{L,C}) des effectifs marginaux en ligne issus des données observées et chacun des nœuds des étapes antérieures représente une configuration unique respectant la condition sur les effectifs marginaux.

On passe d’un nœud c à un nœud c - 1 par la formule suivante:

max(0, L_{i,c} - \sum_{i = 1} ^L T_{i,c} + \sum_{l = 1} ^{i - 1} (L_{l,c} - L_{l, k-1})) \leq L_{i,c-1} \leq min(L_{i,c}, \sum_{l = 1} ^{c-1} \sum_{i = 1} ^L T_{i,l} - \sum_{l = 1} ^{i-1} L_{l, c-1})

Deux nœuds sont en relation si et seulement si \forall i \in [1, \cdots, L], L_{i,c} \geq L_{i,c-1}. La statistique de test est déterminée en fonction du chemin le plus rapide reliant le nœud final au nœud initial et la longueur de ce chemin est le produit des longueurs entre les noeuds le constituant et de formule unitaire :

distance(noeud_{\mbox{Etape }c, \mbox{Numero} s_c} \rightarrow noeud_{\mbox{Etape }c-1, \mbox{Numero} s_{c-1}})= \frac{(\sum_{i = 1} ^L T_{i,c})!}{(L_{1,c}-L_{1,c-1})! \times \cdots \times (L_{L,c}-L_{L,c-1})!}

Tendance pour le rejet de H_0 :

Plus on compte de cas tels que : 

|a \cdot d - c \cdot b|_{\mbox{Configuration } k} \geq |a \cdot d - c \cdot b|_{\mbox{Observ\'e}}

, et moins on a de chance de rejeter H_0.

Évidemment le nombre de cas retenus dépend également de la forme des effectifs marginaux. Ainsi, une configuration équilibrée donnera lieu à un plus grand nombre de configurations candidates à remplir.

Donc, plus | (a \cdot d - b \cdot c)_{\mbox{Observ\'e}} | \rightarrow 0 plus il existe un grand nombre de possibilités remplissant la première condition ainsi que la seconde puisque cela revient à dire que :

(a \cdot d)_{\mbox{Observ\'e}} \rightarrow (b \cdot c)_{\mbox{Observ\'e}}

, ou inversement, soit un tableau d’effectifs croisés équilibré sur chaque cellule ou bien en ligne ou bien en colonne.

\bullet Tendance lorsque n \longrightarrow \infty:

La formule du test exact de Fisher montre que plus a, b, c, d sont grands et plus les effectifs marginaux induiront de configurations candidates. Finalement le problème rencontré par le test de Fisher-Freeman-Halton devient celui du test exact de Fisher dés que n \rightarrow +\infty.

On propose de simuler deux variables indépendants et de tableau croisé ci-dessous,

\begin{tabular}{|l|c|c|} \hline  & X2 : Modalit\'e 1 & X2 : Modalit\'e k2 \\ \hline X1 : Modalit\'e 1 & 10 * k & 9 * k \\ \hline X2 : Modalit\'e 2 & 9 * k & 10 * k \\ \hline \end{tabular}

Soit k une constante multiplicative au travers de laquelle on augmente la taille de l’échantillon tout en conservant ces proportions afin de mettre en évidence l’influence de la taille de n. On présente ci-dessous l’évolution de la p-valeur au fur et à mesure que k augmente.

\begin{tabular}{|l|c|} \hline k & p-valeur \\ \hline 10 & 1 \\ \hline 100 & 0.3558 \\ \hline 1000 & 0.0013 \\ \hline 10000 & 0.0001 \\ \hline \end{tabular}

La simulation montre que dés que l’échantillon approche les 1 000 observations le test rejette à tord H_0 marquant l’influence de la taille de n sur le test exact de Fisher.

\bullet Annexe théorique: 

On propose une esquisse de la démonstration du test Fisher-Freeman-Halton.

La probabilité que n_m observations appartiennent à la modalité m \in [1, \cdots, M] est :

P = n! \prod_{m = 1} ^M \frac{p_m ^{n_m}}{n_m!}

p_m est la probabilité de choisir aléatoirement une observation du groupe m.

En posant \lambda_m = n \cdot p_m, le nombre d’observations de l’échantillon du groupe m, on obtient la forme suivante :

P = \frac{n!}{n ^n} \prod_{m = 1} ^M \frac{\lambda_m ^{n_m}}{n_m!}

En prenant un certain nombre de conditions C_1, \cdots, C_s, de probabilités à priori respectives P_{C_1}, \cdots, P_{C_s}, l’expression devient :

P = \frac{n!}{n ^n} \prod_{m = 1} ^M \frac{\frac{\lambda_m ^{n_m}}{n_m!}}{\prod_{j = 1} ^s P_{C_j}}

Plus généralement, si on étend à une population divisée en K groupes, issues par exemple des croisement des modalités de deux variables qualitatives ou ordinales, la probabilité de tirage sera :

P = \frac{n!}{n ^n} \prod_{m_1 = 1} ^{M_1} \cdots \prod_{m_k = 1} ^{M_k} \frac{\frac{\lambda_{m_1, \cdots, m_k} ^{n_{m_1, \cdots, m_k}}}{n_{m_1, \cdots, m_k}!}}{\prod_{j = 1} ^s P_{C_j}}

En posant,

a_p = \sum_{m_1 = 1} ^{M_1} \cdots \sum_{m_{p - 1} = 1} ^{M_{p - 1}} \sum_{m_{p + 1} = 1} ^{M_{p + 1}} \cdots \sum_{m_k = 1} ^{M_k} n_{m_1, \cdots, m_k}

Et,

\lambda_{m_1, \cdots, m_k} = \frac{\prod_{p = 1} ^k a_p}{n ^{k - 1}}

 , on a :

P = (\frac{n ^n}{n!}) ^{k - 1} \lbrace \frac{\prod_{p = 1} ^k \prod_{m_p} ^{M_p} a_p !}{\prod_{m_1 = 1} ^{M_1} \cdots \prod_{m_k = 1} ^{M_k} n_{m_1, \cdots, m_k}!} \rbrace \times \lbrace \frac{\prod_{m_1 = 1} ^{M_1} \cdots \prod_{m_k = 1} ^{M_k} \lambda_{n_{m_1, \cdots, m_k}} ^{n_{m_1, \cdots, m_k} }}{\prod_{p = 1} ^k \prod_{n_p} ^{M_p} a_p ^{a_p}} \rbrace

Et,

P = \frac{\prod_{p = 1} ^k \prod_{m_p = 1} ^{M_p} a_p !}{(n!) ^{k - 1} \prod_{m_1 = 1} ^{M_1} \times \cdots \times \prod_{m_k = 1} ^{M_k} n_{m_1, \cdots, n_k}!}

Enfin, en posant d_{m_1, \cdots, m_{h - 1}, m_{h + 1}, \cdots, m_k} = \sum_{m_h = 1} ^{M_h} n_{m_1, \cdots, m_k}, on a la forme finale:

P = \frac{\prod_{m_1 = 1} ^{M_1} \cdots \prod_{m_{h - 1} = 1} ^{M_{h - 1}} \prod_{m_{h + 1} = 1} ^{M_{h + 1}} \cdots \prod_{m_k = 1} ^{M_k} d_{m_1, \cdots, m_{h - 1}, m_{h + 1}, \cdots, m_k} \prod_{m_h = 1} ^{M_h} a_{h,m_h}!}{n! \prod_{m_1 = 1} ^{M_1} \cdots \prod_{m_k = 1} ^{M_k} n_{m_1, \cdots, m_k}!}

, qui est donc la formule de la statistique de test de Fisher-Freeman-Halton.

En restreignant les indices à k = 2 on retrouve les conditions d’utilisation du test exact de Fisher.

\bullet Exemple:

Soit les deux variables X ^1, X ^2 suivantes,

\begin{tabular}{|c|c|} \hline X1 & X2 \\ \hline A & B \\ \hline A & B \\ \hline A & B \\ \hline A & B \\ \hline A & B \\ \hline A & B \\ \hline A & B \\ \hline A & A \\ \hline B & A \\ \hline B & A \\ \hline B & A \\ \hline B & A \\ \hline B & A \\ \hline B & A \\ \hline B & A \\ \hline A & A \\ \hline A & A \\ \hline A & B \\ \hline A & B \\ \hline A & B \\ \hline \end{tabular}

Ci-dessous, l’histogramme des effectifs croisés de X ^1, X ^2.

addOn obtient la table des effectifs croisés suivante :

\begin{tabular}{|l|c|c|c|} \hline  & X2 = A & X2 = B & Marge \\ \hline X1 = A & 3 & 7 & 10 \\ \hline X1 = B & 10 & 0 & 10 \\ \hline Marge & 13 & 7 & 20 \\ \hline \end{tabular}

La statistique de test de Fisher est alors :

p = \frac{(3+7)!(10+0)!(3+10)!(7 + 0)!}{3!7!10!0!20!} = \frac{10!10!13!7!}{3!7!10!0!20!} = 0.001547988

En fonction des effectifs marginaux on peut constituer les sept configurations différentes et répondant aux critères suivantes :

\begin{tabular}{|l|c|c|c|c|c|c|} \hline Configuration k & X1 = A, X2 = A & X1 = A, X2 = B & X1 = B, X2 = A & X1 = B, X2 = B & Eloignement & pk \\ \hline Observ\'e & 3 & 7 & 10 & 0 & -70 & 0.001547988 \\ \hline 1 & 4 & 6 & 9 & 1 & -50 & 0.02708978 \\ \hline 2 & 5 & 5 & 8 & 2 & -30 & 0.1462848 \\ \hline 3 & 6 & 4 & 7 & 3 & -10 & 0.3250774 \\ \hline 4 & 7 & 3 & 6 & 4 & 10 & 0.3250774 \\ \hline 5 & 8 & 2 & 5 & 5 & 30 & 0.1462848 \\ \hline 6 & 9 & 1 & 4 & 6 & 50 & 0.02708978 \\ \hline 7 & 10 & 0 & 3 & 7 & 70 & 0.001547988 \\ \hline \end{tabular}

La valeur d’éloignement seuil est obtenue à partir de celle sur l’échantillon observé, ainsi on a :

|a \cdot d - c \cdot b|_{\mbox{Observ\'e}} = |3 \times 0 - 70 \times 10| = 70

On retient donc une seule configuration qui lui est supérieure ou égale en valeur absolue : la numéro 7, et le calcul de sa statistique de test vaut alors p_7 = 0.001547988.

La p-valeur de la statistique de test exact de Fisher est donc :

p = p' + p_7 = 0.001547988 + 0.001547988 = 0.003095975 <<< 1 \%

On peut donc rejeter H_0 au seuil de 1 \% et conclure en une liaison entre X ^1 et X ^2.

\bullet Application sous R :

Dans un premier temps, on charge notre exemple :

X1 = c(‘B’,’B’,’B’,’B’,’B’,’B’,’B’,’A’,’A’,’A’,’A’,’A’,’A’,’A’,’A’,’A’,’A’,’B’,’B’,’B’)

X2 = c(‘A’,’A’,’A’,’A’,’A’,’A’,’A’,’A’,’B’,’B’,’B’,’B’,’B’,’B’,’B’,’A’,’A’,’A’,’A’,’A’)

Package et fonction R: http://stat.ethz.ch/R-manual/R-patched/library/stats/html/fisher.test.html

La fonction fisher.test du package stats permet d’appliquer le test exact de Fisher. Le package se charge automatiquement lors du lancement du logiciel R.

On lance le test afin de savoir si les variables X ^1 et X ^2 sont indépendantes. On procède de la manière suivante :

fisher.test(x=X1,y=X2)

Parmi les éléments à insérer les plus importants il faut relever :

– Les deux échantillons sur lesquels tester l’indépendance : « x = X1 » , « y = X2 » ;

– On aurait pu rajouter l’instruction « alternative » qui permettra de déterminer si on veut procéder à un test bilatéral, unilatéral à gauche ou à droite. Par défaut le logiciel R lance le test dans un cadre bilatéral.

On obtient alors les résultats suivants :

add

On vérifie :

– La p-valeur : « p-value = 0.003096 » , qui est la même que celle obtenue lors  des calculs manuels (cf section « Exemple » ) ;

– Et le type de test effectué : « alternative hypothesis: true odds ratio is not equal to 1 » .

\bullet Application sous SAS : 

Soit l’exemple suivant:

data E;
input X1 $1. X2 $2.;
cards;
B A
B A
B A
B A
B A
B A
B A
A A
A B
A B
A B
A B
A B
A B
A B
A A
A A
B A
B A
B A
;
run;

Procédure SAS: http://support.sas.com/documentation/cdl/en/procstat/63104/HTML/default/viewer.htm#procstat_freq_sect029.html

On lance le test exact de Fisher afin de savoir si X^1 et X^2 sont indépendants. On procède de la manière suivante :

proc freq data = E;
tables X1 * X2 / chisq;
ods exclude CrossTabFreqs;
run;

Parmi les éléments à insérer les plus importants il faut relever :

– La table contenant nos données : « data = E » ;

– Le croisement de variables sur lequel on travaille : « tables X ^1 * X ^2 » ;

– L’ods output est utilisé afin de filtrer les résultats et n’afficher que ceux dont on a besoin.

On obtient alors les résultats suivants :

add1

On vérifie dans la table « Fisher’s Exact Test » la statistique de test : « 0.0031  » , qui est la même que celle obtenue lors des calculs manuels (cf section « Exemple » ).

\bullet Bibliographie: 

– On the interpretation of χ2 from contingency tables, and the calculation of P de Ronald Aylmer Fisher

– Note on an Exact Treatment of Contingency, Goodness of Fit and Other Problems of Significance de G. H. Freeman et J. H. Halton

– Le document http://www.iumsp.ch/Enseignement/postgradue/privat-docent/4_testsusu.pdf

– A network algorithm for performing Fisher’s exact test in r × c contingency tables de Cyrus Mehta et Nitin Patel