Menemukan solusi dalam buku 1972 (George R. Price, Ann. Hum. Genet., Lond, pp485-490, Perpanjangan matematika pemilihan kovarians, 1972) .
Biovaskuler sampel tertimbang bias:
Σ=1∑Ni=1wi∑Ni=1wi(xi−μ∗)T(xi−μ∗)
Dan kovarians sampel tertimbang yang diberikan dengan menerapkan koreksi Bessel:
Σ=1∑Ni=1wi−1∑Ni=1wi(xi−μ∗)T(xi−μ∗)
Di mana adalah rata-rata sampel tertimbang (tidak bias):μ∗
μ∗=∑Ni=1wixi∑Ni=1wi
Catatan Penting: ini hanya berfungsi jika bobotnya adalah "ulangi" -berat jenis, yang berarti bahwa setiap bobot mewakili jumlah kemunculan satu pengamatan, dan bahwa mana mewakili ukuran sampel nyata (jumlah total nyata sampel, akuntansi untuk bobot).∑Ni=1wi=N∗N∗
Saya telah memperbarui artikel di Wikipedia, di mana Anda juga akan menemukan persamaan untuk varians sampel tertimbang yang tidak bias:
https://en.wikipedia.org/wiki/Weighted_arithmetic_mean#Weighted_sample_covariance
Catatan praktis: Saya menyarankan Anda untuk terlebih dahulu mengalikan kolom-demi-kolom dengan dan dan kemudian melakukan perkalian matriks dengan untuk membungkus sesuatu dan secara otomatis melakukan penjumlahan. Misalnya dalam Python Pandas / kode Numpy: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
Melakukan beberapa pemeriksaan kewarasan menggunakan dataset non-tertimbang dan dataset tertimbang yang setara, dan berfungsi dengan benar.