Evaluar el intervalo definido de distribución normal.

18

Sé que falta una fórmula fácil de manejar para el CDF de una distribución normal, debido a la complicada función de error que contiene.

Sin embargo, me pregunto si hay una buena fórmula para . O cuál podría ser la aproximación del "estado del arte" para este problema.norte(C-X<C+El |μ,σ2)

bayerj
fuente

Respuestas:

31

Depende exactamente de lo que estás buscando . A continuación se presentan algunos breves detalles y referencias.

Gran parte de la literatura sobre aproximaciones se centra en la función

Q(X)=X12πmi-tu22retu

para . Esto se debe a que la función que proporcionó puede descomponerse como una simple diferencia de la función anterior (posiblemente ajustada por una constante). Se hace referencia a esta función por muchos nombres, incluidos "cola superior de la distribución normal", "integral normal derecha" y "función gaussiana ", por nombrar algunos. También verá aproximaciones a la relación de Mills , que es donde es el pdf gaussiano.X>0 0R ( x ) = Q ( x )Q

R(X)=Q(X)φ(X)
φ(X)=(2π)-1/ /2mi-X2/ /2

Aquí enumero algunas referencias para diversos fines que podrían interesarle.

Computacional

El estándar de facto para calcular la función o la función de error complementaria relacionada esQ

WJ Cody, aproximaciones racionales de Chebyshev para la función de error , matemática. Comp. , 1969, pp.631-637.

Cada implementación (respetuosa) utiliza este documento. (MATLAB, R, etc.)

Aproximaciones "simples"

Abramowitz y Stegun tienen uno basado en una expansión polinómica de una transformación de la entrada. Algunas personas lo usan como una aproximación de "alta precisión". No me gusta para ese propósito ya que se comporta mal alrededor de cero. Por ejemplo, su aproximación no produce , que creo que es un gran no-no. A veces suceden cosas malas debido a esto.Q^(0 0)=1/ /2

Borjesson y Sundberg ofrecen una aproximación simple que funciona bastante bien para la mayoría de las aplicaciones en las que solo se requieren unos pocos dígitos de precisión. El error relativo absoluto nunca es peor que el 1%, lo cual es bastante bueno considerando su simplicidad. La aproximación básica es y sus opciones preferidas de las constantes son y . Esa referencia esa=0.339b=5.51

Q^(X)=1(1-un)X+unX2+siφ(X)
un=0.339si=5.51

PO Borjesson y CE Sundberg. Aproximaciones simples de la función de error Q (x) para aplicaciones de comunicaciones . IEEE Trans. Commun. , COM-27 (3): 639–643, marzo de 1979.

Aquí hay una gráfica de su error relativo absoluto.

ingrese la descripción de la imagen aquí

La literatura de ingeniería eléctrica está inundada de varias aproximaciones de este tipo y parece tener un interés demasiado intenso en ellas. Sin embargo, muchos de ellos son pobres o se expanden a expresiones muy extrañas y complicadas.

También podrías mirar

W. Bryc. Una aproximación uniforme a la integral normal derecha . Matemática Aplicada y Computación , 127 (2-3): 365–374, abril de 2002.

Fracción continua de Laplace

Laplace tiene una hermosa fracción continua que produce límites superiores e inferiores sucesivos para cada valor de . Es, en términos de la relación de Mills,X>0 0

R(X)=1X+1X+2X+3X+,

donde la notación que he usado es bastante estándar para una fracción continua , es decir, . Sin embargo, esta expresión no converge muy rápido para pequeña , y diverge en .x x = 01/ /(X+1/ /(X+2/ /(X+3/ /(X+))))XX=0 0

Esta fracción continua en realidad produce muchos de los límites "simples" en que fueron "redescubiertos" a mediados y fines del siglo XX. Es fácil ver que para una fracción continua en forma "estándar" (es decir, compuesta de coeficientes enteros positivos), truncar la fracción en términos impares (pares) da un límite superior (inferior).Q(X)

