Estoy tratando de escribir un programa en R que simule números pseudoaleatorios de una distribución con la función de distribución acumulativa:
donde
Intenté el muestreo de transformación inversa pero el inverso no parece ser analíticamente solucionable. Me alegraría si pudiera sugerir una solución a este problema
r
random-generation
Sebastian
fuente
fuente
Respuestas:
Hay una solución directa (y si puedo agregar, elegante) a este ejercicio: dado que1−F(x) aparece como un producto de dos distribuciones de supervivencia:
(1−F(x))=exp{−ax−bp+1xp+1}=exp{−ax}1−F1(x)exp{−bp+1xp+1}1−F2(x) F X=min{X1,X2}X1∼F1,X2∼F2 F1 E(a) F2 1/(p+1) E(b/(p+1))
El código R asociado es tan simple como parece
y definitivamente es mucho más rápido que el pdf inverso y las resoluciones de aceptar-rechazar:
con un ajuste sorprendentemente perfecto:
fuente
Siempre puede resolver numéricamente la transformación inversa.
A continuación, hago una búsqueda de bisección muy simple. Para una probabilidad de entrada dada (uso ya que ya tiene una en su fórmula), comienzo con y . Luego doblo hasta que . Finalmente, bisecciono iterativamente el intervalo hasta que su longitud es más corta que y su punto medio satisface .q q p xL=0 xR=1 xR F(xR)>q [xL,xR] ϵ xM F(xM)≈q
El ECDF se ajusta a su suficientemente bien como para mis elecciones de y , y es razonablemente rápido. Probablemente podría acelerar esto usando alguna optimización de tipo Newton en lugar de la simple búsqueda de bisección.F a b
fuente
Existe una resolución un tanto intrincada si directa por aceptar-rechazar. Primero, una diferenciación simple muestra que el pdf de la distribución es Segundo, ya que tenemos el límite superior Tercero, considerando el segundo término en , tome el cambio de la variable , es decir, . Entonces es el jacobiano del cambio de variable. Sif(x)=(a+bxp)exp{−ax−bp+1xp+1} f(x)=ae−axe−bxp+1/(p+1)≤1+bxpe−bxp+1/(p+1)e−ax≤1 f(x)≤g(x)=ae−ax+bxpe−bxp+1/(p+1) g ξ=xp+1 x=ξ1/(p+1) dxdξ=1p+1ξ1p+1−1=1p+1ξ−pp+1 X tiene una densidad de la forma donde es la constante de normalización, entonces tiene la densidad
que significa que (i) es distribuido como una variante exponencial y (ii) la constante es igual a uno. Por lo tanto, termina siendo igual a la mezcla igualmente ponderada de una distribución Exponencial y la potencia de una Exponencialκbxpe−bxp+1/(p+1) κ Ξ=X1/(p+1) κbξpp+1e−bξ/(p+1)1p+1ξ−pp+1=κbp+1e−bξ/(p+1) Ξ E(b/(p+1)) κ g(x) E(a) 1/(p+1) E(b/(p+1)) distribución, módulo una constante multiplicativa faltante de para tener en cuenta los pesos:
Y es fácil de simular como una mezcla.2 f(x)≤g(x)=2(12ae−ax+12bxpe−bxp+1/(p+1)) g
Una representación R del algoritmo de aceptación-rechazo es así
y para una muestra n:
Aquí hay una ilustración para a = 1, b = 2, p = 3:
fuente