1972年代の本(George R. Price、Ann。Hum。Genet。、Lond、pp485-490、Extension of covariance selection mathematics、1972)で解決策が見つかりました。
バイアスをかけた加重サンプルの共分散:
Σ=1∑Ni=1wi∑Ni=1wi(xi−μ∗)T(xi−μ∗)
そして、ベッセル補正を適用することによって与えられる不偏加重サンプル共分散:
Σ=1∑Ni=1wi−1∑Ni=1wi(xi−μ∗)T(xi−μ∗)
ここで、は(偏りのない)加重サンプルの平均です。μ∗
μ∗=∑Ni=1wixi∑Ni=1wi
重要な注意:これは、重みが「繰り返し」タイプの重みである場合にのみ機能します。つまり、各重みは1つの観測の発生数を表し、ここで実際のサンプルサイズ(重みを考慮した実際のサンプルの総数)を表します。N ∗∑Ni=1wi=N∗N∗
ウィキペディアの記事を更新しました。ここには、偏りのない重み付けされた標本分散の方程式もあります。
https://en.wikipedia.org/wiki/Weighted_arithmetic_mean#Weighted_sample_covariance
実用的なノート:私は最初の乗算列毎にあなたを助言ととで、その後行列の乗算を行う物事をラップするためにアップし、自動的に合計を実行します。例:Python Pandas / Numpyコード:(x i −wi(X I - μ * )(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
重み付けされていないデータセットと同等の重み付けされたデータセットを使用して、いくつかの健全性チェックを行いました。正しく動作します。