40 人が閲覧(直近 30 日) データ分析・GA4

因子分析とは?やり方と結果の見方を実データで解説|EFA・CFAの違い

因子分析とは?やり方と結果の見方を実データで解説|EFA・CFAの違い

因子分析は、たくさんの設問や測定値のあいだの相関を手がかりに、それらを生み出している少数の「因子」(直接は測れない共通の要因)を推定する統計手法です。この記事では、公開されている性格検査データ(2,436人×25項目)を実際に PythonとRで分析し、その結果をもとに、因子数の決め方・因子負荷量の読み方・探索的因子分析(EFA)と確認的因子分析(CFA)の違いを解説します。よく見かける「累積寄与率は50〜60%以上」といった目安が、実データではどう外れるのかも数字で示します。

まとめ|因子分析の要点

  • 何をするか:変数どうしの相関を、少数の共通因子と、変数ごとの独自因子に分けて説明する。主成分分析と違い、項目固有の分散と測定誤差を含む独自分散を共通因子から分ける。
  • EFAとCFA:因子の数と構造をデータから探すのがEFA、事前に決めた構造がデータに合うかを適合度で確かめるのがCFA。尺度を作るときは、EFAで探してから別のデータでCFAにかける。
  • 因子数:固有値1以上の基準は因子を採りすぎやすい。今回のデータでは固有値1以上が6、主成分版の平行分析が5、因子分析版が6となり、6番目の因子は2項目しか載らなかった。
  • 結果の見方:因子負荷量で因子に名前を付け、共通性で各項目がどれだけ説明されているかを見る。今回の性格検査データでは、5因子の累積寄与率は42.4%、共通性が0.4未満の項目は25項目中10項目あった。
  • ツール:SPSSは抽出法の既定が主成分なので、因子分析をするなら変更が要る。Pythonの factor_analyzer 0.5.1 は scikit-learn 1.8 以降では動かない。Excelの分析ツールに因子分析は無い。

因子分析とは|観測できない共通因子で相関を説明する手法

因子分析の出発点は、心理学者 Spearman が1904年に American Journal of Psychology 第15巻に発表した知能研究です。教科ごとの成績が互いに相関することから、知的活動に共通する一般因子があると考えました。観測できるのは成績だけで、「知能」そのものは測れません。測れる値の相関から、測れない要因を逆算するのが因子分析の考え方です。

「因子」の意味と読み方

因子は「いんし」と読み、英語では factor(ファクター)です。日常語では「リスク因子」のように、ある結果を生む要素を指します。因子分析でいう因子は、それより狭く、複数の観測変数に共通して影響する潜在変数のことです。アンケートでいえば、「すぐ怒る」「イライラしやすい」「気分が変わりやすい」の3問への回答がそろって動くとき、その背後に「情緒の不安定さ」という因子を仮定します。数学の「因数」とは別の言葉です。

共通因子と独自因子のモデル

因子分析では、各変数を「共通因子 × 因子負荷量」と「その変数だけの独自因子」の和で表します。変数を標準化すると、各変数の分散1は、共通因子で説明される部分(共通性)と、残りの独自性に分かれます。共通性が0.6なら、その設問の回答のばらつきのうち6割が共通因子で説明され、4割は設問固有の要素や測定誤差という意味です。この独自因子をモデルに含める点が、後で述べる主成分分析との本質的な違いです。

探索的因子分析(EFA)と確認的因子分析(CFA)の違い

EFAは、因子の数も、どの項目がどの因子に載るかも決めずにデータから探します。CFAは、「項目1〜5は因子A、項目6〜10は因子B」という構造を先に指定し、その構造がデータに合うかを適合度指標で判定します。CFAは「確証的因子分析」「検証的因子分析」とも訳されますが、3つとも同じ手法です。

観点 探索的因子分析(EFA) 確認的因子分析(CFA)
因子数 データから決める 分析前に指定する
項目と因子の対応 全項目が全因子に載りうる 指定した因子にだけ載る
回転 複数因子の解釈のため通常実施 通常不要
主な判定材料 固有値・平行分析・負荷量 CFI・RMSEA・SRMR
使う場面 尺度の試作・構造の探索 既存尺度の検証・SEMの測定部分

CFAの適合度の目安としてよく引かれるのは、Hu & Bentler(1999)が最尤法について示した CFI 0.95前後以上、RMSEA 0.06前後以下、SRMR 0.08前後以下です。同じデータでEFAとCFAを続けて行うと、データに合わせた構造をそのデータで「確認」することになり、検証になりません。標本を2つに分けるか、別の調査で集めたデータでCFAにかけます。CFAを因子間の因果関係まで広げたモデルは共分散構造分析(SEM)とは?適合度の基準とモデルが合わないときの対処を実例で解説で扱っています。

