Test de données générées aléatoirement par rapport à sa distribution prévue


17

J'ai écrit un programme qui génère des données aléatoires. Si le programme fonctionne correctement, ces données doivent suivre une distribution de probabilité connue et spécifique. Je voudrais exécuter le programme, faire des calculs sur le résultat et trouver une valeur p.

Avant que quelqu'un d'autre ne le dise: je comprends que les tests d'hypothèse ne peuvent pas détecter quand le programme fonctionne correctement. Il ne peut détecter que lorsqu'il fonctionne incorrectement d'une manière spécifique. (Et même dans ce cas, le test "devrait" échouer X% du temps, selon le niveau de signification que vous choisissez ...)

Donc, j'essaie de comprendre quels outils pourraient être appropriés. En particulier:

  • Je peux générer autant de données aléatoires que je le souhaite. Tout ce que j'ai à faire est de laisser le programme fonctionner assez longtemps. Je ne suis donc pas limité à une taille d'échantillon spécifique.

  • Je m'intéresse aux techniques qui produisent une valeur de p. Donc, regarder un graphique et dire "oui, ça a l'air un peu linéaire" n'est pas une option intéressante. A moins qu'il n'y ait un moyen de mettre un nombre dur sur la "wonkyness" d'un graphique. ;-)

Ce que je sais jusqu'à présent:

  • J'ai vu trois types principaux de tests mentionnés qui semblent pouvoir s'appliquer: le test du chi carré [Pearson], le test de Kolmogorov-Smirnov et le test d'Anderson-Darling.

  • Il semble qu'un test du chi carré soit approprié pour les distributions discrètes , tandis que les deux autres sont plus appropriés pour les distributions continues . (?)

  • Diverses sources suggèrent que le test AD est "meilleur" que le test KS, mais ne parviennent pas à entrer dans les détails.

En fin de compte, tous ces tests détectent vraisemblablement "différentes manières" de s'écarter de la distribution nulle spécifiée. Mais je ne sais pas encore vraiment quelles sont les différences ... En résumé, je cherche une sorte de description générale de l'endroit où chaque type de test est le plus applicable, et quels types de problèmes il détecte le mieux.


Si vous avez écrit le vôtre, il est presque voué à l'échec une fois que vous avez dépassé les limites de vos connaissances (que vous avez intégrées dans la conception). Jetez un œil à random.org/analysis qui répertorie certaines des méthodes de vérification, et évidemment stackoverflow.com/q/2130621/717355 . Philosophiquement, si le programme est déterministe, il ne peut pas être aléatoire de toute façon ;-) C'est certainement un sujet intéressant à étudier (et n'oubliez pas les discussions de crypo de piratage de mot de passe).
Philip Oakley

Réponses:


21

Voici une description générale du fonctionnement des 3 méthodes mentionnées.

La méthode du Chi-Squared fonctionne en comparant le nombre d'observations dans un bac au nombre prévu d'être dans le bac en fonction de la distribution. Pour les distributions discrètes, les casiers sont généralement les possibilités ou combinaisons discrètes de celles-ci. Pour les distributions continues, vous pouvez choisir des points de coupure pour créer les bacs. De nombreuses fonctions qui implémentent cela créeront automatiquement les bacs, mais vous devriez pouvoir créer vos propres bacs si vous souhaitez comparer dans des domaines spécifiques. L'inconvénient de cette méthode est que les différences entre la distribution théorique et les données empiriques qui mettent toujours les valeurs dans la même case ne seront pas détectées, un exemple serait l'arrondi, si théoriquement les nombres entre 2 et 3 devraient être répartis sur toute la plage (nous nous attendons à voir des valeurs comme 2,34296),

La statistique du test KS est la distance maximale entre les 2 fonctions de distribution cumulative comparées (souvent théorique et empirique). Si les 2 distributions de probabilité n'ont qu'un seul point d'intersection, alors 1 moins la distance maximale est la zone de chevauchement entre les 2 distributions de probabilité (cela aide certaines personnes à visualiser ce qui est mesuré). Pensez à tracer sur le même tracé la fonction de distribution théorique et l'EDF puis mesurez la distance entre les 2 "courbes", la plus grande différence est la statistique de test et elle est comparée à la distribution des valeurs pour cela lorsque le nul est vrai. Cette capture les différences est la forme de la distribution ou 1 distribution décalée ou étirée par rapport à l'autre.1n

Le test d'Anderson-Darling utilise également la différence entre les courbes CDF comme le test KS, mais plutôt que d'utiliser la différence maximale, il utilise une fonction de la surface totale entre les 2 courbes (il ajuste en fait les différences, les pondère pour que les queues aient plus d'influence, puis s'intègre sur le domaine des distributions). Cela donne plus de poids aux valeurs aberrantes que KS et donne également plus de poids s'il y a plusieurs petites différences (par rapport à 1 grande différence sur laquelle KS mettrait l'accent). Cela peut finir par surcharger le test pour trouver des différences que vous considérez comme sans importance (arrondi léger, etc.). Comme le test KS, cela suppose que vous n'avez pas estimé les paramètres à partir des données.

