Re: random Statistik

Jun 08, 2024 Last reply: 2 years ago 61 Replies


>


>> Es gab hier Widersprüchliches zu lesen
>> zu hohen Ereignis-Anzahlen, die bessere Ergebnisse liefern sollen.
>> Es stimmt generell, daß viele Ereignisse zuverlässigere Ergebnisse liefern. >>
>> Nachfolgend wird gewürfelt 1..6 (kryptographisch).
>> 1+2+3+4+5+6 = 21 ; 21/6 = 3,5 (Mittelwert)
>> 1+6 = 7 ; 7/2 = 3,5 (Reihenrechnung)
>>
>> Das Ergebnis wird umso genauer, je mehr Würfel-Ereignisse vorliegen.
>> Mit 'genauer' ist gemeint, daß die Differenzen zu vorhergehenden
>> Werten fortlaufend geringer werden.
>> Das Pendeln um den genauen Mittelwert herum hat fortlaufend eine geringere Frequenz.
>> Ein Pendeln bleibt bestehen, weil der Zahlenbereich 1..6 und die Werte sehr klein sind.
>>
>> Die erste erwürfelte Zahl kann natürlich eine aus der Menge 1..6 sein. >>
>> ===========================================
>> 1 6 6.000 6.000
>> 2 3 9.000 4.500
>> 3 1 10.000 3.333
>> 4 2 12.000 3.000
>> 5 5 17.000 3.400
>> 6 2 19.000 3.167
>> 7 3 22.000 3.143
>> 8 3 25.000 3.125
>> 9 3 28.000 3.111
>> 10 5 33.000 3.300
>> 11 6 39.000 3.545
[...]
> 2996 5 10598.000 3.537
>> 2997 5 10603.000 3.538
>> 2998 1 10604.000 3.537
>> 2999 1 10605.000 3.536
>> 3000 3 10608.000 3.536
>> ===========================================
>
> Ohjeojeh,
> da hat Einer sein erstes BASIC Programm zum Laufen gebracht.

Zahlenreihen sind in der Wissenschaft besonders wichtig. Man kann oft gleich mehrere Erkenntnisse daraus ziehen.


Fullquote voll beabsichticht.

Ob diese Daten-Verdoppelung nötig war, können andere beurteilen.

Am 08.06.2024 um 16:07 schrieb Helmut Schellong:

... manchmal ist es nicht erst die Verdoppelung, die unnötig ist.

Gruß, V.

Am 08.06.24 um 17:20 schrieb Volker Staben:

YMMD!

Gruß

Gregor

Mit Wissenschaft habt ihr Drei offenbar kaum etwas zu tun.

Ich habe bisher vielleicht 350 solche Zahlenfolgen ausgegeben, ausgewertet und Erkenntnisse daraus gewonnen. Solches ist eminent wichtig für mich - für Euch jedoch uninteressanter Kram.

-- Mit freundlichen Grüßen Helmut Schellong snipped-for-privacy@schellong.biz

formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link

formatting link

Wenn bei Experimenten solche Zahlenreihen herauskommen kann es sinnvoll sein herauszufinden was davon Rauschen, also Zufall ist und was die eigentliche Information.

Ich wußte bisher nicht, daß dazu WP-Artikel existieren.

================================================ ARITH_FMT='%.3Lf' set r:025 z:025 n:020 s:025 m:025 z=0.0 s=0.0 m=0.0

for n from 1 to 3000 repeat do let "r= random(6)+1" z=$r.0 let "s+=$z" "m=s/$n.0" echo $n $r $s $m done ================================================

Ich will primär die Qualität des Generators (PRNG) direkt und konkret testen. Der Algorithmus hat jedoch einen Fehler, der die Resultate leicht verfälscht. Ich werde später mehr dazu schreiben.

Die (6) bedeutet, daß Zahlen von 0..5 ausgegeben werden. Die +1 dahinter ist der Fehler.

Siehe mein Posting von 12:16.

