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

平均が与えられたときの自由度が1つ少ないため、母標準偏差はその式のNの代わりにN-1になると思います。私は統計学者ではないので、確証はありません。

式は正しいです。標準偏差は平均分散の平方根です。

于 2013-06-02T03:11:51.517 に答える