Как вычислить кумулятивное нормальное распределение в Python

Я ищу функцию в Numpy или Scipy (или любую строгую библиотеку Python), которая даст мне кумулятивную нормальную функцию распределения в Python.

6 Solutions collect form web for “Как вычислить кумулятивное нормальное распределение в Python”

Вот пример:

>>> from scipy.stats import norm >>> norm.cdf(1.96) array(0.97500210485177952) 

Если вам нужен обратный CDF:

 >>> norm.ppf(norm.cdf(1.96)) array(1.9599999999999991) 

Адаптировано здесь http://mail.python.org/pipermail/python-list/2000-June/039873.html

 from math import * def erfcc(x): """Complementary error function.""" z = abs(x) t = 1. / (1. + 0.5*z) r = t * exp(-z*z-1.26551223+t*(1.00002368+t*(.37409196+ t*(.09678418+t*(-.18628806+t*(.27886807+ t*(-1.13520398+t*(1.48851587+t*(-.82215223+ t*.17087277))))))))) if (x >= 0.): return r else: return 2. - r def ncdf(x): return 1. - 0.5*erfcc(x/(2**0.5)) 

Возможно, слишком поздно ответить на вопрос, но поскольку Google по-прежнему приводит людей сюда, я решил написать свое решение здесь.

То есть, начиная с Python 2.7, математическая библиотека интегрировала функцию ошибки math.erf (x)

Функция erf () может использоваться для вычисления традиционных статистических функций, таких как совокупное стандартное нормальное распределение:

 from math import * def phi(x): #'Cumulative distribution function for the standard normal distribution' return (1.0 + erf(x / sqrt(2.0))) / 2.0 

Ref:

https://docs.python.org/2/library/math.html

https://docs.python.org/3/library/math.html

Как связаны функция «Ошибка» и «Стандартная нормальная функция распределения»?

Чтобы построить пример Неизвестного, эквивалент Python функции normdist (), реализованный во многих библиотеках, будет:

 def normcdf(x, mu, sigma): t = x-mu; y = 0.5*erfcc(-t/(sigma*sqrt(2.0))); if y>1.0: y = 1.0; return y def normpdf(x, mu, sigma): u = (x-mu)/abs(sigma) y = (1/(sqrt(2*pi)*abs(sigma)))*exp(-u*u/2) return y def normdist(x, mu, sigma, f): if f: y = normcdf(x,mu,sigma) else: y = normpdf(x,mu,sigma) return y 

Ответ Алекса показывает вам решение для стандартного нормального распределения (среднее значение = 0, стандартное отклонение = 1). Если у вас нормальное распределение со mean и std (которое является sqr(var) ), и вы хотите вычислить:

 from scipy.stats import norm # cdf(x < val) print norm.cdf(val, m, s) # cdf(x > val) print 1 - norm.cdf(val, m, s) # cdf(v1 < x < v2) print norm.cdf(v2, m, s) - norm.cdf(v1, m, s) 

Подробнее о cdf здесь и о скудной реализации нормального распределения со многими формулами здесь .

Поскольку Google дает этот ответ для поиска netlogo pdf , вот версия netlogo вышеуказанного кода на Python


     ;;  Функция кумулятивной плотности распределения нормального распределения
     to-report normcdf [x mu sigma]
         пусть tx - mu
         пусть y 0,5 * erfcc [- t / (sigma * sqrt 2.0)]
         if (y> 1.0) [set y 1.0]
         сообщить y
     конец

     ;;  Функция плотности распределения нормальных распределений
     to-report normpdf [x mu sigma]
         пусть u = (x - mu) / abs sigma
         пусть y = 1 / (sqrt [2 * pi] * abs sigma) * exp (- u * u / 2.0)
         сообщить y
     конец

     ;;  Функция дополнительной ошибки
     to-report erfcc [x]
         пусть z abs x
         пусть t 1,0 / (1,0 + 0,5 * z)
         пусть rt * exp (- z * z -1.26551223 + t * (1.00002368 + t * (0.37409196 +
             t * (0.09678418 + t * (-0.18628806 + t * (.27886807 +
             t * (-1.13520398 + t * (1.48851587 + t * (-0.82215223 +
             t * .17087277)))))))))
         ifelse (x> = 0) [report r] [report 2.0 - r]
     конец

  • Вычисление доверительного интервала из данных выборки
  • Количественный квантовый график с использованием SciPy
  • Использование модуля stats.kstest от Scipy для проверки пригодности
  • Оценить экспоненциальное обрезание в распределении степенного закона
  • Хорошие тесты пригодности в SciPy
  • t на кадры данных Pandas и создать новую матрицу из полученных значений p
  • Есть ли модуль Python для открытия файлов SPSS?
  • Вычислите, как значение отличается от среднего значения с использованием плотности гауссовского ядра (Python)
  • Дизайн экспериментов (DoE) в Python?
  • В scipy.stats rv_continuous имеет подходящий метод для поиска MLE, но rv_discrete этого не делает. Зачем?
  • Как сделать F-тест в python
  • Python - лучший язык программирования в мире.