Voici un graphique pour montrer les idées générales des 2 derniers:

entrez la description de l'image ici

sur la base de ce code R:

set.seed(1)
tmp <- rnorm(25)
edf <- approxfun( sort(tmp), (0:24)/25, method='constant', 
    yleft=0, yright=1, f=1 )

par(mfrow=c(3,1), mar=c(4,4,0,0)+.1)
curve( edf, from=-3, to=3, n=1000, col='green' )
curve( pnorm, from=-3, to=3, col='blue', add=TRUE)

tmp.x <- seq(-3, 3, length=1000)
ediff <- function(x) pnorm(x) - edf(x)
m.x <- tmp.x[ which.max( abs( ediff(tmp.x) ) ) ]
ediff( m.x )  # KS stat
segments( m.x, edf(m.x), m.x, pnorm(m.x), col='red' )  # KS stat

curve( ediff, from=-3, to=3, n=1000 )
abline(h=0, col='lightgrey')    

ediff2 <- function(x) (pnorm(x) - edf(x))^2/( pnorm(x)*(1-pnorm(x)) )*dnorm(x)
curve( ediff2, from=-3, to=3, n=1000 )
abline(h=0)

Le graphique du haut montre un EDF d'un échantillon d'une normale standard par rapport au CDF de la normale standard avec une ligne montrant la statistique KS. Le graphique du milieu montre ensuite la différence dans les 2 courbes (vous pouvez voir où la statistique KS se produit). Le fond est alors la différence au carré et pondérée, le test AD est basé sur la zone sous cette courbe (en supposant que tout soit correct).

D'autres tests examinent la corrélation dans un qqplot, regardent la pente dans le qqplot, comparent la moyenne, la var et d'autres statistiques en fonction des moments.


+1, c'est une bonne réponse à la vraie question (contrairement à la mienne ...). La description qui traverse le milieu du paragraphe 3 ne demande qu’une illustration, si vous en avez envie.
gung - Rétablir Monica

C'est une très bonne réponse. Juste pour être sûr de bien comprendre: le test KS renvoie la plus grande déviation entre le CDF et l'EDF, tandis que AD renvoie la surface totale [pondérée] entre les deux courbes?
MathematicalOrchid

@MathematicalOrchid, la plupart du temps correct, l'AD évalue la distance, puis pondère, puis s'intègre, donc il est quelque peu différent de la zone (bien que pour la compréhension, la considérer comme une zone soit probablement correcte et beaucoup plus simple).
Greg Snow

1
Je suppose que si votre distribution théorique avait une masse ponctuelle (saut vertical dans le CDF à un point donné) et que la distribution réelle de vos données avait une masse ponctuelle à presque, mais pas tout à fait, au même endroit, alors le test KS pourrait être supérieur au test AD. Mais ce cas est probablement un peu artificiel. Le test KS permet des tests unilatéraux où l'AD est toujours bilatéral, ce qui serait une autre différence (tout simplement pas commune).
Greg Snow

2
Je n'aime pas la caractérisation @MathematicalOrchid selon laquelle la statistique KS ne dépend que d'un "point extrême". L'emplacement de ce "un point" (souvent au milieu de la distribution) dans un CDF dépend des valeurs des autres points de l'ensemble et n'est donc pas aussi isolé ou solitaire que cette langue suggérerait à l'auditeur naïf.
DWin

12

