Le test de Kolmogorov-Smirnov

Andreï Nicolaïévitch Kolmogorov (à gauche) et Vladimir Ivanovitch Smirnov (à droite)

\bullet Historique:

\begin{tabular}{|l|c|c|} \hline Bloc & 09/05/2013-V1 & 19/04/2019-V2 \\ \hline Historique &  & Cr\'eation \\ \hline Sommaire &  & Cr\'eation \\ \hline Pr\'esentation & Cr\'eation & MAJ \\ \hline Les diff... version du test & Cr\'eation, appelation: le test & MAJ et calcul p-valeurs \\ \hline Conditions pour le rejet de H0 & Cr\'eation & Devenu chapitre à part \\ \hline Tendance lorsque... & Cr\'eation & MAJ \\ \hline Annexe th\'eo... & Cr\'eation & MAJ \\ \hline Exemple & Cr\'eation & Calcul pour les tests de Lilliefors et Kuiper \\ \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
  • Les différentes versions du test
    • Cas à un échantillon: adéquation à une loi de distribution fixée
      • Calcul de la p-valeur exacte
      • La table de Kolmogorov-Smirnov
      • Le test de Lilliefors
    • Cas à deux échantillons: similarité des lois de distribution
      • La table de Kolmogorov-Smirnov
      • Calcul de la p-valeur exacte
    • Le test de Kuiper
      • Calcul de la p-valeur exacte
  • Conditions pour le rejet de H_0
  • Tendance lorsque n \rightarrow + \infty
  • Annexe théorique
  • Exemples
    • Cas à un échantillon: déterminer l’adéquation à une loi fixée
      • Test de Kolmogorov-Smirnov
      • Test de Lilliefors
      • Test de Kuiper
    • Cas à deux échantillons: déterminer si les deux distributions sont similaires
      • Test de Kolmogorov-Smirnov
      • Test de Kuiper
  • Application sous R
    • Cas à un échantillon: déterminer l’adéquation à une loi fixée
      • Le test de Kolmogorov-Smirnov
      • Le test de Lilliefors
      • Le test de Kuiper
    • Cas à deux échantillons: déterminer si les deux distributions sont similaires
      • Le test de Kolmogorov-Smirnov
      • Le test de Kuiper
  • Application sous SAS
    • Cas à un échantillon: déterminer l’adéquation à une loi fixée
      • Le test de Kolmogorov-Smirnov
      • Le test de Lilliefors
      • Le test de Kuiper
    • Cas à deux échantillons: déterminer si les deux distributions sont similaires
      • Le test de Kolmogorov-Smirnov
      • Le test de Kuiper
  • Bibliographie

\bullet Présentation:

Né en 1933 grâce aux travaux de Andreï Nicolaïévitch Kolmogorov et étendu à la comparaison de deux échantillons en 1939 par ceux de Vladimir Ivanovitch Smirnov, le test de Kolmogorov-Smirnov est une approche non paramétrique permettant de tester l’adéquation de la distribution d’une variable continue X à une loi de distribution fixée. Ce test peut également être utilisé pour comparer les distributions de X|_{Y = g_1} et X|_{Y = g_2}, les sous-échantillons de X restreints aux deux groupes g_1, g_2 d’une variable Y, en vérifiant si leur fonction de répartition sont similaires.

L’obligation de connaître à priori le(s) paramètre(s) de la distribution à laquelle on veut se comparer implique que ce test est peu puissant. Le test de Lilliefors, réservé à vérifier l’adéquation de la distribution de X à la loi normale, permet alors de pallier à cet effet en se basant directement sur l’estimation des paramètres. De plus, il faut  préciser que le test de Kolmogorov-Smirnov présente une certaine sensibilité lorsque l’on compare le centre des distributions contrairement à lorsqu’il s’agit des queues. Le test de Kuiper représente ainsi une alternative moins sensible au niveau des queues des distributions et des médianes. Toutefois, on soulignera qu’en pratique son apport reste assez faible par rapport à celui de Kolmogorov-Smirnov.

Cet article regroupe également la présentation des tests de Lilliefors et de Kuiper.

\bullet Les différentes versions du test:

Cas à un échantillon: adéquation à une loi de distribution fixée

Hypothèses préliminaires: Variable X continue, paramètre(s) connu(s).

Soit F_n et F, respectivement les fonctions de répartition observée et théorique de X. On notera n le nombre d’observations de X. La statistique D du test de Kolmogorov-Smirnov est alors,

D = max_{x \in [1,n]} \vert F_n (x) - F(x) \vert = max_{x \in [1,n]} ( \vert F(x) - \frac{i-1}{n} \vert , \vert \frac{i}{n} - F(x) \vert )

Cette statistique de test suit une loi de « Kolmogorov-Smirnov » de paramètre n et l’hypothèse H_0 est:

X suit la loi que l’on a fixée / F_X = F

Avec D_{n, 1 - \alpha} la valeur seuil de la distribution de la statistique de test pour une confiance \alpha et pour le paramètre n, les hypothèses alternatives sont alors,

H_1: F < F_n, soit D ^+ = max_{x \in [1,n]} (\frac{i}{n} - F(X_i)) > D_{n, 1 - \alpha} ^+, pour un test unilatéral à droite ;

H_1: F > F_n, soit D ^- = max_{x \in [1,n]} (F(X_i) - \frac{i - 1}{n}) > D_{n, 1 - \alpha} ^-, pour un test unilatéral à gauche ;

H_1: F \neq F_n, soit D = max_{x \in [1,n]} (|\frac{i}{n} - F(X_i)|,|F(X_i) - \frac{i - 1}{n}|) > D_{n, 1 - \alpha}, pour un test bilatéral.

La table de Kolmogorov-Smirnov:

Table de Kolmogorov-Smirnov

Calcul de la p-valeur exacte:

La p-valeur p associée à la statistique de test D_{obs} de Kolmogorov-Smirnov se détermine au travers de la formule suivante:

p = P(D_{obs} > D_{n,1 - \alpha}) = 1 - 2 . \sum_{k = 1} ^{+ \infty} (-1) ^{k + 1} e ^{-2 k ^2 n . D_{obs} ^2}

, ce calcul itératif convergeant rapidement. Notamment, à partir de k \geq 3 itérations.

Le test de Lilliefors:

Pour le cas de l’adéquation de X à la loi normale, le test de Kolmogorov-Smirnov peut être utilisé si les paramètres (\mu,\sigma ^2) sont connus. Lorsque ce n’est pas le cas, la seule solution restante (outre celle d’avoir recours à un autre test) est d’estimer directement depuis X: \mu_X et \sigma_X ^2, ce qui entrainera une lourde perte de puissance. Pour y pallier, on utilisera alors une table de distribution mieux adaptée: celle de Lilliefors. Cette procédure porte alors le nom de test de Lilliefors (Hubert Lilliefors, 1967). L’hypothèse H_0 reste la même que pour la version de Kolmogorov-Smirnov.