因子分析のやり方|5つの手順

ここからは、R の psych パッケージに入っている bfi データを使って手順を追います。性格検査サイト SAPA の回答者2,800人が、ビッグファイブ(協調性・誠実性・外向性・神経症傾向・開放性)の各5項目、計25項目に6段階で答えたデータです。欠測のある人を除いた2,436人で分析しました(Python の factor_analyzer 0.5.1 と R の psych 2.6.9 で同じ値になることを確認済み)。

手順1:因子分析への適性確認|サンプルサイズ・KMO・Bartlett検定

最初に、変数間に因子を想定できるだけの相関があるかを確かめます。Bartlettの球面性検定は「相関行列が単位行列(異なる変数間の相関がすべて0)」という帰無仮説を検定し、bfi では χ²=18,146(自由度300)で棄却されました。KMO(標本妥当性)は全体で0.849、項目別の最小は A1(他人の気持ちに無関心)の0.754です。

KMOの評価には「0.90以上 marvelous、0.80台 meritorious、0.70台 middling、0.60台 mediocre、0.50台 miserable、0.50未満 unacceptable」という区分がよく使われます。ただし Kaiser(1974)の原論文でこの区分が付いているのは、因子的単純性の指標(IFS)の方です。この区分がKMOの目安として使われるようになった経緯や、KMOの閾値としての妥当性までは、この論文からは判断できません。

サンプルサイズは「変数の5〜10倍」「最低200人」などの経験則が出回っていますが、MacCallum ら(1999)のシミュレーションでは、必要な人数は共通性の高さで大きく変わりました。共通性が高ければ、標本の大きさや1因子あたりの項目数は因子の再現にほとんど影響しません。共通性が低い設問が多いアンケートほど、人数を増やす必要があります。5段階や6段階の評定データでは、ピアソン相関の代わりにポリコリック相関を使う選択肢もあります(テトラコリック相関・ポリコリック相関とは?カテゴリカル変数の相関係数の選び方)。欠測を含む人をまとめて除くと、bfi のように2,800人が2,436人まで減ります(扱い方は欠測値とは?欠損値との違い・3つの種類とリストワイズ削除・多重代入の選び方)。

手順2:因子数の選択|固有値と平行分析の比較

相関行列の固有値を大きい順に並べると、bfi では 5.13、2.75、2.14、1.85、1.55、1.07、0.84…となり、「固有値1以上」の基準(カイザー基準)では6因子です。Zwick & Velicer(1986)の比較研究でも、この基準は成分数を大きく過大推定する傾向が示されています。

そこで併用するのが Horn(1965)の平行分析です。同じ人数・同じ項目数の乱数データを何度も作り、その固有値を偶然でも出る大きさの基準にして、実データの固有値がそれを上回る数だけ因子を残します。乱数データ500組の95パーセンタイル(1.21、1.18、1.16、1.14、1.12、1.10…)と比べると、6番目の1.07が基準を下回り、5因子になりました。ただし R の fa.parallel は、因子分析版で6、主成分版で5と答えが割れます。

割れたときは、6因子で解いて6番目の因子の中身を見ます。bfi では6番目の因子に0.3以上で載ったのは、開放性の逆転項目 O2(難しい本を避ける)0.31 と O5(物事を深く探らない)0.35 の2項目だけでした。逆向きの言い回しで答え方がそろっただけの「方法因子」と読むのが自然で、理論とも合う5因子を採ります。因子数は基準の機械的な適用ではなく、複数の基準と中身の解釈で決めるものです。

手順3:因子の抽出|最小残差法と最尤法

抽出法は、R の psych と Python の factor_analyzer はどちらも既定が最小残差法(minres)です。最尤法(ML)は、多変量正規分布を仮定して推定と検定を行う方法です。なお、適合度指標は最尤法でなければ出せないものではありません。bfi を最尤法5因子で解くと RMSEA=0.054、TLI=0.881 でした。RMSEA は0.06前後の目安を満たす一方、TLI は0.95前後に届かず、今回の5因子モデルでは指標によって評価が分かれます。

手順4:因子の回転|直交回転と斜交回転の選択

