【问题标题】:How can I maximize the Poissonian likelihood of a histogram given a fit curve with scipy/numpy?给定带有 scipy/numpy 的拟合曲线,如何最大化直方图的泊松似然?
【发布时间】:2014-09-28 09:44:01
【问题描述】:

我在 python/numpy/scipy 环境中有需要适合概率密度函数的数据。一种方法是创建数据的直方图,然后将曲线拟合到该直方图。 scipy.optimize.leastsq 方法通过最小化 (y - f(x))**2 的总和来实现这一点,在这种情况下,(x,y) 将是直方图的 bin 中心和 bin 内容。

在统计术语中,此最小二乘法通过从以该 bin 位置处的拟合函数为中心的高斯采样每个 bin 计数来最大化获得该直方图的可能性。您可以很容易地看到:每一项 (y-f(x))**2-log(gauss(y|mean=f(x))),总和是所有 bin 的高斯似然相乘的对数。

但这并不总是准确的:对于我正在查看的统计数据类型,每个 bin 计数都是泊松过程的结果,所以我想最小化(所有 bin 的乘积对数(x ,y) 的)poisson(y|mean=f(x))。对于较大的 f(x) 值,泊松分布非常接近高斯分布,但如果我的直方图没有那么好的统计数据,则差异将是相关的并影响拟合。

【问题讨论】:

  • 不是我的领域,但你能重新表述问题以便scipy.optimize.fsolve 解决吗?

标签: python numpy statistics curve-fitting


【解决方案1】:

如果我理解正确,您有数据并想查看某个概率分布是否适合您的数据。

好吧,如果是这样的话 - 你需要QQ-Plot。如果是这种情况,请查看this StackOverflow 问答。但是,这是关于正态分布函数的,您需要泊松分布函数的代码。您需要做的就是根据泊松随机函数创建一些随机数据并针对它测试您的样本。 Here你可以找到泊松分布函数的QQ图示例。这是该网站的代码:

 #! /usr/bin/env python

  from pylab import *

  p = poisson(lam=10, size=4000)
  m = mean(p)
  s = std(p)
  n = normal(loc=m, scale=s, size=p.shape)

  a = m-4*s
  b = m+4*s

  figure()
  plot(sort(n), sort(p), 'o', color='0.85')
  plot([a,b], [a,b], 'k-')
  xlim(a,b)
  ylim(a,b)
  xlabel('Normal Distribution')
  ylabel('Poisson Distribution with $\lambda=10$')
  grid(True)
  savefig('qq.pdf')
  show()

【讨论】:

    猜你喜欢
    • 2014-11-07
    • 1970-01-01
    • 2021-11-01
    • 2019-05-23
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多