Le calcul de la p-valeur p va alors se baser sur la même statistique de test D à laquelle on va appliquer quelques modifications. L’algorithme de Lilliefors peut être présenté ainsi,

  • Etape 1: Estimer les paramètres \mu_X et \sigma_X ^2 directement depuis X
  • Etape 2: Calculer la statistique de test D de Kolmogorov-Smirnov
  • Etape 3: si n \leq 100 alors on conserve D_{obs} = D en l’état et on fixe \delta = n, sinon on lui applique l’ajustement suivant:

D_{obs} = D \cdot (\frac{n}{100}) ^{0.49} et on fixe \delta = 100

  • Etape 4: On peut désormais calculer la p-valeur exacte:

p = e ^{-7.01256 \cdot D_{obs} ^2 \cdot (\delta + 2.78019) + 2.99587 \cdot D_{obs} \cdot \sqrt{\delta + 2.78019} - 0.122119 + \frac{0.974598}{\sqrt{\delta}} + \frac{1.67997}{\delta}}

  • Etape 5: Si p \leq 0.1 alors on conserve p, sinon on l’ajuste à son tour en posant D_{obs} ' = D \cdot (\sqrt{n} - 0.01 + \frac{0.85}{\sqrt{n}}) et:
    • si D_{obs} ' \leq 0.302 alors p = 1 ;
    • si D_{obs} ' \in ]0.302;0.5] alors:

p = 2.76773 - 19.828315 \cdot D_{obs} ' + 80.709644 \cdot (D_{obs} ') ^2 - 138.55152 \cdot (D_{obs} ') ^3 + 81.218052 \cdot (D_{obs} ') ^4

    • si D_{obs} ' \in ]0.5;0.9] alors:

p = -4.901232 + 40.662806 \cdot D_{obs} ' - 97.490286 \cdot (D_{obs} ') ^2 +94.029866 \cdot (D_{obs} ') ^3 -32355711 \cdot (D_{obs} ') ^4

    • si D_{obs} ' \in ]0.5;0.9] alors:

p = 6.198765 -19.558097 \cdot D_{obs} ' + 23.186922 \cdot (D_{obs} ') ^2 -12.234627 \cdot (D_{obs} ') ^3 + 2.423045 \cdot (D_{obs} ') ^4

    • Si D_{obs} ' > 0.9 alors p = 0

Cas pour deux échantillons: similarité des lois de distribution

Hypothèses préliminaires: X continue et Y binaire.

Soient F_1 la fonction de répartition de X|_{Y = g_1} et F_2 celle de X|_{Y = g_2}. On notera n_1 le nombre d’observations de X|_{Y = g_1} et n_2 celui de X|_{Y = g_2}. La statistique D du test de Kolmogorov-Smirnov est alors:

D = max_{x \in [1,n]} \vert F_1 (x) - F_2 (x) \vert

Cette statistique de test suit une loi de Kolmogorov-Smirnov de paramètres (n_1,n_2) et l’hypothèse H_0 est:

X|_{Y = g_1} et X|_{Y = g_2} ont même loi de distribution / F_1 = F_2

Avec D_{n_1, n_2, 1 - \alpha} la valeur seuil de la distribution de la statistique de test pour une confiance \alpha et pour les paramètres n_1, n_2, les hypothèses alternatives sont alors,

H_1: F_1 < F_2, soit D ^+ = max_{x \in [1,n]} (F_1 (x) - F_2 (x)) > D_{n_1, n_2, 1 - \alpha} ^+, pour un test unilatéral à droite ;

H_1: F_2 > F_1, soit D ^- = max_{x \in [1,n]} (F_2 (x) - F_1 (x)) > D_{n_1, n_2, 1 - \alpha} ^-, pour un test unilatéral à gauche ;

H_1: F_1 \neq F_2, soit D = max_{x \in [1,n]} (|F_1 (x) - F_2 (x)|) > D_{n_1, n_2, 1 - \alpha}, pour un test bilatéral.

La table de Kolmogorov-Smirnov:

addA noter que: c(\alpha) = \sqrt{-\frac{1}{2} ln(\alpha)} avec \alpha le seuil fixé. De plus, Les tables exactes en fonction de la configuration des données peuvent être trouvées ici: http://www.cons-dev.org/elearning/stat/St5.html

Calcul de la p-valeur exacte:

La p-valeur p associée à la statistique de test D_{obs} de Kolmogorov-Smirnov se détermine au travers de la formule suivante:

p = P(D_{obs} > D_{n_1,n_2,1 - \alpha}) = 1 - 2 . \sum_{k = 1} ^{+ \infty} (-1) ^{k + 1} e ^{-2 k ^2 \frac{n_1 \cdot n_2}{n_1 + n_2} . D_{obs} ^2}

, cet algorithme convergeant rapidement. Notamment, à partir de k \geq 3 itérations.

Le test de Kuiper

Une variante assez célèbre du test de Kolmogorov-Smirnov, et qui peut être utilisée dans le cas à un et à deux échantillons, est connue sous le nom de test de Kuiper (Nicolaas Hendrik Kuiper, 1960). Elle consiste à prendre en compte la valeur maximale positive et celle négative de la différence entre les deux fonctions de répartition à comparer.

add

A gauche: ce que mesure le test de Kolmogorov-Smirnov, à droite: ce que mesure celui de Kuiper

Soient F_1 la fonction de répartition de la distribution de X|_{Y = g_1} et F_2 celle de X|_{Y = g_2}. On notera n_1 le nombre d’observations de X|_{Y = g_1} et n_2 celui de X|_{Y = g_2}. La statistique de test V de Kuiper est alors de formule:

V = max_{x \in [1,n]} (F_1 (x) - F_2 (x)) + max_{x \in [1,n]} (F_2 (x) - F_1 (x))

Cette modification permet au test de Kuiper un gain de sensibilité au niveau des queues des distributions et des médianes.

La loi de la statistique V est tabulée et peut être retrouvée en table 54 du volume 2 de l’ouvrage de E. S. Pearson et H. O. Hartley: « Biometrika Tables for Statisticians » (1972). L’hypothèse H_0 reste la même que pour la version de Kolmogorov-Smirnov.

Calcul de la p-valeur exacte:

Le calcul de la p-valeur exacte se fait via la formule qui suit. Soit \delta = n dans le cas à un échantillon et à \delta = \frac{n_1 \cdot n_2}{n_1 + n_2} dans le cas à deux échantillons. Alors,

p = P(V_{obs} > V_{(n \mbox{ ou } n_1, n_2), \alpha}) = 2 \sum_{k = 1} ^{+ \infty} (4 k ^2 V ^2 \delta - 1) \cdot e ^{-2 k ^2 V ^2 \delta}

\bullet Conditions pour le rejet de H_0:

Étant donné la formule utilisée:

max_{x \in [1,n]} \vert F_n (x) - F(x) \vert / max_{x \in [1,n]} \vert F_1 (x) - F_2 (x) \vert

, l’idée du test de Kolmogorov Smirnov repose sur la comparaison directe des fonctions de répartition des deux distributions en en retenant l’écart le plus grand.

