¿La moneda está trucada?

Una moneda, idealmente, es un pequeño cilindro de altura despreciable y densidad homogénea que, sometida a un lanzamiento caótico dentro de la ineluctable acción de un campo gravitatorio, necesariamente se posa sobre una de sus bases mostrando la otra. Se dice entonces que la probabilidad de mostrar una base, la cara, es igual a la probabilidad de mostrar la otra, la cruz, e igual a 0,5. Así, si realizamos, digamos, 10 lanzamientos, tendremos la esperanza de obtener 5 caras. Ojo, esto solo significa que obtener 5 caras es más probable que obtener 4, o 6, o 3, o 7… No obstante, hay que tener presente que obtener cualquier resultado distinto de 5 es mucho más probable que obtener 5 en concreto.

Pero volviendo a la moneda, ¿podemos saber si una moneda en particular está trucada? ¿Cómo podemos determinar si se ajusta o no a esa idealización, fifty-fifty? ¿Cuántos lanzamientos necesitamos realizar para estar cuánto de seguros de ello?

Pues bien: existe la forma y se denomina inferencia estadística. Se pueden utilizar varios métodos, pero el más clásico es la aproximación Bayesiana. Se trata, básicamente, de tirar la moneda una y otra vez y contrastar los resultados con el conocimiento teórico que tenemos de la moneda ideal. En otras palabras, sabemos qué distribución de probabilidades tienen las caras, dados un número de tiradas y la probabilidad del suceso «cara». Mediante la inferencia estadística, por el contrario, determinamos qué probabilidad del suceso «cara» se ajusta mejor al número de caras que se van observando en tiradas sucesivas.

Como vale más una imagen que mil palabras, he preparado una pequeña animación. He tirado una moneda virtual 400 veces y he ido construyendo la evolución de la función de distribución a posteriori para la probabilidad de sacar cara. Si mi moneda virtual no está trucada, y conforme los lanzamientos aumentan, la distribución debería aproximarse cada vez más al valor 0,5, marcado con una línea a trazos. Se muestra, asimismo, la probabilidad de que la probabilidad de sacar cara —valga la redundancia— esté entre 0,45 y 0,55. Veamos:

coin

Como se intuye, ese pico crecerá de forma infinita. Eso significa que, con los suficientes lanzamientos, podemos estar todo lo seguros que queramos de que la probabilidad de sacar cara, se encuentra en un rango todo lo limitado que queramos. Digamos, por ejemplo, entre 0,499999 y 0,500001 con una probabilidad del 99,999 %.

Por cierto, el resultado final de 200 caras ha sido pura casualidad. Recordemos del principio del artículo que esto era más bien improbable.

Y para los más curiosos, aquí está el código de R con el que he generado la imagen:

[code language=»R»]
require(animation)

trials <- 400
tosses <- 0
heads <- 0

binom <- function(x) {
(tosses+1)*choose(tosses, heads) * x^heads * (1-x)^(tosses-heads)
}

int <- integrate(binom, 0, 0)

plot_curve <- function(frames) {
for (j in 1:frames) {
curve(binom, 0, 1, 1000, ylim=c(0,12), ylab=NA, xlab=NA, yaxt=’n’)
abline(v=.5, lty = 2)
text(.8, 10, paste("Tiradas:", tosses), pos=4)
text(.8, 9, paste("Caras     :", heads), pos=4)
text(0, 10, paste("P(0.45<x<0.55):", round(int$value*100), "%"), pos=4)
}
}

saveGIF({
# hold first frame
plot_curve(25)

for (i in 1:trials) {
# flip the coin
if (sample(0:1, 1))
heads <- heads + 1
tosses <- tosses + 1

# update results
int <- integrate(binom, .45, .55)
plot_curve(round(6-3*atan(tosses-5)))
}
# hold last frame
plot_curve(40)
}, interval=.04, nmax=trials)
[/code]

2 comentarios sobre “¿La moneda está trucada?

  1. @RinzeWind: Te mola, ¿eh? XD La única pega es que no permite poner delay variable entre frames. Vamos, que si quieres duraciones distintas, tienes que arreglártelas para repetir frames (véase el pollo que he montado con ese arcotangente) o realizar una edición posterior (lo cual, con cientos de frames como en este caso, no es una opción).

    Y ya que estamos, dado que el GIF resultante suele pesar bastante, te recomiendo ImageMagick para optimizarlo:

    [code]$ convert original.gif -coalesce -layers RemoveDups primera_optimizacion.gif
    $ convert primera_optimizacion.gif -layers OptimizeFrame optimizado.gif[/code]

    Con eso, pasé de 3.5 MB a los 1.2 MB que pesa ahora. No he probado si los dos comandos en uno hacen lo mismo o si el orden importa. Más info aquí.

Comentarios cerrados.