私のためのQR分解

  • 縦長の行列 A (n x p (n > p)) は、QR分解により
  •  A = QRと分解できる
  • ただし、Qは n x p 行列、R は p x p 行列で
  • Qのp本の列ベクトルは、正規直行基底の一部(ノルムが1で相互に直交)
  • Rのp本の座標は、そのペアワイズ距離がAのp本のペアワイズ距離と同じになっている、そんな上三角行列
  • 結局QR分解では、Aのn次元空間のp個の点を、回すようにして、p次元空間座標に変換してくれる
  • MDSのようなもの
  • ここで、正規直交基底の一部である性質を持つQだが、そのような行列の集合を、Stiefel manifoldをなす行列集合と呼ぶ
  • このStiefel manifoldはなかなか面白い性質を持っていて研究されている
n <- 5
p <- 3
A <- matrix(rnorm(n*p),ncol=p)
A
# qr 分解
qrout <- qr(A)
Q <- qr.Q(qrout)
R <- qr.R(qrout)
Q
R
# A = QR
Q %*% R - A

# t(R) %*% R はAのペアワイズ距離二乗行列
t(R) %*% R
t(A) %*% A

# 結局
# A=QRと分解できて、Rは、Aのペアワイズ距離を保ったp次元座標
# Qは nxp行列であって、これは、p本のn次元ベクトルで、それらが正規直交:
Stiefel行列
t(Q) %*% Q
> n <- 5
> p <- 3
> A <- matrix(rnorm(n*p),ncol=p)
> A
           [,1]       [,2]       [,3]
[1,]  0.8026314  0.1184986  1.6326421
[2,]  0.8468190  1.0688597 -1.0550278
[3,] -1.5408416 -2.3697417  0.3404154
[4,]  0.2941588  1.6919584 -0.7664325
[5,] -1.1044426  0.1767955 -1.5195393
> # qr 分解
> qrout <- qr(A)
> Q <- qr.Q(qrout)
> R <- qr.R(qrout)
> Q
           [,1]       [,2]         [,3]
[1,] -0.3574554  0.3059402  0.550380998
[2,] -0.3771345 -0.1080937 -0.750340955
[3,]  0.6862205  0.3906493 -0.052634334
[4,] -0.1310049 -0.6404554  0.362311470
[5,]  0.4918683 -0.5761304 -0.005406922
> R
          [,1]      [,2]      [,3]
[1,] -2.245403 -2.206322 -0.599116
[2,]  0.000000 -2.190503  2.112835
[3,]  0.000000  0.000000  1.402817
> # A = QR
> Q %*% R - A
              [,1]         [,2]          [,3]
[1,] -1.110223e-16 2.081668e-16  8.881784e-16
[2,]  0.000000e+00 2.220446e-16 -6.661338e-16
[3,]  0.000000e+00 4.440892e-16  5.551115e-17
[4,]  5.551115e-17 0.000000e+00 -4.440892e-16
[5,]  0.000000e+00 0.000000e+00 -8.881784e-16
> 
> # t(R) %*% R はAのペアワイズ距離二乗行列
> t(R) %*% R
         [,1]      [,2]      [,3]
[1,] 5.041835  4.954082  1.345257
[2,] 4.954082  9.666158 -3.306327
[3,] 1.345257 -3.306327  6.790905
> t(A) %*% A
         [,1]      [,2]      [,3]
[1,] 5.041835  4.954082  1.345257
[2,] 4.954082  9.666158 -3.306327
[3,] 1.345257 -3.306327  6.790905
> 
> # 結局
> # A=QRと分解できて、Rは、Aのペアワイズ距離を保ったp次元座標
> # Qは nxp行列であって、これは、p本のn次元ベクトルで、それらが正規直交
> :Stiefel行列
> t(Q) %*% Q
              [,1]          [,2]          [,3]
[1,]  1.000000e+00 -7.630337e-17 -9.825478e-19
[2,] -7.630337e-17  1.000000e+00  1.958094e-16
[3,] -7.921442e-18  1.958094e-16  1.000000e+00