3

我在回答这个问题时看到了这个算法。

这是否正确计算标准偏差?有人可以告诉我为什么这在数学上有效吗?最好从这个公式中恢复:

在此处输入图像描述

public class Statistics {

    private int n;
    private double sum;
    private double sumsq;

    public void reset() {
        this.n = 0;
        this.sum = 0.0;
        this.sumsq = 0.0;
    }

    public synchronized void addValue(double x) {
        ++this.n;
        this.sum += x;
        this.sumsq += x*x;
    }

    public synchronized double calculateMean() {
        double mean = 0.0;
        if (this.n > 0) {
            mean = this.sum/this.n;
        }
        return mean;
    }

    public synchronized double calculateStandardDeviation() {
        double deviation = 0.0;
        if (this.n > 1) {
            deviation = Math.sqrt((this.sumsq - this.sum*this.sum/this.n)/(this.n-1));
        }
        return deviation;
    }
}
4

2 回答 2

2

在我链接到的部分的开头有一个关于维基百科的证明。

在此处输入图像描述

顺便说一句,我记得从某个地方计算这种方式会产生更多的错误。如您所见this.sumsq,可以变得巨大。而计算正常方式总是具有较小的中间值。

无论如何,我确实经常使用这种在线计算,因为大多数时候错误并不重要。

于 2013-06-02T00:19:11.947 回答
0

我相信人口标准差会在该公式中用 N-1 代替 N,因为在给出平均值时,自由度会减少一个。我不是统计学家,所以我没有证据。

该公式是正确的 - 标准偏差是平均方差的平方根。

于 2013-06-02T03:11:51.517 回答