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

标签 python r model-fitting

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

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

混淆因素是我需要对 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 分布中的异常值?)。然而,我不确定这是一个有效的策略,而且我想到可能有一种简单的方法来确定我不知道的计数数据中的异常值。考虑到我想查看的发行版数量,我进行了广泛的搜索,但没有发现任何适合我的问题的东西。

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

再次感谢您的宝贵时间。

最佳答案

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 

关于python - 检测零膨胀和过度分散的计数数据中的异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16065671/

相关文章:

python - 在字典中搜索值

python - 如何根据 Django 中的两个字段对查询集进行排序?

python - 在 Python 中类型转换为 'int' 生成错误结果

python - 获取包含连字符 - Eve 的元素

r - 将机场代码转换为完整的机场名称

python - 使用 Python 和 lmfit 拟合复杂模型?

r - 在 r 中预测 3 个相关结果不起作用

r - R中同一数据框中的多列相减

algorithm - 找到两个向量之间的最佳/比例/偏移

python - 为什么 curve_fit 对于 beta 函数拟合不收敛?