Очень низкие p-значения в Python Колмогоров-Смирнов Goodness of Fit Test

У меня есть набор данных и подгонка соответствующей гистограммы по логнормальному распределению. Сначала я вычисляю оптимальные параметры для логнормальной функции, а затем строю гистограмму и логнормальную функцию. Это дает довольно хорошие результаты:

Гистограмма синего цвета, подходящая функция красного цвета

import scipy as sp
import numpy as np
import matplotlib.pyplot as plt

num_data = len(data)

x_axis = np.linspace(min(data),
                 max(data),num_data)

number_of_bins = 240
histo, bin_edges = np.histogram(data, number_of_bins, normed=False)

shape, location, scale = sp.stats.lognorm.fit(data)

plt.hist(data, number_of_bins, normed=False);


# the scaling factor scales the normalized lognormal function up to the size
# of the histogram: 
scaling_factor = len(data)*(max(data)-min(data))/number_of_bins

plt.plot(x_axis,scaling_factor*sp.stats.lognorm.pdf(x_axis, shape,
              location,   scale),'r-')

# adjust the axes dimensions:
plt.axis([bin_edges[0]-10,bin_edges[len(bin_edges)-1]+10,0, histo.max()*1.1])

Однако, выполняя тест Колмогорова-Смирнова для данных в сравнении с функцией подбора, я получаю слишком низкие значения p (порядка e-32):

lognormal_ks_statistic, lognormal_ks_pvalue = 
       sp.stats.kstest(
       data, 
       lambda k: sp.stats.lognorm.cdf(k, shape, location, scale),
       args=(), 
       N=len(data), 
       alternative='two-sided', 
       mode='approx')

print(lognormal_ks_statistic)
print(lognormal_ks_pvalue)

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

Большое спасибо!! Чарльз

1 ответ

Это просто означает, что ваши данные не совсем лог-нормальны. Основываясь на гистограмме, у вас есть много точек для использования теста KS. Это означает, что если ваши данные равномерно немного отличаются от ожидаемых на основе лог-нормального распределения с этими параметрами, тест KS покажет, что данные не получены из лог-нормального.

Откуда данные? Если это из органического источника или из любого другого источника, кроме специально взятых случайных чисел из логнормального распределения, я бы ожидал чрезвычайно маленькое p-значение, даже если подгонка выглядит великолепно. Это, конечно, не проблема, если подгонка достаточно хороша для ваших целей.

Другие вопросы по тегам