On note D_{obs} la valeur de la statistique de test de Kolmogorov-Smirnov et D celle liée à sa distribution globale, On rejettera H_0 au risque \alpha si P(D_{obs} > D_{n,1-\alpha}) < \alpha / P(D_{obs} > D_{n_1,n_2,1-\alpha}) < \alpha soit que plus la statistique de test D_{obs} est grande (et donc l’écart est grand) et plus on a de chance de rejeter notre hypothèse.

\bullet Tendance lorsque n \longrightarrow \infty:

On s’intéresse désormais à la résistance du test de Kolmogorov-Smirnov au fur et à mesure que la taille d’échantillon croît. Nous fixons une statistique de test D_{test} = 0.01, soit un cas fictif correspondant à une différence particulièrement faible entre les deux fonctions de répartition que l’on compare. Le résultat attendu sera donc que quelque soit la taille de l’échantillon, l’on ne devrait pas rejeter  l’hypothèse de similarité des fonctions de répartition: H_0. Le graphique ci-dessous montre l’évolution de la p-valeur p associée à D_{test} fixée lorsque n croît de 10 à 100 000 observation.

add1

De manière hâtive, on reste en adéquation avec l’hypothèse de construction de la statistique de test de Kolmogorov-Smirnov D_{test} jusqu’à n = 11 499 (p > 20 \%). Jusqu’à n = 18 436, on se forcera à rejeter H_0 avec un risque assez fort compris entre  5 \% et 20 \%. Enfin, à n = 26 483 la p-valeur passe en dessous des 1 \%.

Cette simulation montre que le test de Kolmogorov-Smirnov est atteint par la malédiction des grands échantillons. Cependant, et même s’il faut relativiser ce constat car ici nous prenons une statistique de test D_{test} particulièrement faible, on peut également voir qu’il offre une certaine marge et permet de travailler sur des échantillons assez importants.

\bullet Annexe théorique:

Nous présentons ici une esquisse de la justification du lien entre la forme théorique du test de Kolmogorov-Smirnov et sa version pratique.

Soit X = (x_1, \ldots, x_n) une variable aléatoire de  taille n et de fonction de répartition empirique:

