Тест KSI не проходит для усеченного нормального распределения для scipy.stats в python - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь выполнить тест KSI с множеством разных распределений для набора данных. Тест, который я пытаюсь выполнить, можно найти в вопросе переполнения стека здесь:

Как найти распределение вероятностей и параметры для реальных данных? (Python 3)

К сожалению, когда я пытаюсь добавить "truncnorm" к списку пробных выпусков, коду не удается найти параметры и значения p для усеченного нормального распределения. Значение P всегда равно нулю.

Может ли кто-нибудь помочь мне с этим?

Спасибо!

print('Getting Best Fit')
def get_best_distribution(data):
    dist_names = ["norm", "truncnorm", "exponweib", "weibull_max", "weibull_min", "pareto", "genextreme"]
    dist_results = []
    params = {}
    for dist_name in dist_names:
        dist = getattr(stats, dist_name)
        param = dist.fit(data)

        params[dist_name] = param
        # Applying the Kolmogorov-Smirnov test
        D, p = stats.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]))
    if math.isnan(best_p) == True:
        print('skipping')
        return 'None', 'None', 'None'
    # store the name of the best fit and its p value

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

        return best_dist, best_p, params[best_dist]

Когда я пытаюсь бежать:

param = dist.fit(data)

Я получаю:

C:\Users\xxxx.xxxx\AppData\Local\Continuum\anaconda3\envs\test_env\lib\site-packages\scipy\stats\_continuous_distns.py:6348: RuntimeWarning: divide by zero encountered in log
  self._logdelta = np.log(self._delta)
C:\Users\xxxx.xxxx\AppData\Local\Continuum\anaconda3\envs\test_env\lib\site-packages\scipy\stats\_continuous_distns.py:6348: RuntimeWarning: invalid value encountered in log
  self._logdelta = np.log(self._delta)
...