python - 可能性适合使用 scipy.stats 和 iminuit
问题描述
我需要用似然法拟合一些实验数据,并生成一些随机数据来检查该技术。我对(v 2.7.0)有一些经验,iminuit
看起来scipy.stats
有许多应该有用的现有发行版,提供 pdf/cds 和随机变量(我使用 scipy 1.5.2)。通常,我需要现有分布的组合,例如平坦分布、指数分布和三个高斯分布,全部截断。到目前为止,我正在做的是:
创建
truncFEGGG_gen
,一个子类scipy.stats.rv_continuous
(有 13 个参数,包括边缘,因为我觉得loc
很scale
混乱),覆盖_argcheck
,_get_support
,_pdf
,_cdf
和_rvs
, 和truncFEGGG = truncFEGGG_gen
然后我定义我的开始参数:数据
pars = {'nu': 6758, 'a': 0.1, 'b': 3.6, 'c': -87.5, ...}
中的总计数在哪里nu
,其他参数是 cdf 的那些我定义了
iminuit
扩展分箱似然拟合的实例,并将分布的累积计数传递给它:
m = Minuit(ExtendedBinnedNLL(binnedData, binEdges,
lambda x, nu, a, b, c, ...: nu * td.truncFEGGG.cdf(x, a, b, c, ...)),
**pars)
这最后一步是目前给我带来麻烦的一步;因为我需要使用几种不同的模型,所以我lambda
每次都需要编写一个不同的函数(一个容易出错的过程),如果我可以scipy.stats
一劳永逸地将累积计数添加到所有分布中,那就容易多了通过该功能:truncFEGGG.cntsCumul(x, nu, a, b, c, d...)
. 这似乎不可行(向 scipy.stats.rv_continuous 添加方法,rv_frozen 存在问题),所以我想知道其他人将如何解决这个问题。有什么建议么?
- 之后,我运行最小化器,使用开始参数,迭代直到事情收敛
解决方案
推荐阅读
- html - Django 不从静态文件夹提供 CSS 代码
- javascript - 一种防止在 puppeteer 实例中打开开发工具的方法
- php - Left Join Doctrine 查询生成器
- javascript - 在 angularjs 中使用 $event
- api - 迁移 - 以零停机时间更改 DNS 中记录的 IP
- javascript - 不使用常用方法在 JS 中重新排序字符串
- ms-access - 从表单 2 添加新记录时,Access 2007 表单 1 不会刷新
- regex - Javascript RegExp 非捕获组:您真的需要非捕获组 (?:) 用于日期格式 (mm/yy) 吗?一般组()是否有效?
- set - 如何在 Openshift 中删除 podAntiAfinity
- vba - 打开工作簿时宏引用不正确的工作簿