Wdrożyliśmy kilka rodzajów statystycznego testowania hipotez, z których jednym jest test odpowiedniego modelu chi kwadrat - test chi kwadrat liczby próbek w przedziałach wyznaczonych z odwrotnego CDF o danym rozkładzie prawdopodobieństwa. Na przykład, aby przetestować generowanie próbki dystrybucji Cauchy'ego, uruchamiam coś takiego
with(Statistics):
infolevel[Statistics] := 1:
distribution := CauchyDistribution(2, 3):
sample := Sample(distribution, 10^6):
ChiSquareSuitableModelTest(sample, distribution, 'bins' = 100, 'level' = 0.001);
Ponieważ mogę wygenerować tak dużą próbkę, jak mi się podoba, mogę uczynić dość małą.α
Dla rozkładów z momentami skończonymi obliczam z jednej strony liczbę przykładowych momentów, az drugiej symbolicznie obliczam odpowiednie momenty rozkładu i ich błąd standardowy. Na przykład dla dystrybucji beta:
with(Statistics):
distribution := BetaDistribution(2, 3):
distributionMoments := Moment~(distribution, [seq(1 .. 10)]);
standardErrors := StandardError[10^6]~(Moment, distribution, [seq(1..10)]);
evalf(distributionMoments /~ standardErrors);
To pokazuje malejącą listę liczb, z których ostatnia to 255.1085766. A więc nawet dla 10. momentu wartość tego momentu jest ponad 250 razy większa niż wartość błędu standardowego przykładowego momentu dla próbki o wielkości . Oznacza to, że mogę zaimplementować test, który działa mniej więcej w następujący sposób:106
with(Statistics):
sample := Sample(BetaDistribution(2, 3), 10^6):
sampleMoments := map2(Moment, sample, [seq(1 .. 10)]);
distributionMoments := [2/5, 1/5, 4/35, 1/14, 1/21, 1/30, 4/165, 1/55, 2/143, 1/91];
standardErrors :=
[1/5000, 1/70000*154^(1/2), 1/210000*894^(1/2), 1/770000*7755^(1/2),
1/54600*26^(1/2), 1/210000*266^(1/2), 7/5610000*2771^(1/2),
1/1567500*7809^(1/2), 3/5005000*6685^(1/2), 1/9209200*157366^(1/2)];
deviations := abs~(sampleMoments - distributionMoments) /~ standardErrors;
Liczby distributionMoments
i standardErrors
pochodzą z pierwszego biegu powyżej. Teraz, jeśli generowanie próbki jest prawidłowe, liczby w odchyleniach powinny być względnie małe. Zakładam, że są one w przybliżeniu normalnie rozłożone (które tak naprawdę nie są, ale zbliżają się wystarczająco - przypominam, że są to wyskalowane wersje chwil próbek, a nie same próbki), a zatem mogę na przykład oznaczyć przypadek, w którym odchylenie jest większy niż 4 - odpowiadający momentowi próbkowemu, który odbiega ponad czterokrotność błędu standardowego od momentu rozkładu. Jest mało prawdopodobne, aby zdarzyło się to losowo, jeśli generowanie próbki jest dobre. Z drugiej strony, jeśli pierwsze 10 przykładowych momentów pasuje do momentów rozkładu z dokładnością do mniej niż pół procenta, mamy dość dobre przybliżenie rozkładu.