2010-10-17 4 views
5

Wenn ich isWinDefault mit isWinConfidence ausschalte bekomme ich drastisch unterschiedliche Ergebnisse. Ich fühlte, dass sie gleich sein sollten. Gibt es einen Fehler in meinem Code oder eine Eigenschaft von Statistiken, die ich falsch verstanden habe?Probability Code Problem

Dieser Test soll das einfache Umdrehen einer einzelnen Münze 1x gegen eine Münze simulieren.

Die Frage ist

Wenn P (x) beträgt 70%, dann sollte p (x) * 100 sein> = 70 70% der Zeit, nicht wahr?

Danke.

private void TestWin() 
    { 
     double headsUp = 0; 
     double testRuns = 100; 
     for (double i = 0; i < testRuns; i++) 
     { 
      if (IsWinConfidence()) 
      { 
       headsUp++; 
      } 

     } 
     label1.Text = "Probability of Heads is " + headsUp /testRuns; 

    } 

    private bool IsWinDefault() 
    { 
     if (r.NextDouble() <= .7) 
     { 
      return true; 
     } 
     return false; 
    } 

    private bool IsWinConfidence() 
    { 
     int headsCount = 0; 
     for (double x = 0; x < 100; x++) 
     { 
      if (IsWinDefault()) 
       headsCount++; 

     } 

     double pHeadsCount = headsCount/100d; 
     if (pHeadsCount >= .7) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 


    } 
+0

Sie haben nie definiert, was "r" (wie in 'r.NextDouble()') irgendwo in Ihrer Frage ist. – devuxer

+0

@DanM Es ist nur C# zufällig Random r = new Random(); –

+0

+1 für die Frage, das ist eigentlich ein bisschen interessanter, dass es aussieht (naja, für mich ist es :-)), und es gibt keinen Bug in Ihrem Code, soweit ich das beurteilen kann. –

Antwort

2

Hier ist die einfache Antwort:

eine 70% ige Wahrscheinlichkeit bedeutet, dass durchschnittlich, 100 Münze 70 Köpfe produziert nach oben klappt. Es wird jedoch manchmal mehr als 70 und manchmal weniger sein.

Mit anderen Worten, die Anzahl der Heads-up werden Sie für jede Charge von 100 Münze erhalten Flips, wird über 70 unter 70, manchmal bis 70. Manchmal schließen, manchmal genau 70.

Also, wenn die Zahl schwingt um die 70, es ist nur logisch, dass wenn Sie fragen, "wie oft wird es über 70 oder gleich 70 schwingen", erhalten Sie eine Antwort, die sagt "etwa 50% der Zeit".

Sie fragen also nicht die richtige Frage mit Ihrem Code dort.

In der Tat, die Zahl in der Schleife in IsWinConfidence, um etwas zu erhöhen viel höher gibt Ihnen eine Zahl nahe an 50.


Lassen Sie uns hier Ihre Argumente auseinander nehmen.

Sie sagen, wenn Sie:

Eine voreingenommene Münze, dass 70% der Zeit, bis mit Köpfen landen wird, und 30% der Zeit, mit Kopf nach unten

Dann sind Sie sagen, dass:

Wenn ich die Münze 100 mal drehen, sollte ich

mehr als 70 Köpfe bekommen

Man führt nicht zum anderen, es gibt hier einen Fehler in deinen Argumenten. Bei der Wahrscheinlichkeit geht es nicht um Garantien, es geht um Durchschnittswerte.

Wenn Wahrscheinlichkeit absolute war, sollte Ihre zweite Aussage sein:

Wenn ich die Münze 100 Mal drehen, sollte ich

Hinweis der Mangel an „mehr als“ hier bis 70 Köpfe bekommen .

Statt dessen, was das erste Argument bedeutet, ist dies:

Wenn ich die Münze 100 Mal drehen, dann drehen Sie es mal 100, dann 100 weitere Male, dann 100 weitere Male, und so weiter, dann im Durchschnitt jeweils 100 Flips werden 70 Köpfe haben nun bis

, ich weiß nicht genug über Wahrscheinlichkeitsberechnungen Ihre Loops und zählt auseinander zu nehmen, aber ich weiß, dass nur folgende Logik, Ihre Argumente versagen.

