主成分分析などでは固有値を使いますが、行列の固有値や固有ベクトルを計算したことがない人も多いのではないでしょうか。ここで練習してみたいと思います。
行列Aの固有値λは以下の式が成り立つもので、xは固有ベクトルと呼ばれます。
$ Ax=λx $
経済統計の使い方では、統計データの入手法から分析法まで解説しています。
行列を作成して固有値と固有ベクトルを計算します。全体の出力は以下の通りです。この後に、それぞれの部分の計算の説明をしています。
> A<-matrix(c(1,3,4,5,10,3,8,2,4),nrow=3,ncol=3)
> A
[,1] [,2] [,3]
[ 1,] 1 5 8
[ 2,] 3 10 2
[ 3,] 4 3 4
> eigenA=eigen(A)
> eigenA
eigen() decomposition
$values
[1] 13.675708 4.851307 -3.527015
$vectors
[,1] [,2] [,3]
[ 1,]0.5580377 0.5521427 0.8963008
[ 2,]0.6988830 -0.5612255 -0.1363940
[ 3,]0.4473884 0.6165748 -0.4219497
> eigenA$values[1]*eigenA$vectors[,1]
[ 1] 7.631560 9.557720 6.118354
> A%*%eigenA$vectors[,1]
[,1]
[ 1,]7.631560
[ 2,]9.557720
[ 3,]6.118354
行列の作成
まず、3行、3列の行列を作成します。9個の要素をc( )の中にいれます。その後に、行の数(nrow)、列の数(ncol)を指定します。
3行3列の行列をAという名前にします。
> A<-matrix(c(1,3,4,5,10,3,8,2,4),nrow=3,ncol=3)
> A
[,1] [,2] [,3]
[ 1,] 1 5 8
[ 2,] 3 10 2
[ 3,] 4 3 4
固有値の計算
固有値の計算はeigen( )に行列名を入れれば計算できます。結果をeigenAとします。
固有値はeigenAに入っているもののうち、\$values の3つで、大きい順に、13.7,4.9,-3.5です。固有ベクトルは、\$vectors のそれぞれの列です。1列目が固有値13.7に対応しています。
> eigenA=eigen(A)
> eigenA
eigen() decomposition
$values
[ 1] 13.675708 4.851307 -3.527015
$vectors
[,1] [,2] [,3]
[ 1,] 0.5580377 0.5521427 0.8963008
[ 2,] 0.6988830 -0.5612255 -0.1363940
[ 3,] 0.4473884 0.6165748 -0.4219497
確認
固有値と固有ベクトルをかけたもの、行列と固有ベクトルをかけたものが等しくなるかどうか確認します。最も大きい固有値は、eigenA\$values[ 1]で、それに対応する固有ベクトルは、eigenA\$vectors[,1]です。両者を掛けると、(7.63 9.56 6.12)になります。
次に、行列Aに、固有ベクトルを掛けたものを計算します。行列とベクトルの積は%*%としなければ、要素の積になってしまうので、注意が必要です。また、結果は行列の形となっていますが、as.vector(A%*%eigenA\$vectors[,1] )とすれば、ベクトルの形になります。両方とも答えは、(7.63、9.56、6.12)となり、等しいことがわかります。
> eigenA$values[ 1]*eigenA$vectors[,1]
[ 1] 7.631560 9.557720 6.118354
> A%*%eigenA$vectors[,1]
[,1]
[ 1,] 7.631560
[ 2,] 9.557720
[ 3,] 6.118354
コマンドのみの表記
A<-matrix(c(1,3,4,5,10,3,8,2,4),nrow=3,ncol=3)
A
eigenA=eigen(A)
eigenA
eigenA$values[ 1]*eigenA$vectors[,1]
A%*%eigenA$vectors[,1]