F_n = \frac{\mbox{Nombre d'\'el\'ements } \leq \mbox{ x fix\'e}}{n} = \frac{1}{n} \cdot \sum_{i = 1} ^n 1_{x_i \leq x} \forall x \in \mathbb{R}

, ce qui revient en réalité à calculer les quantiles associés à la distribution de X.

Dans un premier temps, on cherche à quantifier la limite de sup_{x \in \mathbb{R}} \vert F_n - F \vert.

Théorème 1 (Glivenko-Cantelli): Presque sûrement, la suite des fonctions de répartition empiriques converge uniformément vers la fonction de répartition de X:

sup_{x \in \mathbb{R}} \vert F_n - F \vert = \Vert F_n - F \Vert_{\infty} \underset{n \to +\infty}{\overset{p.s.}{\longrightarrow}} 0

Ce théorème justifie la comparaison entre une loi de distribution empirique et un loi de distribution continue ou entre deux lois de distribution empirique. Le théorème de Kolmogorov-Smirnov énoncé ci-dessous va nous fournir la vitesse de convergence de la fonction de répartition empirique vers sa généralisation continue.

Théorème 2 (Kolmogorov-Smirnov): Si F est continue et en remarquant que K = F_n - F est un mouvement Brownien on a alors,

 \sqrt{n} \Vert K \Vert_{\infty} \underset{n \to +\infty} = \sqrt{n} D_n{\overset{L}{\longrightarrow}} L_{KS}

L_{KS} est la mesure de probabilité sur \mathbb{R} appelée également loi de Kolmogorov-Smirnov. On peut alors la caractériser par la fonction de répartition suivante:

\forall t > 0, F_{KS} (t) = P(K \leq x)

= \sum_{k = -\infty} ^{+\infty} (-1)^k e^{-2 k^2 t^2}

= \sum_{k = -\infty} ^{k = -1} (-1)^k e^{-2 k^2 t^2} + (-1)^0 e^{-2 . 0^2 t^2} + \sum_{k = 1} ^{+\infty} (-1)^k e^{-2 k^2 t^2}

= 1 + 2 \sum_{k = 1} ^{+\infty} (-1)^k e^{-2 k^2 t^2}, par symétrie de la loi de Kolmogorov-Smirnov

Nous pouvons donc déterminer que:

P (\sqrt{n} . sup_{x \in \mathbb{R}} \vert F_n - F \vert \leq c) \underset{n \to +\infty}{\overset{}{\longrightarrow}} 1 + 2 \sum_{k = 1} ^{+\infty} (-1)^k e^{-2 k^2 t^2}

Nous concluons alors la démonstration de la statistique de test de Kolmogorov-Smirnov par la remarque fondamentale suivante: puisque F est continue et croissante et que F_n est constante par morceaux, le supremum ne peut être atteint qu’au voisinage des points de discontinuité de F_n, c’est-à-dire aux points (x_i)_{1 \leq i \leq n}. Nous pouvons alors traduire la fonction de répartition par une forme plus malléable pour les calculs,

\Vert F_n - F \Vert_{\infty} = max_{1 \leq i \leq n}(\vert \frac{i - 1}{n} - F(x_i) \vert,\vert F(x_i) - \frac{i}{n} \vert)

, où le couple (\frac{i - 1}{n},\frac{i}{n}) représente le saut de la distribution au point i (appelé également « point de saut »).

De plus, F est continue, croissante et F(x_i) suit une loi uniforme sur [0, 1]. Alors F(x_i)_{1 \leq i \leq n} a même loi qu’un échantillon réordonné de variables aléatoires indépendamment et identiquement distribuées de loi uniforme U_i sur [0, 1]. Ainsi, D_n, définit ci-dessus, a même loi que:

\sqrt{n} \cdot max_{1 \leq i \leq n}(\vert \frac{i - 1}{n} - U_i \vert,\vert \frac{i}{n} - U_i \vert)

On remarquera que la loi de D_n ne dépend d’aucune mesure de probabilité, on dit alors que c’est une statistique libre, permettant sa généralisation à la comparaison de toute les lois existantes.

\bullet Exemples:

Cas à un échantillon: déterminer l’adéquation à une loi fixée

Soit la variable aléatoire X suivante:

\begin{tabular}{|c|} \hline X \\ \hline 0.9754 \\ \hline 1.2699 \\ \hline 1.4189 \\ \hline 1.5761 \\ \hline 2.7850 \\ \hline 4.2176 \\ \hline 4.8538 \\ \hline 5.4688 \\ \hline 6.3236 \\ \hline 7.9221 \\ \hline 8.0028 \\ \hline 8.1472 \\ \hline 9.0579 \\ \hline 9.1338 \\ \hline 9.1574 \\ \hline 9.5717 \\ \hline 9.5751 \\ \hline 9.5949 \\ \hline 9.6489 \\ \hline 9.7059 \\ \hline \end{tabular}

On cherche à voir si X suit une loi normale. Ci-dessous, l’histogramme construit à partir de X (en noir) permet de voir que visuellement la variable ne suit pas une loi normale. On affiche également sa densité de distribution empirique (courbe verte) et celle attendue dans le cadre d’une distribution normale (courbe rouge).

UP

Visuellement, on peut remarquer que X ne suit pas une loi normale. On s’attend donc à ne pas pouvoir rejeter l’hypothèse H_0 d’égalité des lois de distribution.

Le test de Kolmogorov-Smirnov:

Afin de calculer la statistique de test D_{obs} de Kolmogorov-Smirnov, pour déterminer au sens statistique si notre variable aléatoire suit une loi normale, nous allons définir les termes suivants:
F_{i - 1} = P(X < x_i) = \frac{i - 1}{20} la probabilité empirique d’être strictement inférieur à x, soit le point de saut antérieur ;
F_i = P(X \leq x_i) = \frac{i}{20} la probabilité empirique d’être inférieur ou égal à x, soit le point de saut en cours ;
P_L les probabilités théoriques de tirer les différentes valeurs de X si elle suivait une  la loi normale de paramètre \mu_X = 6.42039 et \sigma_{X} = 3.299319 ;
– Les deux valeurs E^+ = P_L - P(X < x_i) et E^- = P(X \leq x_i) - P_L mesurant l’écart entre la distribution empirique et théorique en fonction des points de saut.

Le tableau qui suit montre les différentes étapes à exécuter afin de calculer la statistique de test D de Kolmogorov-Smirnov:

\begin{tabular}{|l|c|c|c|c|c|} \hline X & F (i-1) & F i & PL & E- & E+ \\ \hline 0.9754 & 0.00 & 0.05 & 0.04943849 & 0.049438492 & 0.0005615081 \\ \hline 1.2699 & 0.05 & 0.10 & 0.05925460 & 0.009254598 & 0.0407454021 \\ \hline 1.4189 & 0.10 & 0.15 & 0.06477221 & -0.035227788 & 0.0852277875 \\ \hline 1.5761 & 0.15 & 0.20 & 0.07101753 & -0.078982468 & 0.1289824679 \\ \hline 2.7850 & 0.20 & 0.25 & 0.13526439 & -0.064735614 & 0.1147356139 \\ \hline 4.2176 & 0.25 & 0.30 & 0.25218337 & 0.002183366 & 0.0478166340 \\ \hline 4.8538 & 0.30 & 0.35 & 0.31746223 & 0.017462229 & 0.0325377710 \\ \hline 5.4688 & 0.35 & 0.40 & 0.38651837 & 0.036518371 & 0.0134816291 \\ \hline 6.3236 & 0.40 & 0.45 & 0.48830421 & 0.088304207 & -0.0383042074 \\ \hline 7.9221 & 0.45 & 0.50 & 0.67550752 & 0.225507523 & -0.1755075231 \\ \hline 8.0028 & 0.50 & 0.55 & 0.68425558 & 0.184255583 & -0.1342555834 \\ \hline 8.1472 & 0.55 & 0.60 & 0.69965168 & 0.149651680 & -0.0996516796 \\ \hline 9.0579 & 0.60 & 0.65 & 0.78797818 & 0.187978180 & -0.137981805 \\ \hline 9.1338 & 0.65 & 0.70 & 0.79458401 & 0.144584010 & -0.0945840097 \\ \hline 9.1574 & 0.70 & 0.75 & 0.79661282 & 0.096612816 & -0.0466128165 \\ \hline 9.5717 & 0.75 & 0.80 & 0.83025028 & 0.080250284 & -0.0302502843 \\ \hline 9.5751 & 0.80 & 0.85 & 0.83051069 & 0.030510686 & 0.0194893145 \\ \hline 9.5949 & 0.85 & 0.90 & 0.83202204 & -0.017977957 & 0.0679779566 \\ \hline 9.6489 & 0.90 & 0.95 & 0.83609969 & -0.063900311 & 0.1139003106 \\ \hline 9.7059 & 0.95 & 1.00 & 0.84033359 & -0.109666414 & 0.1596664142 \\ \hline \end{tabular}

On peut tracer l’évolution de E ^+ (en rouge) et E ^- (en bleu),

add

Dans le cadre d’un test bilatéral, le maximum (trait gris) est obtenu pour l’observation N°10, soit:

D_{obs} = max(\vert max(E^-) \vert, \vert max(E^+) \vert)

= max(0.225507523,0.1755075231)

= 0.225507523

Si l’on avait souhaité s’orienter vers un test unilatéral à gauche, on aurait opté pour D_{obs} ^- = max(E^-) = D_{obs} et à droite, D_{obs} ^+ = max(E^+) = 0.1596664142.

Si l’on se réfère à la table de la loi de Kolmogorov-Smirnov pour un paramètre n = 20 on trouve:

D_{20, 5 \%} = 0.29408 > D_{20, 10 \%} = 0.26473 > D_{20, 20 \%} = 0.23156 > D_{obs} = 0.225507523

On en déduit que l’on ne peut pas rejeter notre hypothèse H_0 même au risque de 20 \%.

On s’intéresse alors à la probabilité exact de rejeter H_0. On obtient pour 3 itérations:

p = 1 - (1 - 2 \sum_{k = 1} ^3 (-1) ^{k+1} e ^{-k ^2 \times 2 \times 20 \times 0.225507523 ^2})

= 2 \times (e ^{-2.034146} - e ^{-8.136583} + e ^{-18.30731})

= 2 \times 0.1304995

=0.260999 > 5 \%

On ne peut rejeter H_0qu’au risque de 26 \%. On en conclut que la variable aléatoire X suit une loi normale.

Le test de Lilliefors:

Lors de l’utilisation du test de Kolmogorov-Smirnov, on a utilisé des valeurs de \mu et \sigma estimées directement sur X alors que l’hypothèse d’application implique que ces deux paramètres sont connus à priori. Désormais, on va essayer la version de Lilliefors afin de voir si l’on retrouve la cohérence entre les figures descriptives et l’indicateur statistique D_{obs} calculé. En suivant l’algorithme présenté plus haut, on a \delta = 20 et,

p = e ^{-7.01256 \cdot 0.225507523 ^2 \cdot (20 + 2.78019) + 2.99587 \cdot 0.225507523 \cdot \sqrt{20} + 2.78019 - 0.122119 + \frac{0.974598}{\sqrt{20}} + \frac{1.67997}{20}}

= e^{-8.12374 + 3.224502 - 0.122119 + 0.2179267 + 0.0839985}

 = e ^{-4.719431}

= 0.008920249 < 1 \%

Selon le test de Lilliefors, on peut rejeter H_0 au seuil de 1 \% et conclure que X ne suit pas une loi normale conformément aux observations que l’on avait pu tenir à partir de la représentation graphique de sa distribution.

Le test de Kuiper:

On applique maintenant le test de Kuiper. On a donc,

V = max_x (E ^+) + max_x (E ^-) = 0.225507523 + 0.1596664142 = 0.3851739

On peut désormais calculer la p-valeur exact du test de Kuiper avec \delta = n = 20. On obtient pour 10 itérations,

p = 2 \times \sum_{k = 1} ^{10} (k ^2 \times 4 \times 20 \times 0.3851739 ^2 - 1) \times e ^{- k ^2 \times 2 \times 20 \times 0.3851739 ^2}

= 2 \times (10.86872 \times e ^{0.002646920} + 46.47487 \times e ^{0.00000000004908666} + \cdots + 1185.87170 \times e ^0)

= 2 \times (0.02876863 + \cdots + 0)

= 2 \times 0.02876863

= 0.05753726 < 10 \%

On peut rejeter H_0 par conséquent au risque de 10 \% et affirmer que X ne suit pas une loi normale.

Cas pour deux échantillons: déterminer si les deux distributions sont similaires

Soit la variable aléatoire X distribuée selon les deux groupes \lbrace A, B \rbrace d’une variable Y:

\begin{tabular}{|l|c|} \hline Y & X \\ \hline A & 8.1472 \\ \hline A & 9.0579 \\ \hline A & 1.2699 \\ \hline A & 9.1338 \\ \hline A & 6.3236 \\ \hline A & 0.9754 \\ \hline A & 2.7850 \\ \hline A & 5.4688 \\ \hline A & 9.5751 \\ \hline A & 9.6489 \\ \hline B & 1.5761 \\ \hline B & 9.7059 \\ \hline B & 9.5717 \\ \hline B & 4.8538 \\ \hline B & 8.0028 \\ \hline B & 1.4189 \\ \hline B & 4.2176 \\ \hline B & 9.1574 \\ \hline B & 7.9221 \\ \hline B & 9.5949 \\ \hline \end{tabular}

Ci-dessous, les densités associées aux distributions de X selon les deux groupes, X|_{Y = "A"} en vert et X|_{Y = B} en rouge. On  remarquera que les deux sous-échantillons semblent avoir la même distribution.

add

Le test de Kolmogorov-Smirnov:

Afin de calculer la statistique de test D de Kolmogorov-Smirnov, pour déterminer au sens statistique si les deux sous-échantillons sont distribués selon la même loi de distribution, on va construire le tableau des effectifs cumulés (puisque n_1 = n_2 = 10 observations dans chaque groupe, le pas sera de \frac{1}{10} = 0.1 pour le cumul):

\begin{tabular}{|l|c|c|c|r|} \hline Y & X & F1 & F2 & F1 - F2 \\ \hline A & 0.9754 & 0.1 & 0 & 0.1 \\ \hline A & 1.2699 & 0.2 & 0 & 0.2 \\ \hline B & 1.4189 & 0.2 & 0.1 & 0.1 \\ \hline B & 1.5761 & 0.2 & 0.2 & 0 \\ \hline A & 2.7850 & 0.3 & 0.2 & 0.1 \\ \hline B & 4.2176 & 0.3 & 0.3 & 0 \\ \hline B & 4.8538 & 0.3 & 0.4 & -0.1 \\ \hline A & 5.4688 & 0.4 & 0.4 & 0 \\ \hline A & 6.3236 & 0.5 & 0.4 & 0.1 \\ \hline B & 7.9221 & 0.5 & 0.5 & 0 \\ \hline B & 8.0028 & 0.5 & 0.6 & -0.1 \\ \hline A & 8.1472 & 0.6 & 0.6 & 0 \\ \hline A & 9.0579 & 0.7 & 0.6 & 0.1 \\ \hline A & 9.1338 & 0.8 & 0.6 & 0.2 \\ \hline B & 9.1574 & 0.8 & 0.7 & 0.1 \\ \hline B & 9.5717 & 0.8 & 0.8 & 0 \\ \hline A & 9.5751 & 0.9 & 0.8 & 0.1 \\ \hline B & 9.5949 & 0.9 & 0.9 & 0 \\ \hline A & 9.6489 & 1 & 0.9 & 0.1 \\ \hline B & 9.7059 & 1 & 1 & 0 \\ \hline \end{tabular}

On peut tracer l’évolution des différences entre les deux fonctions de répartition empirique (avec F_1 associée à X|{Y = A} en trait vert et F_2 associée à X|{Y = B} en trait rouge),

Dans le cadre d’un test bilatéral, le maximum (trait gris) est obtenu pour les observations N°2 et N°14, soit D_{obs} = 0.2. On remarquera que D_{obs} ^- = max(E ^-, E ^+) = 0.2 = D_{obs}. De fait, les tests bilatéral et unilatéral devraient coïncider.

Si l’on se réfère à la table de la loi de Kolmogorov-Smirnov pour les paramètres (n_1, n_2) = (10, 10) on trouve:

D_{10,10,10 \%} = \frac{8}{10} = 0.8 > D_{10,10,5 \%} = \frac{7}{10} = 0.7 > D_{obs} = 0.2

On en déduit que l’on ne peut pas rejeter notre hypothèse H_0 au risque de 5 \%.

On s’intéresse alors à la probabilité exact de rejeter H_0. Au préalable, on a  \frac{10 \times 10}{10 + 10} = 5. Pour trois itérations, on a,

p = 1 - (1 - 2 \sum_{k = 1} ^3 (-1) ^{k+1} e ^{- k ^2 \times 2 \times 5 \times 0.2 ^2})

= 2 \times (e ^{0.67032005} - e ^{-0.20189652} + e ^{0.02732372})

= 2 \times 0.4957473

=0.9914945 > 5 \%

On pourra rejeter H_0 au risque de 5 \%. Nous en déduisons que X|_{Y = A} et X|_{Y = B} suivent la même loi de distribution au sens statistique du terme.

Le test de Kuiper:

On applique maintenant le test de Kuiper. On a donc,

V = max_x(F_1 (x) - F_2 (x)) + max_x (F_2 (x) - F_1 (x))

= 0.2 + 0.1

= 0.3

On peut déterminer la p-valeur pour 10 itérations et \delta = \frac{10 \times 10}{10 + 10} = \frac{100}{20} = 5,

p = 2 \times \sum_{k = 1} ^{10} (k ^2 \times 4 \times 5 \times 0.3 ^2 - 1) \times e ^{- k ^2 \times 2 \times 5 \times 0.3 ^2}

= 2 \times (0.8 \times e ^{0.4065697} + 6.2 \times e ^{0.02732372} + \cdots + 179 \times e ^0)

= 2 \times (0.3252557 + 0.1694071 + \cdots + 0)

= 2 \times 0.4992921

= 0.9985842 > 5 \%

Le test de Kuiper confirme donc la conclusion obtenue avec le test de Kolmogorov-smirnov. On ne peut pas rejeter H_0 et on en conclut que X|_{Y = A} et X|_{Y = B} sont distribués selon des lois similaires.

\bullet Application sous R:

Cas à un échantillon: déterminer l’adéquation à une loi fixée

Soit l’exemple suivant:

X = c(0.9754,1.2699,1.4189,1.5761,2.7850,4.2176,
4.8538,5.4688,6.3236,7.9221,8.0028,8.1472,9.0579,
9.1338,9.1574,9.5717,9.5751,9.5949,9.6489,9.7059)

Le test de Kolmogorov-Smirnov

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

La fonction ks.test du package stats permet d’appliquer le test de Kolmogorov-Smirnov à un ou deux échantillons. Le package se charge automatique lorsque l’on lance R, il n’est donc pas utile de charger la library.

On applique le test de Kolmogorov-Smirnov afin de savoir si X suit une loi normale. On procède de la manière suivante:

ks.test(X,’pnorm’,mean=6.4,sd=3.3)

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

– L’échantillon utilisé: X ;

– Celui de la loi à laquelle on veut se comparer: ‘pnorm’ ;

– Ses paramètres, ici: la moyenne (mean=6.4) et l’écart-type (sd=3.3) puisqu’on cherche à tester l’adéquation à la loi normale ;

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

On obtient alors les résultats suivants:

add

On vérifie:

– La version du test appliqué: « one-sample Kolmogorov-Smirnov test » ;

– Les données utilisées: « data:X » ;

– La statistique de test: « D = 0.22769 » , qui est la même que celle obtenue avec le logiciel SAS (cf section « Application sous SAS ») ;

– La p-valeur, qui est légèrement différente: « p-value = 0.2153 » . Néanmoins, on reste sur la même conclusion voire le même ordre de grandeur. Il faut prendre en compte le fait que cette fonction R apporte une légère modification aux calculs de la p-valeur et se base sur la formule suivante :

p = 1 - D \cdot \sum_{j = 0} ^{E[n \cdot (1 - D)]} e ^{\frac{n!}{j! (n - j)!} + (n - j) \cdot ln(1 - D - \frac{j}{n}) + (j - 1) \cdot ln(D + \frac{j}{n})}

, avec E[.] partie entière ;

– Et le type de test effectué: « alternative hypothesis: two-sided ».

Le test de Lilliefors:

Package et fonction R: https://www.rdocumentation.org/packages/nortest/versions/1.0-4/topics/lillie.test

La fonction lillie.test du package nortest permet d’appliquer le test de Lilliefors.

On lance le test de Lilliefors afin de savoir si X suit une loi normale. On procède de la manière suivante

library(nortest)
lillie.test(X)

Aucun paramètre n’est nécessaire à l’exception évidemment de celui indiquant l’échantillon X sur lequel on veut appliquer le test. On obtient alors les résultats suivants:

add

On vérifie:

– Les données utilisées: « data: X » ;

– La statistique de test: « D = 0.22551 » , qui est la même que celle obtenue lors des calculs manuels (cf section « Exemple ») ;

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

Le test de Kuiper:

Package et fonction R: https://rdrr.io/cran/truncgof/man/v.test.html

La fonction v.test du package truncgof permet d’appliquer le test de Kuiper à un échantillon.

On lance le test de Kuiper afin de savoir si X suit une loi normale. On procède de la manière suivante:

library(truncgof)
v.test(X,’pnorm’,list(mean=mean(X),sd=sd(X)),sim=1000)

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

– L’échantillon utilisé: « data: X » ;

– Celui de la loi à laquelle on veut se comparer: ‘pnorm’ ;

– Ses paramètres sous forme de list(), ici: la moyenne (mean = mean(X)) et l’écart-type (sd = sd(X)) puisqu’on cherche à tester l’adéquation à la loi normale ;

– Le nombre de simulation puisque la fonction estime la p-valeur par méthode MCMC (sim = 1000).

On obtient alors les résultats suivants:

add

On vérifie:

– Les données utilisées: « data: X » ;

– La statistique de test: « V = \sqrt{20} \times 0.3851739 = 1.7226 » , qui est la même que celle obtenue lors des calculs manuels (cf section « Exemple ») ;

– La p-valeur : « p-value = 0.004545 » , qui diffère de celle obtenu lors des calculs manuels car basée sur une approche MCMC ;

– Le choix de l’hypothèse alternative: « atlernative hypothesis: NA », la méthode MCMC utilisée pour le calcul de la p-valeur offre l’opportunité de choisir l’hypothèse H_1 ;

– Le cutoff de découpage: « treshold = -Inf », ici hors-sujet avec notre manoeuvre, le package truncgof permet de travailler sur les fonctions de densité tronquées également ;

– Le nombre de simulation à partir de laquelle la phase MCMC a convergé: « simulations: 219 ».

Cas pour deux échantillons: déterminer si les deux distributions sont similaires

Dans un premier temps, on charge notre exemple:

X_Y1 = c(8.1472,9.0579,1.2699,9.1338,
6.3236,0.9754,2.7850,5.4688,9.5751,9.6489)

X_Y2 = c(1.5761,9.7059,9.5717,4.8538,
8.0028,1.4189,4.2176,9.1574,7.9221,9.5949)

Le test de Kolmogorov-Smirnov:

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

La fonction ks.test du package stats permet d’appliquer le test de Kolmogorov-Smirnov à un ou deux échantillons. Le package se charge automatique lorsque l’on lance R, il n’est donc pas utile de charger la library.

On lance le test de Kolmogorov-Smirnov afin de savoir si X|_{Y = "A"} et X|_{Y = "B"} suivent la même loi de distribution. On procède de la manière suivante:

ks.test(X_Y1,X_Y2)

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

– Les deux échantillons que l’on souhaite comparer: « X_Y1 » pour X|_{Y = "A"} et « X_Y2 » pour X|_{Y = "B"} ;

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

On vérifie:

– Les données utilisées: « data: X_Y1 and X_Y2 » ;

– La statistique de test: « D = 0.2  » qui est la même que celle obtenue lors des calculs manuels (cf section « Exemple ») ;

– La p-valeur : « p-value = 0.99455 » , qui diffère de celle obtenue lors des calculs manuels car basée sur la formule suivante,

p = 1 - D \cdot \sum_{j = 0} ^{E[n \cdot (1 - D)]} e ^{\frac{n!}{j! (n - j)!} + (n - j) \cdot ln(1 - D - \frac{j}{n}) + (j - 1) \cdot ln(D + \frac{j}{n})}

– Le choix de l’hypothèse alternative: « atlernative hypothesis: two-sided ».

Le test de Kuiper:

Package et fonction R: https://www.rdocumentation.org/packages/kuiper.2samp/versions/1.0/topics/kuiper.2samp

La fonction kuiper.2samp du package du même nom permet d’appliquer le test de Kuiper à deux échantillons.

On lance le test de Kuiper afin de savoir si X|_{Y = "A"} et X|_{Y = "B"} suivent la même loi de distribution. On procède de la manière suivante:

library(kuiper.2samp)
kuiper.2samp(X_Y1,X_Y2)

Aucun paramètre n’est nécessaire à l’exception évidemment de ceux indiquant les deux échantillons (« X_Y1 » pour X|_{Y = "A"} et « X_Y2 » pour X|_{Y = "B"}) sur lesquels on veut appliquer le test de Kuiper. On obtient alors les résultats suivants:

add

On vérifie:

La statistique de test « $kuiper.statistic = 0.3  » , qui est la même que celle obtenue lors des calculs manuels (cf section « Exemple ») ;

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

\bullet Application sous SAS:

Cas à un échantillon: déterminer l’adéquation à une loi fixée

Soit l’exemple suivant:

data E;
input X;
cards;
0.9754
1.2699
1.4189
1.5761
2.7850
4.2176
4.8538
5.4688
6.3236
7.9221
8.0028
8.1472
9.0579
9.1338
9.1574
9.5717
9.5751
9.5949
9.6489
9.7059
;
run;

Test de Kolmogorov-Smirnov:

Procédure SAS : http://support.sas.com/documentation/cdl/en/procstat/66703/HTML/default/procstat_univariate_syntax01.htm

On lance le test de Kolmogorov-Smirnov afin de savoir si X suit une loi normale.  On procède de la manière suivante:

proc univariate data = E;
var X;
histogram X / Normal (mu = 6.4 sigma = 3.3);
ods exclude Moments BasicMeasures TestsForLocation FitQuantiles Quantiles ParameterEstimates ExtremeObs MissingValues;
run;

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

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

– L’échantillon que l’on veut comparer à la loi fixée: « var X » ;

– On indique la loi fixée (ici la loi normale de paramètre \mu, \sigma) et ses paramètres lors de l’instruction « histogram X » via le l’indication « / Normal (mu = 6.4 sigma = 3.3) » ;

L’ods ouput est utilisé afin de filtrer les résultats et n’afficher que ceux qui nous intéressent.

On obtient alors les résultats suivants:

add

En se concentrant sur les sorties associées au test de Kolmogorov-Smirnov (colonne « Test ») dans le tableau « Goodness-of-Fit Tests for Normal Distribution », on vérifie:

– Dans la colonne « Statistique », la statistique de test « D = 0.22768766  » , qui est la même que celle obtenue avec le logiciel R (cf section « Application sous R ») ;

– Dans la colonnes « P-value », la p-valeur : « Pr > D = 0.223 » , qui différe de celle obtenue avec le logiciel R étant donné que la fonction utilisée sur cet autre logiciel se base sur une formule différente (cf section « Application sous R »). Néanmoins, les ordres de grandeur restent les mêmes.

Test de Lilliefors:

Procédure SAS :http://support.sas.com/documentation/cdl/en/procstat/66703/HTML/default/procstat_univariate_syntax01.htm

On lance le test de Lilliefors afin de savoir si X suit une loi normale. On procède de la manière suivante:

proc univariate data = E ;
var X;
histogram X / Normal (mu = est sigma = est);
ods exclude Moments BasicMeasures TestsForLocation FitQuantiles Quantiles ParameterEstimates ExtremeObs MissingValues;
run;

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

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

– L’échantillon que l’on veut comparer à la loi fixée: « var X » ;

– On indique la loi fixée (ici la loi normale) et ses paramètres lors de l’instruction « histogram X » via le l’indication « / Normal (mu = Est sigma = Est) ». L’indication « Est » précise à SAS que l’on veut estimer directement sur X les paramètres nécessaires, ce qui débloque automatiquement le test de Lilliefors à la place de celui de Kolmogorov-Smirnov ;

– L’ods ouput est utilisé afin de filtrer les résultats et n’afficher que ceux qui nous intéressent.

On obtient alors les résultats suivants:

addL

En se concentrant sur les sorties associées au test de Kolmogorov-Smirnov (colonne « Test ») dans le tableau « Goodness-of-Fit Tests for Normal Distribution », on vérifie:

– Dans la colonne « Statistique », la statistique de test « D = 0.22550752  » , qui est la même que celle obtenue lors des calculs manuels (cf section « Exemple ») ;

– Dans la colonne « P-value », la p-valeur : « Pr > D < 0.010 » , qui est la même que celle obtenue lors des calculs manuels (cf section « Exemple »).

Le test de Kuiper:

Le logiciel SAS n’offre pas de procédure permettant d’appliquer directement le test de Kuiper. Par conséquent, on proposera le macro-programme suivant:

%macro kuiper_Onesamp(Table=,Cdf=);
 /* Macro pour appliquer le test de Kuiper à un échantillon sur une variable continue */
 /* Paramètres:
 – Table indique le nom de la matrice sur laquelle on veut travailler ;
 – Cdf indique entre parenthèses (Nom de la loi de distribution entre ‘ ‘ et non entre  »  » , variable sur laquelle lancer le test, paramètre 1 de la loi de distribution, paramètre 2, etc) (le modèle est disponible ici: http://support.sas.com/documentation/cdl/en/lefunctionsref/63354/HTML/default/viewer.htm#n0n7cce4a3gfqkn1vr0p1x0of99s.htm). */
 /* Renvoi: la fonction retourne la taille de l’échantillon, les valeurs des statistiques D+ et D-, celle de la statistique V et sa p-valeur associée */
 /* Options permettant d’éviter de saturer la log */
 options nonotes spool;
 /* Sortie de la taille d’échantillon n */
 proc sql noprint;
 select count(*) into: n from &Table.;
 quit;
 /* On prend la table en paramètre pour calculer les valeurs de la fonction de répartition ainsi que celles des sauts */
 data &table.;
 set &table.;
 F = CDF&cdf.;
 U1 = (_n_-1)/&n.;
 U2 = _n_/&n.;
 Ep = F – U1;
 Em = U2 – F; 
 run;
 /* On sort les statistiques de test unilatérales à droite D+ et à gauche D- */
 proc sql noprint;
 create table Dm as select max(Em) as Dm from &table.;
 create table Dp as select max(Ep) as Dp from &table.;
 quit;
 /* On sauvegarde les statistiques de test dans des macro-variales */
 data _null_;
 set Dm;
 call symputx(‘Dm’,Dm);
 run;
 data _null_;
 set Dp;
 call symputx(‘Dp’,Dp);
 run;
 /* On calcul la statistique de test V de Kuiper */
 %let V = %sysevalf(&Dp. + &Dm.);
 /* On aurait pu procéder par macro-calcul mais ici on passera par une étape data pour calculer la p-valeur associée à V sur 50 itérations */
 data calc;
 do k = 1 to 50;
  output;
  end;
 run;
 data calc;
 set calc;
 V = &Dp. + &Dm.;
 N = &n.;
 Calc = 2 * (4 * k**2 * V**2 * N – 1) * exp(-2 * k**2 * V**2 * N);
 run;
 /* On finalise et enregistre la p-valeur dans une macro-variable */
 proc sql noprint;
 select (sum(Calc)) into: Result from Calc;
 quit;
 /* On créé la table de synthèse des résultats obtenus */
 data Resultat_Vkuiper_oneSamp;
 N = &n.;
 ‘D+’n = &Dp.;
 ‘D-‘n = &Dm.;
 V = &Dp. + &Dm.;
 ‘p-valeur’n = &result.;
 Loi = ‘&Cdf.’;
 run;
 /* Suppression des tables inutiles */
 proc datasets lib = work nolist;
 delete &table. Calc Dm Dp;
 run;
 /* Reset des options */
 options nonotes spool;
%mend;

Après compilation de la macro sous l’environnement SAS, la fonction se lance ainsi,

%kuiper_OneSamp(table = E,cdf=(‘NORMAL’,6.42034,3.299319)

Parmi les paramètres à insérer les plus importants il faut relever:

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

– La loi de distribution et ses paramètres à laquelle on veut comparer X: « cdf=(‘NORMAL’,X,6.42034,3.299319) ». A noter que la variable sur laquelle on veut appliquer le test est préciser entre la loi de distribution et ses paramètres. De plus, il faudra mettre le nom de la loi de distribution entre ‘ ‘ et non entre  »  » afin d’éviter un bug lors du déroulement des différentes étapes de calcul.

On obtient alors les résultats suivants dans les tables générés en fin de procédure:

add

Dans la table renvoyée par la fonction, on vérifie:

– La taille d’échantillon: « N = 20 » ;

– Les statistiques de test unilatérales à gauche: « D- = 0.1596664375 » et à droite: « D- = 0.2255075073 » ;

– La statistique de test: « V = 0.3851739448  » , qui est la même que celle obtenue lors des calculs manuels (cf section « Exemple »);

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

– Les paramètres de la loi utilisée: « Loi = (‘NORMAL’,X,6.42034,3.299319) » ainsi que la variable sur laquelle nous avons appliqué notre test.

Cas pour deux échantillons: déterminer si les deux distributions sont similaires

Soit l’exemple suivant:

data E;
input Y $1. X;
cards;
A 8.1472
A 9.0579
A 1.2699
A 9.1338
A 6.3236
A 0.9754
A 2.7850
A 5.4688
A 9.5751
A 9.6489
B 1.5761
B 9.7059
B 9.5717
B 4.8538
B 8.0028
B 1.4189
B 4.2176
B 9.1574
B 7.9221
B 9.5949
;
run;

Le test de Kolmogorov-Smirnov:

Procédure SAS : https://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#npar1way_toc.htm

On lance le test de Kolmogorov-Smirnov afin de savoir si X|_{Y = "A"} et X|_{Y = "B"} suivent la même loi de distribution. On procède de la manière suivante:

proc npar1way data = E;
var X;
class Y;
ods exclude ANOVA ClassMeans WilcoxonMC WilcoxonScores WilcoxonTest KruskalWallisMC KruskalWallisTest MedianAnalysis MedianMC MedianScores MedianTest VWAnalysis VWMC VWScores VWTest SavageAnalysis SavageMC SavageScores SavageTest CVMStats CVMTest KuiperStats KuiperTest;
run;

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

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

– L’échantillon que l’on veut comparer à la loi fixée: « var X » ;

– La variable binaire permettant de scinder X en X|_{Y = "A"} et X|_{Y = "B"}: « class Y » ;

– L’ods ouput est utilisé afin de filtrer les résultats et n’afficher que ceux qui nous intéressent.

On obtient alors les résultats suivants:

add.png

On vérifie:

– Que l’on retrouve dans le tableau « Test de Kolmogorov-Smirnov for Variable X Classified by Variable Y » les intitulés de groupe de notre variable binaire Y (colonne Y): « A » et « B » ;

– Que l’on retrouve dans le tableau « Test de Kolmogorov-Smirnov for Variable X Classified by Variable Y » les effectifs par groupe de Y (colonne N): 10 et 10 ;

– Que l’on retrouve dans le tableau « Test à deux échantillons de Kolmogorov-Smirnov (Asymptotique) » la statistique de test « D = 0.1 » , qui et la même que celle obtenue lors des calculs manuels (cf section « Exemple ») ;

– Que l’on retrouve dans le tableau « Test à deux échantillons de Kolmogorov-Smirnov (Asymptotique) » la p-valeur : « Pr > KSa: < 0.9883 » , qui diffère de celle obtenue lors des calculs manuels car basée sur une autre méthode de calcul. Néanmoins, les ordres de grandeur restent les mêmes.

Le test de Kuiper:

On lance le test de Kuiper afin de savoir si X|_{Y = "A"} et X|_{Y = "B"} suivent la même loi de distribution. On procède de la manière suivante:

proc npar1way data = E;
var X;
class Y;
ods exclude ANOVA ClassMeans WilcoxonMC WilcoxonScores WilcoxonTest KruskalWallisMC KruskalWallisTest MedianAnalysis MedianMC MedianScores MedianTest VWAnalysis VWMC VWScores VWTest SavageAnalysis SavageMC SavageScores SavageTest CVMStats CVMTest KolSmir2Stats KolSmirExactTest KolSmirStats KolSmirTest;
run;

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

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

– L’échantillon que l’on veut comparer à la loi fixée: « var X » ;

– La variable binaire permettant de scinder X en X|_{Y = "A"} et X|_{Y = "B"}: « class Y » ;

– L’ods ouput est utilisé afin de filtrer les résultats et n’afficher que ceux qui nous intéressent.

On obtient alors les résultats suivants:

addOn vérifie:

– Que l’on retrouve dans le tableau « Test de Kuiper for Variable X Classified by Variable Y » les intitulés de groupe de notre variable binaire Y (colonne Y): « A » et « B » ;

– Que l’on retrouve dans le tableau « Test de Kuiper for Variable X Classified by Variable Y » les effectifs par groupe de Y (colonne N): 10 et 10 ;

– Que l’on retrouve dans le tableau « Test à deux échantillons de Kuiper (Asymptotique) » la statistique de test: « D = 0.3 » , qui est la même que celle obtenue lors des calculs manuels (cf section « Exemple ») ;

– Que l’on retrouve dans le tableau « Test à deux échantillons de Kolmogorov-Smirnov (Asymptotique) » la p-valeur : « Pr > KSa: < 0.9886 » , qui est la même que celle obtenue lors des calculs manuels (cf section « Exemple »).

\bullet Bibliographie:

– Sulla determinazione empirica di una legge di distribuzione de Andrey Nikolaevich Kolmogorov

– Tables for estimating the goodness of fit of empirical distributions de Nikolai Vasilyevich Smirnov

– On the Kolmogorov–Smirnov test for normality with mean and variance unknown de Hubert Lilliefors

– Kuiper’s P-value as a measuring tool and decision procedure for the goodness-of-fit test de H. Arsham

– Probabilités, analyse des données et statistique de Gilbert Saporta

– Comparaison de populations. Tests non paramétriques de Ricco Rakotomalala

– Data mining et statistique décisionnelle, l’intelligence des données de Stéphane Tufféry

– Le site http ://geai.univ-brest.fr/ carpenti/2007-2008/Documents-R/normalite.html