Por lo tanto, Laplace nos dice de inmediato que los cuales son límites que fueron "redescubiertos" en el medio 1900's. En términos de la función , esto es equivalente a Se puede encontrar una prueba alternativa de esto mediante la integración simple por partes en S. Resnick, Adventures in Stochastic Processes , Birkhauser, 1992, en el Capítulo 6 (movimiento browniano). El error relativo absoluto de estos límites no es peor que , como se muestra en esta respuesta relacionada .Q x

XX2+1<R(X)<1X,
Q
XX2+1φ(X)<Q(X)<1Xφ(X).
X-2

Observe, en particular, que las desigualdades anteriores implican inmediatamente que . Este hecho se puede establecer utilizando la regla de L'Hopital también. Esto también ayuda a explicar la elección de la forma funcional de la aproximación de Borjesson-Sundberg. Cualquier elección de mantiene la equivalencia asintótica como . El parámetro sirve como una "corrección de continuidad" cerca de cero.Q(X)φ(X)/ /Xun[0 0,1]Xsi

Aquí hay un diagrama de la función y los dos límites de Laplace.Q

Límites de Laplace para la cola superior de distribución normal

CI. C. Lee tiene un artículo de principios de la década de 1990 que hace una "corrección" para valores pequeños de . VerX

CI. C. Lee. En Laplace continuó fracción para la integral normal . Ana. Inst. Estadístico. Matemáticas. , 44 (1): 107-120, marzo de 1992.


La probabilidad de Durrett : teoría y ejemplos proporciona los límites superiores e inferiores clásicos en en las páginas 6–7 de la 3ª edición. Están destinados a valores mayores de (por ejemplo, ) y son asintóticamente ajustados.Q(X)XX>3

Esperemos que esto te ayude a comenzar. Si tiene un interés más específico, podría señalarle a algún lado.

cardenal
fuente
9

Supongo que llegué tarde al héroe, pero quería comentar sobre la publicación de Cardinal, y este comentario se hizo demasiado grande para su casilla prevista.

Para esta respuesta, supongo que ; Se pueden usar fórmulas de reflexión apropiadas para negativo .X>0 0X

Estoy más acostumbrado a tratar con la función de error , pero trataré de reformular lo que sé en términos de la relación de Mills (como se define en la respuesta del cardenal).mirF(X)R(X)

De hecho, hay formas alternativas de calcular la función de error (complementaria) además de usar aproximaciones de Chebyshev. Dado que el uso de una aproximación de Chebyshev requiere el almacenamiento de no pocos coeficientes, estos métodos pueden tener una ventaja si las estructuras de matriz son un poco costosas en su entorno informático (podría alinear los coeficientes, pero el código resultante probablemente se vería como un barroco lío).

Para "pequeño", Abramowitz y Stegun dan una serie de buen comportamiento (al menos mejor comportamiento que la serie Maclaurin habitual):El |XEl |

R(X)=π2Exp(X22)-Xj=0 02jj!(2j+1)!X2j
(adaptado de la fórmula 7.1.6 )

Tenga en cuenta que los coeficientes de en la serie Se pueden calcular comenzando con y luego utilizando la fórmula de recursión . Esto es conveniente cuando se implementa la serie como un ciclo de suma.X2jCj=2jj!(2j+1)!C0 0=1Cj+1=Cj2j+3


el cardenal le dio a la fracción continua laplaciana como una forma de vincular la relación de Mills para grandes; lo que no es tan conocido es que la fracción continua también es útil para la evaluación numérica.El |XEl |

Lentz , Thompson y Barnett derivaron un algoritmo para evaluar numéricamente una fracción continua como un producto infinito, que es más eficiente que el enfoque habitual de calcular una fracción continua "hacia atrás". En lugar de mostrar el algoritmo general, mostraré cómo se especializa en el cálculo de la relación de Mills:

