выбор между дискретными дистрибутивами в python

#python #python-3.x #scipy #statistics #distribution

#python #python-3.x #scipy #Статистика #распределение

Вопрос:

Я пытаюсь выбрать наилучшее соответствие между дискретными дистрибутивами, но я получаю сообщение об ошибке ниже, что дискретные расстояния не соответствуют атрибутам. У кого-нибудь есть идеи, как исправить это или какие-либо альтернативные способы выбора между дискретными дистрибутивами?

 import scipy.stats as st
def get_best_distribution(data):
    dist_names = ["bernoulli", "poisson", "binom", "geom", "logser", "randint"]
    dist_results = []
    params = {}
    for dist_name in dist_names:
        dist = getattr(st, dist_name)
        param = dist.fit(data)

        params[dist_name] = param
        # Applying the Kolmogorov-Smirnov test
        D, p = st.kstest(data, dist_name, args=param)
        print("p value for " dist_name " = " str(p))
        dist_results.append((dist_name, p))

    # select the best fitted distribution
    best_dist, best_p = (max(dist_results, key=lambda item: item[1]))
    # store the name of the best fit and its p value

    print("Best fitting distribution: " str(best_dist))
    print("Best p value: "  str(best_p))
    print("Parameters for the best fit: "  str(params[best_dist]))

    return best_dist, best_p, params[best_dist]
print(get_best_distribution(df)

AttributeError: 'bernoulli_gen' object has no attribute 'fit'
 

Комментарии:

1. Вы могли бы построить критерий соответствия Хи-квадрату .

Ответ №1:

Могут быть установлены только непрерывные дистрибутивы SciPy . Дискретные и многомерные дистрибутивы не поддерживают такую функцию.

Комментарии:

1. Спасибо. Есть ли какой-либо эквивалентный способ выбора между дискретными в python?

2. @Uni 13, я не настолько хорошо знаю статистику, чтобы догадаться, почему именно fit не реализован для дискретных дистрибутивов. Но я думаю, что по какой-то причине вам нужно вручную находить параметры distr.