Es liegt doch kein Fehler vor, wie ich durch weitere Zahlenfolgen mit erweitertem Skript feststellte.

Aktuelles Skript: ================================================== ARITH_FMT='%.3Lf' set r:025 z:025 n:020 e:020 s:025 m:025 m0:025 z=0.0 s=0.0 m=0.0 m0=-1.0

for n from 1 to 400000 repeat do let "r= random(6)+1" let "s+=$r.0" "m=s/$n.0" echo $n $r $s $m cmpv m m0 run? "let ++e" "e=0; m0=$m" let "e>=50" && break done ================================================== Das Skript bricht nun ab, sobald 50 gleiche Mittelwerte hintereinander ausgegeben wurden. Es ist interessant, mathematisch einen optimalen Abbruchwert zu errechnen. Eine Formel dafür müßte entwickelt werden. Der Abbruchwert 50 wurde heuristisch festgelegt.

Hinter random() steckt der Algorithmus 'Spritz' (PRNG). Die sehr hohe Qualität der Ausgabe ist durch die nachfolgende Zahlenfolge belegt. Nach spätestens etwa 10000 Ereignissen steht der Mittelwert mit genügender Genauigkeit fest.

Zugehörige Zahlenfolge: ==================================================================

1 5 5.000 5.000 2 1 6.000 3.000 3 1 7.000 2.333 4 5 12.000 3.000 5 1 13.000 2.600 6 6 19.000 3.167 7 1 20.000 2.857 8 2 22.000 2.750 9 5 27.000 3.000 10 1 28.000 2.800 11 2 30.000 2.727 12 3 33.000 2.750 13 5 38.000 2.923 14 6 44.000 3.143 15 6 50.000 3.333 16 4 54.000 3.375 17 3 57.000 3.353 18 3 60.000 3.333 19 3 63.000 3.316 20 4 67.000 3.350 21 5 72.000 3.429 22 2 74.000 3.364 23 5 79.000 3.435 24 1 80.000 3.333 25 4 84.000 3.360 26 5 89.000 3.423 27 4 93.000 3.444 28 2 95.000 3.393 29 2 97.000 3.345 30 4 101.000 3.367 31 5 106.000 3.419 32 6 112.000 3.500 33 1 113.000 3.424 34 5 118.000 3.471 35 4 122.000 3.486 36 1 123.000 3.417 37 1 124.000 3.351 38 4 128.000 3.368 39 5 133.000 3.410 40 6 139.000 3.475 41 1 140.000 3.415 42 5 145.000 3.452 43 2 147.000 3.419 ... ... ...

10823 5 37819.000 3.494

10824 6 37825.000 3.495 10825 6 37831.000 3.495 10826 3 37834.000 3.495 10827 5 37839.000 3.495 10828 6 37845.000 3.495 10829 3 37848.000 3.495 10830 2 37850.000 3.495 10831 6 37856.000 3.495 10832 2 37858.000 3.495 10833 5 37863.000 3.495 10834 5 37868.000 3.495 10835 5 37873.000 3.495 10836 4 37877.000 3.495 10837 3 37880.000 3.495 10838 1 37881.000 3.495 10839 2 37883.000 3.495 10840 4 37887.000 3.495 10841 3 37890.000 3.495 10842 4 37894.000 3.495 10843 6 37900.000 3.495 10844 1 37901.000 3.495 10845 1 37902.000 3.495 10846 4 37906.000 3.495 10847 6 37912.000 3.495 10848 5 37917.000 3.495 10849 2 37919.000 3.495 10850 5 37924.000 3.495 10851 3 37927.000 3.495 10852 1 37928.000 3.495 10853 1 37929.000 3.495 10854 6 37935.000 3.495 10855 1 37936.000 3.495 10856 6 37942.000 3.495 10857 4 37946.000 3.495 10858 4 37950.000 3.495 10859 4 37954.000 3.495 10860 1 37955.000 3.495 10861 4 37959.000 3.495 10862 3 37962.000 3.495 10863 4 37966.000 3.495 10864 3 37969.000 3.495 10865 4 37973.000 3.495 10866 6 37979.000 3.495 10867 2 37981.000 3.495 10868 3 37984.000 3.495 10869 6 37990.000 3.495 10870 3 37993.000 3.495 10871 4 37997.000 3.495 10872 4 38001.000 3.495 10873 2 38003.000 3.495 10874 1 38004.000 3.495 ==================================================================

