Le test de Fisher-Yates-Terry-Hoeffding

add

\bullet Présentation:

Publié en 1938 par Ronald Aylmer Fisher et Frank Yates, puis étendu par les travaux de Wassily Hoeffding en 1950 et de Terry en 1952, le test de Fisher-Yates-Terry-Hoeffding, également noté test de FYTH ou encore test des scores normés, est une approche non paramétrique permettant de tester si X|_{Y = 1}, X|_{Y = 2}, les sous-échantillons d’une variable continue X restreinte aux deux groupes d’une variable binaire Y, ont même distribution.

Lorsque les échantillons sont suffisamment grand, le test de Fisher-Yates-Terry-Hoeffding est réputé pour être bien plus efficace que le test de Wilcoxon-Mann-Whitney et garde l’immense avantage de ne pas être affecté par les outliers. Cette dernière propriété en fait un test particulièrement robustesse lorsque les données ne suivent pas une loi normale.

\bullet Le test:

Hypothèse préliminaire: X continue et Y binaire.

La formule de la statistique de test de Fisher-Yates-Terry-Hoeffding est,

C = \sum_{i = 1} ^{n_1} \Phi ^{-1} (F_i)

Où,

– le premier groupe sera celui ayant le plus petit effectif,

F_i = \frac{R_i - 0.375}{n + 0.25},

\Phi ^{-1} est la fonction inverse de la loi normale centrée-réduite.

Afin de pouvoir reporter la statistique de test à la table de la loi normale centrée-réduite, il faut lui appliquer la transformation,

Z = | \frac{C}{\frac{n_1 n_2}{\sqrt{n (n - 1)} \sum_{i = 1} ^n [\Phi ^{-1} (F_i)] ^2}} |

L’hypothèse H_0 est: « les deux sous-échantillons ont même distribution / F_{X|_{Y = 1}} = F_{X|_{Y = 2}} »

Ci-dessous la table de la loi normale centrée-réduite.

add

Tendance pour le rejet de H_0:

Plus la statistique de test Z est grande et plus nous avons de chance de rejeter H_0. Ce qui implique,

Z \rightarrow \infty \Rightarrow C \rightarrow \infty \Rightarrow \sum_{i = 1} ^{n_1} \Phi ^{-1} (\frac{R_i - 0.375}{n + 0.25}) \rightarrow \infty

Le test de Fisher-Yates-Terry-Hoeffding s’appuie sur la symétrie de la loi normale centrée-réduite pour étudier le lien entre Y et X. Ainsi, si les valeurs de X|_{Y = 1} sont toutes inférieures à celles de X|_{Y = 2} alors les valeurs renvoyées par la fonction inverse de la loi normale centrée-réduite seront toutes négatives et la somme sera maximale.

Dans le cas inverse, si nous sommes dans la situation d’une distribution aléatoire, alors ces valeurs vont s’annuler par symétrie et la somme tendra vers 0

\bullet Tendance lorsque n \longrightarrow \infty:

Nous proposons ici de vérifier si le test de Fisher-Yates-Terry-Hoeffding est sensible aux grands échantillons ou non.

Le tableau ci-dessous présente l’évolution des p-valeurs associées aux statistiques de test calculées sur plusieurs simulations dans le cas où les distribution sont différentes d’un groupe à l’autre.

add.png

Globalement, quelque soit la taille de l’échantillon, le test statistique rejette H_0, ce qui est en accords avec nos hypothèses.

Procédons à la même expérience mais cette fois-ci dans un cas où les différentes distributions ne devraient pas être statistiquement différentes. Le tableau ci-dessous présente ces résultats.

add1.png

Jusqu’à N = 100 nous restons cohérent avec nos hypothèses, malheureusement nous voyons qu’à partir d’un échantillon de taille 1000, le test rejette H_0 à tort.

Par conséquent, nous en déduisons que le test Fisher-Yates-Terry-Hoeffding est sensible à la taille de l’échantillon.

\bullet Annexe théorique:

Nous présentons ici quelques rappels sur les propriétés de symétrie de la loi normale centrée-réduite, principale caractéristique sur laquelle s’appuie le test de Fisher-Yates-Terry-Hoeffding.

La fonction inverse de la loi normale centrée-réduite correspond en réalité à la probabilité que l’évènement survienne,

