Cómo calcular el inverso de la distribución normal estándar

prueba de unidad de importación

def inverse_normal_standard_distribution (p: float) -> float:
“” “Calcula el inverso de la distribución normal estándar.” “”

# La probabilidad debe estar entre 0 y 1
si p 1:
devuelve 0.00

a = [-39.96968, 220.96609, -275.92851, 138.35775, -30.66479, 2.50662]
b = [-54.47609, 161.58583, -155.69897, 66.801311, -13.28068]

q = p – 0.5
r = q * q

return ((((((a [0] * r + a [1]) * r + a [2]) * r + a [3]) * r + a [4]) * r + a [5]) * q / (((((b [0] * r + b [1]) * r + b [2]) * r + b [3]) * r + b [4]) * r + 1)

clase Test_Inverse (unittest.TestCase):
def test_one (self):
self.assertEqual (distribución_normal_inversa_inversa (0.248), -0.6807917372126464)
def test_two (self):
self.assertEqual (distribución_normal_inversa_inversa (0.410), -0.2275441490314342)
def test_three (self):
self.assertEqual (inverse_normal_standard_distribution (0.734), 0.6249517237529342)

if __name__ == ‘__main__’:
unittest.main ()

Supongo que la respuesta de Tom Cusack es el código que encontraste en línea. Esta es una aproximación. Para las funciones que no tienen una forma cerrada, puede encontrar una fórmula basada en una serie (p. Ej., Serie de Taylor) que suma hasta que el error sea lo suficientemente pequeño, o una relación de serie, o utilizar algún proceso iterativo que converja al valor verdadero . Alternativamente, puede usar una aproximación polinómica o alguna otra aproximación finita. Hay una mezcla de arte y ciencia involucrada en la búsqueda de tales aproximaciones.

Este código parece ser una relación de polinomios con grados 20 y 18 con solo potencias pares. Esto se calcula de manera más eficiente que encontrar poderes de r; Es un método conocido como multiplicación anidada.

La única forma de entender cómo funciona es encontrar el trabajo de investigación en el que se basa. Solo usa el código. (Tal vez pueda encontrar versiones de Fortran, Pascal o C en uno de los libros de ‘Recetas numéricas’. Pero no explican cómo funciona, aunque podrían tener una referencia).