2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rで主成分分析

Last updated at Posted at 2021-02-19

はじめに

Rで基礎分析結果をCSV出力②量的変数編などで、
default of credit card clients Data Set
の基礎分析を行ってきた。今回はそのデータに主成分分析を行う。

(2021/2/24追記)
以下コメントをいただいたため、記事後半にて追記する。

  1. 基本的にはprincompではなく__prcompを使う__
  2. princomp関数__corオプション__と__prcomp関数scaleオプション__を選択

主成分分析

Rでは標準で入っているパッケージstatsにある princomp関数 で主成分分析ができる。以下コードで実行する。(d.1はRで基礎分析結果をCSV出力②量的変数編で分割した量的変数のみのデータである。)
記事後半で主成分分析を行う。(2021/2/24追記)

PCA.R
pc <- princomp(d.1)
summary(pc) # 各種成分の標準偏差、寄与率、累積寄与率
pc$loading  # 主成分(固有ベクトル)

実行結果は以下のようになる。

PCA.png

上記結果より、第1主成分と第2主成分の累積寄与率が__約90.6%__と大半を占めていること、また第1主成分と第2主成分が LIMIT_BALBILL_AMT1-6 の影響が大きいことがわかる。(固有ベクトルの空白部分は近似的に0。)

BILL_AMT1-6やPAY_AMT1-6あたりは平均や代表データを用いるだけでも良さそうな気もする。そのあたりはこれらデータから、Defaultの有無を予測するモデルを作成し精度向上などをする際に検討する材料の一つとできそう。

1. princomp関数とprcomp関数(2021/2/24追記)

R Documentation "princomp"にて、以下の記述がある。

princomp only handles so-called R-mode PCA, that is feature extraction of variables. If a data matrix is supplied (possibly via a formula) it is required that there are at least as many units as variables. For Q-mode PCA use prcomp.

この文章は、「Rモードの場合しかprincomp関数は扱えない。Qモードの場合はprcomp関数を使いなさい」ということを述べている。RモードおよびQモードが何を意味しているかがわかっていないため調査する。統計解析でよく使われる言葉「Qモード」「Rモード」とは何を指すのかによると、行:サンプル数 n、列:変数 m となるデータ行列X(n > m)では以下のように分類分けされるようだ。

Rモード
変数の複雑さを軽減する(変数から特徴量を抽出する)
Qモード
サンプルの複雑さを軽減する(データ行列Xの転置行列に)

つまり、データ行列に対して主成分分析を行いたいかによってはprincomp関数は使えないということになる。一方、prcomp関数はRモードQモードに関わらず主成分分析を行うことができるらしい。この違いはprincomp関数は__分散共分散行列(または相関係数行列)の固有値分解__を用いているのに対してprcomp関数では__データ行列の特異値分解__を用いていることによるようだ。prcomp関数はRモードQモードに関わらず実行できるので、基本的にはprcomp関数を使えばよい。(ちなみにこれら関数は分散の取り扱いにも違いがあり、princomp関数は標本分散、prcomp関数では不偏分散を用いている。)

2. princomp関数corオプションとprcomp関数scaleオプション(2021/2/24追記)

上記で述べたprincomp関数およびprcomp関数には、それぞれcorオプションおよびscaleオプション(どちらもデフォルトではFALSE)がある。
corオプションは計算の際に相関係数行列と分散共分散行列のいずれかを用いることを意味しており、デフォルトでは分散共分散行列を用いる仕様になっている。分散共分散行列は次元(kg, cmなど)を持つため、扱うデータがすべて同じ単位を持つ場合は問題がないが、異なる単位を持つデータの場合は不適切となる。一般にデータはさまざまな次元を持つデータであるため、基本的には無次元である相関係数行列を使用することが望ましい。したがって、__cor=TRUE__とすべきである。
またscaleオプションは正規化を行うかどうかを意味しており、デフォルトでは正規化を行わない仕様になっている。各次元の単位が同じ(スケールが合っている)場合には正規化は必要ないが、上記corオプションと同様に基本的には正規化を行うことが望ましい。したがって、__scale=TRUE__とすべきである。RDocumentationにおいても、「一般にスケーリングを推奨する」というコメントがある。

scale.
a logical value indicating whether the variables should be scaled to have unit variance before the analysis takes place. The default is FALSE for consistency with S, but in general scaling is advisable. Alternatively, a vector of length equal the number of columns of x can be supplied. The value is passed to scale.

主成分分析(2021/2/24追記)

上記で述べた1と2を踏まえると、主成分分析は__prcomp(X, scale=TRUE)__で行うことが望ましいと言える。したがって、この関数を用いて再度主成分分析を行った結果を以下に示す。

PCARetry.R
pc <- prcomp(d.1, scale=TRUE)
summary(pc) # 各種成分の標準偏差、寄与率、累積寄与率
pc$rotation # 主成分(固有ベクトル)

実行結果は以下のようになる。

pca.png

上記結果より、第1主成分から第6主成分までの累積寄与率が__約81.1%__を占めていること、また第1主成分は BILL_AMT1-6 の影響が大きいことがわかる。

BILL_AMT1-6やPAY_AMT1-6あたりは主成分が近い値となっているため、平均や代表データを用いるだけでも良さそうな気もする。そのあたりはこれらデータから、Defaultの有無を予測するモデルを作成し精度向上などをする際に検討する材料の一つとできそう。

2
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?