P(X \leq a) = p, p \in [0,1[

Par définition et donc symétrie, nous avons également,

P(X \leq -u_{\alpha}) = P(X \geq u_{\alpha}) = \frac{\alpha}{2}

Et,

P(X \leq u_{\alpha}) = 1 - P(X \geq u_{\alpha}) = 1 - \frac{\alpha}{2}

La figure ci-dessous synthétise ces éléments.

add2.png

\bullet Exemple:

Soit la variable aléatoire X distribuée selon deux groupes d’une variable Y:

add

Ci-dessous, les densités associées aux distributions de X selon nos deux groupes. Nous pourrons remarquer que nos deux sous-échantillons ont la même distribution.

add

Dans un premier temps, nous déterminons le vecteur R des rangs associés à X,

R = (12,13,2,14,9,1,5,8,17,19,4,20,16,7,11,3,6,15,10,18)

Puis le vecteur F,

F = (\frac{12 - 0.375}{20 + 0.25}, \cdots, \frac{18 - 0.375}{20 + 0.25}) = (0.57407407,\cdots,0.87037037)

Nous calculons \Phi ^{-1} la transformation de F par la fonction inverse de la loi normale centrée-réduite,

\Phi ^{-1} = (1.8675612, \cdots 1.12814365)

Nos deux groupes ont même taille, par conséquent nous prendrons celui restreint à Y = 1. Nous pouvons désormais calculer la statistique de test de Fisher-Yates-Terry-Hoeffding,

C = \sum_{i = 1} ^{n_1} \Phi ^{-1} (F_i)

= 0.1867561 + 0.3145723 - 1.4034126 + 0.4477675 - 0.1867561 - 1.8682417 - 0.7441427 - 0.03145723 + 0.9191355 + 1.4034126

= -1.24581

Il nous reste à déterminer la variance,

\frac{10 \times 10}{20 (20 - 1)} \times \sum_{i = 1} ^{20} [\Phi ^{-1} (F_i)] ^2

= \frac{100}{380} \times (0.034877849 + 0.098955727 + 1.969567026 + 0.200495751 + 0.034877849 + 3.490326881 + 0.553748421 + 0.098955727 + 0.844810108 + 1.969567026 + 0.844810108 + 3.490326881 + 0.553748421 + 0.200495751 + 0.003835526 + 1.272708084 + 0.347458138 + 0.347458138 + 0.003835526 + 1.272708084)

= 0.2631579 \times 17.63357

= 4.640413

Enfin,

Z = | \frac{-1.245481}{\sqrt{4.640413}} | = | \frac{-1.245481}{2.154162} | = | 0.5781745 | = 0.5781745

Si nous reportons cette valeur de statistique de test à la table de la loi normale centrée-réduite, nous obtenons une p-valeur de 0.5631463 >>>> 5 \%. Nous déduisons que nous ne pouvons rejeter H_0 et donc que les deux distributions sont les mêmes.

\bullet Application informatique:

Procédure SAS:

%macro fyth_test(TAB=,Y=);

/* La macro suivante procède au test de Fisher-Yates-Terry-Hoeffding sur la table de données TAB en argumentant la variable groupe Y */

/* Options pour éviter de saturer la log */
options nonotes spool;
ods noresults;

/* Récupération des effectifs par classe */
proc freq data = &TAB.;
tables &Y. / out = n;
run;

/* Récupération du nom de la classe 1 et de son effectif */
data _null_;
set n;
if _n_ = 1;
call symputx(« n1 »,count);
call symputx(« cl1 »,&Y.);
run;

/* Récupération de l’effectif de la classe 2 */
data _null_;
set n;
if _n_ = 2;
call symputx(« n2 »,count);
run;

proc contents data = &TAB. out = varX;
run;

/* Récupération du nom de la variable continue */
data _null_;
set varX;
if name ne « &Y. »;
call symputx(« varX »,name);
run;

/* Calcul des rangs associés à la variable continue */
proc rank data = &TAB. out = Phi;
var &varX.;
ranks R;
run;

/* Création de la feuille de calcul de Phi */
data Phi;
set Phi;
F = (R-0.375)/(&n1.+&n2.+0.25);
Phi = quantile(‘NORMAL’,F);
Phi2 = Phi**2;
run;

/* Calcul de la somme des phis pour les observations de la classe 1 et de la somme des phis au carré */
proc sql noprint;
select sum(Phi) into: Phi1 from Phi where &Y. = « &cl1. »;
select sum(Phi2) into: Phi2 from Phi;
quit;

/* Création de la table de résultats */
data Resultats;
Pop = &n.;
FYTH = &Phi1.;
Var = &Phi2.*(&n1.*&n2.)/((&n1.+&n2.)*(&n1.+&n2.-1));
Z = abs(FYTH/sqrt(Var));
p = 1 – probnorm(Z);
run;

/* Suppression des tables inutiles */
proc datasets lib = work nolist;
delete n varX Phi;
run;

/* Reset des options */
options notes nospool;
ods results;

%mend;

Package et fonction R:

FYTH.test = function(TAB) {

# La fonction suivante applique le test de Fisher-Yates-Terry-Hoeffding sur la base de données TAB contenant en première colonne la variable des groupes et en seconde colonne la variable continue

# Epuration des données manquantes
TAB = na.omit(TAB)
# Récupération du nombre d’osbservations n
n = dim(TAB)[1]
BiblioY = summary(factor(TAB[,1]))
# Récupération du nom de la classe de référence Cl1
Cl1 = names(BiblioY)[1]
# Récupération des effectifs par classe
n1 = BiblioY[[1]]
n2 = BiblioY[[2]]

# Application de la fonction de répartition normale inverse
Phi = matrix(0,n,1)
R = rank(TAB[,2])
for (i in 1:n) {Phi[i] = qnorm((R[i]-0.375)/(n+0.25))}

# Calcul de la statistique de test de FYTH
C = sum(Phi[which(TAB[,1]==Cl1)])
# Calcul de la variance
D = sum(Phi^2)*(n1*n2)/(n*(n-1))

# Calcul de la statistique de test
Z = abs(C/sqrt(D))
# Calcul de la p-valeur
p = 2*(1-pnorm(Z,0,1))

# Mise en forme et impression des résultats
return(data.frame(Pop = n, FYTH = C, Var = D, Z = Z, p_valeur = p))

}

\bullet Bibliographie:

– Theory of rank tests de Zybnek Sidak, Prenab K. Sen et Jaroslav Hajek

– Comparaisons de population. Tests non paramétriques de Ricco Rakotomalala

– Le document: http://www.maths-france.fr/Terminale/TerminaleS/Cours/18-loi-normale.pdf