Mostrando entradas con la etiqueta esperanza. Mostrar todas las entradas
Mostrando entradas con la etiqueta esperanza. Mostrar todas las entradas

sábado, 17 de noviembre de 2012

La historieta de Martin y Gala: lo esperado no es tan probable.

Tras contar la historieta de Martin y Gala dediqué dos entradas a mostrar dos posibles resoluciones de la misma: desde un enfoque probabilístico y utilizando una simulación por ordenador. Ambas sendas nos conducían a la solución de que se espera que el invitado tenga que contestar 255 preguntas de Martin antes de poder pasar a Gala.

Pero, ¿existen muchas probabilidades de que sean exactamente 255 preguntas las que conteste y acierte en mi previsión? Y es que, lo esperado no necesariamente coincide con lo más probable. Son conceptos que responden a preguntas diferentes.

Imaginemos un dado trucado de manera que la probabilidad de cada una de sus caras es 1/7, salvo la probabilidad de la cara con un 6 marcado que es igual a 2/7. La esperanza matemática de dicho dado es:
1·(1/7) + 2·(1/7) + 3·(1/7) + 4·(1/7) + 5·(1/7) + 6·(2/7) = 15/7 + 12/7 = 27/7 que redondeando a las centésimas queda 3'86.
Es decir, que si jugamos muchas (pero que muchas) veces, la media de las puntuaciones obtenidas en las tiradas tiende a 3,86. Pero eso no significa que el 4 sea el valor más probable (de hecho en nuestra situación imaginaria el más probable es el 6).

Volvemos a nuestra historia de Martin y Gala. ¿Cuál es la probabilidad de que el invitado tenga que contestar exactamente 255 preguntas antes de pasar a Gala? ¿Cuál es la probabilidad de que el invitado se libre de ese calvario y pueda pasar antes de contestar 255 preguntas?

La situación de la primera pregunta, la probabilidad de contestar exactamente 255 preguntas, se da cuando se pasa a Gala en el juego número 256, por lo que la probabilidad es (con p=(1/2)^8 y q=1-p):
p(contestar exactamente 255 preguntas) = q^255 · p = 0'00143984217604524.

Vemos que la probabilidad de contestar exactamente 255 preguntas es bastante pequeña, no llega ni al 15 ‱.

Y para abordar la segunda pregunta, la probabilidad de tener que contestar menos preguntas, podemos plantearlo de la siguiente manera:
p(contestar menos de 255 preguntas) = p(contestar exactamente 0 preguntas) + p(contestar exactamente 1 pregunta) + ... + p(contestar exactamente 254 preguntas) =
= p + q · p + q^2 · p + ... + q^254 · p = p · (1+q+q^2+...+q^254) = p · (q^255 - 1) / (q - 1) = 1 - q^255 = 0'6314004029324185.


Es decir, hay más de un 63% de probabilidad de que el invitado pase a Gala antes de contestar las 255 preguntas que se espera que conteste.

¿Y la simulación por ordenador qué nos dice? Añadimos unas pocas líneas más (ver código al final de la entrada) y ejecutamos el programa:
Media de preguntas antes de pasar: 255'193
Frecuencia relativa de coincidencia con preguntas esperadas: 0'001457
Frecuencia relativa de menos preguntas de las esperadas: 0'63112

La aproximación que devuelve una simulación de 1.000.000 de repeticiones es bastante buena.


Podemos concluir que lo más probable es que el invitado tenga que contestar menos preguntas de las "esperadas".


//////////////////////////////////////////////////////////////////////////////////////////////////////
Código fuente del programa en C (en negrita lo añadido):

#include < stdlib.h >
#include < iostream >
#include < time.h >
#include < math.h >
 
