いいえ。
(私は思った:いいえ、しかし私は間違っていることが証明されています)。
合計とカウントを運ぶことができるので、
sum(i)=500, count(i)=50, => avg:=10
next value = 20
sum=520, count=51 => avg:= 10.19
しかし、stddev はそのように構築することはできません。すべての値の新しい平均に対するデルタを生成し、それらを 2 乗し、その後でのみ N で除算する必要があります。
ただし、問題は、それらの値がどのようなものかということです (数学的な観点から - 物理学には近づかないでください! :) )。通常の状況では、2000 個の要素の後に値が変更されるとは思いません。そうでなければ、そもそも mean と stddev を構築することに疑問があるかもしれません。
また、2000 個の要素の場合、値を高速に計算できるはずです。
おそらく、バッファを使用して、2000 個の値ごとに最後の 2000 個の値の avg と stddev を常に計算できます。これが意味のあるデータかどうかは、あなたが決めなければならないことです。
チャットでの議論がうまく続かない...
マークダウンを詳しく説明していないためです。したがって、私は自分の投稿を使用して、主に thb のコメントに広がっている自分の立場を明確にしていますが、andrew は stddev のスライド計算も信じているようです。
これは、計算を明確にし、従うのを容易にするための広い表です。列は次のとおりです。
- i: 実行中のインデックス。最初に値 1 ~ 3 を計算し、次に値 1 ~ 5 を計算します。
- x(i) は、私が任意に選択したデータです。3,4,5 および 4,6
- 合計は、それらが合計したものにすぎません。興味深いのは、グループの最後の 12 と 22 です。注: 3 つの値と 2 つの値の合計をとるのではなく、最初の 3 と最初の 5 の合計を取ります。
- 平均はわずか 12/3 または 22/5 です。i と合計がわかっている場合、平均はスライドして計算できます。
sum(i+1) = (sum (i)+x(i))/i+1
ここまで異論なし。
- stddev. を計算するには、各値の差を平均に取り、それを 2 乗する必要があります (これにより、符号が失われます。そうしないと、差が無効になり、常に 0 になります)。2 番目の効果は、いくつかの大きな距離が、多くの小さな距離よりも大きな stddev につながることです。距離
(1,1,-1,-1)=> 4*1² = 4.
対照的に: (2,-2)=> 2² + -2² = 4+4 = 8
. 最初の列は 3 つの値、2 番目の列は 5 つの値 (計算に従うため) です。
- 次の列 (最後)² は二乗を行います。
- まとめて
- n-1 で割る
- 平方根を取る
おそらく、これが stddev を計算する有効な方法であることに同意できるでしょう。ここで問題は、完全な行 3 (x(3)=5 を除く) を知っている場合にどのように計算するかです。シートに示されているように、(x( i) i = 1、2、3 の場合。
私の申し立ては失敗しました: できます。
わかりました - あなたの数式を使用しようとしました。
ð² = 1/(N-1) (合計 (x i ²) - 1/N (合計 (x i ))²)
だから私が得る4つの値について
- N=5
- 合計(x i ) = 22
- 合計(x i ²) = 102
数式に挿入:
ð² = 1/(N-1) (Sum (x<sub>i</sub>²) - 1/N (Sum (x<sub>i</sub>))²)
ð² = 1/4 (102 - 1/5 (22²))
ð² = 1/4 (102 - 1/5 (484))
ð² = 1/4 (102 - 96.8)
ð² = 1/4 (5.2)
ð² = 1.3
ð = 1.140
私の結果は 1.14 で、あなたの結果は 1.14です。ショートカットがあります。非常に興味深い - 私はまだ驚いています。