抽出した直後の解は、多くの項目が第1因子に載って解釈しにくいため、軸を回して各項目がなるべく1つの因子だけに強く載る形に整えます。因子間の相関を0に固定するのが直交回転(バリマックスなど)、相関を許すのが斜交回転(オブリミン、プロマックスなど)です。bfi をオブリミンで回すと、因子間相関は絶対値で最大0.33(外向性と協調性の因子のあいだ)でした。人の性格や意識は互いに関連するのが普通なので、まず斜交回転で解きます。因子間相関がどれも小さければ直交回転と結果はほとんど変わらず、そのときに限って解釈しやすい直交回転を選んでも差し支えありません。

手順5:因子の命名と因子得点の算出

回転後の因子負荷量を見て、強く載る項目の共通点から因子に名前を付けます。符号の向きは任意で、bfi の外向性の因子は「人に話しかけにくい」が+、「すぐ友達ができる」が−に載っていたため、そのまま読むと「内向性」の因子です。名前を決めたら、回答者ごとに因子得点を計算します。因子得点は回帰分析とは?種類・回帰式・決定係数と実務での進め方を解説の説明変数や、似た回答者をまとめるデンドログラムとは?階層的クラスタリングの見方とクラスタ数の決め方の入力に使えます。

実データで見る因子分析の例|25項目がビッグファイブの5因子に分かれた結果

bfi を最小残差法・オブリミン回転の5因子で解いたときの、各因子で負荷量が大きい2項目です(項目文は英語原文を当サイトで訳したもの)。

因子(命名) 項目 負荷量 α係数
神経症傾向 N1 すぐ怒る 0.83 0.82
神経症傾向 N2 イライラしやすい 0.78
誠実性 C2 完璧になるまで続ける 0.67 0.74
誠実性 C4 中途半端に済ませる −0.64
外向性(符号は逆) E2 人に話しかけにくい 0.67 0.77
外向性(符号は逆) E4 すぐ友達ができる −0.59
協調性 A3 人の慰め方を知っている 0.68 0.72
協調性 A2 人の様子を気づかう 0.66
開放性 O3 会話を高いレベルに導く 0.62 0.61
開放性 O5 物事を深く探らない −0.54

25項目は想定どおり5つの性格特性に分かれました。α係数は、逆転項目を反転したうえで各特性の5項目から計算した値です。一方で、きれいに分かれない項目も残ります。N4(よく気分が落ち込む)は神経症傾向に0.47、外向性の因子にも0.40で載る交差負荷で、O4(物事を振り返る時間をとる)はどの因子にも0.4に届きません(最大0.36)。開放性のα係数0.61も、ほかの4因子より低い値です。尺度を作り直すなら、O4の言い回しの見直しや、交差負荷のN4をどちらの因子で採点するかの決定が、次の作業になります。

因子分析の結果の見方|因子負荷量・共通性・寄与率の基準

因子負荷量の基準と、1を超えるときの読み方

因子負荷量は、その項目が因子からどれだけ強く影響を受けるかを表す値です。直交回転では項目と因子の相関に一致し、絶対値0.4以上(緩めるなら0.3以上)をその因子に「載っている」とみなすのが慣例です。斜交回転では、出力が2種類に分かれます。パターン行列は因子から項目への回帰係数、構造行列は項目と因子の相関で、因子の命名にはパターン行列を使います。斜交回転のパターン行列では、因子間相関の影響で負荷量が1をわずかに超えることがあり、それだけでは不適解と決まりません。不適解の判定は共通性で行います。SAS/STAT の説明では、共通性がちょうど1になるのがヘイウッドケース、1を超えるのがウルトラ・ヘイウッドケース(独自因子の分散が負になる不適解)と区別されています。因子数を採りすぎたときや、項目に対して人数が少ないときに起こりやすく、因子数を減らすか、その項目を外して解き直します。

共通性と累積寄与率|一律の閾値による項目削除の問題

「共通性0.4未満の項目は削除」「累積寄与率は50〜60%以上」という目安をよく見かけます。bfi に当てると、25項目中10項目が共通性0.4未満で、0.6以上は N1(0.68)と N2(0.61)の2項目だけでした。5因子の累積寄与率は42.4%です。ビッグファイブを想定した今回の25項目ではこの水準で、目安どおりに削ると協調性・誠実性・開放性の項目がそれぞれ2〜4項目ずつ消えます。

目安は「項目を見直すきっかけ」として使い、削除の判断は項目の内容と、削ったあとにα係数や因子構造がどう変わるかで決めます。なお、斜交回転後のパターン係数の二乗和は、因子間相関を含む共通分散と一致しません。回転前より小さくなるとも限らず、今回の bfi では二乗和から求めた累積寄与率が39.6%と、回転前の42.4%より小さく出ました。累積寄与率は回転前の値で報告するのが確実です。

