順序尺度の因子分析
Rで探索的因子分析のやり方をメモ。
R、因子分析共に初心者なので、誤りがある場合は、ご指摘いただきたいです。
ordinal scale(順序変数)を使っている探索的因子分析なので、ポリコリックかスピアマンの相関係数を使わないと行けない.(Polychoric versus Pearson correlations in exploratory and confirmatory factor analysis of ordinal variables | SpringerLink)
豊田秀樹(2000)は以下のように述べている。
- 連続変数&連続変数:ピアソンの相関係数
- 順序変数&順序変数:ポリコリック相関係数
- 順序変数&連続変数:ポリシリアル相関係数
カテゴリカルな相関係数が算出できるので、カテゴリカル因子分析や項目反応理論などへ適用できる相関係数。polycorパッケージによる順序相関係数の算出 が参考文献。
前準備
普段Pythonを使っているが、今回はRで実装する。
理由は因子分析を行うのに、Rの方がパッケージが豊富であると判断したから。
パッケージをインポート?(表現を知らない)
library(psych)
library(GPArotation)
因子分析の手順
Brett Williams(2012)の論文より、手順は以下の通り。
- データが因子分析に適切か
- 因子の抽出
- 因子数の決定基準
- 回転
- 解釈と因子の命名
1.データが因子分析に適切か
Brett Williams(2012) は以下の項目をチェックしろとおっしゃってる。
1_1. Sample size
1_2. Correlation matrix
1_3. Variable Ratio
1_4. (Kaiser-Meyer-Olkin Measure of Sampling Adequacy and Bartlett’s Test of Sphericity)←理解できてないので括弧
1_1.Sample Size
文献何個か乗せてくれてるけど、大体経験則として300以上らしい。(足りなくてもやってはいけない訳ではない)
1_2.Correlation matrix
相関が1つも0.3超えてなかったら考え直せと。
相関使うからそれはそう見たいな感じ。
1_3.Variable Ratio
データ数とカラムの比
From 3:1,6:1,10:1,15:1, or 20:1と書いてあるけど、はっきりとは書いてない。
2.因子の抽出
Rでポリコリックだと以下の5つは使える。(codeのfmで設定)
- 主因法(pa)
- 重み付き最小2乗法(wls)
- 重みない最小二乗法(uls)
- 最尤法(mle)
- 最小残差法(minres)
3. 因子数の決定基準
以下の方法で因子数は決定できる。(codeではnfactorsで設定)
Rで因子分析 商用ソフトで実行できない因子分析のあれこれが参考文献であり、素晴らしいスライド。このスライド見れば、正直このページいらない笑
以下実行すれば、因子数を決められる。
スクリープロット
VSS.scree(df)
平行分析
library(psych)
fa.parallel.poly(df,fa="pc")
# fa:factor analysisのやつ
# parallel:平行分析で
# poly:ポリコリックを使うってことね
MAP基準
VSS(df,n=10,use="complete.obs")
固有値の値で決める方法も追記します。
4.回転方法
私は以下の二つしか試していない。(codeではrotatoにて設定)
- プロマックス回転(promax)
- バリマックス回転(varimax)
実装
ここまでで、実装して結果が出せる。
result <- fa.poly(df,nfactors = 5,
fm = 'minres',
rotate = 'promax',
use = 'complete.obs')
print(result, sort = T)
sort = Tを使うことで、因子負荷量をソートして出してくれるので、つけるべき。
5.解釈と因子の命名方法
因子分析は一回やるだけで終わるものではない。
負荷量が0.4以下で効いてない変数に関しては、
もし削除しても良いと判断できれば、削除してもう一度分析を行う。これは何度も繰り返す。
あとは、以下の項目をチェックする必要がある。
- 累積寄与率が低すぎないか(そもそもモデル使えない)
- 1個の因子が3つ以上の変数か
- 複数の因子に1つの変数がかかりすぎてないか。
- 解釈できるか
終わりに
最初にも書きましたが、まだまだサーベイが足りてないので、間違った情報がありましたら、教えていただきたいです。