rで因子分析 商用ソフトで実行できない因子分析のあれこれ
DESCRIPTION
Rのpsychパッケージを用いた,因子分析の方法についてまとめています。 特に,SPSSやSASなどの商用ソフトでは実行できない,多様な分析法がpsychを使えば可能になります。その辺りの分析方法について触れています。 具体的には,因子数の決定方法,因子の抽出,回転方法,カテゴリカル因子分析などです。TRANSCRIPT
Rで因子分析〜商用統計ソフトでできないあれこれ〜
清水裕士
広島大学大学院総合科学研究科
Kazutan.R
自己紹介
• 清水裕士–専門:社会心理学 グループダイナミクス
–所属:広島大学大学院総合科学研究科 助教
–趣味:フリーの統計ソフトを作ってます
–連絡先:simizu706(あっと)hiroshima-u.ac.jp• (あっと)を@に変えてください。
–ブログ:http://norimune.net
– Twitter: @simizu706
Kazutan.R
本発表のメニュー
• Rで因子数の決定についての分析をしよう!– VSS関数で因子数決定の指標を出力しよう!
– fa.parallel関数で平行分析を使おう!
• Rで因子分析をしよう!– fa関数を使おう!
– 多彩な回転方法でグルグルしよう!
• Rでカテゴリカル因子分析– mirt関数を使おう!
Kazutan.R
因子分析
• 項目群の背後にある潜在因子を見つける–心理尺度を用いる研究では必須のテクニック
• 大抵の統計ソフトに搭載されている– SASやSPSSはもちろん,エクセル統計,フリーソフトにも導入される
• しかし,必要最低限の機能しかない–商用ソフトであっても,かなり制限されている
Kazutan.R
因子分析の流れ
• 因子数を決める
–適切な因子の数を決める
• 因子の抽出
–項目の共通性(独自性)を推定する
• 因子軸の回転
–因子負荷を解釈しやすいように変換する
Kazutan.R
これまでの(アカン)因子分析の流れ
• 因子数を決める– 固有値1以上の因子が勝手に出てきたで!
• 適切な因子数を提案しない
• 因子の抽出– とりあえずデフォルト設定の主成分分析でええか!
• 因子分析は主成分分析と違う
• 因子の回転– とりあえずプロマックス回転でええやろ!
• プロマックス回転は簡便的手法で,理論どおりの結果を出さない
Kazutan.R
Rのpsychパッケージで因子分析
• 因子数を決める– 平行分析,MAP,情報量規準を用いて因子数を推定
• fa.parallerやVSS関数を利用
• 因子の抽出– 最尤法はもちろん,最小残差法を選択できる
• fa関数を利用
• 因子の回転– 最近流行りのgeomin回転や,cluster回転を利用
• GPArotationパッケージの様々な回転法を選択できる
Kazutan.R
今日使うデータとパッケージ
• psychパッケージ
–心理学用の便利なパッケージ
• サンプルデータ
– psychに入っている,bfiデータ
• Big-Five25項目についての2800人のデータ
今回はBig-five得点だけを使うKazutan.R
因子数の決定方法
Kazutan.R
因子数をどうやって決めるか
• 古い基準– ガットマン基準(固有値1以上)
– スクリー基準(スクリープロットから視覚的に判断)
– 必ずしもよい因子数を提案しない
• これからの基準– MAP基準
– 情報量規準(BIC)
– 平行分析
– しかし,これらの機能は商用ソフトに搭載されていない
Kazutan.R
MAPで因子数決定
• MAP(Minimum Average Partial)基準
–最も効率的に相関行列を説明できる因子数を提案
–どちらかというと,最小の因子数を提案
• VSS関数を使う
–因子分析の場合は,とりあえずリストワイズ削除
– n=は推定する因子数。予想よりも多めに指定
Kazutan.R
• MAPの提案因子数・・・5!
• 因子数を情報量規準に基づいて決定
–最も情報量規準が小さい因子数を採用
– BICがオススメ by堀先生
• ただし,因子数は若干多めに提案される模様
–上の結果だと,8因子が提案されている
VSS関数の結果
Kazutan.R
平行分析で因子数決定
• 平行分析(Parallel Analysis)
–乱数から生成したデータの固有値よりも大きな固有値の因子を意味のあるものとする
• fa.parallel関数を使う
– リストワイズ削除した相関行列を入力
• リストワイズしたサンプルサイズをn.obs = で入力
• nrow(na.omit(dat))でわかる
Kazutan.R
fa.parallel関数の結果
• PC・・・主成分分析,FA・・・因子分析
– FAのほうが多めの因子数を報告する傾向
PCは5因子,FAは6因子を提案
Kazutan.R
因子数決定の「堀先生」基準
• MAP基準は最小の因子数– 提案するよりも少ない因子数は採用しないほうがいい– マイナー因子を拾わない傾向がある
• 解釈可能性を考慮しながら,ここから増やしていく
• 平行分析(PC)もそこそこいい– しかし,必ずしもベストではない– MAPと平行分析(PC)が一致すれば,それを採用– マイナー因子を拾いたいなら,MAPから順に解釈可能性を考慮に入れながら,平行分析PCの提案数まで増やしてみる
• 平行分析(FA)は最大の因子数– 平行分析(FA)よりも多い因子数は採用しないほうがいい
• 解釈可能性を考慮しながら,ここから減らしていく
Kazutan.R
因子の抽出共通性の推定
Kazutan.R
因子の抽出=共通性の推定
• 主成分分析で因子分析をするな– 主成分分析は,共通性を正しく推定できない
• 変数を合成する方法であって,共通部分を推定する方法ではない
• せめて反復主因子法を使う
• 基本は最尤法– 漸近一致性,漸近有効性,漸近正規性
• データが正規分布でなくても,漸近一致性は維持される
• 最小残差法もかなりよい– 最尤法にかなり近い結果– 不適解が出にくく,相関行列が特異でも解を出す
Kazutan.R
fa関数で因子分析
• 選べる推定法:fm = “”
–最小残差法(ミンレス法):“minres” デフォルト
–最尤法:“ml”
–反復主因子法:“pa”
– 「とりあえず最小残差法」で問題はない
• サンプルサイズが大きいなら,最尤法を使うべき
Kazutan.R
fa関数の結果
• 最小残差(ミンレス)法
以下省略
Kazutan.R
fa関数の結果
• 最尤法
Kazutan.R
fa関数の結果
• 反復主因子法
Kazutan.R
faを使う上での注意点
• 欠損値を含むデータの場合–デフォルトではペアワイズ削除の相関行列を使う
• しかし,ペアワイズ削除した相関行列に基づいて尤度を計算することは問題
• せめてリストワイズ削除する方がマシな気がする
• もちろん,完全情報最尤法がベスト
• promax関数は商用ソフトと結果が一致しない–共通性の平方根で重みづけていない
–一致する関数を作りました→ norimune.net/2219
Kazutan.R
因子軸の回転いろんな回転法
Kazutan.R
プロマックス回転がすべてではない
• プロマックス回転は簡便法
– 計算が早く,確実に解が出せる
– 計算機が遅い時代にはとても重宝される
• しかし,必ずしもよい解を出すとは限らない
– 理論通りの因子構造にならないこともある
• 理論的にはoblimin回転が良い →fa関数のデフォルト
– パラメータで結果が依存する
• SPSSはpower=4,SASはpower = 3,と一貫してない
• どれがいいかは理論的根拠はなく感覚的な判断でしかない
Kazutan.R
(個人的な)オススメ回転法
• 独立クラスタ回転– 通称,ハリス・カイザー法など– 完全クラスタ(各項目に1因子しか負荷しない)を目指す
• 因子間相関は高め
– rotate = “cluster”
• ジオミン(geomin)回転– 負荷しない因子の負荷量を0に近づけることを目指す
• 因子負荷量の幾何平均を最小にする
– 複数の因子に負荷することを許す• 因子間相関は低め
– rotate = “geominQ”が斜交,“geominT”が直交
Kazutan.R
(個人的な)オススメ回転法
• オブリミン(oblimin)回転– クォーティミン回転ともいう
–因子負荷の列間の共分散の和を最小にする• 因子間相関は小さめ
– rotate = “oblimin” faのデフォルト
• 因子間相関の大きさ
–独立クラスタ > プロマックス > オブリミン>ジオミン
Kazutan.R
fa関数で利用可能な回転の種類(知らんのは省略)
• 無回転
• 直交回転
–バリマックス,クォーティマックス,エカマックス,ジオミン直交
• 斜交回転
–プロマックス,オブリミン,バイクォーティミン,独立クラスタ,ジオミン斜交
Kazutan.R
カテゴリカル因子分析
Kazutan.R
「データが順序尺度なんですけど」
• 本来は連続的な変数を順序尺度で測定– 特定の態度を,3件法のリッカートで答えてもらう
– 行動を,「する・しない」,の2値で測定
– 測定の「粗さ」によって,相関が希薄化される
• 背後の連続的な得点間の相関を推定– ポリコリック相関係数
• 2変数の順序尺度の背後に,2変量正規分布を仮定して,その相関係数を推定
• 構成概念間の相関を,希薄化せずに推定することができる
• パラメトリックな順位相関
Kazutan.R
ポリコリック相関係数
• psychパッケージのpolychoric関数
–上がポリコリック,下が普通の相関のコード
ポリコリック相関係数 ピアソン相関係数
Kazutan.R
この発想を因子分析に応用
• カテゴリカルデータの因子分析
– psychのfa.poly関数を使えば簡単
–ポリコリック相関行列を使って因子分析を実行
Kazutan.R
fa.poly関数の結果
• 共通性が大きくなってる
Kazutan.R
しかし注意が必要
• ポリコリック相関行列をそのまま因子分析–一致性を持たない推定量
– とくに,段階数が少ない(2値とか)場合は,真値から大きくハズレてしまう• 正しく推定するには,標準誤差の逆行列で重みづけて,最小二乗法で推定する必要がある
• fa関数のカテゴリカル因子分析の因子得点–算出法が適当
• 因子負荷量のみで重みづけた得点を算出
• 推定精度がよくないKazutan.R
そこでmirtパッケージ
• Full最尤法でカテゴリカル因子分析を推定
–ロジスティック多次元項目反応理論を利用
• ポリコリック相関行列+重み付き最小二乗法に近い
• むしろFull最尤法のほうが推定量としての性能はいい
–欠損値の推定もしてくれる
–ただし,推定にはかなり時間がかかる
• mirt関数を用いる
Kazutan.R
mirt関数の結果(ただし,収束しきっていない)
• さらに共通性が高く推定されている
Kazutan.R
因子得点の計算
• カテゴリカル因子分析の因子得点
–簡便的因子得点は当然意味が無い
• 足し算は尺度が等間隔であることを仮定しているため
–因子負荷量と閾値の両方パラメータを使ってベイズ推定する必要がある
• fscores関数を使う
–期待事後分布(EAP)や,最大事後分布(MAP)を利用可能
Kazutan.R
まとめ
• 商用ソフトでは対応されていない様々な機能–因子数決定の分析
• MAP
• 平行分析
–因子の抽出法• 最小残差法
–因子軸の回転• ジオミン回転,独立クラスタ回転などなど
– カテゴリカル因子分析• ポリコリック相関係数,多次元項目反応理論
Kazutan.R