Testen zufällig generierter Daten anhand der beabsichtigten Verteilung


17

Ich habe ein Programm geschrieben, das zufällige Daten erzeugt. Wenn das Programm ordnungsgemäß funktioniert, sollten diese Daten einer bestimmten, bekannten Wahrscheinlichkeitsverteilung folgen. Ich möchte das Programm ausführen, einige Berechnungen für das Ergebnis durchführen und einen p-Wert ausarbeiten.

Bevor es jemand anders sagt: Ich verstehe, dass das Testen von Hypothesen nicht erkennen kann, ob das Programm richtig funktioniert. Es kann nur erkennen, wenn es auf eine bestimmte Art und Weise fehlerhaft funktioniert . (Und selbst dann sollte der Test in X% der Fälle fehlschlagen, je nachdem, welches Signifikanzniveau Sie wählen ...)

Daher versuche ich zu verstehen, welche Tools geeignet sein könnten. Bestimmtes:

  • Ich kann so viele zufällige Daten generieren, wie ich möchte. Ich muss das Programm nur lange genug laufen lassen. Ich bin also nicht auf eine bestimmte Stichprobengröße beschränkt.

  • Ich interessiere mich für Techniken, die einen p-Wert erzeugen. Es ist also keine interessante Option, auf ein Diagramm zu starren und zu sagen, "Ja, das sieht irgendwie linear aus". Es sei denn, es gibt eine Möglichkeit, die "Wonkyness" eines Diagramms mit einer harten Zahl zu belegen. ;-)

Was ich bisher weiß:

  • Ich habe drei Hauptarten von Tests gesehen, die erwähnt wurden, wie sie anwendbar sein könnten: [Pearson] Chi-Quadrat-Test, Kolmogorov-Smirnov-Test und Anderson-Darling-Test.

  • Es scheint, dass ein Chi-Quadrat-Test für diskrete Verteilungen geeignet ist , während die anderen beiden für kontinuierliche Verteilungen besser geeignet sind . (?)

  • Verschiedene Quellen weisen darauf hin, dass der AD-Test "besser" ist als der KS-Test, gehen jedoch nicht weiter ins Detail.

Letztendlich erkennen alle diese Tests vermutlich "unterschiedliche Arten", von der angegebenen Nullverteilung abzuweichen. Aber ich weiß noch nicht genau, was die Unterschiede sind ... Zusammenfassend suche ich nach einer allgemeinen Beschreibung, wo die einzelnen Testtypen am besten anwendbar sind und welche Arten von Problemen am besten erkannt werden.


Wenn Sie Ihre eigenen Texte geschrieben haben, ist dies fast ein Fehlschlag, sobald Sie die Grenzen Ihres Wissens (das Sie in das Design eingebettet haben) überschritten haben. Schauen Sie sich random.org/analysis an, in dem einige der Überprüfungsmethoden aufgeführt sind, und natürlich stackoverflow.com/q/2130621/717355 . Philosophisch gesehen, wenn das Programm deterministisch ist, kann es sowieso nicht zufällig sein ;-) Es ist definitiv ein lohnendes Thema, um es zu studieren (und vergessen Sie nicht, über das Hacken von Passwörtern zu diskutieren).
Philip Oakley

Antworten:


21

Hier finden Sie eine allgemeine Beschreibung der Funktionsweise der drei genannten Methoden.

Die Chi-Quadrat-Methode vergleicht die Anzahl der Beobachtungen in einem Bin mit der Anzahl, die sich auf der Grundlage der Verteilung voraussichtlich im Bin befindet. Für diskrete Verteilungen sind die Bins normalerweise die diskreten Möglichkeiten oder Kombinationen davon. Für kontinuierliche Verteilungen können Sie Schnittpunkte auswählen, um die Fächer zu erstellen. Viele Funktionen, die dies implementieren, erstellen die Bins automatisch. Sie sollten jedoch in der Lage sein, eigene Bins zu erstellen, wenn Sie in bestimmten Bereichen vergleichen möchten. Der Nachteil dieser Methode ist, dass Unterschiede zwischen der theoretischen Verteilung und den empirischen Daten, die noch die Werte in den gleichen Bereich setzen, nicht erkannt werden. Ein Beispiel wäre das Runden, wenn die Zahlen zwischen 2 und 3 theoretisch über den Bereich verteilt werden sollten (Wir erwarten Werte wie 2.34296),

Die KS-Teststatistik ist der maximale Abstand zwischen den beiden zu vergleichenden kumulativen Verteilungsfunktionen (häufig eine theoretische und eine empirische). Wenn die 2 Wahrscheinlichkeitsverteilungen nur 1 Schnittpunkt haben, ist 1 minus der maximale Abstand der Überlappungsbereich zwischen den 2 Wahrscheinlichkeitsverteilungen (dies hilft einigen Leuten, sich vorzustellen, was gemessen wird). Stellen Sie sich vor, Sie zeichnen die theoretische Verteilungsfunktion und die EDF auf derselben Kurve und messen dann den Abstand zwischen den beiden "Kurven". Der größte Unterschied besteht in der Teststatistik, und sie wird mit der Verteilung der Werte verglichen, wenn die Null wahr ist. Dies erfasst Unterschiede, ist die Form der Verteilung oder 1 Verteilung verschoben oder gestreckt im Vergleich zu den anderen.1n

