Die Varianz kann als proportional zur quadratischen Differenz zwischen jedem Wert und dem Mittelwert ausgedrückt werden oder (wie viele Threads hier in stats.SE dokumentiert sind, wie diese Antwort, die ich auf eine andere Frage geschrieben habe) alternativ als proportional zum Quadrat ausgedrückt werden paarweiser Unterschied zwischen jeder Probe.
Wir wissen also:
Var(x)=1n⋅∑i(Xi−X¯¯¯¯)2=12n2⋅∑i,j(Xi−Xj)2
Angenommen, Sie fügen ein weiteres Beispiel hinzu, das als letzter Index indiziert ist, . Ihre vorherige Abweichung wäre:k
Varold(x)=12(n−1)2⋅∑i<k,j<k(Xi−Xj)2
Ihre neue Varianz ist
Varnew(x)=12n2⋅∑i,j(Xi−Xj)2=12n2⋅(∑i<k,j<k(Xi−Xj)2+∑j<k(Xk−Xj)2+∑i<k(Xi−Xk)2)
Aber
∑j<k(Xk−Xj)2=∑i<k(Xi−Xk)2∑i<k,j<k(Xi−Xj)2=2(n−1)2⋅Varold(x)
Damit
Varnew(x)=(n−1n)2Varold(x)+1n2∑j<k(Xk−Xj)2
Wie @ MarkL.Stone in den Kommentaren sagte, ist dies immer noch nicht effizient, da wir jedes behalten müssen . Erweitern wir also die Formel, um zu etwas Traktablerem zu gelangen.Xi
1n2∑j<k(Xk−Xj)2=1n2∑j<k(X2k−2⋅Xj⋅Xk+X2j)=1n2(∑j<kX2k−2⋅Xk⋅∑j<kXj+∑j<kX2j)=1n2(k⋅X2k−2⋅Xk⋅(k−1)⋅Xold¯¯¯¯¯¯¯¯¯+(k−1)⋅X2old¯¯¯¯¯¯¯¯¯)
Weil
∑j<kXj=(k−1)⋅Xold¯¯¯¯¯¯¯¯¯∑j<kX2j=(k−1)⋅X2old¯¯¯¯¯¯¯¯¯
Die endgültige Form ist dann
Varnew(x)=(n−1n)2Varold(x)+1n2(k⋅X2k−2⋅Xk⋅(k−1)⋅Xold¯¯¯¯¯¯¯¯¯+(k−1)⋅X2old¯¯¯¯¯¯¯¯¯)
Sie können diese Formel verwenden, um die Varianz in Bezug auf den Speicher effektiv zu aktualisieren. Sie können es auch ergänzen, um Stapel anstelle von Einzelpunktaktualisierungen zu verwenden.
Grundsätzlich müssen Sie den Durchschnitt, den Durchschnitt der quadratischen Stichproben und die Varianz bei jeder Iteration speichern und zum Aktualisieren der Varianzformel verwenden.
Des Weiteren
X2old¯¯¯¯¯¯¯¯¯=Varold(x)+(Xold¯¯¯¯¯¯¯¯¯)2∴Varnew(x)=(n−1n)2Varold(x)+1n2(k⋅X2k−2⋅Xk⋅(k−1)⋅Xold¯¯¯¯¯¯¯¯¯+(k−1)⋅(Varold(x)+(Xold¯¯¯¯¯¯¯¯¯)2))
Dies reduziert die Anzahl der Mengen, die gelagert werden müssen, auf 2.