Y0 0=X,C0 0=Y0 0,re0 0=0 0
repetir para j=1,2,...

rej=1X+jrej-1
Cj=X+jCj-1
Hj=Cjrej
Yj=HjYj-1
hasta El |Hj-1El |<tol
R(X)=1Yj

donde determina la precisión.tol

El CF es útil cuando la serie mencionada anteriormente comienza a converger lentamente; Tendrá que experimentar para determinar el "punto de interrupción" apropiado para cambiar de la serie al CF en su entorno informático. También existe la alternativa de usar una serie asintótica en lugar del Laplacian CF, pero mi experiencia es que el Laplacian CF es lo suficientemente bueno para la mayoría de las aplicaciones.


Finalmente, si no necesita calcular la función de error (complementaria) con mucha precisión (es decir, solo a unos pocos dígitos significativos), hay aproximaciones compactas debido a Serge Winitzki. Aqui esta uno de ellos:

R(X)2π+X(π-2)2+X2π+X2(π-2)

Esta aproximación tiene un error relativo máximo de y se vuelve más precisa a medida que aumenta. x1,84×10-2X

JM no es un estadístico
fuente
8

(Esta respuesta apareció originalmente en respuesta a una pregunta similar, posteriormente cerrada como un duplicado. El OP solo quería "una" implementación de la integral gaussiana, no necesariamente "estado del arte". En sus comentarios se hizo evidente que un relativamente simple , se preferiría una implementación corta).


-8.5+8.5

Una versión de MatLab (con las atribuciones apropiadas) está disponible en http://people.sc.fsu.edu/~jburkardt/m_src/asa005/alnorm.m . Una versión completamente indocumentada del código Fortran original aparece en un sitio "Koders Code Search" (sic).

Hace muchos años porté esto a AWK. Esta versión puede ser más agradable para el desarrollador moderno debido a su sintaxis tipo C (en lugar de Fortran) y algunos comentarios adicionales que inserté al desarrollarla y probarla, porque necesitaba mejorar su precisión. Aparece a continuación.

Para aquellos sin mucha experiencia portando código científico / matemático / estadístico, algunos consejos : un solo error tipográfico puede crear serios errores que pueden no ser fácilmente detectables. (Confía en mí en esto, he hecho muchos de ellos.) Siempre, siempre crea una prueba cuidadosa y exhaustiva. Debido a que la función integral integral / integral gaussiana / error está disponible en tantas tablas y mucho software, es simple y rápido tabular una gran cantidad de valores de su función portada y compararlos sistemáticamente (es decir, con la computadora, no a simple vista) los valores para corregir los Puede ver dicha prueba al comienzo de mi código: produce una tabla de valores en -8.5: 8.5 (por 0.1) que se puede canalizar (a través de STDOUT) a otro programa para la verificación sistemática.

Otro enfoque de prueba, para aquellos con suficientes antecedentes en análisis numérico para saber cómo estimar los errores esperados, sería diferenciar numéricamente los valores y compararlos con el PDF (que se calcula fácilmente).

0 0-Xμσz=(X-μ)/ /σalnorm

Editar

alnorm1-Φ(z)z1alnorm

Alnorm

4 4×10-11 z=dieciséiszz=(2×708)37,6

alnorm[-6.0]9.865 876 450 315mi-1012erfc(32)9.865 876 450 377mi-10

UPPER_TAIL_IS_ZERO15.16.Z15dieciséis

