4 votos

Aproximación a la distribución Beta cuando alfa es inferior a 10

Sé que podemos aproximar la distribución Beta a la distribución Normal cuando los valores de alfa y beta son números grandes.

En mi problema alfa está entre 1 y 10, beta es siempre mayor que 1000. ¿Existe alguna distribución (para tal combinación de alfa y beta) a la que podamos aproximarnos, con una forma cerrada más sencilla para que sea fácil calcular la CDF y la InverseCDF?

(He intentado Distribución de Kumaraswamy pero no obtuvo buenos resultados debido a los grandes valores de beta).

EDITAR "fácil"- en términos de tiempo de cálculo en JAVA/PHP.

(Necesito una distribución aproximada ya que se necesita mucho tiempo para calcular la InverseCDF de la distribución Beta (0.05 ms en java es también muy lento para mis necesidades).

Para un alfa superior a 10, he aproximado la distribución Beta a la distribución Normal y he calculado la InverseCDF como ce que incluía sólo matemáticas. Así que no utilicé ninguna otra función de la biblioteca como Distribución normal o Distribución Beta lo que redujo drásticamente el tiempo de procesamiento).

5voto

jldugger Puntos 7490

Johnson y Kotz señalan que

  1. El $B$ (Beta) y $F$ Las distribuciones están estrechamente relacionadas: Cuando $k$ tiene un $B(\nu_1, \nu_2)$ distribución, entonces $f$ tiene un $F(2\nu_1, 2\nu_2)$ distribución en la que

    $$f = \frac{k \nu_2}{(1-k)\nu_1}.$$

  2. La aproximación de Wilson-Hilferty a $\chi^2$ (o, en su defecto, un $\Gamma$ distribución) -que tiene una "notable precisión"- puede aplicarse a $F$ que a su vez es una relación de $\chi^2$ distribuciones.

El resultado es que

$$z = \frac{\sqrt[3]{f} \left(1-\frac{2}{9 \nu_2}\right)+\left(\frac{2}{9 \nu_1}-1 \right)}{\sqrt{\frac{2 f^{2/3}}{9 \nu_2}+\frac{2}{9 \nu_1}}}$$

tiene aproximadamente una distribución normal estándar. Esto proporciona cálculos relativamente rápidos de la FCD de la $B$ o el $F$ distribución y no es difícil de invertir.

Esta aproximación funciona bastante bien para $\nu_2 \ge 1000$ et $\nu_1=1$ y progresivamente mejor a medida que $\nu_1$ aumentos. A continuación se muestra un conjunto de gráficos de la diferencia entre la FCD aproximada y la FCD correcta para $\nu_2=1000$ et $\nu_1 = 1,2,3,6,10$ , que se muestran con escalas idénticas en sus ejes:

CDF error plots

El error es extremadamente bajo en la cola derecha, donde a menudo se centra el interés, pero incluso en la cola izquierda rara vez supera $0.002$ una vez $\nu_1 \ge 2$ . Como $\nu_2$ aumenta, los errores se mantienen más o menos igual.


Dado el nivel de exactitud de esta aproximación, no tiene mucho sentido calcular la FCD normal (o su inversa) con una exactitud de doble precisión. Esto permitirá un cómputo aún más rápido.

Un enfoque es crear una tabla de valores e interpolar dentro de ella. Dado que la FCD normal es tan curvada cerca de las colas, parece que se necesita una tabla más grande para obtener una mayor precisión. Sin embargo, al considerar Relación de Mills uno podría ser llevado a crear una (muy) pequeña tabla de pares $(z, \sqrt{-2\log(\Phi(z))}$ para $z$ en la cola inferior, digamos para $-8 \le z \le 0$ , donde $\Phi$ es la CDF normalizada. La interpolación spline cúbica hace un gran trabajo incluso cuando estos pares se evalúan sólo para la integral $z$ (nueve valores en total en toda la tabla). Para simplificar aún más la programación (si no se dispone de una rutina de interpolación de splines cúbicos) se podría implementar un spline cuadrático. Incluso mejor -y apenas más difícil- es formar la media ponderada de un interpolador lineal (que tiende a subestimar la FCD) y un interpolador cuadrático (que sobreestima la FCD). Una ponderación de $0.238$ aplicado al interpolador lineal funciona bien:

Comparison with normal CDF

Este gráfico muestra las diferencias entre tres interpoladores y la CDF Normal estándar: el rojo es para el interpolador lineal, el dorado para el interpolador cuadrático, y el azul (en medio) para su media ponderada.

(La misma técnica de promediación en un interpolador lineal también disminuye el error en un orden de magnitud cuando se utiliza un spline cúbico).

La media ponderada es otro interpolador cuadrático, pero ya no es un spline (no tiene primeras derivadas continuas en los enteros negativos), pero ¿y qué? En efecto, calcula la FCD con una precisión absoluta mejor que $0.00005$ para $z\le -1$ y, por simetría, para $z\ge 1$ . Interpolación cuadrática o cúbica entre un pequeño número de pares de $(z, \Phi(z))$ debería funcionar bien para $-1 \lt z \lt 1$ si se necesitan esos cálculos. (Por lo general, sólo una precisión muy baja, digamos hasta aproximadamente $0.01$ en este rango). El resultado es que la FCD (o, utilizando métodos similares, su inversa) puede calcularse con suficiente precisión utilizando una docena de operaciones aritméticas sencillas y una exponenciación, con el coste de almacenar alrededor de una docena de valores precalculados: incluso en una plataforma interpretada como Java eso debería ir muy rápido, tardando una pequeña fracción de microsegundo.


Ejemplos

Mathematica El código para producir la primera figura es el siguiente.

fDist[f_, {ν1_, ν2_}] := CDF[NormalDistribution[]][((1-2/(9 ν2)) f^(1/3) - (1-2/(9 ν1))) /
    Sqrt[2 f^(2/3)/(9 ν2) + 2/(9 ν1)]];
f[k_, {ν1_, ν2_}] := (k ν2)/((1 - k) ν1);
With[{ν1 = 1, ν2 = 1000},
 Plot[fDist[f[k,{ν1,ν2}], {2 ν1,2 ν2}] - CDF[FRatioDistribution[2 ν1,2 ν2]][f[k,{ν1,ν2}]], 
    {k, 0, 10 ν1/(ν1 + ν2)}, PlotRange -> Full]
 ]

Código para realizar la interpolación para $|z| \ge 1$ y trazar su error:

d = Table[{z, Sqrt[-2 Log[CDF[NormalDistribution[], z]]]}, {z, -8, -0, 1}];
f1 = Interpolation[d, InterpolationOrder -> 1];
f2 = Interpolation[d, InterpolationOrder -> 2];
f[z_] := 0.238 f1[z] + (1 - 0.238) f2[z];
Plot[{Exp[-f[z]^2/2 ] - CDF[NormalDistribution[], z]}, {z, -4, -1}, PlotRange -> Full]

Referencias

Norman L. Johnson y Samuel Kotz, Distribuciones continuas univariantes - 2. J. Wiley & Sons, Nueva York, 1970.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X