1

boost accumulators 的 error_of<mean> 特性的文档指出,它通过以下公式计算平均值的误差:

sqrt(方差/(计数 - 1)),

其中方差通过以下方式计算:

方差 = 1/count sum[ (x_i - x_m)^2 ] 其中总和超过样本的所有值 x_i i=1..count,x_m 是平均值。这给出了使用的公式(对于错误值):

sqrt(1/ (count(count - 1)) sum[ (x_i - x_m)^2 ] ),

维基百科指出,对于标准偏差,使用未校正或校正的样本标准偏差。后者通过以下方式计算:

sqrt(1/(count-1) * sum[ (x_i - x_m)^2] )

这是我通常用来计算平均值误差的方法。那么error_of<mean>的目的是什么?那里计算了哪个错误?

4

2 回答 2

3

Boost.Accumulators 的整体公式确实是正确的,但它的计算方式有点不标准。

首先,样本方差只是平方偏差的平均值

V_sample = sum[ (x_i - x_m)^2] / count
s_sample = sqrt[ V_sample ] 

s_sample是总体标准差的有偏估计sigma。总体标准差的无偏估计量

s_pop = s_sample * sqrt[ count / count - 1 ]

其次,平均值的标准误差是您测量平均值的误差。您可以使用均值的标准误差来构建样本算术均值周围的置信区间作为总体均值的估计量mu

均值的标准误差为总体标准差的无偏估计量除以观测数的平方根的比率

s_mean = s_pop / sqrt[ count ]

Boost.Accumulator 计算s_mean

s_mean = s_sample / sqrt[count - 1]

s_pop但是这两个表达式实际上是等价的,通过直接替换和之间的关系可以很容易地看出s_sample

注意:我认为 Boost.Accumulators 也可以定义这两个版本的标准差。

于 2013-05-30T10:29:26.220 回答
2

我是 Boost.Accumulators 的当前维护者,我写了很多,但不是数学方面的东西。我把所有这些决定都交给了一位与我密切合作的领域专家。我把你的问题问他了。这是我得到的答案:

标准差不是平均值的误差。我们的等式是正确的。

<耸肩> 这不是最有启发性的答案,但也许有帮助?

于 2013-05-21T21:44:03.510 回答