main()
{
    srand(time(NULL));
    unsigned int puntos=0, aleatorio=0, puntosNecesarios=8;
    unsigned long int preguntas=0, sumaPreguntas=0, vecesSimulacion=1000000;
    unsigned long int preguntasEsperadas=pow(2,puntosNecesarios)-1, coincidePreguntasEsperadas=0, menorPreguntasEsperadas=0;
    for(unsigned int n=0; n < vecesSimulacion; n++)
    {
        puntos=0;
        preguntas=0;
        while(puntos < puntosNecesarios)
        {
            aleatorio=rand()%2;
            if(aleatorio==0)
            {
                puntos=0;
                preguntas++;
            }
            else
            {
                puntos++;
            }
        } //while
        if(preguntas==preguntasEsperadas)
        {
            coincidePreguntasEsperadas++;
        }
        if(preguntas < preguntasEsperadas)
        {
            menorPreguntasEsperadas++;
        }

        sumaPreguntas+=preguntas;
    } //for n
    std::cout < < "Media de preguntas antes de pasar: " < < (float)sumaPreguntas/(float)vecesSimulacion < < std::endl;
    std::cout < < "Frecuencia relativa de coincidencia con preguntas esperadas: " < < (float)coincidePreguntasEsperadas/(float)vecesSimulacion < < std::endl;
    std::cout < < "Frecuencia relativa de menos preguntas de las esperadas: " < < (float)menorPreguntasEsperadas/(float)vecesSimulacion < < std::endl;

    return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////

La historieta de Martin y Gala: simulación por ordenador


En esta entrada voy a plantear una resolución de la historia de Martin y Gala, utilizando una simulación por ordenador. (Entrada relacionada: resolución desde una perspectiva probabilística)

Las simulaciones por ordenador nos permiten realizar modelos de situaciones reales que de otra forma su estudio sería mucho más complejo (o inabordables/ineficientes desde un punto de vista temporal) y actualmente son muy frecuentes en la investigación en matemáticas y en otros campos.

Un ejemplo muy simple de simulación por ordenador es el de repetir una gran cantidad de veces un experimento aleatorio, como el del caso que nos ocupa de la historia de Martin y Gala.

Haciendo un pequeño programa en C (ver código al final de la entrada) podemos simular la historia de Martin y Gala. En menos de 10 segundos en mi ordenador puedo simular 1.000.000 de veces la historia. Es decir, han pasado por delante de Martin 1.000.000 de invitados que han tirado la moneda hasta conseguir los 8 puntos que les exige para poder pasar a Gala. Al final el programa devuelve la media de las preguntas que les ha hecho Martin antes de dejarles pasar.

Estos son los resultados que he obtenido al ejecutar 10 veces el programa:
255'136; 254'823; 255'6; 254'911; 255'42; 255'322; 254'84; 254'616; 254'954; 255'282;

Vemos que los resultados son bastante estables alrededor de 255. Por lo que según estas simulaciones cabe esperar que los invitados tengan que responder 255 preguntas de Martin antes de conseguir los 8 puntos que les permita pasar a Gala.

Una cuestión interesante es que podemos investigar qué pasa con el resultado cuando cambiamos los distintos valores del programa (como el número de simulaciones o los puntos necesarios).

//////////////////////////////////////////////////////////////////////////////////////////////////////
Código fuente del programa en C:
#include < stdlib.h >
#include < iostream >
#include < time.h >

main()
{
    srand(time(NULL));
    unsigned int puntos=0, aleatorio=0, puntosNecesarios=8;
    unsigned long int preguntas=0, sumaPreguntas=0, vecesSimulacion=1000000;
    for(unsigned int n=0; n < vecesSimulacion; n++)
    {
        puntos=0;
        preguntas=0;
        while(puntos < puntosNecesarios)
        {
            aleatorio=rand()%2;
            if(aleatorio==0)
            {
                puntos=0;
                preguntas++;
            }
            else
            {
                puntos++;
            }
        } //while
        sumaPreguntas+=preguntas;
    } //for n
    std::cout < < "Media de preguntas antes de pasar: " < < (float)sumaPreguntas/(float)vecesSimulacion < < std::endl;
    return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////

jueves, 15 de noviembre de 2012

La historieta de Martin y Gala: desde un enfoque probabilístico

En esta entrada voy a plantear una resolución de la historia de Martin y Gala, utilizando un enfoque probabilístico.

Para no hacer tan tedioso el trabajo y la explicación, primero voy a simplificar la situación y reducir el número de puntos necesarios para pasar a Gala a 3.

Así que el invitado comienza a tirar la moneda hasta que obtiene 3 puntos mediante acumulación de la cara +1, es decir obtiene 3 veces consecutivas un +1. Si obtiene la cara x0 tiene que volver a empezar. Diremos que ha acabado "1 juego" cuando pase alguna de las situaciones anteriores.

Así pues, el árbol de probabilidad de 1 juego queda de la siguiente manera:
Siendo la probabilidad de cada una de las ramas 1/2 por ser equiprobables las caras de la moneda.

La probabilidad de que un juego concluya con 3 puntos es (1/2)·(1/2)·(1/2) = 1/8. La probabilidad de que un juego acabe borrando los puntos acumulados y teniendo que contestar una pregunta de Martin es 7/8.

Si ahora lo que hacemos es ir repitiendo juegos (hasta que uno concluya con 3 puntos), la distribución que estamos utilizando es una binomial con probabilidad de éxito 1/8.

¿Cuántas veces se espera en dicha distribución que tenga que jugar hasta tener un éxito? La esperanza de la ditribución B(n,p) es igual a n·p, por lo que el número de veces que tiene que jugar el invitado para que lo que se espere es que pueda pasar a Gala (esperanza igual a 1) sale de la igualdad: 1 = n · 1/8.

Por tanto, se espera que el invitado pase cuando haya jugado 8 veces, es decir, que se espera que haya tenido que contestar 7 preguntas de Martin antes de pasar.

Resulta sencillo ahora hacer la generalización: para pasar a Gala, Martin decide que el invitado debe acumular x puntos.

La probabilidad de concluir un juego acumulando x puntos es (1/2)^x. Por lo que la esperanza de la B(n,(1/2)^x) es igual a n · (1/2)^x. Dicha esperanza es igual a 1 cuando n = 2^x, por lo que se espera que el invitado tenga que contestar (2^x)-1 preguntas de Martin antes de pasar a Gala.

En el caso de la historia inicial, se espera que el invitado conteste 255 preguntas antes de pasar a Gala.


Ver siguiente entrada relacionada con MartinGala.