Сплит-нормальное распределение - PullRequest
0 голосов
/ 30 января 2019

Каков наилучший способ вычисления нормального распределения с учетом среднего значения с верхней и нижней ошибкой?

Пока у меня есть:

from random import choice, gauss
def random_split_normal(mu: float, upper_sigma: float, lower_sigma:int) -> float:
    return abs(gauss(0.0, 1.0)) * choice([upper_sigma, -lower_sigma]) + mu

, который я называю множествомраз для создания массива:

random_array = []
for _ in range(1000):
    random_array.append(random_split_normal(1.0, 2.0, 1.0))

, который дает следующий результат при построении гистограммы random_array:

enter image description here

Я задаюсь вопросом, правильный ли это случайный выбор: upper_sigma или lower_sigma?

1 Ответ

0 голосов
/ 30 января 2019

Ваше решение математически эквивалентно, но менее эффективно, поскольку вы без необходимости применяете abs () и choice (), где вы можете просто посмотреть на знак gauss ().

Это должно быть близко кОпределение.Я также зарезервировал сигмы, чтобы они совпадали с нашей обычной ориентацией числовой линии (отрицательная бесконечность слева)

def random_split_normal(mu: float, lower_sigma: float, upper_sigma: float) -> float:
    z = gauss(0, 1)
    return mu + z * (lower_sigma if z < 0 else upper_sigma)
...