scipy.stats.normal_inverse_gamma#
-
scipy.stats.normal_inverse_gamma =
object> [источник]# Нормально-обратное гамма распределение.
Нормально-обратно-гамма распределение является сопряженным априорным для нормального распределения с неизвестным средним и дисперсией.
- Параметры:
- mu, lmbda, a, barray_like
Параметры формы распределения. См. примечания.
- seed{None, int, np.random.RandomState, np.random.Generator}, опционально
Используется для генерации случайных величин. Если seed является None, RandomState используется синглтон. Если seed является int, новый
RandomStateиспользуется экземпляр, инициализированный с seed. Если seed уже являетсяRandomStateилиGeneratorэкземпляр, то этот объект используется. По умолчанию None.
Методы
pdf(x, s2, mu=0, lmbda=1, a=1, b=1)
Функция плотности вероятности.
logpdf(x, s2, mu=0, lmbda=1, a=1, b=1)
Логарифм функции плотности вероятности.
mean(mu=0, lmbda=1, a=1, b=1)
Среднее распределения.
var(mu=0, lmbda=1, a=1, b=1)
Дисперсия распределения.
rvs(mu=0, lmbda=1, a=1, b=1, size=None, random_state=None)
Генерировать случайные выборки.
Примечания
Функция плотности вероятности для
normal_inverse_gammaравен:\[f(x, \sigma^2; \mu, \lambda, \alpha, \beta) = \frac{\sqrt{\lambda}}{\sqrt{2 \pi \sigma^2}} \frac{\beta^\alpha}{\Gamma(\alpha)} \left( \frac{1}{\sigma^2} \right)^{\alpha + 1} \exp \left(- \frac{2 \beta + \lambda (x - \mu)^2} {2 \sigma^2} \right)\]где все параметры вещественные и конечные, и \(\sigma^2 > 0\), \(\lambda > 0\), \(\alpha > 0\), и \(\beta > 0\).
Методы
normal_inverse_gamma.pdfиnormal_inverse_gamma.logpdfпринимать x и s2 для аргументов \(x\) и \(\sigma^2\). Все методы принимают mu, lmbda, a, и b для параметров формы \(\mu\), \(\lambda\), \(\alpha\), и \(\beta\), соответственно.Добавлено в версии 1.15.
Ссылки
[1]Нормально-обратное гамма-распределение, Википедия, https://en.wikipedia.org/wiki/Normal-inverse-gamma_distribution
Примеры
Предположим, мы хотим исследовать связь между нормально-обратным гамма-распределением и обратным гамма-распределением.
>>> import numpy as np >>> from scipy import stats >>> import matplotlib.pyplot as plt >>> rng = np.random.default_rng() >>> mu, lmbda, a, b = 0, 1, 20, 20 >>> norm_inv_gamma = stats.normal_inverse_gamma(mu, lmbda, a, b) >>> inv_gamma = stats.invgamma(a, scale=b)
Один из подходов — сравнить распределение s2 элементы случайных величин против PDF обратного гамма-распределения.
>>> _, s2 = norm_inv_gamma.rvs(size=10000, random_state=rng) >>> bins = np.linspace(s2.min(), s2.max(), 50) >>> plt.hist(s2, bins=bins, density=True, label='Frequency density') >>> s2 = np.linspace(s2.min(), s2.max(), 300) >>> plt.plot(s2, inv_gamma.pdf(s2), label='PDF') >>> plt.xlabel(r'$\sigma^2$') >>> plt.ylabel('Frequency density / PMF') >>> plt.show()
Аналогично, мы можем сравнить маргинальное распределение s2 против обратного гамма-распределения.
>>> from scipy.integrate import quad_vec >>> from scipy import integrate >>> s2 = np.linspace(0.5, 3, 6) >>> res = quad_vec(lambda x: norm_inv_gamma.pdf(x, s2), -np.inf, np.inf)[0] >>> np.allclose(res, inv_gamma.pdf(s2)) True
Выборочное среднее сравнимо со средним распределения.
>>> x, s2 = norm_inv_gamma.rvs(size=10000, random_state=rng) >>> x.mean(), s2.mean() (np.float64(-0.005254750127304425), np.float64(1.050438111436508)) >>> norm_inv_gamma.mean() (np.float64(0.0), np.float64(1.0526315789473684))
Аналогично для дисперсии:
>>> x.var(ddof=1), s2.var(ddof=1) (np.float64(1.0546150578185023), np.float64(0.061829865266330754)) >>> norm_inv_gamma.var() (np.float64(1.0526315789473684), np.float64(0.061557402277623886))