データ\(x_1,x_2,\ldots,x_n\)における分散\(V\)は、\(x_1\)~\(x_n\)の平均を\(\bar{x}\)とすると、\(V=\displaystyle \frac{1}{n} \sum_{i=1}^{n} {\left(x_i-\bar{x}\right)}^2\) と定義されるが、\(V=\overline{x^2}-\bar{x}^2\) (=(2乗の平均)-(平均の2乗))として計算することもできる。
それは、以下で証明することができる。
\[
\begin{eqnarray}
V &=& \displaystyle \frac{1}{n} \sum_{i=1}^{n} {\left(x_i-\bar{x}\right)}^2 = \frac{1}{n} \sum_{i=1}^{n} \left( {x_i}^2 – 2x_i\bar{x} + {\bar{x}}^2 \right) \\
&=& \displaystyle \frac{1}{n} \sum_{i=1}^{n} {x_i}^2 – 2\bar{x} \times \displaystyle \frac{1}{n} \sum_{i=1}^{n}x_i + {\bar{x}}^2 \times \displaystyle \frac{1}{n} \sum_{i=1}^{n} 1 \\
&=& \overline{x^2} – 2\bar{x} \times \bar{x} + {\bar{x}}^2 \times \frac{1}{n} \times n = \overline{x^2} – 2{\bar{x}}^2 + {\bar{x}}^2 = \overline{x^2} – {\bar{x}}^2
\end{eqnarray}
\]
なお、\(V=\displaystyle \frac{1}{n} \sum_{i=1}^{n} {\left(x_i-\bar{x}\right)}^2\) を利用した分散の計算は、以下の記事を参照のこと。
また、データ\((x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\)における(標本)共分散\(s_{xy}\)は、\(x_1\)~\(x_n\)の平均を\(\bar{x}\)、\(y_1\)~\(y_n\)の平均を\(\bar{y}\)とすると、 \(s_{xy}=\displaystyle \frac{1}{n}\sum_{i=1}^{n}\left(x_i – \bar{x}\right)\left(y_i – \bar{y}\right) \) と定義されるが、\(s_{xy}=\overline{xy}-\bar{x}\bar{y}\) (=(xyの平均)-(xの平均×yの平均))として計算することもできる。
それは、以下で証明することができる。
\[
\begin{eqnarray}
s_{xy} &=& \displaystyle \frac{1}{n} \sum_{i=1}^{n} \left(x_i – \bar{x}\right)\left(y_i – \bar{y}\right)
= \displaystyle \frac{1}{n} \sum_{i=1}^{n} \left( x_iy_i – \bar{x}y_i – x_i\bar{y} + \bar{x}\bar{y} \right) \\
&=& \displaystyle \frac{1}{n} \sum_{i=1}^{n} x_iy_i – \bar{x} \times \frac{1}{n} \sum_{i=1}^{n}y_i – \bar{y} \times \frac{1}{n} \sum_{i=1}^{n}x_i
+ \bar{x}\bar{y} \times \frac{1}{n} \sum_{i=1}^{n} 1 \\
&=& \overline{xy} – \bar{x}\bar{y} – \bar{y}\bar{x} + \bar{x}\bar{y} \times \frac{1}{n} \times n
= \overline{xy} – 2\bar{x}\bar{y} + \bar{x}\bar{y} = \overline{xy} – \bar{x}\bar{y}
\end{eqnarray}
\]
なお、\(s_{xy}=\displaystyle \frac{1}{n}\sum_{i=1}^{n}\left(x_i – \bar{x}\right)\left(y_i – \bar{y}\right) \) を利用した(標本)共分散の計算は、以下の記事を参照のこと。
\(V=\overline{x^2}-\bar{x}^2\)、\(s_{xy}=\overline{xy}-\bar{x}\bar{y}\) を利用して分散・(標本)共分散の計算を行うと、以下のようになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import numpy as np # 入力データの読み込み input_data = np.array([[33,352], [33,324], [34,338], [34,317], [35,341] ,[35,360], [34,339], [32,329], [28,283], [35,372] ,[33,342], [28,262], [32,328], [33,326], [35,354] ,[30,294], [29,275], [32,336], [34,354], [35,368]]) # x座標、y座標の抜き出し input_data_x = input_data[:, 0] input_data_y = input_data[:, 1] # xの分散、yの分散の計算(Numpyモジュールを利用) input_x_var = np.var(input_data_x) input_y_var = np.var(input_data_y) print("*** Numpyモジュールによる分散の計算 ***") print("xの分散 : " + str(input_x_var)) print("yの分散 : " + str(input_y_var)) print() # xの分散、yの分散の計算(2乗の平均-平均の2乗を利用) input_x_var_2 = np.mean(input_data_x**2) - np.mean(input_data_x)**2 input_y_var_2 = np.mean(input_data_y**2) - np.mean(input_data_y)**2 print("*** 2乗の平均-平均の2乗を利用した分散の計算 ***") print("xの分散 : " + str(input_x_var_2)) print("yの分散 : " + str(input_y_var_2)) print() # 共分散の計算(共分散行列を利用) print("*** 共分散行列を利用した共分散の計算 ***") print("(標本)共分散s_xy : " + str(np.cov(input_data_x, input_data_y, bias=True)[0][1])) print() # 共分散の計算(x*yの平均 - xの平均*yの平均を利用) input_r_xy = 0 input_data_len = input_data_x.size for i in range(input_data_len): input_r_xy += input_data_x[i] * input_data_y[i] input_r_xy = input_r_xy/input_data_len - np.mean(input_data_x) * np.mean(input_data_y) print("*** (x*yの平均-xの平均*yの平均)を利用した共分散の計算 ***") print("(標本)共分散s_xy : " + str(input_r_xy)) |
要点まとめ
- データ\(x_1,x_2,\ldots,x_n\)における分散\(V\)は、\(V=\overline{x^2}-\bar{x}^2\) として計算することもできる。
- データ\((x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\)における(標本)共分散\(s_{xy}\)は、\(s_{xy}=\overline{xy}-\bar{x}\bar{y}\) として計算することもできる。