Оценка соответствия с помощью теста Колмогорова-Смирнова для пользовательского экспоненциального уравнения

#python #scipy #exponential #kolmogorov-smirnov

#python #scipy #экспоненциальный #колмогоров-смирнов

Вопрос:

Я знаю, что здесь уже есть несколько похожих вопросов, но ни один из них не отвечает на мой конкретный вопрос.

У меня есть массив отдельных значений (черный квадрат на картинке). А теперь хочу проверить, значительно ли черные квадраты отличаются от красной линии, которую я создал, подгоняя экспоненциальное уравнение к данным. Подгонка была создана следующим образом:

 def exponential_equation(x, k, c):
    return np.exp(-(x - c) / k)


def fit_exp(x, y):
    popt, pcov = curve_fit(exponential_equation, x, y, p0=[0.1, 0.1])
    k = popt[0]
    c = popt[1]
    return k, c

k, c = fit_exp(x_array, y_array) 
  

Как вы можете видеть, показательное уравнение, которое я использовал, немного отличается от «стандартного» экспоненциального уравнения, поэтому выполнение чего-то вроде pval = scipy.stats.kstest(y_array, "expon")[1] не работает.
Я думал, что сработает что-то похожее на pval = scipy.stats.kstest(y_array, exponential_equation, args=(k,c)[1] , но это также возвращает значение pvalue 2.68e-104 , и, оценивая соответствие на глаз, кажется, что значение pvalue должно быть выше 0,05..

Если бы кто-нибудь мог сказать мне, что я делаю неправильно, или мог указать мне правильное направление, я был бы очень рад!

Приветствия!

введите описание изображения здесь

Ответ №1:

На случай, если кто-то посмотрит это позже, это то, что я в итоге сделал, и я думаю, что результаты выглядят достойно:

 def exponential_equation(x, k, c):
    return np.exp(-(x - c) / k)


def cdf_exp(b, k, c):
    max_cdf = quad(exponential_equation, 0, np.inf, args=(k, c))[0]
    return [quad(exponential_equation, 0, i, args=(k, c))[0] / max_cdf for i in b]

k = 0.2
c = 0.01
pvalue = scipy.stats.kstest(test_array, cdf_exp, args=(k,c))[1]
  

Если кто-то увидит ошибку, пожалуйста, дайте мне знать, но я уверен, что это делает то, что я хочу.