論文・レポートでの結果の書き方

結果を表にするときは、項目を因子ごとに負荷量の大きい順に並べ、回転後の負荷量・共通性・因子間相関・各因子のα係数を載せます。本文には、抽出法(例:最小残差法)、回転法(例:オブリミン)、因子数を決めた根拠(固有値・平行分析の結果)、分析した人数と欠測の扱いを書きます。「固有値1以上で5因子を抽出した」とだけ書くと、bfi のように基準によって因子数が変わるデータでは、結果を再現できなくなります。

Python・R・SPSSでの因子分析のやり方と、つまずきやすい設定

Pythonの因子分析|factor_analyzerの互換性と実行例

Python では factor_analyzer を使います。PyPI の最新版は0.5.1(2024年2月8日公開)で、その後更新されていません。このため、scikit-learn 1.8.0 以降と組み合わせると、fit の時点で TypeError: check_array() got an unexpected keyword argument 'force_all_finite' が出て止まります(scikit-learn 1.8.0 と 1.9.1 で発生、1.7.2 では動作を確認)。インストール時に scikit-learn を1.8未満に固定してください。FactorAnalyzer() の既定は3因子・プロマックス回転・最小残差法なので、因子数と回転は必ず明示します。

python -m pip install factor_analyzer==0.5.1 "scikit-learn<1.8" pandas

インストールしたら、次のPythonコードで KMO・負荷量・因子得点まで求められます。

import pandas as pd
from factor_analyzer import FactorAnalyzer
from factor_analyzer.factor_analyzer import calculate_kmo, calculate_bartlett_sphericity

df = pd.read_csv("bfi.csv")              # psych パッケージの bfi を CSV にしたもの
items = [c for c in df.columns if c[0] in "ACENO" and c[1:].isdigit()]
X = df[items].dropna()                   # 欠測のある人を除くと 2,436人

chi2, p = calculate_bartlett_sphericity(X)
kmo_items, kmo_total = calculate_kmo(X)
print(round(kmo_total, 3))               # 0.849

fa = FactorAnalyzer(n_factors=5, method="minres", rotation="oblimin")
fa.fit(X)
loadings = pd.DataFrame(fa.loadings_, index=items).round(2)
print(loadings.loc[["N1", "C2", "E2", "A3", "O3"]])
scores = fa.transform(X)                 # 因子得点(2,436行×5列)

斜交回転のときは get_communalities() の値に注意が要ります。このメソッドは回転後の負荷量(パターン行列)の二乗和を返すだけなので、オブリミン回転後の bfi では A1 の共通性が0.27と出ます。回転前に解いた値は0.20です。共通性は rotation=None で解いた結果から読みます。

Rの因子分析|psychの既定値と平行分析の実行例

R では psych(CRAN の最新版は2.6.9、2026年9月30日公開)の fa() を使います。既定は最小残差法・オブリミン回転で、オブリミンには GPArotation パッケージも必要です。平行分析は fa.parallel() 1行で実行できます。bfi は psych に同梱されているので、次のコードはそのまま動きます。

install.packages(c("psych", "GPArotation"))
library(psych)
x <- na.omit(bfi[, 1:25])        # 25項目、欠測を除いて 2,436人
KMO(x)$MSA                       # 0.849
set.seed(20261030)
fa.parallel(x, fm = "minres", fa = "both", n.iter = 500, quant = 0.95)
f <- fa(x, nfactors = 5)         # 既定は fm = "minres", rotate = "oblimin"
print(f$loadings, cutoff = 0.4, sort = TRUE)

SPSSの因子分析|既定の抽出法と変更箇所

SPSS Statistics ではメニューの[分析]→[次元分解]→[因子分析]から実行します。注意したいのは抽出法の既定です。IBM のコマンド構文リファレンスでは、抽出法を指定しない FACTOR は主成分で抽出すると定められています。既定のまま実行すると、手続き名は「因子分析」でも中身は主成分分析になるので、[因子抽出]で主因子法か最尤法を選びます。回転は、バリマックス・エカマックス・クォーティマックス・直接オブリミン・プロマックスから選べます。

Excelの分析ツール|因子分析の非対応とデータの書き出し

Excel の標準の分析ツールには、因子分析の専用メニューはありません。分析ツールの公式一覧に載っているのは分散分析・相関・回帰・t検定など19種類で、因子分析も主成分分析も含まれていません。Excel で集めたデータは CSV で書き出し、上の Python か R で分析するのが手軽です。

