Я пытаюсь подогнать свои данные к отрицательному биномиальному распределению с пакетом scipy в Python. Однако моя проверка, похоже, не удалась.
Это мои шаги:
- У меня есть данные о спросе, которые описываются статистикой:
mu = 1.4
std = 1.59
print(mu, std)
Я использую функцию параметризации ниже, взятую из этого
сообщения для вычисления двух параметров
NB .
def convert_params(mu, theta):
"""
Convert mean/dispersion parameterization of a negative binomial to the ones scipy supports
See https://en.wikipedia.org/wiki/Negative_binomial_distribution#Alternative_formulations
"""
r = theta
var = mu + 1 / r * mu ** 2
p = (var - mu) / var
return r, 1 - p
Я передаю (надеюсь, правильно ...) две мои статистические данные - соглашение об именах между разными источниками на данном этапе довольно сбивает с толку p
, r
, k
firstParam, secondParam = convert_params(mu, std)
Затем я бы использовал эти два параметра для соответствия распределению:
from scipy.stats import nbinom
rv = nbinom(firstParam, secondParam)
Затем я вычисляю значение R
с помощью функции процентной точки .ppf(0.95)
. Значение R
в контексте моей проблемы является точкой изменения порядка.
R = rv.ppf(0.95)
Сейчас я ожидаю
проверки предыдущих шагов , но мне не удается
получить мою исходную статистику mu
и
std
с
mean
и
math.sqrt(var)
соответственно.
import math
mean, var = nbinom.stats(firstParam, secondParam, moments='mv')
print(mean, math.sqrt(var))
Что мне не хватает? Любые отзывы о параметризации, реализованной в Scipy
?