Der Anderson-Darling-Test verwendet auch den Unterschied zwischen den CDF-Kurven wie der KS-Test, verwendet jedoch anstelle des maximalen Unterschieds eine Funktion der Gesamtfläche zwischen den beiden Kurven (er quadriert tatsächlich die Unterschiede und gewichtet sie so, dass die Schwänze haben) mehr Einfluss, dann integriert über den Bereich der Distributionen). Dies gibt Ausreißern mehr Gewicht als KS und gibt auch mehr Gewicht, wenn es mehrere kleine Unterschiede gibt (im Vergleich zu 1 großen Unterschied, den KS hervorheben würde). Dies kann dazu führen, dass der Test überlastet wird und Sie Unterschiede feststellen, die Sie als unwichtig erachten (leichte Rundungen usw.). Wie beim KS-Test wird davon ausgegangen, dass Sie keine Parameter aus den Daten geschätzt haben.

Hier ist eine Grafik, um die allgemeinen Ideen der letzten 2 zu zeigen:

Bildbeschreibung hier eingeben

basierend auf diesem R-Code:

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)

Das obere Diagramm zeigt einen EDF einer Probe aus einer Standardnormalen im Vergleich zum CDF der Standardnormalen mit einer Linie, die den KS-Status zeigt. Das mittlere Diagramm zeigt dann den Unterschied zwischen den beiden Kurven (Sie können sehen, wo der KS-Status auftritt). Der Boden ist dann die quadratische, gewichtete Differenz. Der AD-Test basiert auf der Fläche unter dieser Kurve (vorausgesetzt, ich habe alles richtig gemacht).

Andere Tests untersuchen die Korrelation in einem qqplot, untersuchen die Steigung im qqplot, vergleichen den Mittelwert, var und andere Statistiken basierend auf den Momenten.


+1, das ist eine gute Antwort auf die eigentliche Frage (im Gegensatz zu meiner ...). Die Beschreibung in der Mitte von Absatz 3 dient nur der Veranschaulichung, falls Sie dazu geneigt sind.
gung - Reinstate Monica

Das ist eine wirklich schöne Antwort. Nur um sicherzugehen, dass ich alles verstehe: KS-Test gibt die größte Abweichung zwischen der CDF und der EDF zurück, während AD die gesamte [gewichtete] Fläche zwischen den beiden Kurven zurückgibt?
MathematicalOrchid

@MathematicalOrchid, meistens richtig, der AD quadriert den Abstand, gewichtet dann und integriert ihn dann, so dass er sich etwas von dem Bereich unterscheidet (zum Verständnis ist es jedoch wahrscheinlich in Ordnung und viel einfacher, darüber nachzudenken).
Greg Snow

1
Ich gehe davon aus, dass der KS-Test überlegen wäre, wenn Ihre theoretische Verteilung eine Punktmasse hätte (vertikaler Sprung in der CDF an einem bestimmten Punkt) und die tatsächliche Verteilung Ihrer Daten eine Punktmasse an fast, aber nicht ganz derselben Stelle hätte zum AD-Test. Aber dieser Fall ist wahrscheinlich ein bisschen erfunden. Der KS-Test ermöglicht einseitige Tests, bei denen die AD immer zweiseitig ist, sodass dies ein weiterer Unterschied wäre (nur nicht häufig).
Greg Snow

2
Mir gefällt die @ MathematicalOrchid-Charakterisierung nicht, dass die KS-Statistik nur von "einem Extrempunkt" abhängt. Die Position dieses "einen Punktes" (häufig in der Mitte der Verteilung) in einer CDF hängt von den Werten der anderen Punkte in der Menge ab und ist daher nicht so isoliert oder einsam, wie diese Sprache dem naiven Zuhörer nahe legen würde.
DW

12

