miércoles, 15 de septiembre de 2010

La transformación de Smirnov

Recientemente me preguntaron cómo se podía generar una variable pseudoaleatoria que no fuera uniforme. Efectivamente, en la mayoría de lenguajes de programación y bibliotecas, la única función que se proporciona es una con distribución uniforme. La clásica rand() por ejemplo.


Existen varios métodos, algunos con nombres tan bellos como el algoritmo del zigurat. Nos quedaremos con el más simple y versátil, aunque no siempre el más eficiente o exacto.


El procedimiento es bien simple. Si queremos generar una variable pseudoaleatoria con una densidad de probabilidad f, lo primero que necesitamos es calcular su distribución de probabilidad F. Esto es, básicamente, calcular una integral. Muchas veces no será posible analíticamente, razón por la cual este método no se puede usar siempre o requiere un cálculo numérico que deteriora la eficiencia del mismo.


Supongamos que podemos calcular la distribución de probabilidad F. En este caso el método consiste en transformar la variable pseudoaleatoria uniforme que hemos generado, normalizada entre cero y uno, usando la inversa de la distribución de probabilidad.

A la izquierda, la distribución de probabilidad. A la derecha su inversa. Cabe notar que los intervalos uniformes en el eje de abscisas se transforman en intervalos que siguen la densidad de probabilidad deseada en el eje de ordenadas.
El resultado es otra variable pseudoaleatoria que sigue la distribución deseada.

Este método es llamado la transformación de Smirnov (nada que ver con el vodka) o, el método de la inversa de la transformada.

0 comentarios:

Publicar un comentario