Как подобрать наилучшую модель распределения вероятностей к моим данным в python?
У меня есть около 20000 строк данных, как это,,
Id | value
1 30
2 3
3 22
..
n 27
Я сделал статистику по моим данным, среднее значение 33,85, медиана 30,99, минимум 2,8, максимум 206, 95% доверительный интервал 0,21. Таким образом, большинство значений около 33, и есть некоторые выбросы (немного). Распределение с длинным хвостом.
Я новичок как в дистрибутиве, так и в Python, я попробовал установщик классов https://pypi.org/project/fitter/ чтобы попробовать много дистрибутивов из пакета Scipy, и дистрибутив loglaplace показал наименьшую ошибку (хотя и не очень-то это понимаю).
Я прочитал почти все вопросы в этой теме и пришел к выводу, что два подхода (1) подгоняют модель распределения, а затем в моем моделировании я рисую случайные значения (2) вычисляю частоту различных групп значений, но это решение не будет иметь значения более 206 например.
Имея мои данные, которые представляют собой значения (число), каков наилучший подход для подгонки распределения к моим данным в python, так как в моем моделировании мне нужно рисовать числа. Случайные числа должны иметь ту же схему, что и мои данные. Также мне нужно проверить, что модель хорошо представляет мои данные, рисуя мои данные и кривую модели.
0 ответов
Один из способов - выбрать лучшую модель в соответствии с байесовским информационным критерием (называемым BIC). OpenTURNS реализует автоматический метод выбора (см. Документ здесь).
Предположим, у вас есть массив
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
, вот быстрый пример:
import openturns as ot
# Define x as a Sample object. It is a sample of size 11 and dimension 1
sample = ot.Sample([[xi] for xi in x])
# define distributions you want to test on the sample
tested_distributions = [ot.WeibullMaxFactory(), ot.NormalFactory(), ot.UniformFactory()]
# find the best distribution according to BIC and print its parameters
best_model, best_bic = ot.FittingTest.BestModelBIC(sample, tested_distributions)
print(best_model)
>>> Uniform(a = -0.769231, b = 10.7692)