Considere una pequeña forma parámetro cerca de 0, tal como α = 1 / 100 . En el rango entre 0 y α , e - α es aproximadamente 1 , por lo que el Gamma pdf es aproximadamente x α - 1 d x / Γ ( α ) . Esto se puede integrar a un CDF aproximado, F α ( x ) = x ααα = 1 / 100αmi- α1Xα - 1rex / Γ ( α ) . Al invertirlo, vemos unapotencia1/α: un gran exponente. Paraα=1/100esto causa alguna posibilidad de underflow (un valor de doble precisión de menos de10-300, más o menos). Aquí hay una gráfica de la posibilidad de obtener un flujo inferior en función del logaritmo de base diez deα:Fα( x ) = xαα Γ ( α )1 / αα = 1 / 10010- 300α
Una solución es explotar esta aproximación para generar variables log (Gamma): en efecto, intente generar una variante Gamma y, si es demasiado pequeña, generar su logaritmo a partir de esta distribución de potencia aproximada (como se muestra a continuación). (Haga esto repetidamente hasta que el registro esté dentro del rango de flujo inferior, de modo que sea un sustituto válido para la variante de flujo inferior original). Para el cálculo de Dirichlet, reste el máximo de todos los logaritmos de cada uno de los valores de registro: esto reescala implícitamente todos Gamma varía para que no afecte los valores de Dirichlet. Trate cualquier registro resultante que sea demasiado pequeño (digamos, menor que -100) como el registro de un cero verdadero. Exponga los otros registros. Ahora puede continuar sin desbordamiento.
Esto llevará más tiempo que antes, ¡pero al menos funcionará!
αC= log( Γ ( α ) ) + log( α )αC
Debido a que el parámetro de escala simplemente reescala la variante, no hay problema para acomodarla en estos procedimientos. Ni siquiera lo necesita si todos los parámetros de escala son iguales.
Editar
1/ αB ( α )Γ ( α + 1 )( α xα - 1) ( yαmi- yrey/ Γ(α+1) )z= x yy→ z/ xXXz∞0≤y≤1
pdf(z)=αΓ(α+1)∫∞z(xα/x)e−x(z/x)α−1dxdz=1Γ(α)zα−1e−zdz,
Γ(α)
0<α<1Γ(α+1)1/αΓ(α)