現在、2020年2月20日時点では、因子分析(Factor Analysis)はExploratoryの中では直接UIよりサポートされていません。
しかし、Exploratoryのユーザーの方であれば多くの方が知っていると思いますが、ExploratoryはRのUIです。ということはRでできることは、基本的には何でもできてしまいます。
そしてもちろん因子分析もカスタムのスクリプト、もしくはコマンドを使うことでできます!
2つの方法があるのですが、まずはそもそも因子分析をRでやるにはどうするかを確認してから、その後それぞれの方法を説明します。
このノートでは因子分析のやり方のみにフォーカスしています。因子分析とは何かという話はしません。
まずは、因子分析をRで行うには以下のようにfactanal
という関数を使って因子分析のモデルを作ることができます。
fa_model <- factanal(df, factors = 3)
そしてこのできたモデルから必要な情報を取り出すことになります。
print(fa_model)
例えば、こちらに都道府県別の女性の時間の過ごし方に関するデータがあります。
このデータを使って因子分析をやるには以下のように書くことになります。
# 都道府県の列を外したデータフレームを作る。
df <- japan_prefecture_1 %>% select(-pref_name)
# 因子の数を3、回転法(rotation)にバリマックス回転(直行回転)を選択して因子分析のモデルを作成。
fa_model <- factanal(df, factors = 3, rotation="varimax")
# モデルからサマリ情報を取り出す。
print(fa_model, cutoff=0)
factanal
関数は回転法に以下のものをサポートしています。
以下が、実行した結果です。"Code"というボタンをクリックすると実際に実行されたコードが見れます。
# 都道府県の列を外したデータフレームを作る。
df <- japan_prefecture_1 %>% select(-pref_name)
# 因子の数を3、回転法(rotation)にバリマックス回転(直行回転)を選択して因子分析のモデルを作成。
fa_model <- factanal(df, factors = 3, rotation="varimax")
# モデルからサマリ情報を取り出す。
print(fa_model, cutoff=0)
##
## Call:
## factanal(x = df, factors = 3, rotation = "varimax")
##
## Uniquenesses:
## 介護_看護_女 仕事_女 学業_女 家事_女
## 0.910 0.843 0.959 0.989
## 睡眠_女 育児_女 買い物_女 身の回りの用事_女
## 0.902 0.005 0.694 0.005
## 通勤_通学_女 食事_女
## 0.138 0.956
##
## Loadings:
## Factor1 Factor2 Factor3
## 介護_看護_女 0.055 0.294 0.034
## 仕事_女 -0.203 -0.061 -0.335
## 学業_女 -0.067 0.178 -0.072
## 家事_女 0.080 -0.067 0.000
## 睡眠_女 -0.309 -0.016 -0.051
## 育児_女 0.719 0.464 -0.514
## 買い物_女 0.065 0.070 0.545
## 身の回りの用事_女 -0.001 0.995 0.074
## 通勤_通学_女 0.835 -0.110 0.390
## 食事_女 -0.015 -0.119 0.172
##
## Factor1 Factor2 Factor3
## SS loadings 1.369 1.362 0.869
## Proportion Var 0.137 0.136 0.087
## Cumulative Var 0.137 0.273 0.360
##
## Test of the hypothesis that 3 factors are sufficient.
## The chi square statistic is 17.01 on 18 degrees of freedom.
## The p-value is 0.523
Rで因子分析を行う方法が確認できたので、それでは実際にExploratoryの中でどうやって行うかを説明します。
以下の2つの方法があるので、順を追って説明します。
これを、ノートの中で実行するには、実は上記のコードをそのままコピペするだけです。
新しいノートが作成されたら、Rのコードブロックをインサートします。
このコードブロックの中に先ほどのコードをコピペします。
以下のようになっているかと思います。
あとは、右の「リフレッシュ」ボタンをクリックするだけです。
すると以下のように結果が表示されるはずです。
実はこの因子分析は「カスタムコマンド」を使うだけでも簡単にできてしまいます。
こちらのやり方のほうが個人的にはお薦めです。というのも、この場合Rのコマンドをステップとして実行することでデータフレームのデータとして作ることができ、ということはそのデータをチャートビューより簡単に可視化することができるからです。
ただ一つだけ、慣れないうちはちょっと混乱するかもしれないことがあります。
それは、このfactanal
関数が返すモデルをどのようにデータフレームにするかというところです。
しかし、心配無用です。実はこれはRの世界ではすでに解決されていることなのです。それは、データフレームの列に入れちゃえ!というやり方でです。
そのためには、do
という関数を使います。
それでは、すでに上記で見た因子分析のモデルを作るコマンドをこのdo
という関数と一緒に使ってみましょう。以下がその例です。
do(fa_model = factanal(df, factors = 3, rotation="varimax")
上記で見たものと唯一違うのは、fa_modelの後が "=" であって、"<-" ではないという点です。このdo
関数の中身は、factanal
関数が返すモデルをfa_modelという列の中に入れるよということです。
これをデータラングリングのステップとして実行するのですがそのさいに2つほど注意が必要です。
1つ目は、それぞれのステップはその直前のステップを「データフレーム」として受け取ります。そこで、factanal
関数の中であえてデータフレーム名を指定する必要はなく、その直前のステップのデータフレームという意味の、"." を以下のように指定してあげます。
do(fa_model = factanal(., factors = 3, rotation="varimax")
そして、2つ目ですが、この直前のステップから渡されるデータフレームがfactanal
関数に渡したい列のみが入っている状態になっている必要があります。
直前のステップでそれらの列のみが選択されていることを確認する必要があります。
それでは、順を追って見ていってみましょう。
この例では、"pref_name"という列のみをデータフレームから除きます。
データが用意できたので、次にいよいよ因子分析モデルを作ります。
右側のステップの上にある"+ (プラス)" ボタンより、「カスタムRコマンド」を選びます。
そして、下記のコマンドをコピペします。先ほどと違うのは、因子得点を求めるために引数としてscores
にregression
を指定しています。因子得点を求める方法として、回帰方法 (regression) とバートレット法 (Bartlett) から選ぶことができますが、何も指定しない場合は、因子得点は求められません。
do(fa_model = factanal(., factors = 3, rotation="varimax", scores="regression"))
実行すると、1つのlist型の列のみのデータフレームができあがります。これが因子分析のモデルが入った列です。
もちろん、このままでは何なのか分けがわからないので、このモデルの列よりサマリ情報を取り出します。
ここでもまた「カスタムRコマンド」を使います。
今回は、model_info
というモデルのサマリ情報をデータフレームの形にして返してくれる関数を使います。この "model_info" 関数の中でモデルの入っている列名を指定し、さらにoutput
という引数にvariables
を指定することで因子負荷量が求められます。
実行すると、各変数ごとの因子負荷量がデータフレームとして返されます。
このように結果がデータフレームになっているので、後はこの結果を簡単に可視化することができます。
例えば以下は、散布図を使って、最初の2つの因子をそれぞれX軸とY軸に割当て、さらに変数名 (variable) をラベルにして表示したものです。
このモデルから因子得点の結果を取得したい場合は、model_info
関数のoutput
という引数に data
と指定することができます。
これにより、各変数ごとの因子得点をデータフレームとして返すことができます。
最後に、モデルの統計量に関する情報が知りたい場合は model_info
関数のoutput
という引数に summary
と指定することができます。
すると、以下のようなサマリ情報が得られます。