测试工作日内事件发生的频率是否一致

机器算法验证 时间序列 统计学意义 计数数据
2022-04-05 16:44:21

我试图弄清楚是否可以进行计算以显示您有足够的数据来对数据集中的趋势得出结论。

我对一类设备进行了观察,它似乎只在特定日期抛出错误代码,比其他日子更频繁。这些事件是独立的(即,当一个单元抛出其他单元没有的代码时)。这个错误代码很少发生——几年来我总共只观察到了 18 次。这是细分:

Monday3Tuesday2Wednesday1Thursday2Friday1Saturday2Sunday6

我的假设是错误代码是由单元中的设计缺陷引起的,该缺陷会导致罕见的故障。然而,从表面上看,星期天和故障之间似乎有很强的相关性,尽管星期天没有发生任何独特的事情——就设备而言,它就像其他任何一天一样。

我认为我们只是没有足够多次地观察到这个错误。是否可以进行计算以指示您何时收集了足够的数据?

如果这个错误发生更多次,我敢打赌这种情况会发生。

2个回答

使用的测试将确定如何评估需要多少数据。但是,标准测试,例如χ2,似乎是劣等或不合适的,原因有两个:

  1. 另一种假设比仅仅缺乏独立性更具体:它专注于某一天的高计数。

  2. 更重要的是,该假设受到数据本身的启发。

让我们依次检查这些,然后得出结论。

标准测试可能缺乏力量

作为参考,这里是独立性的标准测试:

x <- c(3,2,1,2,1,2,6)                            # The data
chisq.test(x, simulate.p.value=TRUE, B=9999)

X 平方 = 7.2941,df = NA,p 值 = 0.3263

(的 p 值0.33是通过模拟计算的,因为χ2对测试统计量分布的近似开始以如此小的计数分解。)

如果 - 在看到数据之前 - 假设周末可能会引发更多错误,那么将周六+周日的总数与周一至周五的总数进行比较会更有力,而不是使用χ2统计。虽然我们可以对这个特殊的测试进行全面分析(并获得分析结果),但仅执行快速模拟是最简单和更灵活的。(以下是R代码100,000迭代;执行时间不到一秒钟。)

n.iter <- 1e5                                    # Number of iterations
set.seed(17)                                     # Start a reproducible simulation
n <- sum(x)                                      # Sum of all data
sim <- rmultinom(n.iter, n, rep(1, length(x)))   # The simulated data, in columns
x.satsun <- sum(x[6:7])                          # The test statistic
sim.satsun <- colSums(sim[6:7, ])                # The simulation distribution
cat(mean(c(sim.satsun >= x.satsun, 1)))          # Estimated p-value

0.08357916

最后一行显示的输出是该测试的 p 值。它比χ2先前计算的 p 值。任何需要 90% 置信度的人都会认为这个结果很重要,而很少有人会考虑χ2p 值显着。这是检测差异的更大能力的证据。

更大的功效很重要:它会导致样本量小得多。但由于下一节的结论,我不会发展这个想法。

数据生成的假设给出了错误的信心

更严重的问题是,假设是受数据启发的。我们真正需要测试的是:

如果事件和星期几之间没有关联,那么分析师“从表面上看”观察到不寻常模式的可能性有多大?

虽然这不是明确的答案,因为我们无法对分析师的思维过程进行建模,但我们仍然可以通过考虑一些现实的可能性来取得进展。老实说,我们必须考虑实际出现的模式以外的模式。 例如,如果星期三有 8 个事件,而其他任何一天不超过 3 个,那么很可能会注意到这种模式(导致假设星期三在某种程度上会导致错误)。

我认为任何细心的、感兴趣的分析师可能会注意到的其他模式将包括所有明显的数据集群,包括:

  • 计数高的任何一天。

  • 任意两个相邻的高计数日。

  • 具有高计数的任何相邻日期。

“相邻”当然是循环意义上的意思:星期日与星期一相邻,即使这些日子在数据列表中相距甚远。其他模式也是可能的,例如具有高计数的两天。我不会尝试详尽的清单;这三种模式足以说明这一点。

评估一个完全随机的数据集在这个意义上引起注意的可能性是有用的。我们可以通过模拟许多随机数据集并计算任何看起来至少与这些标准中的实际数据一样不寻常的数据来评估这种机会。 由于我们已经有了模拟,因此分析只需几秒钟的工作:

stat <- function(y) {
  y.2 <- c(y[-1], y[1]) + y         # Totals of adjacent days
  y.3 <- y.2 + c(y[-(1:2)], y[1:2]) # Totals of 3-day groups
  c(max(y), max(y.2), max(y.3))     # Largest values for 1, 2, 3 days
}
sim.stat <- apply(sim, 2, stat)
x.stat <- stat(x)
extreme <- colSums(sim.stat >= x.stat) >= 1
cat(p.value <- mean(c(extreme, 1)))

0.3889561

这个结果比我们以前看到的更现实的情况评估。这表明几乎没有客观证据表明事件与星期几有关。

结论

那么,最好的解决方案可能是得出结论,可能没有任何不寻常的事情发生。 继续监视事件,但不要担心需要多少时间才能产生“显着”结果。

在我看来,您想检验无论一周中的哪一天都会发生错误的零假设。要对此进行测试,您可以执行卡方检验,将一周中每一天的实际观察到的错误数与原假设下的预期数进行比较。每天的预期数字是观察到的错误总数 (17) 除以 7。