У меня возникли проблемы с интерпретацией результатов функции Вейбулла Сципи. Официальные документы, к сожалению, очень запутанные.
Я хочу установить двухфакторную функцию Вейбулла на некоторые данные о скорости ветра, поэтому я протестировал функцию подбора на некоторых изобретенных данных, как показано ниже. Но результаты не соответствуют форме и масштабным коэффициентам, которые я ввел.
Я также считаю:
Я использую неправильную функцию подгонки
Я интерпретирую неверные параметры
Любой совет? Или иначе, есть ли хороший способ использовать MLE в пользовательской функции, подобной той, что я сделал ниже? В прошлом я использовал для этого statsmodels, но в моем опыте сходимость была не очень хорошей - или, по крайней мере, процесс был не очень ясным
В этом тесте я создаю данные с параметрами weibull shape = 2, scale = 10 и неявно location = 0, потому что это двухфакторная форма уравнения.
Затем я попробовал 2 функции scipy, которые возникли в результате онлайн-поиска, и ни одна из них не выдает параметры, которые соответствуют данные.
import scipy.stats as s
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
def weib(x,scale,shape):
return (shape / scale) * (x / scale)**(shape - 1) * np.exp(-(x / scale)**shape)
scale = 10
shape = 2
test_x = range(40)
test_y = [weib(x,scale,shape) for x in test_x]
plt.plot(test_x,test_y)
s.weibull_min.fit([test_x,test_y])
(0,22533839261703714, -5,552484597396645e-28, 14,458809476185376)
s.exponweib.fit([test_x,test_y])
(0,762200388832477, 0,61616, 4877 1.4629383065126612e-31, 21.2078942933448)