因子分析と主成分分析・回帰分析・クラスター分析の違い

最も混同されやすいのが主成分分析です。主成分分析は変数を足し合わせて分散を最大限に保つ合成変数を作り、独自因子を区別しません。そのため、同じ bfi を5つにまとめても、主成分分析の5成分は全分散の53.7%を説明し、因子分析の5因子の42.4%より大きく出ます。主成分分析の数字が大きいのは、設問固有のばらつきや測定誤差まで説明に含めているからで、因子分析より優れているという意味ではありません。

手法 目的 因子分析との関係
因子分析 相関の背後の潜在因子を推定 ―
主成分分析 変数を合成して次元を減らす 独自因子を分けない
回帰分析 目的変数を予測・説明 因子得点を説明変数にできる
クラスター分析 似た対象をグループに分ける 因子得点を入力にできる

「アンケートの背後にある意識の構造を知りたい」なら因子分析、「たくさんの指標を少数の総合指標にまとめたい」なら主成分分析を選びます。主成分分析の手順は主成分分析とは?定義・仕組み・分析手順から導入判断まで実装目線で解説、手法全体の選び方は多変量解析とは?予測と要約で選ぶ手法一覧とビジネスでの使いどころにまとめています。

因子分析を使うべきでない場面と失敗パターン

因子分析を適用するには、複数の観測変数の相関を共通因子で説明するモデルが妥当である必要があります。次のような場面では、分析を回す前に設計から見直します。

  • 1つの概念に設問が1〜2問しかない:1因子あたり3項目以上が一般的な目安です。満足度を1問ずつ聞いたアンケートを後から因子分析しても、意味のある因子は出にくくなります。設問設計の段階で、測りたい概念ごとに3〜5問を用意します。評定の段階数の決め方はリッカート尺度とは?アンケート5段階評価の選択肢例と4・7段階の選び方、集計方法を参照してください。
  • SPSS の既定のまま「因子分析」と報告する:中身は主成分分析なので、共通性が過大に出ます。抽出法を本文に明記し、主因子法か最尤法で解き直します。
  • 因子名を負荷量の上位1項目だけで決める:符号の向きや交差負荷を見落とします。bfi の外向性因子のように、符号を確かめてから名前を付けます。
  • EFAで作った構造を同じデータのCFAで「確認」する:適合度は良く出ますが、検証にはなりません。

アンケートの回収から集計、分析用データの書き出しまでを自社の業務に合わせて整えたい場合は、アンケート管理システム開発も検討してください。

よくある質問

因子分析とは簡単にいうと何ですか?

たくさんの設問の回答の相関から、それらをまとめて生み出している少数の要因(因子)を推定する方法です。25問の性格検査が5つの性格特性にまとまる、といった整理ができます。

因子負荷量はいくつ以上あればよいですか?

絶対値0.4以上を「その因子に載っている」とみなすのが慣例で、緩める場合は0.3以上を使います。ただし0.4未満でも内容上欠かせない項目は残すことがあり、機械的な削除の基準ではありません。

因子分析に必要なサンプルサイズはどれくらいですか?

一律の人数はありません。MacCallum ら(1999)の研究では、共通性が高いデータほど少ない人数でも因子が再現されました。共通性が0.4前後の設問が多いアンケートでは、数百人規模を確保するのが安全です。

因子分析はExcelでできますか?

標準の分析ツールではできません。Microsoft の公式一覧にある19種類の分析に因子分析は含まれていないため、Python(factor_analyzer)、R(psych)、SPSS などを使います。

探索的因子分析と確認的因子分析はどちらを先に行いますか?

新しく作った尺度なら探索的因子分析が先で、得られた構造を別の標本で確認的因子分析にかけます。先行研究で構造が確立している尺度を使うなら、最初から確認的因子分析で当てはまりを確かめます。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.29 テックブログ ソニー生命の不正アクセス:38.5万件の対象確認と窓口、停止中の手続き
  2. 2026.10.31 テックブログ 無印良品の情報漏洩:MUJIアプリ最大2,726万件の対象確認となりすましメール対策
  3. 2026.10.31 テックブログ 松屋の不正アクセス:237万件の対象確認と窓口、漏れたパスワードの守り方
  4. 2026.10.27 テックブログ Joshin(ジョーシン)不正アクセス:最大600万件の対象とサブスク初期パスワードの対処
  5. 2026.10.28 テックブログ リンツ不正アクセス:314万件の対象確認とパスワード強制リセット後の対処

RELATED POSTS 関連記事

目次