+1 pour avoir écrit une question claire et détaillée. J'espère que ma réponse n'est pas trop frustrante. Je crois que le test d'hypothèse n'est pas une approche appropriée dans votre cas. Un test de signification d'hypothèse nulle est une chose raisonnable à faire lorsque la réponse peut être oui ou non, mais vous ne savez pas laquelle . (Malheureusement, il ne vous dit pas lequel, mais c'est un problème différent.) Dans votre cas, je suppose que vous voulez savoir si votre algorithme est bon. Cependant, il est connu (avec certitude) qu'aucun programme informatique ne peut générer de données vraiment aléatoires à partir d'une distribution de probabilité. Cela est vrai en premier lieu, car tous les ordinateurs sont des machines à états finis et ne peuvent donc produire que des nombres pseudo-aléatoires.. De plus (en mettant de côté le manque de véritable aléatoire), il n'est pas possible que les valeurs générées suivent parfaitement une distribution continue. Il existe plusieurs façons de comprendre cela, mais la plus simple est peut-être qu'il y aura des «lacunes» dans la droite numérique, ce qui n'est pas le cas pour toute variable aléatoire continue. De plus, ces espaces ne sont pas tous parfaitement également larges ou parfaitement également espacés. Parmi les informaticiens qui travaillent sur la génération de nombres pseudo-aléatoires, le nom du jeu est d'améliorer les algorithmes de sorte que les écarts soient plus petits, plus réguliers, avec des périodes plus longues (et aussi qui peuvent générer plus de valeurs plus rapidement). En tout cas, ces faits établissent que le test d'hypothèse n'est pas la bonne approche pour déterminer si votre algorithme suit correctement "une distribution de probabilité spécifique et connue", parce que ce n'est pas le cas. (Pardon.)

Au lieu de cela, un cadre plus approprié consiste à déterminer à quel point vos données sont proches de la distribution théorique. Pour cela, je recommande, en particulier des parcelles reconsidèrent qq parcelles et p-parcelles1-β précision dans l'estimation des paramètresr=1 . Cela peut valoir la peine de le faire pour les deux types de tracés car ils ont des forces et des faiblesses différentes (en particulier, les tracés qq vous donnent une meilleure résolution dans les queues de la distribution, tandis que les tracés pp offrent une meilleure résolution au centre).

Sur une autre note, en ce qui concerne l'évaluation de la qualité de votre algorithme, vous voudrez peut-être le chronométrer par rapport à d'autres pRNG standard.

J'espère que cela t'aides.


Pas précisément ce que j'ai demandé, mais néanmoins perspicace. Je suppose que par "non continu", vous faites essentiellement référence au fait que les ordinateurs n'implémentent pas l'arithmétique de précision infinie?
MathematicalOrchid

C'est une grande partie de cela, mais pas tout le problème. C'est un sujet extrêmement complexe.
gung - Reinstate Monica

1
Certaines des idées du premier paragraphe de @ gung sont implémentées dans la fonction SnowsPenultimateNormalityTestdu TeachingDemospackage pour R. Je suis d'accord avec l'idée de @ gung de regarder une mesure de proximité plutôt que de se concentrer sur une valeur p. Un problème avec l'utilisation de la corrélation dans le tracé qq pour cela est que si vos données ont la forme correcte, mais une moyenne, une variance, etc. différentes, vous pouvez toujours obtenir une corrélation vraiment élevée. Une alternative consiste à utiliser la statistique KS ou la statistique AD comme mesure de la différence par rapport à la théorie.
Greg Snow

@gung, merci pour la réponse. Pourriez-vous nous en dire un peu plus sur «après avoir converti vos données de manière appropriée pour le traçage et avoir calculé les valeurs correspondantes à partir de la distribution théorique en question, vous pouvez les corréler»? Après avoir calculé les données pour le tracé pp ou qq, quelle serait la prochaine étape pour obtenir le r-score que vous avez mentionné? S'agit-il d'un test bien connu? Pourriez-vous s'il vous plaît donner une référence? Je vous remercie!
Ivan

1

Je n'ai pas complètement lu toutes les réponses mais je vois qu'elles sont assez complètes et précises. Au risque de répéter quelque chose enfoui dans les réponses longues, je veux juste dire que v = le test du chi carré peut être utilisé pour des données continues. Ce n'est peut-être pas le meilleur test et, comme de nombreux tests, il repose sur une théorie asymptotique et peut donc ne pas être précis dans de petits échantillons avec des cellules clairsemées (cela dépend également de la façon dont vous effectuez le binning). Anderson-Darling est plus puissant pour tester la normalité que le test KS mais KS peut être meilleur pour d'autres distributions continues. Lillefors dispose d'un test conçu pour les distributions exponentielles.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.