#----------------------------------------------------------------------#
#   ALNORM.AWK
#   Compute values of the cumulative normal probability function.
#   From G. Dallal's STAT-SAK (Fortran code).
#   Additional precision using asymptotic expression added 7/8/92.
#----------------------------------------------------------------------#
BEGIN {
    for (i=-85; i<=85; i++) {
        x = i/10
        p = alnorm(x, 0)
        printf("%3.1f %12.10f\n", x, p)
    }
    exit
}
function alnorm(z,up,    y,aln,w) {
#
#    ALGORITHM AS 66 APPL. STATIST. (1973) VOL.22, NO.3:
#    Hill,  I.D.  (1973).  Algorithm AS 66.  The normal  integral.
#                          Appl. Statist.,22,424-427.
#
#    Evaluates the tail area of the standard normal curve from
#    z to infinity if up, or from -infinity to z if not up.
#
#    LOWER_TAIL_IS_ONE, UPPER_TAIL_IS_ZERO, and EXP_MIN_ARG
#    must be set to suit this computer and compiler.

    LOWER_TAIL_IS_ONE = 8.5     # I.e., alnorm(8.5,0) = .999999999999+
    UPPER_TAIL_IS_ZERO = 16.0   # Changes to power series expression
    FORMULA_BREAK = 1.28        # Changes cont. fraction coefficients
    EXP_MIN_ARG = -708          # I.e., exp(-708) is essentially true 0

    if (z < 0.0) {
        up = !up
        z = -z
    }
    if ((z <= LOWER_TAIL_IS_ONE) || (up && z <= UPPER_TAIL_IS_ZERO)) {
        y = 0.5 * z * z
        if (z > FORMULA_BREAK) {
            if (-y > EXP_MIN_ARG) {
                aln = .398942280385 * exp(-y) / \
                  (z - 3.8052E-8 + 1.00000615302 / \
                  (z + 3.98064794E-4 + 1.98615381364 / \
                  (z - 0.151679116635 + 5.29330324926 / \
                  (z + 4.8385912808 - 15.1508972451 / \
                  (z + 0.742380924027 + 30.789933034 / \
                  (z + 3.99019417011))))))
            } else {
                aln = 0.0
            }
        } else {
            aln = 0.5 - z * (0.398942280444 - 0.399903438504 * y / \
              (y + 5.75885480458 - 29.8213557808 / \
              (y + 2.62433121679 + 48.6959930692 / \
              (y + 5.92885724438))))
        }
    } else {
        if (up) {   # 7/8/92
            # Uses asymptotic expansion for exp(-z*z/2)/alnorm(z)
            # Agrees with continued fraction to 11 s.f. when z >= 15
            # and coefficients through 706 are used.
            y = -0.5*z*z
            if (y > EXP_MIN_ARG) {
                w = -0.5/y  # 1/z^2
                aln = 0.3989422804014327*exp(y)/ \
                    (z*(1 + w*(1 + w*(-2 + w*(10 + w*(-74 + w*706))))))
                # Next coefficients would be -8162, 110410
            } else {
                aln = 0.0
            }
        } else {
            aln = 0.0
        }
    }
    return up ? aln : 1.0 - aln
}
### end of file ###
whuber
fuente
Usé boost en C ++ para calcular el CDF de distribución normal. Pero a veces cuando calculo P (x> mean1 + sigma1) para lo normal (mean1, sigma1), y luego vuelvo a calcular el P (x> mean2 + sigma2) para lo normal (mean2, sigma2), siempre da lo mismo valor de probabilidad! Incluso si lo intento con otros valores ligeramente diferentes de media y sigma. ¿Tiene esto algún significado?
shn
Pr(Z>1)Z=(X-metromiunnorte1)/ /σ1Z=(X-metromiunnorte2)/ /σ2 tiene una distribución normal estándar (de media cero y unidad SD). Es fácil de entender como un cambio de unidades: es como contar la cantidad de días cuando la temperatura excedió los 86 grados (F) y notar que es exactamente la misma cantidad de días que la temperatura excedió los 30 grados (C).
whuber
Oh, genial, pensé que era un error en mi código.
shn
Y sí, en realidad no es la misma probabilidad, pero muy cerca el uno del otro, como 0.158655273989975 y 0.158655230168700
shn
1
@ Cardenal: hecho.
whuber