Le test de Quade

add

\bullet Présentation:

Publié en 1979 par Dana Quade, le test de Quade, appelé également ANalyse De VAriance (ANOVA) de Quade, est une approche non paramétrique permettant de tester si plusieurs variables continues appariées X ^1, \cdots, X ^T sont liées.

Le test de Quade est considéré comme une alternative à l’ANOVA de Fisher et demeure plus puissant que l’ANOVA de Friedman lorsque T < 5.

\bullet Le test:

Hypothèse préliminaire: Variables continues appariées.

Le calcul de la statistique de test nécessite au préalable la création de la matrice des rangs en ligne \mathbf{R} associée à \mathbf{X} = (X ^1, \cdots, X ^T) ainsi que le calcul du vecteur Q des rangs associés au vecteur des différences,

(max(X_i ^t) - min(X_i ^t)), \forall i \in [1,n]

La formule de la statistique de test de Quade est alors,

F = \frac{(n - 1) SS_T}{SS_{total} - SS_T}

Où,

SS_{total} = \sum_{i = 1} ^n \sum_{t = 1} ^T (S_i ^t) ^2

SS_T = \frac{1}{n} \sum_{t = 1} ^T (\sum_{i = 1} ^n S_i ^t) ^2

S_i ^t = Q_i (R_i ^t - \frac{T + 1}{2})

La statistique de test de Quade suit une loi de Fisher-Snedecor à (T - 1, (T  - 1) (n - 1)) degrés de liberté. L’hypothèse H_0 est: « Il n’y a pas d’influence du temps T sur X / \sigma_1 = \cdots \sigma_T« .

Ci-dessous la table de Fisher-Snedecor:

addTendance pour le rejet de H_0:

Plus la statistique de test F est grande et plus nous avons de chance de rejeter H_0. Ce qui revient à dire,

F = \frac{(n - 1) SS_T}{SS_{total} - SS_T} \rightarrow \infty \Rightarrow SS_T \rightarrow \infty ou SS_{total} - SS_T \rightarrow 0

L’élément qui nous intéresse est SS_T puisque SS_{total} est indépendant de la configuration des données. En effet, ces deux objets sont fonctions des S_i ^t = Q_i (R_i ^t - \frac{T + 1}{2}) dont la réelle valeur informative provient de la considération de la somme de ces éléments en fonction de T, approche considérée exclusivement lors du calcul de SS_T.

Par conséquent, si nous étudions le numérateur, SS_T est maximal si,

\sum_{i = 1} ^n S_i ^1 = 1 \times n, \sum_{i = 1} ^n S_i ^2 = 2 \times n, \cdots, \sum_{i = 1} ^n S_i ^{n - 1} = (T - 1) \times n, \sum_{i = 1} ^n S_i ^n = T \times n

(où l’inverse), soit le cas où il y a une dépendance entre X et T.

L’ Autre cas de figure est celui où SS_T \rightarrow SS_{total}. Soit que la dispersion inter-traitements est également à la dispersion totale au travers de l’inégalité triangulaire,

SS_T = \frac{1}{n} \sum_{t = 1} ^T (\sum_{i = 1} ^n S_i ^t) ^2 \leq \frac{1}{n} \sum_{t = 1} ^T \sum_{i = 1} ^n (S_i ^t) ^2 = \frac{1}{n} SS_{total} \Rightarrow SS_T \leq \frac{1}{n} SS_{total}

Or nous avons,

SS_{total} = \sum_{i = 1} ^n \sum_{t = 1} ^T (S_i ^t) ^2 = n \sum_{t = 1} ^T t ^2

Et si nous nous retrouvons dans le cas idéal décrit ci-dessus,

SS_T = \sum_{t = 1} ^T (\sum_{i = 1} ^n S_i ^t)  ^2 = \sum_{t = 1} ^T (n \cdot t) ^2 = n ^2 \sum_{t = 1} ^T t ^2

