0

我正在尝试预先计算几个随机变量的分布。特别是,这些随机变量是在基因组位置评估的函数的结果,因此每个变量将有大约 10^8 或 10^9 个值。这些功能非常流畅,所以我认为只在每 2/10/100 次评估一次不会损失太多准确性?base 左右,但不管怎样都会有大量的样本。我的计划是为每个函数预先计算分位数表(可能是百分位数),并在我的主程序的执行中引用这些表,以避免在每次运行时都计算这些分布统计信息。

但我真的不明白我怎么能轻松做到这一点:存储、排序和减少 10^9 浮点数的数组实际上并不可行,但我想不出另一种不会丢失关于分配。有没有一种方法可以测量样本分布的分位数,而不需要将整个数据存储在内存中?

4

1 回答 1

2

我同意@katriealex 的评论:询问具有强大统计背景的人。

您可以轻松评估 min/max/mean/std 偏差而无需存储任何大量内存。(注意均值 + 标准偏差:使用 Knuth 的技术:

delta = x - m[n-1]
m[n] = m[n-1] +  1/n * delta
S[n] = S[n-1] + (x[n] - m[n])*delta
mean = m[n]
std dev = sqrt(S[n]/n)

这可以防止您在 std dev 的幼稚计算中遇到浮点上溢/下溢问题,例如取 S1 = x[k] 和 S2 = x[k]^2 的总和并尝试计算 std 偏差 = sqrt (S2/N - S1^2/N^2)。另见维基百科。)

可能还有其他面向流的算法用于计算分布的更高特征矩,但我不知道它们是什么。

或者,您也可以使用具有足够 bin 的直方图技术来表征分布。

于 2010-11-23T23:14:31.220 回答