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

Просто избавься от псевдонима.

Псевдонимы заменяют только то, что они псевдонимы (сохраняя все остальные аргументы), тогда как функции будут использовать все аргументы, независимо от того, действительно ли вы что-то с ними делаете.

87
задан martineau 13 October 2019 в 19:59
поделиться

3 ответа

Адаптировано отсюда 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))
18
ответ дан 24 November 2019 в 07:46
поделиться

Вот пример:

>>> from scipy.stats import norm
>>> norm.cdf(1.96)
0.9750021048517795
>>> norm.cdf(-1.96)
0.024997895148220435

Другими словами, приблизительно 95% стандартного нормального интервала лежит в пределах двух стандартных отклонений, центрированных на стандартном среднем значении нуля.

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

>>> norm.ppf(norm.cdf(1.96))
array(1.9599999999999991)
115
ответ дан 24 November 2019 в 07:46
поделиться

Чтобы построить на примере Unknown, 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
14
ответ дан 24 November 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: