¿Cómo puedo generar una muestra de 1000 elementos utilizando el método CDF inverso? Debería ser fácil pero soy un completo principiante. Sé lo que es matemáticamente pero no sé cómo implementarlo en Python
Respuesta
¿Demasiados anuncios?En primer lugar, genere una muestra en el intervalo $[0,1]$ . Utiliza la función random.rand()
por ejemplo. En segundo lugar, transforme la muestra con ayuda de la función CDF inversa. Scipy proporciona estas funciones bajo la firma distribution.ppf(quantile, parameter1, parameter2,...)
.
Ejemplo de distribución normal con $\mu=3$ y $\sigma=2$ :
import numpy as np
from scipy import stats
q=np.random.rand(1000)
result=stats.norm.ppf(q,loc=3,scale=2)
Si la distribución de la función CDF inversa no está implementada en Scipy tendrás que derivarla tú mismo o encontrarla en la literatura. Sympy puede ser útil con derivaciones más complejas.