第5章 線形代数の基礎(2)

行列についての初歩的知識を導入する.最終的には分散共分散行列の理解を目指す.

5.1 行列の基本

m×n個の数a11,a12,,a1n,a21,a22,,a2n,am1,am2,,amnを順番に並べたものをm×n次元行列(matrix)といって, A=[a11a12a1na21a22a2nam1am2amn] と表す.行列は一般的にアルファベットの大文字で表し,その要素(成分)は添え字つきのアルファベットの小文字で表す.ここでは,行列をアルファベットの太字の大文字で表す.行列の横方向の配列が(row)で上から第1行などと数える.縦方向の配列が(columun)で左から第1列などと数える.

社会学などで普通扱うクロスセクショナル・データを行列で表すと,行がケース(回答者)で列が変数を表すことが一般的である.このようなデータ形式を整然データ(tidy data)という (Hadley Wickham & Garrett Grolemund, R for Data Science, https://r4ds.had.co.nz/).

行列はまた A=[a1 a2  an],aj=[a1ja2jamj] というように,列ベクトルを並べた行ベクトルと見なすことができる.逆に,行ベクトルを並べた列ベクトルと見なすこともできる.

行列の行と列を入れ替える操作を転置(transpose)といってATで表す.すわなち, A=[a1 a2  an]=[a11a12a1na21a22a2nam1am2amn],AT=[aT1aT2aTn]=[a11a21am1a12a22am2a1na2namn] である.ここでm×n行列を転置するとn×m行列になり,行数と列数が入れ替わることに注意すること.

5.2 行列の演算

2つのm×n次元行列A=[aij],B=[bij]は,すべてのij番目の要素が等しいとき,つまり, i{1,2,,n},j{1,2,,m},aij=bij のとき,そのときに限り等しいとする.

すべての要素が0である行列を零行列(zero matrix)といって O=[000000000] と表す.とくに行数列数を明示するときはOm×nなどと表す.

行数mと列数nが等しい行列を正方行列(square matrix)という.n×n次元正方行列のなかでも,行列の対角要素aiiが1で非対角要素aij(ij)が0の行列をn×n次元単位行列(identity matrix)と呼ばれ I=[100010001] と表す.とくに次元数を明示するときはInと表す.

2つのm×n次元行列A=[aij],B=[bij]の和は A+B=[a11a12a1na21a22a2nam1am2amn]+[b11b12b1nb21b22b2nbm1bm2bmn]=[a11+b11a12+b12a1n+b1na21+b21a22+b22a2n+b2nam1+bm1am2+bm2amn+bmn] であり,m×n次元行列A=[aij]とスカラーαの積(スカラー倍)は, αA=[αa11αa12αa1nαa21αa22αa2nαam1αam2αamn] である.ここから,2つのm×n次元行列A=[aij],B=[bij]の差は AB=[a11a12a1na21a22a2nam1am2amn]+(1)[b11b12b1nb21b22b2nbm1bm2bmn]=[a11b11a12b12a1nb1na21b21a22b22a2nb2nam1bm1am2bm2amnbmn] となる.

ベクトルと同じく行列のスカラー倍と和について,以下の法則が成り立つ.

  1. 交換法則 A+B=B+A
  2. 結合法則 (A+B)+C=A+(B+C)
  3. 分配法則1 (α1+α2)A=α1A+α2A
  4. 分配法則2 α(A+B)=αA+αB

Rで行列はmatrix()を用いて定義する.引数のベクトルを1列目から順に列方向に並べていく.

A <- matrix(c(2, 4, 1, -6, -3, 5), nrow = 2, ncol = 3)
A
##      [,1] [,2] [,3]
## [1,]    2    1   -3
## [2,]    4   -6    5
B <- matrix(c(1, 3, 3, 0, 4, -1), nrow = 2, ncol = 3)
B
##      [,1] [,2] [,3]
## [1,]    1    3    4
## [2,]    3    0   -1
A + B
##      [,1] [,2] [,3]
## [1,]    3    4    1
## [2,]    7   -6    4
A - B
##      [,1] [,2] [,3]
## [1,]    1   -2   -7
## [2,]    1   -6    6
3 * A
##      [,1] [,2] [,3]
## [1,]    6    3   -9
## [2,]   12  -18   15
2 * A + 3 * B
##      [,1] [,2] [,3]
## [1,]    7   11    6
## [2,]   17  -12    7

5.3 行列の積

行列の積はm×n次元の行列An×p次元の行列Bの間で定義され, AB=[a11a12a1na21a22a2nam1am2amn][b11b12b1pb21b22b2pbn1bn2bnp]=[nk=1a1kbk1nk=1a1kbk2nk=1a1kbkpnk=1a2kbk1nk=1a2kbk2nk=1a2kbkpnk=1amkbk1nk=1amkbk2nk=1amkbkp] となる.行列の積ABm×p次元の行列になることに注意.

一般的に行列の積は,左の項の列数と右の項の行数が一致している場合にのみ定義される.ゆえに,ABが求められるときに,BAが求められるとは限らない.また,BAが求められるときにも,ABと一致するとは限らない.

行列の積を行列を構成する行ベクトル,列ベクトルとして理解しよう.行列Am個のn次元ベクトルai(i=1,2,,m)の転置(行ベクトル)を積み重ねた列ベクトルとみなす.同様に,行列Bp個のn次元ベクトルbj(j=1,2,,p)を横に並べた行ベクトルとみなす.すなわち, A=[aT1aT2aTm],B=[b1 b2  bp]. このとき,行列の積ABは,aibjの内積aibjij要素とするm×p次元の行列として定義される. AB=[aT1aT2aTm][b1 b2  bp]=[a1b1a1b2a1bpa2b1a2b2a2bpamb1amb2ambp]

行列の積について以下の法則が成立する.

  1. 結合法則 (AB)C=A(BC)
  2. 分配法則 A(B+C)=AB+AC
  3. 転置 (AB)T=BTAT
  4. 単位行列m×n行列Aについて AIn=ImA=A
  5. 零行列m×n行列Aについて AOn×p=Om×p,Op×mA=Op×n

Rでの行列の積は%*%で計算できる.転置はt()なので,Bの転置とAの積を求めると以下のようになる.

A %*% t(B)
##      [,1] [,2]
## [1,]   -7    9
## [2,]    6    7
t(B) %*% A
##      [,1] [,2] [,3]
## [1,]   14  -17   12
## [2,]    6    3   -9
## [3,]    4   10  -17

単位行列に何を掛けても同じものを出力する.

I <- diag(1, 3, 3)
I
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1
x <- matrix(c(1, 2, 3), 3, 1)
I %*% x # x <- c(1, 2, 3)としてもよい
##      [,1]
## [1,]    1
## [2,]    2
## [3,]    3

5.4 逆行列

p×p正方行列Aに対して, AA1=A1A=Ip を満たすA1A逆行列(inverse matrix)という.正方行列に対して逆行列が常に存在するとは限らないが,存在する場合は一意である.2×2の場合は以下の公式で求められる. A=[abcd]A1=1adbc[dbca] adbcA行列式(determinant)と呼ばれ,|A|と表される.|A|=0のとき逆行列は存在しない.逆行列が存在することを「正則」,存在しないことを「正則でない」という場合がある.

逆行列に関して,以下の公式が成り立つ.

  1. 行列の積の逆行列 (AB)1=B1A1

  2. 転置と逆行列の入れ替え (AT)1=(A1)T

Rで逆行列はsolve()関数で求める.

C <- matrix(c(3, 1, 2, 4, 3, 1, 2, 3, 1), 3, 3)
C
##      [,1] [,2] [,3]
## [1,]    3    4    2
## [2,]    1    3    3
## [3,]    2    1    1
solve(C)
##               [,1] [,2] [,3]
## [1,]  7.401487e-17 -0.2  0.6
## [2,]  5.000000e-01 -0.1 -0.7
## [3,] -5.000000e-01  0.5  0.5
C %*% solve(C)
##              [,1]          [,2] [,3]
## [1,] 1.000000e+00 -1.110223e-16    0
## [2,] 1.665335e-16  1.000000e+00    0
## [3,] 1.665335e-16 -1.665335e-16    1
solve(C) %*% C
##               [,1]         [,2]         [,3]
## [1,]  1.000000e+00 1.110223e-16 0.000000e+00
## [2,] -2.220446e-16 1.000000e+00 1.110223e-16
## [3,]  2.220446e-16 5.551115e-17 1.000000e+00

5.5 分散共分散行列の導出

n×p次元行列X=[x1  xp]を転置すると,p×n次元行列XTになる.これをXの左から掛けると,行列XTXp×p次元の正方行列になる.具体的には以下のようになる. XTX=[xT1xT2xTp][x1 x2  xp]=[x1x1x1x2x1xpx2x1x2x2x2xpxpx1xpx2xpxp]=[

ここで,各ベクトル\mathbf{x}_kはそれぞれの変数を表すベクトルである.各ベクトルが各要素と平均の差で構成されるベクトル(偏差ベクトル)であるとする.つまり, \begin{align} \mathbf{x}_k = \left[ \begin{array}{c} x_{1k} - \bar{x}_k \\ x_{2k} - \bar{x}_k \\ \vdots \\ x_{nk} - \bar{x}_k \end{array} \right]. \end{align} このとき,行列の積\mathbf{X}^\mathrm{T}\mathbf{X}nで割った行列は,対角成分を分散,非対角成分を共分散とする行列になる.つまり, \begin{align} \frac{1}{n}\mathbf{X}^\mathrm{T}\mathbf{X} = \left[ \begin{array}{cccc} s_1^2 & s_{12} & \cdots & s_{1p} \\ s_{21} & s_2^2 & \cdots & s_{2p} \\ \vdots & \vdots & & \vdots\\ s_{p1} & s_{p2} & \cdots & s_p^2 \end{array} \right]. \end{align} この行列を分散共分散行列(variance-covariance matrix)という.非対角要素のij成分とji成分は同じ共分散s_{ij}=s_{ji}であり等しい.このように対角項を対称に等しい正方行列を対称行列という.

分散共分散行列は,多変量解析において基本的な情報となる,各変数の変動の情報とそれぞれの変数間の共変動の情報がまとめられており,大変重要なものである.

x <- c(152.8, 150.1, 182.0, 163.2, 167.3, 160.2, 164.9, 161.4, 179.9, 172.2)
y <- c(56.3, 52.1, 85.6, 66.8, 74.2, 58.1, 61.9, 55.1, 70.5, 64.1)
x_cen <- x -mean(x)
y_cen <- y -mean(y)
X <- matrix(c(x_cen, y_cen), length(x), 2)
X
##        [,1]   [,2]
##  [1,] -12.6  -8.17
##  [2,] -15.3 -12.37
##  [3,]  16.6  21.13
##  [4,]  -2.2   2.33
##  [5,]   1.9   9.73
##  [6,]  -5.2  -6.37
##  [7,]  -0.5  -2.57
##  [8,]  -4.0  -9.37
##  [9,]  14.5   6.03
## [10,]   6.8  -0.37
t(X) %*% X * (length(x) - 1)^(-1)
##           [,1]      [,2]
## [1,] 108.51556  90.34778
## [2,]  90.34778 104.20233
matrix(c(var(x), cov(x, y), cov(x, y), var(y)), 2, 2)
##           [,1]      [,2]
## [1,] 108.51556  90.34778
## [2,]  90.34778 104.20233

5.6 本日の課題

Rスクリプトを実行した結果をWordにコンパイルしたファイルをLUNA提出