+1 für das Schreiben einer klaren und detaillierten Frage. Ich hoffe, dass meine Antwort nicht zu frustrierend ist. Ich glaube, dass das Testen von Hypothesen in Ihrem Fall kein angemessener Ansatz ist. Nullhypothese Signifikanztests ist eine vernünftige Sache zu tun , wenn die Antwort könnte ja oder nein sein, aber Sie wissen nicht , welche . (Leider sagt es Ihnen nicht wirklich was, aber das ist ein anderes Problem.) In Ihrem Fall, so meine ich, möchten Sie wissen, ob Ihr Algorithmus gut ist. Es ist jedoch (mit Sicherheit) bekannt, dass kein Computerprogramm wirklich zufällige Daten aus einer Wahrscheinlichkeitsverteilung erzeugen kann. Dies gilt erstens, weil alle Computer Finite-State-Maschinen sind und daher nur Pseudozufallszahlen erzeugen können. Darüber hinaus ist es nicht möglich, dass die generierten Werte (abgesehen von dem Fehlen einer echten Zufälligkeit) einer kontinuierlichen Verteilung perfekt folgen. Es gibt verschiedene Möglichkeiten, dies zu verstehen. Am einfachsten ist es jedoch, wenn die Zahlenreihe Lücken aufweist, was für keine kontinuierliche Zufallsvariable zutrifft. Darüber hinaus sind diese Lücken nicht alle perfekt gleich breit oder perfekt gleich beabstandet. Unter Informatikern, die an der Generierung von Pseudozufallszahlen arbeiten, lautet der Name des Spiels, die Algorithmen so zu verbessern, dass die Lücken bei längeren Perioden gleichmäßiger werden (und auch schneller mehr Werte generieren können). Auf jeden Fall belegen diese Tatsachen, dass das Testen von Hypothesen der falsche Ansatz ist, um festzustellen, ob Ihr Algorithmus "einer bestimmten, bekannten Wahrscheinlichkeitsverteilung" ordnungsgemäß folgt. weil es nicht ist. (Es tut uns leid.)

Stattdessen ist es besser zu bestimmen, wie nahe Ihre Daten an der theoretischen Verteilung liegen. Hierzu würde ich empfehlen, die Diagramme zu überdenken, insbesondere qq-Diagramme und pp-Diagramme. (Wiederum ist mir klar, dass dies frustrierend sein muss, und ich entschuldige mich dafür.) Allerdings müssen Sie die Handlungen nicht wirklich anfertigen oder sie ansehen, so seltsam das auch klingt. Stattdessen können Sie Ihre Daten, die für das Plotten geeignet sind, konvertieren und die entsprechenden Werte aus der betreffenden theoretischen Verteilung berechnen, miteinander korrelieren. Dies gibt Ihnen eine Zahl, insbesondere einen R-Score, ganz wie Sie möchten. Darüber hinaus gibt Ihnen die Zahl ein angemessenes Maß dafür, wie gut Ihr Algorithmus ist. Für diesen Vorgang können Sie so viele Daten generieren, wie Sie möchten. Mehr Daten geben Ihnen mehr Präzision in Bezug auf die Messung. Das heißt, wir haben unsere Vorstellung von Macht von verschoben1-βr=1

In Bezug auf die Bewertung der Qualität Ihres Algorithmus möchten Sie möglicherweise eine zeitliche Zuordnung zu anderen Standard-pRNGs vornehmen.

Hoffe das hilft.


Nicht genau das, wonach ich gefragt habe, aber trotzdem aufschlussreich. Ich nehme an, dass Sie sich mit "nicht stetig" im Grunde genommen auf die Tatsache beziehen, dass Computer keine unendlich genaue Arithmetik implementieren?
MathematicalOrchid

Das ist ein großer Teil davon, aber nicht das ganze Thema. Dies ist ein Thema, das immens komplex ist.
gung - Reinstate Monica

1
Einige der Ideen von @ gungs erstem Absatz sind in der Funktion SnowsPenultimateNormalityTestdes TeachingDemosPakets für R implementiert . Ich stimme der Idee von @ gung zu, ein Maß für die Nähe zu betrachten, anstatt sich auf einen p-Wert zu konzentrieren. Ein Problem bei der Verwendung der Korrelation im qq-Diagramm besteht darin, dass Sie immer noch eine sehr hohe Korrelation erhalten können, wenn Ihre Daten die richtige Form, aber einen anderen Mittelwert, eine andere Varianz usw. haben. Eine Alternative ist die Verwendung der KS-Statistik oder der AD-Statistik als Maß für den Unterschied zur Theorie.
Greg Snow

@gung, danke für die Antwort. Könnten Sie bitte etwas näher darauf eingehen, „ob Sie Ihre Daten für das Plotten geeignet konvertiert und die entsprechenden Werte aus der fraglichen theoretischen Verteilung berechnet haben, können Sie sie korrelieren“? Haben Sie die Daten für das pp- oder qq-Plotten berechnet, was wäre der nächste Schritt, um den von Ihnen erwähnten r-Score zu erhalten? Ist es ein bekannter Test? Könnten Sie bitte eine Referenz geben? Vielen Dank!
Ivan

1

Ich habe nicht alle Antworten vollständig gelesen, aber ich sehe, dass sie ziemlich gründlich und genau sind. Ich gehe das Risiko ein, dass ich etwas wiederhole, was in den langen Antworten vergraben ist. Ich möchte nur sagen, dass v = der Chi-Quadrat-Test für kontinuierliche Daten verwendet werden kann. Es ist möglicherweise nicht der beste Test und basiert wie viele andere Tests auf der asymptotischen Theorie und ist daher möglicherweise in kleinen Proben mit spärlichen Zellen nicht genau (dies hängt auch davon ab, wie Sie das Binning durchführen). Anderson-Darling ist leistungsfähiger zum Testen der Normalität als der KS-Test, aber KS ist möglicherweise besser für andere kontinuierliche Verteilungen. Lillefors hat einen Test, der für Exponentialverteilungen ausgelegt ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.