J'ai trouvé la solution dans un livre de 1972 (George R. Price, Ann. Hum. Genet., Lond, pp485-490, Extension of covariance selection mathématiques, 1972) .
Covariance de l'échantillon pondéré biaisé:
Σ =1∑Ni = 1wje∑Ni = 1wje(Xje-μ∗)T(Xje-μ∗)
Et la covariance non pondérée de l'échantillon donnée en appliquant la correction de Bessel:
Σ =1∑Ni = 1wje- 1∑Ni = 1wje(Xje-μ∗)T(Xje-μ∗)
Où μ∗ est la moyenne de l'échantillon pondéré (sans biais):
μ∗=∑Ni = 1wjeXje∑Ni = 1wje
Remarque importante: cela ne fonctionne que si les poids sont des poids de type "répétition", ce qui signifie que chaque poids représente le nombre d'occurrences d'une observation, et que ∑Ni = 1wje=N∗ où N∗ représentent la taille réelle de l'échantillon (nombre total réel d'échantillons, en tenant compte des poids).
J'ai mis à jour l'article sur Wikipedia, où vous trouverez également l'équation de la variance d'échantillon pondérée non biaisée:
https://en.wikipedia.org/wiki/Weighted_arithmetic_mean#Weighted_sample_covariance
Note pratique: je vous conseille de multiplier d'abord colonne par colonne wje et (Xje-μ∗) puis faire une multiplication matricielle avec (Xje-μ∗)pour envelopper les choses et effectuer automatiquement la sommation. Par exemple, en code Python Pandas / Numpy:
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
A fait quelques vérifications d'intégrité en utilisant un ensemble de données non pondéré et un ensemble de données pondéré équivalent, et cela fonctionne correctement.