Я пытаюсь соответствовать распределению Вейбулла, начиная со значений из CDF. Чтобы проверить это, я сгенерировал 25 выборочных значений из распределения, где c = 3
и scale = 10
.
Как я понимаю, weibull_min.fit
нужна выборка значений из распределения вероятностей. Чтобы сделать эти образцы, я вычислил PDF (взяв производную) в 25 точках, а затем повторил их пропорционально значению PDF в каждой точке.
Я предположил, что параметры, возвращаемые с помощью weibull_min.fit
в этом сгенерированном распределении будет довольно близко к оригиналу (3 и 10). Они относительно близки, но ни в коем случае не идеальны.
Как мне сделать подборку более точной?
import numpy as np
from scipy import stats
shape = 3
scale = 10
x = np.arange(25)
cdf = stats.weibull_min.cdf(x, c=shape, scale=scale)
pdf = np.diff(cdf) # Calculate derivative
dist = np.repeat(x[1:], (pdf * 1e4).astype(int)) # Generate samples
# Fit the data
shape, loc, scale = stats.weibull_min.fit(dist, floc=0) # loc == 0
print(shape, scale)
# 3.175024036715457 10.532343468554256