如何最大化直方图的泊松概率给定一个拟合曲线与scipy/numpy?

2024-09-28 23:10:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在统计学上,这个最小二乘法通过从一个以拟合函数为中心的高斯函数中取样,使获得直方图的可能性最大化。你可以很容易地看到:每个项(y-f(x))**2-log(gauss(y|mean=f(x))),和是所有库的高斯似然相乘的对数。在

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


Tags: 数据方法函数numpybin环境对数scipy
1条回答
网友
1楼 · 发布于 2024-09-28 23:10:59

如果我理解正确,你有数据,想看看概率分布是否适合你的数据。在

如果是这样的话-你需要QQ-Plot。如果是这样,那么看看thisStackOverflow问题答案。但是,这是关于正态分布函数的,你需要一个泊松分布函数的代码。你需要做的就是根据Poisson随机函数创建一些随机数据,并根据它测试样本。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()

相关问题 更多 >