Почему "beta.fit" не выходит правильно? - PullRequest
0 голосов
/ 04 февраля 2019
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

observed = [0.294, 0.2955, 0.235, 0.2536, 0.2423, 0.2844, 0.2099, 0.2355, 0.2946, 0.3388, 0.2202, 0.2523, 0.2209, 0.2707, 0.1885, 0.2414, 0.2846, 0.328, 0.2265, 0.2563, 0.2345, 0.2845, 0.1787, 0.2392, 0.2777, 0.3076, 0.2108, 0.2477, 0.234, 0.2696, 0.1839, 0.2344, 0.2872, 0.3224, 0.2152, 0.2593, 0.2295, 0.2702, 0.1876, 0.2331, 0.2809, 0.3316, 0.2099, 0.2814, 0.2174, 0.2516, 0.2029, 0.2282, 0.2697, 0.3424, 0.2259, 0.2626, 0.2187, 0.2502, 0.2161, 0.2194, 0.2628, 0.3296, 0.2323, 0.2557, 0.2215, 0.2383, 0.2166, 0.2315, 0.2757, 0.3163, 0.2311, 0.2479, 0.2199, 0.2418, 0.1938, 0.2394, 0.2718, 0.3297, 0.2346, 0.2523, 0.2262, 0.2481, 0.2118, 0.241, 0.271, 0.3525, 0.2323, 0.2513, 0.2313, 0.2476, 0.232, 0.2295, 0.2645, 0.3386, 0.2334, 0.2631, 0.226, 0.2603, 0.2334, 0.2375, 0.2744, 0.3491, 0.2052, 0.2473, 0.228, 0.2448, 0.2189, 0.2149]
a, b, loc, scale = stats.beta.fit(observed,floc=0,fscale=1)
ax = plt.subplot(111)
ax.hist(observed, alpha=0.75, color='green', bins=104, density=True)
ax.plot(np.linspace(0, 1, 100), stats.beta.pdf(np.linspace(0, 1, 100), a, b))
plt.show()

α и β не в порядке (α = 6.056697373013153 , β = 409078.57804704335) Подходящее изображение также необоснованно.Гистограммы и бета-распределения различаются по высоте на оси Y.

Данные среднего значения составляют около 0,25, но рассчитаны в соответствии с ожидаемым значением бета-распределения 6,05 / (6,05 + 409078,57) = 1,47891162469e-05. Это кажется нелогичным.

enter image description here

1 Ответ

0 голосов
/ 04 февраля 2019

Я думаю, вы немного запутали код с тем, что вы наблюдаете.Главное, что нужно учитывать, это то, что ваша beta посадка будет иметь как a и b, так и loc и scale.

Если вы выполняете свою посадку с использованием фиксированной loc/ scale, т. Е. scipy.stats.beta.fit(observed, floc=0, fscale=1), тогда ваши подгонянные a и b: a = 33.26401059422594 и b = 99.0180817184922.

С другой стороны, если вы выполняете подгонку с переменной loc и scale, то есть scipy.stats.beta.fit(observed), тогда вы должны вычислить / рассмотреть scipy.stats.beta.pdf(), чтобы включить также те, которые в качестве параметра, которые, с вашими данными, a = 6.056697380819225, b = 409078.5780469263, loc = 0.15710752697400227, scale = 6373.831662619217.

Согласно его документации , приведенная выше плотность вероятности определяется в «стандартизированной» форме.Для сдвига и / или масштабирования распределения используйте параметры loc и scale.В частности, beta.pdf(x, a, b, loc, scale) тождественно эквивалентно beta.pdf(y, a, b) / scale с y = (x - loc) / scale.

Следовательно, теоретическое среднее / среднее следует соответствующим образом изменить, чтобы включить преобразования масштаба и местоположения.

...