Nous obtenons alors l’égalité SS_T = \frac{1}{n} SS_{total} lorsqu’il y a une influence totale de T sur X. En fin de compte, SS_{total} traduit cette configuration des données auquel nous cherchons à comparer la configuration observée.

\bullet Tendance lorsque n \longrightarrow \infty:

Nous proposons ici de vérifier si le test de Quade 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 temps à l’autre.

add1

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.

add2

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

Nous en déduisons que le test de Quade est influencé par la taille de l’échantillon.

\bullet Annexe théorique:

Nous présentons ici une esquisse de la démonstration de l’inégalité triangulaire.

Trivialement nous avons,

\forall j_1 < j_2, X ^{j_1} X ^{j_2} \leq | X ^{j_1} X ^{j_2}|

\Rightarrow \forall j_1 < j_2, 2 X ^{j_1} X ^{j_2} \leq 2 | X ^{j_1} X ^{j_2} |

\Rightarrow 2 \sum_{j_1 < j_2} X ^{j_1} X ^{j_2} \leq 2 \sum_{j_1 < j_2} X ^{j_1} X ^{j_2}

\Rightarrow \prod_j (X ^j) ^2 + 2 \sum_{j_1 < j_2} X ^{j_1} X ^{j_2} \leq \prod_j (X ^j) ^2 + 2 \sum_{j_1 < j_2} | X ^{j_1} X ^{j_2} |

\Rightarrow \prod_j (X ^j) ^2 + 2 \sum_{j_1 < j_2} X ^{j_1} X ^{j_2} \leq \prod_j | X ^j | ^2 + 2 \sum_{j_1 < j_2} | X ^{j_1} X ^{j_2} |

\Rightarrow (\sum_j X ^j) ^2 \leq (\sum_j |X ^j|) ^2

\Rightarrow | \sum_j X ^j | ^2 \leq (\sum_j |X ^j|) ^2

\Rightarrow | \sum_j X ^j | \leq \sum_j |X ^j|

\bullet Exemple:

Soit les cinq échantillons appariés X ^1, X ^2, X ^3, X ^4, X ^5 suivants.

add

Ci-dessous, les boxplots associés à (X ^1, X ^2, X ^3, X ^4, X ^5).

add

Les boxplots montrent que X varie énormément en fonction du temps t \in \lbrace 1, 2, 3, 4, 5 \rbrace. Prouvons-le statistiquement.

Dans un premier temps, nous déterminons le tableau des rangs en ligne associés à X ^1, X ^2, X ^3, X ^4, X ^5,

add

Ensuite, il nous faut déterminer le vecteur des différences entre la valeur maximale et la valeur minimale pour chaque block,

(9.2858 - 0.8970, \cdots, 20.1656 - 9.5949) = (8.3888, \cdots, 10.5707)

Et qui nous permet de déterminer l’objet Q,

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

Nous pouvons désormais calculer la matrice pondérée de Quade,

