Richtige Gleichung für die gewichtete unverzerrte Probenkovarianz

9

Ich suche nach der richtigen Gleichung, um die gewichtete unverzerrte Stichproben-Kovarianz zu berechnen. Internetquellen sind zu diesem Thema ziemlich selten und verwenden alle unterschiedliche Gleichungen.

Die wahrscheinlichste Gleichung, die ich gefunden habe, ist folgende:

qjk=i=1Nwi(i=1Nwi)2i=1Nwi2i=1Nwi(xijx¯j)(xikx¯k).

Von: https://en.wikipedia.org/wiki/Sample_mean_and_sample_covariance#Weighted_samples

Natürlich müssen Sie vorher den gewichteten (unverzerrten) Stichprobenmittelwert berechnen.

Ich habe jedoch mehrere andere Formeln gefunden wie:

qjk=1i=1Nwi)1i=1Nwi(xijx¯j)(xikx¯k).

Oder ich habe sogar einige Quellcodes und wissenschaftliche Arbeiten gesehen, die nur die Standard-Kovarianzformel verwenden, aber den gewichteten Stichprobenmittelwert anstelle des Stichprobenmittelwerts verwenden ...

Kann mir jemand helfen und etwas Licht ins Dunkel bringen?

/ EDIT: Meine Gewichte sind einfach die Anzahl der Beobachtungen für eine Stichprobe im Datensatz, also weight.sum () = n

gaborous
quelle
1
Welche Arten von Gewichten verwenden Sie? Gewichte können je nach Anwendung unterschiedliche Bedeutungen haben, und die richtige Antwort hängt von ihrer Bedeutung ab. Zum Beispiel können sie eine Abkürzung für Häufigkeiten sein (eine Beobachtung hat ein Gewicht von im Datensatz, um das fache Auftreten in den Daten widerzuspiegeln ), oder sie können eine Abkürzung für Wahrscheinlichkeiten sein, in einer Stichprobe zu sein (für gewichtete Zufallsstichproben, wie z geschichtete oder hierarchische Stichproben). fff
whuber
@whuber: Meine Gewichte sind einfach die Anzahl der Beobachtungen für eine Probe im Datensatz und somit: Summe (Gewichte) = n
gaborous
1
Dann wird Ihre Frage an vielen Stellen hier beantwortet (obwohl dies möglicherweise nicht sofort ersichtlich ist), einschließlich stats.stackexchange.com/questions/58986/… (was das Prinzip erklärt) sowie stats.stackexchange.com/questions/6534/ … (Was ich immer noch behaupte, ist falsch, aber Sie können selbst entscheiden).
whuber
@whuber: Danke für Ihre Hilfe, aber der erste Link handelt von der Standardabweichung (Quadratwurzel der Varianz) und nicht von der Kovarianz, und der zweite ist eindeutig falsch (wie Sie gezeigt haben).
gaborous
3
Es gibt keinen Unterschied zwischen Varianz und Kovarianz: Alle Kovarianzen können als (lineare Kombinationen) von Varianzen erhalten werden, und Varianzen sind natürlich nur bestimmte Beispiele für Kovarianzen. (Mathematiker nennen diese Beziehung Polarisation .)
whuber

Antworten:

18

Die Lösung wurde in einem Buch von 1972 gefunden (George R. Price, Ann. Hum. Genet., Lond, S. 485-490, Erweiterung der Kovarianzauswahlmathematik, 1972) .

Verzerrte gewichtete Probenkovarianz:

Σ=1i=1Nwii=1Nwi(xiμ)T(xiμ)

Und die unvoreingenommene gewichtete Probenkovarianz, die durch Anwendung der Bessel-Korrektur gegeben ist:

Σ=1i=1Nwi1i=1Nwi(xiμ)T(xiμ)

Wobei der (unverzerrte) gewichtete Stichprobenmittelwert ist:μ

μ=i=1Nwixii=1Nwi

Wichtiger Hinweis: Dies funktioniert nur, wenn die Gewichte Gewichte vom Typ "Wiederholung" sind, was bedeutet, dass jedes Gewicht die Anzahl der Vorkommen einer Beobachtung darstellt und dass wobeiN i=1Nwi=NN stellen die tatsächliche Stichprobengröße dar (tatsächliche Gesamtzahl der Stichproben unter Berücksichtigung der Gewichte).

Ich habe den Artikel auf Wikipedia aktualisiert, wo Sie auch die Gleichung für die unvoreingenommene gewichtete Stichprobenvarianz finden:

https://en.wikipedia.org/wiki/Weighted_arithmetic_mean#Weighted_sample_covariance

wi(xiμ)(xiμ)

import pandas as pd
import numpy as np
# X is the dataset, as a Pandas' DataFrame
mean = mean = np.ma.average(X, axis=0, weights=weights) # Computing the weighted sample mean (fast, efficient and precise)
mean = pd.Series(mean, index=list(X.keys())) # Convert to a Pandas' Series (it's just aesthetic and more ergonomic, no differenc in computed values)
xm = X-mean # xm = X diff to mean
xm = xm.fillna(0) # fill NaN with 0 (because anyway a variance of 0 is just void, but at least it keeps the other covariance's values computed correctly))
sigma2 = 1./(w.sum()-1) * xm.mul(w, axis=0).T.dot(xm); # Compute the unbiased weighted sample covariance

Habe ein paar Sanity Checks mit einem nicht gewichteten Datensatz und einem gleichwertigen gewichteten Datensatz durchgeführt, und es funktioniert korrekt.

gaborous
quelle
@whuber: nein es ist richtig, aber es hängt davon ab, wem deine "Gewichte" zugeordnet sind. In meinem Fall ist es die Anzahl der Beobachtungen (auch "Wiederholungen" genannt), daher funktioniert diese Gleichung korrekt. In Ihrem Fall mit normalisierten Gewichten oder auch wenn die Gewichte die Varianzen jeder Messung einer Beobachtung sind, die sogenannte "Zuverlässigkeit", funktioniert dies nicht und die andere Gleichung im Wiki sollte verwendet werden (was übrigens nicht der Fall ist) arbeite mit Gewichten vom Typ "Wiederholungen"!).
gaborous
@whuber: Wenn du einen allgemeineren Ansatz hast, würde ich mich freuen, davon zu hören. Ich habe das gesamte Internet und diese Website gecrawlt und keine Gleichung gefunden, die für Gewichte vom Typ Wiederholung funktionieren würde, außer dieser, die ich oben gepostet habe!
gaborous
3
nn/(n1)wi
3
@whuber: Danke für die Erklärung, das habe ich befürchtet (keine einheitliche Gleichung und Verlust des Korrekturfaktors). Ich habe meiner Antwort eine Notiz hinzugefügt, um dies besser zu beschreiben. Ich werde auch Ihre Zeile über den Korrekturfaktor im Wikipedia-Artikel hinzufügen.
gaborous
@whuber Kam über diese alten Threads. Ich frage mich, wie Ihre Aussage, dass "es unmöglich eine universelle Formel geben kann", z. B. zu einer akzeptierten Antwort in diesem Thread passt: stats.stackexchange.com/questions/47325 . Denken Sie, dass die Antwort falsch ist (wenn Sie behaupten, dass es einen unvoreingenommenen Ausdruck für Gewichte gibt)?
Amöbe