Я пытаюсь выполнить тест 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)