S = \begin{pmatrix} 8 \times (1 - \frac{5 + 1}{2}) & 8 \times (4 - \frac{5 + 1}{2}) & 8 \times (3 - \frac{5 + 1}{2}) & 8 \times (2 - \frac{5 + 1}{2}) & 8 \times (5 - \frac{5 + 1}{2}) \\ 9 \times (1 - \frac{5 + 1}{2}) & 9 \times (4 - \frac{5 + 1}{2}) & 9 \times (3 - \frac{5 + 1}{2}) & 9 \times (2 - \frac{5 + 1}{2}) & 9 \times (5 - \frac{5 + 1}{2}) \\ 10 \times (2 - \frac{5 + 1}{2}) & 10 \times (1 - \frac{5 + 1}{2}) & 10 \times (4 - \frac{5 + 1}{2}) & 10 \times (3 - \frac{5 + 1}{2}) & 10 \times (5 - \frac{5 + 1}{2}) \\ 2 \times (1 - \frac{5 + 1}{2}) & 2 \times (4 - \frac{5 + 1}{2}) & 2 \times (3 - \frac{5 + 1}{2}) & 2 \times (2 - \frac{5 + 1}{2}) & 2 \times (5 - \frac{5 + 1}{2}) \\ 3 \times (1 - \frac{5 + 1}{2}) & 3 \times (4 - \frac{5 + 1}{2}) & 3 \times (3 - \frac{5 + 1}{2}) & 3 \times (2 - \frac{5 + 1}{2}) & 3 \times (5 - \frac{5 + 1}{2}) \\ 7 \times (4 - \frac{5 + 1}{2}) & 7 \times (1 - \frac{5 + 1}{2}) & 7 \times (3 - \frac{5 + 1}{2}) & 7 \times (5 - \frac{5 + 1}{2}) & 7 \times (2 - \frac{5 + 1}{2}) \\ 5 \times (4 - \frac{5 + 1}{2}) & 5 \times (2 - \frac{5 + 1}{2}) & 5 \times (3 - \frac{5 + 1}{2}) & 5 \times (5 - \frac{5 + 1}{2}) & 5 \times (1 - \frac{5 + 1}{2}) \\ 6 \times (4 - \frac{5 + 1}{2}) & 6 \times (3 - \frac{5 + 1}{2}) & 6 \times (1 - \frac{5 + 1}{2}) & 6 \times (5 - \frac{5 + 1}{2}) & 6 \times (2 - \frac{5 + 1}{2}) \\ \ldots & \ldots & \ldots & \ldots & \ldots \\ \end{pmatrix}

= \begin{pmatrix} -16 & 8 & 0 & -8 & 16 \\ -18 & 9 & 0 & -9 & 18 \\ -10 & -20 & 10  & 0 & 20 \\ -4 & 2 & 0 & -2 & 4 \\ -6 & 3 & 0 & -3 & 6 \\ 7 & -14 & 0 & 14 & -7 \\ 5 & -5 & 0 & 10 & -10 \\ 6 & 0 & -12 & 12 & -6 \\ 0 & 4 & -4 & 8 & -8 \\ 1 & 0 & -1 & 2 & -2 \\ 18 & -18 & -36 & 36 & 0 \\ 16 & 0 & -32 & 32 & -16 \\ 19 & -19 & -38 & 38 & 0 \\ 14 & -28 & -14 & 28 & 0 \\ 13 & -26 & -13 & 26 & 0 \\ 15 & -30 & -15 & 0 & 30 \\ 17 & -17 & -34 & 0 & 34 \\ 20 & -20 & -40 & 0 & 40 \\ 12 & -24 & -12 & 0 & 24 \\ 11 & -22 & 0 & -11 & 22 \\ \end{pmatrix}

Nous avons alors,

SS_{Total} = \sum_{i = 1} ^{20} \sum_{t = 1} ^5 (S_i ^t) ^2 = (-16) ^2 + 8 ^2 + 0 ^2 + \cdots + 0 ^2 + (-11) ^2 + 22 ^2 = 28700

Et,

SS_T = \frac{1}{20} \times \sum_{t = 1} ^5 (\sum_{i = 1} ^{20} S_i ^t) ^2 = \frac{120 ^2 + (-217) ^2 + (-241) ^2 + 173 ^2 + 165 ^2}{5} = \frac{176724}{20} = 8836.2

Nous avons désormais tous les éléments pour le calcul de la statistique de test de Quade,

F = \frac{(20 - 1) \times 8836.2}{28700 - 8836.2} = 8.451948

Si nous reportons la valeur de la statistique de test à la loi de Fisher-Snedecor pour (5 - 1, (5 - 1) \times (20 - 1)) = (4,76) degrés de liberté, nous obtenons une p-valeur de 0.00001073 <<<<< 5 \%. Nous rejetons alors H_0 et pouvons en conclure que le temps T a une influence sur X.

