python - scipy中负二项式的替代参数化

标签 python numpy scipy distribution

在 scipy 中,负二项分布定义为:

nbinom.pmf(k) = choose(k+n-1, n-1) * p**n * (1-p)**k

这是常见的定义,另见维基百科: https://en.wikipedia.org/wiki/Negative_binomial_distribution

但是,存在不同的参数化,其中负二项式由均值 mu 和色散参数定义。

在 R 中这很容易,因为 negbin 可以通过两个参数化定义:

dnbinom(x, size, prob, mu, log = FALSE)

如何在 scipy 中使用均值/离散参数化?

编辑:

直接来自 R 帮助:

大小为 n 且概率为 p 的负二项分布具有密度

Γ(x+n)/(Γ(n) x!) p^n (1-p)^x

另一种参数化(常用于生态学)是平均 mu(见上文)和大小,分散参数,其中 prob = size/(size+mu)。此参数化中的方差为 mu + mu^2/size。

这里也有更详细的描述:

https://en.wikipedia.org/wiki/Negative_binomial_distribution#Alternative_formulations

最佳答案

from scipy.stats import nbinom


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


def pmf(counts, mu, theta):
    """
    >>> import numpy as np
    >>> from scipy.stats import poisson
    >>> np.isclose(pmf(10, 10, 10000), poisson.pmf(10, 10), atol=1e-3)
    True
    """
    return nbinom.pmf(counts, *convert_params(mu, theta))


def logpmf(counts, mu, theta):
    return nbinom.logpmf(counts, *convert_params(mu, theta))


def cdf(counts, mu, theta):
    return nbinom.cdf(counts, *convert_params(mu, theta))


def sf(counts, mu, theta):
    return nbinom.sf(counts, *convert_params(mu, theta))

关于python - scipy中负二项式的替代参数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40846992/

相关文章:

python - 检查文本文件中的参数 Python

python - 管理矩阵中的多个字符串并对其进行子串化(Python 和 Numpy)

python : Any use of this assignment to an empty list?

python - 获得包含折线图的两个图像的相似性度量的好方法是什么?

python - 即使提供了良好的猜测,scipy curve_fit 也根本无法正确拟合?

python - 使用 Python2 合并 CSV 行并保留单个任意列中的数据

python - 如何读取 gekko 错误代码(例如位置 : 5, v3 等)

python - 在 Pandas 中读取excel文件

python - 需要帮助思考在 Python 中以整数除法拆分列表

python - 在 Numpy 中将离散值的一维数组转换为连续值的 n 维数组