检测零膨胀和过度分散计数数据中的异常值

Posted

技术标签:

【中文标题】检测零膨胀和过度分散计数数据中的异常值【英文标题】:Detecting outliers in zero inflated and overdispersed count data 【发布时间】:2013-04-10 13:08:50 【问题描述】:

我要提前感谢您考虑我的问题。

我天真地认为这是一个相当直截了当的问题,它涉及对许多不同的计数数据集进行异常值检测。具体来说,我想确定一系列计数数据中的一个或多个值相对于分布中的其余计数是否高于或低于预期。

令人困惑的因素是,我需要对 3,500 个分布执行此操作,其中一些可能适合零膨胀过度分散泊松,而其他可能最适合负二项式或 ZINB,而还有一些可能是正态分布。出于这个原因,简单的 Z 分数或分布图不适用于大部分数据集。这是我要检测异常值的计数数据示例。

counts1=[1 1 1 0 2 1 1 0 0 1 1 1 1 1 0 0 0 0 1 2 1 1 2 1 1 1 1 0 0 1 0 1 1 1 1 0 0 0 0 0 1 2 1 1 1 1 1 1 0 1 1 2 0 0 0 1 0 1 2 1 1 0 2 1 1 1 0 0 1 0 0 0 2 0 1 1 0 2 1 0 1 1 0 0 2 1 0 1 1 1 1 2 0 3]

counts2=[0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0]

counts3=[14 13 14 14 14 14 13 14 14 14 14 14 15 14 14 14 14 14 14 15 14 13 14 14 15 12 13 17 13 14 14 14 14 15 14 14 13 14 13 14 14 14 14 13 14 14 14 15 15 14 14 14 14 14 15 14 1414 14 15 14 14 14 14 14 14 14 14 14 14 14 14 13 16]

counts4=[0 3 1.......]

等到counts3500。

最初我认为我需要在 Python 或 R 中编写一个循环,将一组模型应用于每个分布,并根据 AIC 或其他(也许是 R 中的 fitdistrplus?)选择最佳拟合模型。然后我可以问给定分布的极端情况是什么(落在尾部的计数,例如“4”的计数是否会成为上述 counts1 分布中的异常值?)。但是,我不确定这是一个有效的策略,我想到可能有一种简单的方法来确定我不知道的计数数据中的异常值。考虑到我想要查看的分布数量,我进行了广泛的搜索,但没有发现任何适合我的问题的东西。

我的最终目标是使用统计上最合适的方法来检测每个计数分布的计数显着增加或减少。

再次感谢您的宝贵时间。

【问题讨论】:

这可能是一个stats.stackexchange.com 问题... 我同意,但令人惊讶的是,stats.stackexchange 上缺少有关计数数据的信息,而且我经常发现需要编程解决方案的 stats(或其他)问题(使用我使用的语言,例如 R 或python)通常由精明的程序员(在 R 或 python 中工作)更好地解决。我对此可能是错的,但是这两个地方似乎都没有发布好的解决方案,所以我想我会从一个可以一举提供统计解决方案和编程解决方案的论坛开始。谢谢 【参考方案1】:

outliers 包为这种类型的测试提供了很好的工具。

library(outliers)

x <- c(rep(c(0,1),1000),3)
chisq.test.out(x)

    chi-squared test for outlier

data:  x
X-squared = 24.6668, p-value = 6.815e-07
alternative hypothesis: highest value 3 is an outlier

> system.time(rep(chisq.out.test(x),3500))
   user  system elapsed 
  0.004   0.000   0.002 

【讨论】:

谢谢,但如果我没记错的话,这个包中的测试都假设是正常的,这就是问题所在。我对使用 ZIP 分布或 ZINB 等检测异常值更感兴趣。谢谢 x^2 是非参数的。因此,功能较弱但仍被认为是强大的。我不经常使用 ZIP 或 ZINB,所以建议你在 CV 上询问。

以上是关于检测零膨胀和过度分散计数数据中的异常值的主要内容,如果未能解决你的问题,请参考以下文章

R异常数据检测及处理方法

如何检测业务数据中的异常

大数据科学家需要掌握的几种异常值检测方法

如何使用 SVM 分类器检测百分比变化中的异常值?

如何发现数据中的异常值?对异常值是怎么处理的?

对于异常值的检测