2010-10-17 11 views
5

Cuando cambio isWinDefault con isWinConfidence obtengo resultados drásticamente diferentes. Sentí que deberían ser lo mismo. ¿Hay un error en mi código o una propiedad de las estadísticas que he entendido mal?Código de probabilidad Problema

Esta prueba simula lanzar una sola moneda 1x frente a una moneda muchas veces.

La pregunta es

Si P (x) es 70%, entonces deben p (x) * 100 ser> = 70 70% del tiempo, no?

Gracias.

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

Nunca definió qué 'r' (como en' r.NextDouble() ') está en cualquier parte de su pregunta. – devuxer

+0

@DanM Es simplemente aleatorio C# Aleatorio r = nuevo Aleatorio(); –

+0

+1 para la pregunta, esto es en realidad un poco más interesante de lo que parece (bueno, para mí es :-)), y no hay errores en tu código hasta donde yo sé. –

Respuesta

2

Aquí está la respuesta simple:

una probabilidad 70% significa que en promedio, 100 moneda voltea producirá 70 cabezas para arriba. Sin embargo, a veces será más de 70 y, a veces, menos.

En otras palabras, el número de cabezas para arriba obtendrá para cada lote de 100 lanzamientos de la moneda, estará cerca de 70 veces por debajo de 70, a veces por encima de 70, a veces exactamente 70.

lo tanto, si el número oscila alrededor de 70, solo es lógico que si se pregunta "con qué frecuencia oscilará por encima de 70, o igual a 70", obtendrá una respuesta que diga "alrededor del 50% del tiempo".

Así que no hace la pregunta correcta con su código allí.

De hecho, el aumento del número de su bucle en IsWinConfidence a algo mucho más alto que da un número cercano a 50.


Pongamos aparte sus argumentos aquí.

¿Estás diciendo que si usted tiene:

Una moneda sesgada, que el 70% de las veces, aterrizará con altura de elevación, y el 30% de las veces, con la cabeza hacia abajo

entonces estás diciendo que:

Si lanzas la moneda 100 veces, que debería obtener más de 70 cabezas por

Uno no conduce al otro, aquí hay un defecto en sus argumentos. La probabilidad no se trata de garantías, se trata de promedios.

Si probabilidad era absoluta, su segunda declaración debería ser:

Si lanzas la moneda 100 veces, que debería obtener 70 cabezas por

Aviso la falta de "más que" aquí .

En su lugar, lo que significa que el primer argumento es el siguiente:

Si lanzas la moneda 100 veces, y luego darle la vuelta 100 veces más, entonces 100 veces más, entonces 100 veces más, y así sucesivamente, a continuación, en promedio cada 100 saltos tendrá 70 cabezas por

Ahora, no sé lo suficiente sobre los cálculos de probabilidad para machacar a sus bucles y los recuentos, pero sí sé que sólo siguiendo la lógica, sus argumentos fallan.

Probemos otro enfoque.

Si la moneda es par, aunque sesgada, que significa salir de una moneda de 100 voltea, se le conseguir a veces más de 70, y, a veces menos de 70.

En mi mente ingenua, esto significa que .. En promedio, solo obtendrá más de 70 volteos de moneda la mitad del tiempo.

Al aumentar los números en su bucle a 100.000, obtengo la función de confianza para volver cerca de 50. Esto parece respaldar mi teoría.

Pero como ya he dicho, la posibilidad de que yo sea un experto (o incluso más cutre) en la probabilidad es menor que cero.

+0

+1 para esta explicación, muy bien escrito :). Podría considerar una conclusión final al final para completar la respuesta. Algo como arreglar (pHeadsCount> = .7) ==> (pHeadsCount> = .5) y aumentar su N a 10000 resolvería su problema. – bastijn

+0

Esto es bastante bueno. Algunas menciones de varias distribuciones agregarían algo también, es decir, binomial, normal, etc. También algo sobre cómo las probabilidades disminuyen a medida que se realizan más carreras, es decir, de 100 a 1000 se vuelve más cercano al 50%. Puedo pedir esto en el desbordamiento de las estadísticas para obtener un mejor control sobre él. –

+0

Sí, bueno, lea la última oración de mi respuesta nuevamente, en su totalidad :) –

0

actualización:

La primera función retorna verdadero 70% del tiempo, así headsCount será igual, con muy alta probabilidad, a ~ 70 (si 100 se sustituye con un número más grande si voluntad tiende a ser el 70% de ese número).

Por lo tanto

pHeadsCount >= .7 

tiene una probabilidad, de 50%, respingo el valor será ~ 0,7.

+0

@Loic Estoy tratando de simular lanzar una moneda injusta varias veces contra 1 vez. ¿No deberíamos obtener 100 triunfos en 100 triunfos? Solo digo que está bien si obtenemos al menos 70 victorias o más, lo cuento como una victoria. –

+0

@Loic Vea Estoy ejecutando el segundo ciclo 100 veces. Debería obtener el 70% y estoy diciendo que está bien si obtengo el 70% o más. Lo considero un triunfo, ¿tiene sentido? –

+0

@Curtis White: De hecho. He leído demasiado rápido. ¿Qué diferencia de resultado tienes? ¿Cuáles son las dos probabilidades? (pruebe también con 10.000 en lugar de 100 y dé ese resultado también) –

0

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

vs

if (pHeadsCount >= .7)

1

Si P (x) es 70%, entonces deben p (x) * 100 ser> = 70 70% del tiempo, no?

No. La confianza no está relacionada con la probabilidad de esta manera ...

Lo que está haciendo es en el segundo método está lanzando una moneda sesgada 100 veces y volviendo cierto si usted consigue 70 o más cabezas. Como ha arreglado su moneda de modo que, en promedio, le dará la cabeza el 70% del tiempo, esperaría obtener 70 cabezas de cada 100 lanzamientos "a veces", pero que "a veces" no es el 70% del tiempo.

1

IsWinDefault "gana" el 70% del tiempo, como se esperaba; IsWinConfidence "gana" aproximadamente 53.77%, por lo que debería ver números cercanos a eso. Ver binomial distribution para más.

+1

Sí, y si aumenta el número total, esto tenderá al 50%. –

Cuestiones relacionadas