統計解析フリーソフト「R」で統計学に入門する27 【行列の演算をしてみる】

こんにちは、ミントです

前回までに、行列の生成や操作を学びました

今回は、行列の演算をやりたいと思います

行列には、

  • 行列積
  • 転置
  • 逆行列
  • 固有値・固有ベクトル
  • 特異値分解

など応用面からも、とても大事な演算があります

これらの演算をすべて1からプログラミングするとなると、それなりに大変です。Rには、これらの計算を関数を使うことで、カンタンに実行できるメリットがあります

(これらの演算は、線形代数の書籍などで数式を追いながら学ぶのがいいですが、ここではRの使い方を学ぶことに重点を置くので省きます)

 

本記事の概要

行列の基本情報をゲットしよう

まずは、行列の基本情報である、行列の「 次元 」「 列数 」「 行数 」を調べれるようになりましょう

説明する前に、今回つかう行列1、行列2をこのように作成しました

Rで行列のかけ算

行列1の次元、行数、列数を求めてみます。それぞれ、

  • 次元は、dim ( 調べたい行列オブジェクト名 ) 関数
  • 行数は、nrow ( 調べたい行列オブジェクト名 ) 関数
  • 列数は、ncol ( 調べたい行列オブジェクト名 ) 関数

を使います

Rで行列のかけ算

行列1の次元は2行2列、行数は2、列数は2、とわかりました

 

苦手な人もわかる、3つの行列のかけ算

行列には、3つのかけ算があります。これらを混同してしまうとよくないので、しっかり区別して理解してほしいと思います

(3つをすべて厳密にはかけ算とは呼べませんが、わかりやすいようにこのような表現にしています)

(1)、2つの行列の各要素どうしのかけ算

数学では、行列のかけ算は各要素どうしのかけ算ではありません

けれど、Rではそういう計算もサクッとできます

こんな感じです ↓

Rで行列のかけ算

計算結果の1行1列の要素5は、行列1の1行1列の要素1と、行列2の1行1列の要素5のかけ算で、1 × 5 = 5 として計算されています。他の要素も同様です

 

(2)、行列のかけ算(行列積)

この「 行列積 」は、数学的に正しい行列のかけ算です

Rで実行するときは、「 %*% (パーセント・アスタリスク・パーセント)」 を使います

Rで行列のかけ算をする 行列積

計算結果は、行列のかけ算の定義に従って計算されています

 

(3)、行列のかけ算(crossprod ( ) 関数)

Rでの行列積は、「 crossprod ( ) 関数 」 を使ってもできます

crossprod ( 行列1,  行列2 ) という形で使います

Rで行列のかけ算 行列積crossprod

うん、できた!・・・あれ!?

(2)の結果と違う!!

なにか間違えたの!?

・・・

いえ、間違えてないんです

この crossprod ( ) 関数では、実はこのように計算しています

Rで行列積の計算

ん!? 「 t(  ) 関数 」 ってのが使われてる!

「 t ( 行列オブジェクト名 ) 関数 」 は、行列を転置させる関数なんです(t はtranspose(転置)の略です)

行列の転置とは、その行列の行と列を入れ替えることを言います

たとえば、転置の操作では、1行2列の要素は2行1列の要素になり、2行1列の要素が1行2列の要素にします。これをすべての要素におこないます。このように、行列の対角項を中心にして、要素が入れ替わる操作のことを、転置と呼びます

crossprod ( ) 関数では、自動的に転置をしていて、それから行列積を計算しています。この点が(2)との違いになります

このように行列のかけ算は

  • 「*」による行列の各要素どうしのかけ算
  • 「%*%」による行列積
  • 「crossprod ( ) 関数」による行列積

があり、これらを混同しないように気をつけましょう

 

行列の演算、よくつかう3つのアルゴリズム

行列の演算では、よく使うアルゴリズムが3つあります。逆行列、固有値問題、特異値分解です。これらは1からプログラミングするとそれなりに大変ですが、Rではカンタンに計算できるように関数が用意されています。(アルゴリズムの詳細などはここでは省きます)

(1)、逆行列

逆行列を求めるには、「 solve( ) 関数 」を使います

Rで逆行列を計算する

カンタンに計算できます

 

(2)、固有値問題

固有値・固有ベクトルを求めるには「 eigen ( ) 関数 」を使います

Rで固有値固有ベクトルを求める

 

(3)、特異値分解

特異値分解は、「 svd ( ) 関数 」を使います

Rで行列の特異値分解をする

 

というわけで、今回は、行列の演算について、かけ算、逆行列、固有値問題、特異値分解などを学びました

 

 

Rには、「アレイ」という配列のデータ構造があります↓

こちら無料で読めます↓