Sowas waere da nuetzlich:

formatting link
verschiedene Tests die alle bestanden werden muessen.

Fuers Wuerfeln sind doch Zahlen von 1..6 noetig da ist eins zu addieren genau das richtige.

Vom Generator fordert man dass z.B. alle Zahlen die gleiche Wahrscheinlichkeit haben. Das ist aber nicht ausreichend, denn das bekaeme man auch mit einer sich dauernd wiederholenden Reihe der 6 Zahlen, z.B. 123456123456123456 die ueberhaupt nicht zufaellig ist.

Also koennte man auch noch testen ob alle Kombinationen aus zwei aufeinander folgenden Zahlen die gleichen Wahrscheinlichkeiten haben und alle dreier-kombinationen usw oder auch

Pseudozufallsgeneratoren sind prinzipiell nicht ganz zufaellig, nach einer gewissen Zahl wiederholen sie sich. Man kann sie aber so bauen dass das praktisch nicht vorkommt weil man soviele Zahlen in vernuenftiger Zeit nicht erzeugen kann...

Es kann schon sein dass der Algorithmus gut ist, aber dein Test wuerde auch einen Algorithmus der einfach 123456123456123456... ausgibt fuer noch besser befinden. Es ist sinnvoller die Zahlen selbst zu testen als den Mittelwert, also z.B. ihre Haeufigkeiten aufzusummieren, oder besser die Haeufigkeit von Zahlenpaaren, dann faellt die 123456123... Folge sofort auf.

Eigentlich muesste die letzte Zahl ja 3.500 sein, das ist sie aber nicht weil du nicht genug Zahlen genommen hast, wegen deines Abbruchkriteriums. Probiere mal was bei 100000 1000000 10000000 Zahlen herauskommt.

...

Der Sinn diese Tabelle zu posten kann ja wohl nur darin liegen dass ein Leser diese Tabelle auswertet mit einem Computerprogramm. Programmieren kostet aber Zeit und die ist nicht umsonst, also hier mal ein alternativer Zugang mit chatgpt

Erster Versuch:

----- write a c program that reads lines from stdin and converts the first two space separated items in each line to integers and calls a function fuff with these Integers as parameters

-----

Er gibt mir ein Programm das genau das tut:

------ #include <stdio.h>

#include <stdlib.h>

// Function prototype void fuff(int a, int b);

int main() { char line[256];

// Read lines from stdin while (fgets(line, sizeof(line), stdin)) { int num1, num2;

// Extract the first two space-separated integers if (sscanf(line, "%d %d", &num1, &num2) == 2) { // Call the function fuff with these integers fuff(num1, num2); } else { printf("Invalid input line: %s", line); } }

return 0; }

// Define the function fuff void fuff(int a, int b) { // Example implementation: just print the numbers printf("fuff called with: %d and %d\n", a, b); }

------

Ich wollte das programm jetzt so modifizieren dass er ein Histogramm von num2 macht... Aber warum nicht chatgpt noch mehr Arbeit uebertragen:

-------- treat num2 as a random variable with the values 1 2 3 4 5 6 and put some tests in the orogram that tests if it its distribution

-------

Das hat er dann leider falsch verstanden... Also habe ich ihm noch geschrieben:

------- do not generate random numbers but test if the input numbers are random

------- Er gibt mir folgendes Programm:

-------- #include <stdio.h>

#include <stdlib.h>

// Function prototype void fuff(int a, int b);

