【发布时间】:2015-04-07 04:29:38
【问题描述】:
我一直在寻找一种将数据拟合到 beta 二项分布并估计 alpha 和 beta 的方法,类似于 VGAM 库中的 vglm 包的方式。我一直无法找到如何在 python 中执行此操作。有一个 scipy.stats.beta.fit() ,但没有一个 beta 二项分布。有没有办法做到这一点?
【问题讨论】:
标签: python statistics scipy beta binomial-cdf
我一直在寻找一种将数据拟合到 beta 二项分布并估计 alpha 和 beta 的方法,类似于 VGAM 库中的 vglm 包的方式。我一直无法找到如何在 python 中执行此操作。有一个 scipy.stats.beta.fit() ,但没有一个 beta 二项分布。有没有办法做到这一点?
【问题讨论】:
标签: python statistics scipy beta binomial-cdf
我还没有看到 Python 中的 beta-binomial 估计。
如果您只是想估计参数,那么您可以使用 scipy.optimize 最小化对数似然函数,您可以自己编写或在互联网搜索后复制代码。
您可以继承 rv_discrete 以使用 scipy.stats.distributions 的框架,但 scipy 中的离散分布没有 fit 方法。
如果您想使用 statsmodels,那么您可以继承 GenericLikelihoodModel http://statsmodels.sourceforge.net/devel/dev/generated/statsmodels.base.model.GenericLikelihoodModel.html,它使用 scipy.optimize 但定义了我们进行最大似然估计所需的大部分内容。
但是,您需要为对数似然函数编写代码。这将提供通常的最大似然结果,例如参数的标准误差和各种测试。
如果您需要 beta-binomial 回归,那么 R 包 gamlss 中使用的均值方差参数化会更常见,并且可以重用 link 函数将参数约束在有效域中。
作为一个相关示例:这是 GenericLikelihoodModel 原型的要点,该原型导致对 statsmodels 的 Beta-Regression 的拉取请求:http://gist.github.com/brentp/089c7d6d69d78d26437f
【讨论】:
n 是常数,那么 alpha 和 beta 估计应该是相同的。如果n 波动,那么估计 beta-binomial 的观察权重将与估计 beta 不同,其中权重将取决于 n 的大小。基于较大 n 的比例将具有较小的方差,并且比基于较小 n 的比例具有更大的权重。
这个python模块提供https://github.com/lfiaschi/fastbetabino
【讨论】: