Rについて
をベースに学んでいく。
今回は因子分析(PP.74-84)を扱う。
6. 因子分析
因子分析は変数間の相関関係を用いて共通因子にまとめ上げて分析を行う方法である。多数の変数があり分散共分散行列(または相関行列)が計算できる場合に利用する。実質的には主成分分析と同じことを行なっているものの、理論的には全く異なる。
主成分分析は無相関の合成変数を求めることで多くの変数を少ない変数に縮約することを目的としていた。これに対して因子分析は変数間の相関関係から共通因子を求めることで多くの変数を共通因子にまとめて説明することを目的としている。
6.1 因子分析の基礎
因子分析では観測データにおける変数間の関連成分をまとめたものを共通因子と呼び、これに対して他の変数とは関係なくその変数のみが持っている成分を独自因子と呼ぶ。因子分析では観測データはお互いに関連性を持っており、これらのデータは共通因子と独自因子とに分解できることを前提としている。
変数をもつ個のデータが観測されており、もとの各変数が
という個の共通因子で書けるものとする。このときを共通因子の個体における因子得点と呼び、共通因子の係数を因子負荷量と呼ぶ。
ベクトル表記すれば
で与えられる。このとき
である。母分散共分散行列は標本分散共分散行列を用いて推定する。したがって因子分析はデータから得た標本分散共分散行列からとの推定値を求める問題に帰着する。データを標準化すれば、分散共分散行列は相関行列に置き換えることができる。
独自因子が無ければの推定が不要になるため、主成分分析と同等になる。
因子分析ではいくつかのアルゴリズムが提案されている。そのうち頻用されるのは主因子法と最尤法である。最初のうちは前者の方が扱いやすい。
6.2 因子の回転
因子分析では因子の解釈を容易にするため、高い相関を持つ項目を共通因子として新しい空間上の軸を決める操作を行う。これを因子軸の回転と呼ぶ。
因子軸の回転では、①直交回転、②斜交回転に大別される。直交回転ではバリマックス回転、斜交回転ではプロマックス回転が良く用いられる。
因子分析では、アルゴリズムが多数提案されており、パッケージやアプリケーションなどで結果が相違するため、複数の手法を用いて多面的に分析するのが望ましい。
6.3 Rによる分析結果
library("psych") library("ggplot2") library("ggsci") # 再度irisを利用 data(iris) # 因子数を検討:1つで良さそう fa.parallel(x = iris[,-5]) # まずはfactanalで因子分析 lst_fa <- factanal(x = iris[,-5], factors = 1, rotaion = "varimax", scores = "regression") # 主要な結果 lst_fa$correlation # 標本相関行列 lst_fa$loadings # 因子負荷量 lst_fa$scores # 因子得点 lst_fa$uniquenesses # 独自因子 lst_fa$STATISTIC # カイ二乗統計量 lst_fa$dof # カイ二乗決定の自由度 lst_fa$PVAL # カイ二乗統計量のp値 # 因子負荷量を図示 df_loadings <- data.frame("factors" = names(lst_fa$loadings[,1]),"loadings" = lst_fa$loadings[,1]) g <- ggplot(df_loadings,aes(x = factors,y = loadings, fill = factors)) + geom_bar(stat = "identity") g <- g + ggtitle("Factor Loadings") g <- g + theme(plot.title = element_text(hjust = 0.5),legend.position = "bottom", legend.title=element_text(size = 7), legend.text=element_text(size = 7)) + scale_fill_nejm() plot(g) # 独自因子 lst_fa$uniquenesses # 独自因子