Подгонять распределение Вейбулла, используя точки из CDF - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь соответствовать распределению Вейбулла, начиная со значений из 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
...