4

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

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

令人困惑的因素是我需要对 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.......]

依此类推,最多可达 3500 个。

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

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

再次感谢您的宝贵时间。

4

1 回答 1

0

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 
于 2013-04-17T17:38:43.403 回答