int main() { char line[256]; int counts[6] = {0}; // Array to count occurrences of 1, 2, 3, 4, 5, 6 int totalLines = 0;

// Read lines from stdin while (fgets(line, sizeof(line), stdin)) { int num1, num2;

// Extract the first two integers if (sscanf(line, "%d %d", &num1, &num2) == 2) { // Check if num2 is within the valid range (1-6) if (num2 >= 1 && num2 <= 6) { // Increment the count for this num2 value counts[num2 - 1]++; // Call the function fuff with these integers fuff(num1, num2);

// Increment the total number of lines processed totalLines++; } else { printf("Invalid num2 value: %d (must be between 1 and 6)\n", num2); } } else { printf("Invalid input line: %s", line); } }

// Print the counts for each num2 value printf("Distribution of num2 values:\n"); for (int i = 0; i < 6; i++) { printf("%d: %d times\n", i + 1, counts[i]); }

// Calculate the expected count for a uniform distribution double expected = totalLines / 6.0; double chi_squared = 0.0;

// Perform the chi-squared test for (int i = 0; i < 6; i++) { double observed = counts[i]; chi_squared += (observed - expected) * (observed - expected) / expected; }

printf("Chi-squared statistic: %f\n", chi_squared);

// Chi-squared critical value for 5 degrees of freedom at 0.05 significance level is 11.070 if (chi_squared < 11.070) { printf("The distribution appears to be uniform.\n"); } else { printf("The distribution does not appear to be uniform.\n"); }

return 0; }

// Define the function fuff void fuff(int a, int b) { // Example implementation: just print the numbers printf("fuff called with: %d and %d\n", a, b); }

--------

Der gesamte Chat ist hier einsehbar:

formatting link
Die Funktion fuff() habe ich aus dem Programm entfernt und das dann auf deine Zahlen losgelassen:

cat inputdat.txt | ./wrfltst Das ist das Ergebnis:

------- Distribution of num2 values:

1: 492 times 2: 479 times 3: 486 times 4: 513 times 5: 532 times 6: 498 times Chi-squared statistic: 3.796000 The distribution appears to be uniform.

-------

Zum Test habe ich jetzt mal die Eingangszahlen verfaelscht, indem jede 6 6 6 Folge zu einer 6 6 1 Folge gemacht wird:

Also das Programm veraendert:

-------

int lnum2 =0; int llnum2=0; // Read lines from stdin while (fgets(line, sizeof(line), stdin)) { int num1, num2,xnum2;

// Extract the first two integers if (sscanf(line, "%d %d", &num1, &num2) == 2) { // Check if num2 is within the valid range (1-6) if (num2 >= 1 && num2 <= 6) { // Increment the count for this num2 value xnum2=num2; if((num2==6) && (lnum2==6) && (llnum2==6)) xnum2=1; counts[xnum2 - 1]++; llnum2=lnum2; lnum2=num2;

-------

Und heraus kommt:

------- Distribution of num2 values:

1: 515 times 2: 479 times 3: 486 times 4: 513 times 5: 532 times 6: 475 times Chi-squared statistic: 5.360000 The distribution appears to be uniform.

-------- D.h. das merkt er nicht dazu sind 3000 Samples zu wenig.

Wenn ich aber alle 6 6 Folgen durch 6 1 ersetze merkt er es:

-------- Distribution of num2 values:

1: 557 times 2: 479 times 3: 486 times 4: 513 times 5: 532 times 6: 433 times Chi-squared statistic: 19.136000 The distribution does not appear to be uniform.

--------

Ja, danke, habe ich gespeichert. Das ist prinzipiell so wie die Test-Suite vom NIST mit 15 Tests. (Chi kommt in der Kryptographie oft vor.) Wenn die Anzahlen der 0-Bits und 1-Bits nicht fast genau gleich sind, brauchen weitere Tests gar nicht erst durchgeführt werden.

Ja, war ein Hastigkeitsfehler von mir.

Ich habe hier nur den Mittelwert genau getestet. Alles Weitere habe ich zunächst heuristisch an der random-Zahlenfolge festgestellt.