\bullet Application informatique:

Procédure SAS:

%macro quade_test (TAB=);

/* Macro pour procéder au calcul du test de Quade sur une matrice à T colonnes et de format continue */

/* Options pour épurer les sorties */
options nonotes spool;
ods noresults;

/* Création de la matrice des rangs en ligne */
proc transpose data = &TAB. out = R;
run;

/* Aparthé pour la futur création de Q */
proc means data = R min max;
output out = min_max;
run;

proc rank data = R out = R;
run;

proc transpose data = R out = R;
run;

/* Création de Q */
data min_max;
set min_max;
if _stat_ in (« MIN » « MAX »);
drop _type_ _freq_;
run;

proc transpose data = min_max out = min_max;
id _stat_;
run;

data Q;
set min_max;
D = max – min;
keep D;
run;

proc rank data = Q out = Q;
run;

/* Récupération du paramètre n: nombre de blocks */
proc sql noprint;
select count(*) into: n from &TAB.;
quit;

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

/* Récupération de la liste des variables appariées et du paramètre T: nombre de temps */
proc sql noprint;
select distinct(name) into: list_vars separated by  »  » from nb_vars;
select count(*) into: T from nb_vars;
quit;

/* Initialisation de la matrice S */
data S;
run;

/* Remplissage de la matrice S avec la formule adéquate */
%let SStot = 0;

%do i = 1 %to &n.;

data ajout;
run;

data _null_;
set Q;
if _n_ = &i.;
call symputx(« Qi »,D);
run;

%do tt = 1 %to &T.;

data _null_;
set R;
if _n_ = &i.;
call symputx(« Rit »,%scan(&list_vars.,&tt.));
run;

%let Sit = %sysevalf(&Qi.*(&Rit. – ((&T. + 1)/2)));

data new;
%scan(&list_vars.,&tt.) = &Sit.;
run;

data ajout;
merge ajout new;
run;

/* Calcul du SStotal par méthode itérative */
%let SStot = %sysevalf(&SStot. + (&Sit.)**2);

%end;

data S;
set S ajout;
run;

%end;

/* Epuration de la première ligne d’initialisation de S */
data S;
set S;
if _n_ ne 1;
run;

/* Calcul du SST */
proc transpose data = S out = SST;
run;

data SST;
set SST;
drop _name_;
run;

proc contents data = SST out = sum;
run;

proc sql noprint;
select (name) into: list_sum separated by « , » from sum;
quit;

data SST;
set SST;
Sum = sum(&list_sum.);
run;

proc transpose data = SST out = SST;
run;

/* Calcul du SST par méthode itérative */
data SST;
set SST;
SST = 0;
%do tt = 1 %to &T.;
SST = SST + COL&tt.**2;
%end;
SST = SST/&n.;
run;

data _null_;
set SST;
if _n_ = &n. + 1;
call symputx(« SST »,SST);
run;

/* Mise en forme des résultats */
data Resultats;
n = &n.;
T = &T.;
F = %sysevalf(((&n. – 1) * &SST.)/(&SStot. – &SST.));
SST = &SST.;
SStotal = &SStot.;
df1 = &T. – 1;
df2 = (&T. – 1)*(&n. – 1);
p = 1 – Probf(F,df1,df2);
run;

/* Suppression des tables annexes inutiles */
proc datasets lib = work nolist;
delete R Q min_max nb_vars ajout new SST sum;
run;

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

%mend;

Package et fonction R: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/quade.test.html

\bullet Bibliographie: 

– Using Weighted Rankings in the Analysis of Complete Blocks with Additive Block Effects de Dana Quade

– New Statistical Procedures for the Social Sciences: Modern Solutions To Basic Problems de Rand R. Wilcox

– Biostatistics and Microbiology: A Survival Manual de Daryl S. Paulson