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
VSS関数の結果 
• MAPの提案因子数・・・5! 
• 因子数を情報量規準に基づいて決定 
– 最も情報量規準が小さい因子数を採用 
– BICがオススメby堀先生 
• ただし,因子数は若干多めに提案される模様 
– 上の結果だと,8因子が提案されている 
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

Rで因子分析 商用ソフトで実行できない因子分析のあれこれ

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