Daß alle Zahlen 1..6 vorkommen, sah ich in Sekunden. Man kann testen, ob diese Zahlen untereinander fast die gleiche Häufigkeit haben. Es kann eine gute Mischung geprüft werden - sie liegt offenbar vor. Falsch wären z.B. gleich viele 3 und 4 - Mittelwert 3.5; oder 2 und 5, etc. Etc.

Im kryptographischen Bereich kenne ich z.B. 2^68 Periode. Bei random mit Divisionsrest 2^32.

Ich benutze hier einen sich selbst ändernden Seed. Nach jeweils 4000 Ausgaben wird automatisch ein Seed durchgeführt.

[...]

Ich habe bisher nur den Mittelwert genau festgestellt. Alles Weitere habe ich heuristisch anhand der random-Ausgabe festgestellt. Der Algorithmus wurde 2014 von den Kryptologen Rivest+Schuldt entwickelt. Ich kann folglich davon ausgehen, daß der Algorithmus gut ist.

Das leichte Pendeln um den genauen Mittelwert ist fortbestehend, schrieb ich bereits. Jedenfalls bis 500000 repeat. Das kann daran liegen, daß dort ein automatischer Seed(4000) arbeitet, dessen Wert sich zudem jedes Mal ändert.

[...]
[...]

Wenn ich die Zahlenfolge heuristisch betrachte, finde ich sie auch Okay. "5 degrees of freedom" finde ich ziemlich großzügig.

Ja, 475 unterscheidet sich kaum von 479. Und 515 ist auch noch im Rahmen. (Bei mehr Samples gäbe aber auch mehr # times.)

Es gibt viel mehr solche Folgen.

433 ist nun doch zu niedrig - Ausreißer. Komplementär ist 557 ebenfalls ein Ausreißer.

Helmut Schellong schrieb:

Gut zu erkennen (auch so) ist, dass Nulldurchgänge (oder hier '3.5'-Durchgänge) nur am Anfang häufig sind und dann nach einigen Hundert Durchgängen extrem selten werden. Etwas störend für mich ist der Bereich ca. 600-800, wo die kumulierte Abweichung fast -100 erreicht. Wichtig wäre zu erkennen, dass die kumulierte Abweichung bei hinreichend vielen Würfen beliebig gross werden kann, das 'übersehen' viele Leute, die immer mit dem Gesetz der grossen Zahl ankommen, ohne es verstanden zu haben.

Ich empfehle, das mal bis zu deutlich höheren Anzahlen zu verfolgen. Aber bitte nicht die Tabelle hier posten, danke.

Helmut Wabnig schrieb:

[siehe vorhergehendes, 'etwas' längeres Posting]

Wir wissen, dass du ein asozialer Rüpel bist, da musst du dich nicht jedesmal outen.

Das mag der eine Punkt sein, der andere, für mich interessantere ist, wie gross die Abweichung absolut wird. Die ist hier (-)50, das ist ein ungewöhnlich tiefer Wert.

Daher meine Bitte an Helmut: Verfolge den Verlauf der absoluten Abweichung und notiere die Maxima/Minima. Die sollten immer grösser werden.

Und ja, diese Abweichung geteilt durch die Anzahl Würfe, das wird immer kleiner.

Ich bin dabei, die Voraussetzungen zu schaffen. Nämlich einen aktuellen Compiler, der unter Windows 11 korrekt läuft. Carla sagte auch schon so etwas.

Das Skript kann ich in Minuten ändern, wegen weiterer Ausgaben.

-- Mit freundlichen Grüßen Helmut Schellong snipped-for-privacy@schellong.biz

formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link

formatting link
Da ist eine random.out zu finden.

10000000

Ab etwa 4 Mio. erreicht er dauerhaft 3.500. Bis dahin pendelt er.

-- Mit freundlichen Grüßen Helmut Schellong snipped-for-privacy@schellong.biz

formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link
formatting link

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required