我正在寻找对具有特定属性的均值的可靠估计。我有一组要为其计算此统计信息的元素。然后,我一次添加一个新元素,对于每个其他元素,我想重新计算统计信息(也称为在线算法)。我希望此更新计算速度很快,最好是O(1),即不依赖于列表的大小。
通常的平均值具有此属性,可以有效地对其进行更新,但对异常值不具有鲁棒性。均值的典型鲁棒估计量(如四分位数间均值和修剪均值)无法有效更新(因为它们需要维护排序列表)。
对于可以有效计算/更新的可靠统计信息的任何建议,我将不胜感激。
我正在寻找对具有特定属性的均值的可靠估计。我有一组要为其计算此统计信息的元素。然后,我一次添加一个新元素,对于每个其他元素,我想重新计算统计信息(也称为在线算法)。我希望此更新计算速度很快,最好是O(1),即不依赖于列表的大小。
通常的平均值具有此属性,可以有效地对其进行更新,但对异常值不具有鲁棒性。均值的典型鲁棒估计量(如四分位数间均值和修剪均值)无法有效更新(因为它们需要维护排序列表)。
对于可以有效计算/更新的可靠统计信息的任何建议,我将不胜感激。
Answers:
该解决方案实现了@Innuo在对该问题的评论中提出的建议:
您可以从到目前为止看到的所有数据中维护大小为100或1000的统一采样的随机子集。该集合和关联的“围栏”可以在时间中更新。
一旦知道了如何维护该子集,我们就可以选择任何一种我们想要从这样的样本中估计总体平均值的方法。这是一种通用方法,不做任何假设,它将与任何输入流一起使用,且精确度可以使用标准统计采样公式预测。(准确性与样本大小的平方根成反比。)
该算法接受数据样本大小的流作为输入,并输出样本的流,每个样本流表示总体。具体地说,对于,是来自的大小为的简单随机样本(无替换)。
为了做到这一点,就足够了每 -元素的子集有被的索引平等的机会在。这意味着在等于前提是。
在开始时,我们只是收集流,直到存储了元素。那时只有一个可能的样本,因此概率条件很容易满足。
当时,该算法接管。电感假设是一个简单的随机样本对。临时设置。令为统一随机变量(独立于用于构造的任何先前变量)。 如果然后替换的随机选择的元件由。 这就是整个过程!
显然概率在。此外,根据归纳假设,当时,概率在。概率为 =,它将被从移除,因此其保持概率等于
完全根据需要。通过归纳,届时,中所有包含概率在是正确的,很明显有那些夹杂物之间没有特别的关系。证明算法是正确的。
该算法的效率为因为在每个阶段最多计算两个随机数,并且替换值的数组中的一个元素。存储要求为。
该算法的数据结构由样本及其样本的索引组成。最初,我们取并进行 这是用值更新以产生。(参数充当的角色,并且是。索引将由调用方维护。)R
n
sample.size
update <- function(s, x, n, sample.size) {
if (length(s) < sample.size) {
s <- c(s, x)
} else if (runif(1) <= sample.size / n) {
i <- sample.int(length(s), 1)
s[i] <- x
}
return (s)
}
为了说明和测试这一点,我将使用平均值的通常(非稳健)估计量,并将从估计平均值与的实际平均值进行比较每一步看到的累积数据集)。我选择了一个比较困难的输入流,该输入流的变化非常平稳,但会定期发生剧烈的跳跃。的样本量非常小,使我们能够看到这些图中的样本波动。
n <- 10^3
x <- sapply(1:(7*n), function(t) cos(pi*t/n) + 2*floor((1+t)/n))
n.sample <- 50
s <- x[1:(n.sample-1)]
online <- sapply(n.sample:length(x), function(i) {
s <<- update(s, x[i], i, n.sample)
summary(s)})
actual <- sapply(n.sample:length(x), function(i) summary(x[1:i]))
在这一点上,online
是通过保持此运行样本的值而产生的均值估计序列,而在每个时刻都是从所有可用数据产生的均值估计序列。该图显示了数据(灰色),(黑色)和该采样过程的两个独立应用程序(彩色)。该协议在预期的采样误差之内:actual
actual
plot(x, pch=".", col="Gray")
lines(1:dim(actual)[2], actual["Mean", ])
lines(1:dim(online)[2], online["Mean", ], col="Red")
有关均值的可靠估算器,请在我们的网站上搜索 离群值及相关条款。值得考虑的可能性包括Winsorized均值和M估计量。
summary
为健壮的变体来完成。
您可能会考虑将您的问题与递归控制图相关联。这样的控制图将评估是否有新观测值在控制中。如果是这样,则此观察值将包括在平均值和方差的新估计中(确定控制极限所必需)。
可以在此处找到有关健壮,递归,单变量控制图的一些背景知识。有关质量控制和控制图的经典文字之一似乎可以在此处在线获得。
凭直觉, 和方差 作为输入,您可以确定当时是否有新观测 通过多种方法是一个异常值。一种是宣布 离群值,如果超出一定数量的标准差 (给定 ,但是如果数据不符合某些分布假设,则可能会出现问题。如果您想走这条路,那么假设您已确定新点是否不是异常值,并希望将其包括在您的平均估计中,而没有特殊的遗忘率。然后,您做不到:
同样,您将需要递归更新方差:
但是,您可能想尝试一些更常规的控制图。其他控制图对数据的分配更稳定,并且仍然可以处理非平稳性(例如建议您将EWMA或CUSUM逐步提高(有关图表及其控制限制的更多详细信息,请参见上面链接的教科书)。这些方法通常将不如鲁棒性强的计算密集型,因为它们具有只需将单个新观测值与从非异常观测值获得的信息进行比较的优势。您可以完善对长期过程的估计 和 如果需要,可以使用上面给出的更新公式在这些方法的控制极限计算中使用。
对于像EWMA这样的图表,它会遗忘旧的观察结果,而对新的观察结果给予更多的权重,如果您认为自己的数据是固定的(意味着生成分布的参数不变),则无需成倍地忘记旧的观察结果。您可以相应地设置遗忘因子。但是,如果您认为这不是平稳性,则需要为遗忘因素选择一个合适的值(有关方法,请再次参见教科书)。
我还应该提到,在开始在线监视和添加新观测值之前,您需要获取以下信息的估算值: 和 (基于训练数据集的初始参数值)不受异常值的影响。如果您怀疑训练数据中存在异常值,则可以支付使用可靠方法估算它们的一次性费用。
我认为遵循这些思路的方法将导致针对您的问题的最快更新。