Lassen Sie uns einen anderen Ansatz versuchen.

Wenn die Münze selbst, obwohl voreingenommen, bedeutet dies aus einem 100 Münzwürfe, Sie manchmal mehr als 70 erhalten werden, und manchmal weniger als 70

In meinem naiven Geist, bedeutet dies, dass .. Im Durchschnitt erhalten Sie nur die Hälfte der Zeit mehr als 70 Münzwürfe.

Durch Erhöhen der Zahlen in Ihrer Schleife auf 100.000, bekomme ich die Konfidenz-Funktion, um nahe 50 zurückzukehren. Dies scheint meine Theorie zu bestätigen.

Aber wie gesagt, die Wahrscheinlichkeit, dass ich ein Experte (oder auch nur ein Dummkopf) in der Wahrscheinlichkeit bin, ist weniger als null.

+0

+1 für diese Erklärung, sehr gut geschrieben :). Könnte am Ende eine abschließende Schlussfolgerung ziehen, um die Antwort zu vervollständigen. Etwas wie das Fixieren (pHeadsCount> = .7) ==> (pHeadsCount> = .5) und das Erhöhen Ihres N auf 10000 würde Ihr Problem lösen. – bastijn

+0

Das ist ziemlich gut. Eine gewisse Erwähnung einer unterschiedlichen Verteilung würde auch etwas hinzufügen, d. H. Binomial, normal usw. Auch etwas darüber, wie die Chancen abnehmen, wenn mehr Läufe gemacht werden, d. H. Von 100 bis 1000 wird es näher bei 50%. Ich kann dies beim Überlauf der Statistiken fragen, um einen besseren Griff zu bekommen. –

+0

Ja, nun, lies den letzten Satz meiner Antwort noch einmal, vollständig :) –

0

aktualisieren:

Die erste Funktion gibt wahr 70% der Zeit, so headsCount gleich sein wird, mit sehr hohen Wahrscheinlichkeit zu ~ 70 (wenn 100 mit einer größeren Zahl, wenn Wille ersetzt 70% dieser Zahl).

Daher

pHeadsCount >= .7 

hat eine Wahrscheinlichkeit von 50%, WinCE wird der Wert ~ 0,7 sein.

+0

@Loic Ich versuche zu simulieren, eine unfaire Münze mehrmals gegen 1 Mal zu spiegeln. Sollten wir nicht aus 100 Flips gewinnen, werden wir wahrscheinlich mindestens 70 gewinnen? Ich sage nur, okay, wenn wir mindestens 70 Siege oder besser bekommen, zähle ich es als einen Gewinn. –

+0

@Loic Siehe Ich führe die zweite Schleife 100 Mal. Ich sollte 70% bekommen und ich sage okay, wenn ich 70% oder mehr bekomme, zähle ich einen Gewinn, macht es Sinn? –

+0

@Curtis Weiß: In der Tat. Ich habe zu schnell gelesen. Welchen Unterschied haben Sie? Was sind die zwei Wahrscheinlichkeiten? (Versuchen Sie auch mit 10.000 statt 100 und geben Sie das Ergebnis auch) –

0

if (r.NextDouble() <= .7)

vs

if (pHeadsCount >= .7)

1

Wenn P (x) beträgt 70%, dann sollte p (x) * 100 sein> = 70 70% der Zeit, nicht wahr?

Nein, die das Vertrauen nicht auf die Wahrscheinlichkeit auf diese Weise in Beziehung steht ...

Was machst du in der zweiten Methode ist, eine vorgespannte Münze 100 Mal werfen und gibt true zurück, wenn Sie 70 erhalten oder mehr Köpfe. Wie Sie Ihre Münze so festgelegt haben, dass Sie im Durchschnitt 70% der Zeit Kopf bekommen, würden Sie erwarten, 70 von 100 Würfen "manchmal" zu bekommen, aber das "manchmal" ist nicht 70% der Zeit.

1

IsWinDefault "gewinnt" 70% der Zeit, wie erwartet; IsWinConfidence "gewinnt" etwa 53,77%, also sollten Sie Zahlen in der Nähe sehen. Weitere Informationen finden Sie unter binomial distribution.

+1

Ja und wenn die Gesamtzahl erhöht wird, tendiert dies zu 50%. –