微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 scipy.stats 和 iminuit 进行似然拟合

如何解决使用 scipy.stats 和 iminuit 进行似然拟合

我需要用似然方法拟合一些实验数据,并生成一些随机数据来检查该技术。我对 iminuit (v 2.7.0) 有一些经验,看起来 scipy.stats 有许多应该有用的现有发行版,提供 pdf/cds 和随机变量(我使用的是 scipy 1.5.2 )。通常,我需要现有分布的组合,例如平面分布、指数分布和三个高斯分布,所有分布都被截断。到目前为止,我正在做的是:

  • 创建 truncFEGGG_genscipy.stats.rv_continuous 的子类(有 13 个参数,包括边,因为我发现 locscale 相当混乱),覆盖 {{ 1}}、_argcheck_get_support_pdf_cdf_rvs

  • 然后我定义我的开始参数:truncFEGGG = truncFEGGG_gen 其中 pars = {'nu': 6758,'a': 0.1,'b': 3.6,'c': -87.5,...} 是数据中的总计数,其他参数是 cdf 的那些参数

  • I 定义 nu 实例用于扩展分箱似然拟合,并将分布的累积计数传递给它:

iminuit

这最后一步是目前给我带来麻烦的一步;因为我需要玩几个不同的模型,所以我每次都需要编写一个不同的 m = Minuit(ExtendedBinnednLL(binnedData,binEdges,lambda x,nu,a,b,c,...: nu * td.truncFEGGG.cdf(x,...)),**pars) 函数一个容易出错的过程),如果我可以将累积计数添加lambda 一劳永逸地传递该函数scipy.stats。这似乎不可行 (Adding methods to scipy.stats.rv_continuous,problems with rv_frozen),所以我想知道其他人会怎么做。有什么建议吗?

  • 之后,我运行最小化器,调整开始参数,迭代直到收敛

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。