如果我在python中运行以下代码
from scipy.stats import norm, beta
sample = beta.rvs(2,5,size=100)
beta_fit = beta.fit(sample)
我收到以下错误
/usr/lib/python3/dist-packages/scipy/stats/_continuous_distns.py:404: RuntimeWarning: invalid
value encountered in sqrt
sk = 2*(b-a)*sqrt(a + b + 1) / (a + b + 2) / sqrt(a*b)
并且根据样本的大小,我有时也会得到另一个错误
/usr/lib/python3/dist-packages/scipy/optimize/minpack.py:161: RuntimeWarning:
The iteration is not making good progress, as measured by the improvement from the last ten iterations.
warnings.warn(msg, RuntimeWarning)
有谁知道为什么会发生这种情况以及如何解决这个问题?
谢谢!
答案 0 :(得分:2)
在评论中,您说要将支持固定为[0,1]。要使用fit()
方法执行此操作,请使用参数floc=0
和fscale=1
。然后只有形状参数适合数据。
from scipy.stats import beta
sample = beta.rvs(2, 5, size=100)
beta_fit = beta.fit(sample, floc=0, fscale=1)
这也应该消除您所看到的警告。发生这些警告是因为当所有四个参数都适合时,代码使用通用数值优化例程来查找最大化可能性的参数,并且该代码中的某些内容正在生成这些警告。 (这可能是一个错误 - 形状参数应该是正数,因此生成警告的行中对sqrt
的调用都不会产生负面参数。)当您修复位置和比例时, fit()
方法解决了一个更简单的数值问题,以找到最大似然参数估计值,因此它避免了生成警告的代码。