我一直在寻找一种将数据拟合到 beta 二项分布并估计 alpha 和 beta 的方法,类似于 VGAM 库中的 vglm 包的方式。我一直无法找到如何在 python 中执行此操作。有一个 scipy.stats.beta.fit() ,但没有一个 beta 二项分布。有没有办法做到这一点?
2 回答
我还没有在 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
这个 python 模块提供了https://github.com/lfiaschi/fastbetabino