离散数据拟合:负二项式、泊松分布、几何分布

2023-11-22

在 scipy 中,不支持使用数据拟合离散分布。我知道有很多关于这个的话题。

例如,如果我有一个如下所示的数组:

x = [2,3,4,5,6,7,0,1,1,0,1,8,10,9,1,1,1,0,0]

我无法申请这个数组:

from scipy.stats import nbinom
param = nbinom.fit(x)

但我想问您最新的情况,有没有什么方法可以拟合这三个离散分布,然后选择最适合离散数据集的方法?


您可以使用矩量法以适应任何特定的分布。

基本思想:得到经验一阶矩、二阶矩等,然后从这些矩导出分布参数。

因此,在所有这些情况下,我们只需要两个时刻。让我们得到它们:

import pandas as pd
# for other distributions, you'll need to implement PMF
from scipy.stats import nbinom, poisson, geom

x = pd.Series(x)
mean = x.mean()
var = x.var()
likelihoods = {}  # we'll use it later

注意:我使用 pandas 而不是 numpy。那是因为 numpy 的var() and std()不申请贝塞尔修正,而熊猫则这样做。如果您有 100 多个样本,应该不会有太大差异,但对于较小的样本,这可能很重要。

现在,让我们获取这些分布的参数。负二项式有两个参数:p,r。让我们估计它们并计算数据集的可能性:

# From the wikipedia page, we have:
# mean = pr / (1-p)
# var = pr / (1-p)**2
# without wiki, you could use MGF to get moments; too long to explain here
# Solving for p and r, we get:

p = 1 - mean / var  # TODO: check for zero variance and limit p by [0, 1]
r = (1-p) * mean / p

UPD:维基百科和 scipy 使用不同的 p 定义,一种将其视为成功的概率,另一种将其视为失败的概率。因此,为了与 scipy 概念保持一致,请使用:

p = mean / var
r = p * mean / (1-p)

UPD 结束

UPD2:

我建议改用@thilak 的代码日志可能性。它可以避免精度损失,这对于大样本尤其重要。

UPD2 结束

计算可能性:

likelihoods['nbinom'] = x.map(lambda val: nbinom.pmf(val, r, p)).prod()

同样适用于Poisson,只有一个参数:

# from Wikipedia,
# mean = variance = lambda. Nothing to solve here
lambda_ = mean
likelihoods['poisson'] = x.map(lambda val: poisson.pmf(val, lambda_)).prod()

同样适用于几何分布:

# mean = 1 / p  # this form fits the scipy definition
p = 1 / mean

likelihoods['geometric'] = x.map(lambda val: geom.pmf(val, p)).prod()

最后,让我们获得最佳拟合:

best_fit = max(likelihoods, key=lambda x: likelihoods[x])
print("Best fit:", best_fit)
print("Likelihood:", likelihoods[best_fit])

如果您有任何疑问,请告诉我

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

离散数据拟合:负二项式、泊松分布、几何分布 的相关文章

