Statsmodels适合0和1之间的分布

时间:2016-09-10 18:29:38

标签: python numpy statistics statsmodels

我正在尝试拟合一个beta分布,它应该在一个只有子范围内的样本的数据集上定义,介于0和1之间。我的问题是使用fit()函数将导致只在我的最小值和最大值之间定义拟合的PDF。 例如,如果我的数据集的样本介于0.2和0.3之间,那么我得到的是一个定义在0.2和0.3之间的PDF,而不是介于0和1之间的PDF。我正在使用的代码是:

ps1 = beta.fit(selected, loc=0, scale=1)

我错过了什么吗? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

所以:

  • 您知道分布具有上下限a = 0和b = 1,
  • 但样本中没有接近这些限制的任何值。

如果分布确实是Beta分布,并且alpha和beta参数是0和1附近的密度为零,则可能发生这种情况。

在这种情况下,我建议使用最大似然法,将活动参数限制为具有已知a和b参数的alpha和beta。

使用MaximumLikelihoodFactory类的OpenTURNS setKnownParameter类,这很容易。这种方法可以限制通过最大似然法优化的参数。

为重现这种情况,我使用以下参数创建了Beta发行版。

import openturns as ot
distribution = ot.Beta(3.0, 2.0, 0.0, 1.0)
sampleSize = 100
sample = distribution.getSample(sampleSize)

使用已知的a和b参数拟合Beta分布很简单。

factory = ot.MaximumLikelihoodFactory(distribution)
factory.setKnownParameter([0.0, 1.0], [2, 3])
inf_distribution = factory.build(sample)

列表[0.0, 1.0]包含a和b参数的值,索引[2, 3]是Beta分布中参数的索引。 这样会产生:

Beta(alpha = 3.02572, beta = 1.88172, a = 0, b = 1)

使用我模拟的样本。

答案 1 :(得分:0)

我提出了一个部分解决方案,为我提供了技巧:我复制我的样本(对于太小的数据集)并在0和1处添加虚拟样本。虽然这会增加拟合误差,但它足够低为了我的目的。 另外,我在谷歌小组中询问并this answer工作正常,但它偶尔会给我一些错误。我希望这有助于解决这个问题的任何人。