協方差矩陣是用來衡量一組隨機變數之間的線性關係的矩陣。我們都知道,對於$n$個隨機變數$X_1,X_2,...,X_n$,總體協方差矩陣定義為:
$ \left[ \begin{matrix} D(X_1)&Cov(X_1,X_2)&\dots&Cov(X_1,X_n)\\ Cov(X_2,X_1)&D(X_2)&\dots&Cov(X_2,X_n)\\ & &\vdots& \\ Cov(X_n,X_1)&Cov(X_n,X_2)&\dots&D(X_n)\\ \end{matrix} \right] $
其中
$ \begin{aligned} &D (X_i) = E(X_i^2)-E(X_i)^2\\ &Cov(X_i,X_j) = E(X_iX_j)-E(X_i)E(X_j) \end{aligned} $
但是對於給定樣本,怎麼算樣本協方差矩陣呢?
假設我們對以上$n$個隨機變數同時進行獨立抽樣$m$次,定義第$j$次抽樣獲得的$n$個樣本值為$x_1^j,x_2^j,...,x_n^j$。我們知道樣本對總體方差的無偏估計為:
$ \begin{gather} \begin{aligned} &\hat{\sigma}_i^2 = \frac{1}{m-1}\sum\limits_{j=1}^m(x_i^j-\overline {x_i})^2\\ &\overline {x_i} = \frac{1}{m}\sum\limits_{j=1}^mx_i^j \end{aligned}\label{}\end{gather} $
樣本對總體協方差的無偏估計也是類似的:
$ \begin{gather} \begin{aligned} &\hat{Cov}(x_i,x_j) = \frac{1}{m-1}\sum\limits_{k=1}^m(x_i^k-\overline {x_i})(x_j^k-\overline {x_j}) \\ \end{aligned}\label{} \end{gather} $
所以樣本協方差矩陣就是由$(1),(2)$兩個估計量組成的。根據定義,樣本協方差矩陣是能計算了,但是這樣一個一個算的話時間複雜度是很高的。下面記錄直接對矩陣進行的樣本協方差矩陣的計算。
樣本協方差矩陣的計算
對於$n$個隨機變數$X_1,X_2,...,X_n$,同時進行$m$次獨立抽樣,將獲得的樣本值排列為矩陣:
$ A = \left[ \begin{matrix} x_1^1&x_2^1&\dots&x_n^1\\ x_1^2&x_2^2&\dots&x_n^2\\ & &\vdots& \\ x_1^m&x_2^m&\dots&x_n^m\\ \end{matrix}\right] $
其中每行為某次抽樣獲得的$n$個隨機變數的樣本值,每列為某個隨機變數在$m$次抽樣種獲得的樣本值。
首先計算所有隨機變數的均值,獲得向量:
$ \begin{aligned} \mu = \frac{1}{m}\sum\limits_{i=1}^mA_{i:} \end{aligned} $
然後對$A$和$\mu$做差(向量廣播到矩陣後做差),獲得所有樣本減去均值後的矩陣
$ B= \left[ \begin{matrix} x_1^1 - \overline{x_1}&x_2^1 - \overline{x_2}&\dots&x_n^1- \overline{x_n}\\ x_1^2 - \overline{x_1}&x_2^2 - \overline{x_2}&\dots&x_n^2- \overline{x_n}\\ & &\vdots& \\ x_1^m - \overline{x_1}&x_2^m - \overline{x_2}&\dots&x_n^m- \overline{x_n}\\ \end{matrix}\right] $
最後計算$B^TB$再除以$m-1$獲得協方差矩陣。為了便於理解理解,下面列出$B^TB$:
$ B^TB= \left[ \begin{matrix} \left[ \begin{matrix} x_1^1- \overline{x_1}\\x_2^1- \overline{x_2}\\\vdots\\x_n^1- \overline{x_n} \end{matrix} \right] \left[ \begin{matrix} x_1^2- \overline{x_1}\\x_2^2- \overline{x_2}\\\vdots\\x_n^2- \overline{x_n} \end{matrix} \right] \dots \left[ \begin{matrix} x_1^m- \overline{x_1}\\x_2^m- \overline{x_2}\\\vdots\\x_n^m- \overline{x_n} \end{matrix} \right] \end{matrix}\right] \left[ \begin{matrix} \left[x_1^1 - \overline{x_1}\right.&x_2^1 - \overline{x_2}&\dots&\left.x_n^1- \overline{x_n}\right]\\ \left[x_1^2 - \overline{x_1}\right.&x_2^2 - \overline{x_2}&\dots&\left.x_n^2- \overline{x_n}\right]\\ & &\vdots& \\ \left[x_1^m - \overline{x_1}\right.&x_2^m - \overline{x_2}&\dots&\left.x_n^m- \overline{x_n}\right]\\ \end{matrix}\right] $
矩陣內部的括號表示某次抽樣。以上這些操作用Python的numpy庫都是很容易實現的。