随机推荐

  • 如何在 selenium-webdriver 中获取窗口标题、id 和名称?

    我正在尝试实施以下方法硒网络驱动程序 ruby 获取所有窗口 ID 获取所有窗口标题 获取所有窗口名称 我运行 Selenium IDE 并将脚本导出到 Ruby Test Unit 将其另存为 rb 使用 Aptana Studio 3
  • 为什么 Delphi 说“无法解析单位名称 xxx”?

    我正在使用 Delphi2010 Enterprise Update 4 当我在 IDE 中打开项目并显示主窗体代码时 有2个单位名称用红色下划线表示 xxx http img268 imageshack us img268 6475 un
  • 如何将宽度设置为 50%

    我有一个水平方向的 LinearLayout 和 2 个 ImageView 我想让 ImagesView 填充屏幕宽度的 50 以便在不同尺寸的每部手机或平板电脑上工作 像这样的东西 50 50 迄今为止最好的
  • 从析构函数中调用虚函数

    这样安全吗 class Derived public PublicBase private PrivateBase Derived FunctionCall virtual void FunctionCall PrivateBase Fun
  • C# 问题:如何将 DataGridView 中所做的更改保存回所使用的 DataTable?

    我从 DataSet 获取 DataTable 然后将该 DataTable 绑定到 DataGridView 一旦用户编辑了 DataGridView 上的信息 我如何获取这些更改并将它们放回到使用过的 DataTable 中 然后我可以
  • 为什么 SonarQube 重新打开标记为误报的问题?

    我们的组织刚刚开始使用 SonarQube 我们看到了一些对我们来说似乎很奇怪的东西 我们有一个插件 允许用户将问题标记为 误报 但我们标记为 误报 的任何问题都会在下次 SonarQube 运行时将其状态重置为 打开 对于标记为 无法修复
  • 使用 Python 以编程方式检测 Windows XP 上的系统代理设置

    我开发了一家跨国公司使用的关键应用程序 全球各地办公室的用户都需要能够安装此应用程序 该应用程序实际上是 Excel 的一个插件 我们有一个基于 Setuptools 的 easy install 的自动安装程序 可确保用户每次打开 Exc
  • 将导航控制器与选项卡栏控制器相结合

    正如我在标题中提到的 我想添加Navigation Controller到我的应用程序已经有一个Tab Controller 所以尝试给员工做一些类似的事情page 无论如何 有些事情是错误的 UINavigationController正
  • 将块内的变量分配给块外的变量

    我收到错误 变量不可分配 缺少 block 类型说明符 在线上aPerson participant 我怎样才能确保该块可以访问aPerson变量和aPerson变量可以返回吗 Person aPerson nil participants
  • .NET 4.0 和 .NET 4.7.2 标头选择之间 DataGridView 的重大变化

    我最近迁移了一个项目 NET 4 to NET 4 7 2其中引入了 WinForms DataGridView 标头的更改 Pre Migration looks like this As you can see the Header o
  • 在 Spring MVC 中将文件路径作为 @PathVariable 发送

    有一个任务将文件路径传递为 PathVariable在 Spring MVC 到 REST 服务中GET要求 我们可以轻松地做到这一点POST发送 JSON 格式的文件路径字符串 我们可以怎样做GET请求和 Controller像这样 Re
  • iOS应用审核流程:应用需要外部硬件(通过WiFi连接)

    我们为客户编写了一个应用程序 通过 Wifi 连接到外部硬件 由我们客户设计的硬件 我的问题是 我们如何提交此供审核 没有硬件 软件就起不到多大作用 需要明确的是 该硬件并不通过电缆直接连接到 iPad 而是仅通过 WiFi 连接 我只是想
  • 解析logstash列表中的json

    我有一个 json 形式的 foo bar 我正在尝试使用logstash 中的json 过滤器来过滤它 但这似乎不起作用 我发现我无法使用logstash中的json过滤器解析列表json 有人可以告诉我这个问题的任何解决方法吗 UPDA
  • 带 bo​​otstrap 的水平按钮切换

    我试图获得一个按钮来水平展开 折叠其他元素 共享按钮 并使用引导框架内联 我在两件事上失败了 该按钮不会展开内联和实际 按钮之后的其他元素 当它向后折叠时 其中的元素会打破行并堆叠在一起 我准备了一把小提琴 http jsfiddle ne
  • SSRS 的性能问题[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 大家好 最近我加入了一家公司 他们给我分配的一项任务是提高现有 SSRS 报告的性能 我
  • 历史记录replaceState不再在Chrome中为本地文件工作

    我正在使用 window history replaceState 更改使用 file C 访问的 HTML 文件的查询字符串 这曾经适用于 Chrome Internet Explorer 和 FireFox 但不再适用于 Chrome
  • 如何从 Java 漂亮地打印 XML?

    我有一个包含 XML 的 Java 字符串 没有换行或缩进 我想将其转换为具有格式良好的 XML 的字符串 我该怎么做呢 String unformattedXml
  • 如何解决DTS_E_OLEDBERROR。在ssis中

    在一个ssis包中由数据流任务组成 包含 OLEDB 源和 OLDB 目标 provider 是 sql 本机客户端 这曾经运行良好 但现在出现错误 如下所示 请告诉我如何解决它 将其更改为ado net 操作系统 windows 7 pr
  • 使用 Python 读取文件并绘制 CDF

    我需要读取带有时间戳 以秒为单位 的长文件 并使用 numpy 或 scipy 绘制 CDF 绘图 我确实尝试过使用 numpy 但似乎输出不是它应该的样子 下面的代码 任何建议表示赞赏 import numpy as np import
  • 离散数据拟合:负二项式、泊松分布、几何分布

    在 scipy 中 不支持使用数据拟合离散分布 我知道有很多关于这个的话题 例如 如果我有一个如下所示的数组 x 2 3 4 5 6 7 0 1 1 0 1 8 10 9 1 1 1 0 0 我无法申请这个数组 from scipy sta