python - 使用 scipy.stats.beta.fit 时的运行时警告

标签 python python-3.x scipy statistics

如果我在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, 1]。要使用 fit() 方法执行此操作,请使用参数 floc=0fscale=1。然后只有形状参数将适合数据。

from scipy.stats import beta

sample = beta.rvs(2, 5, size=100)
beta_fit = beta.fit(sample, floc=0, fscale=1)

这也应该消除您看到的警告。出现这些警告是因为当所有四个参数都合适时,代码使用通用数值优化例程来查找使可能性最大化的参数,并且该代码中的某些内容会生成这些警告。 (这可能是一个错误——形状参数应该是正数,所以在生成警告的行中对 sqrt 的调用都不应该得到负数参数。)当你修复位置时和比例,fit() 方法解决了一个更简单的数值问题,以找到最大似然参数估计值,因此它避免了生成警告的代码。

关于python - 使用 scipy.stats.beta.fit 时的运行时警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44592370/

相关文章:

python - 如何使用 Pandas 删除基于特定列的重复值?

python - 使用 scipy/voronoi_plot_2d 在同一窗口中重绘绘图

python - 返回概率的python中的多类线性SVM

python - 查找函数内 Pandas 数据帧的长度

python - 回调函数中的 ctypes POINTER(c_void_p)

python - 行中的 pandas 最大值并返回带有值和列名的 df

python - 在python中使用pprint vs print有哪些情况?

python - 如何在 scipy 中定义 (n, 0) 稀疏矩阵或如何按列组装稀疏矩阵?

python - 如果未提供 Content-Length,则使用 python 正确下载文件

python - 将 python 输出保存到变量中