線形代数学 第44回講義ノート:因子分析の基礎
講義情報と予習ガイド
講義回: 第44回 講義テーマ: 因子分析の基礎 関連項目: 線形代数応用としてのデータサイエンス 予習すべき内容: 主成分分析(第41-42回)、特異値分解(第39-40回)
1. 学習目標
本日の講義では、以下の項目について理解することを目標とします:
- 因子分析の概念と目的を理解する
- 潜在変数モデルの考え方と数学的定式化を習得する
- 因子負荷量の定義と解釈方法を学ぶ
- 共通性と独自性の概念を理解し、計算方法を習得する
- 因子分析と主成分分析の違いを理解する
2. 因子分析の概念と目的
2.1 因子分析とは
定義: 因子分析(Factor Analysis)は、多変量データの背後に潜む共通因子(latent factors)を探索する統計的手法です。多数の観測変数間の相関関係を少数の潜在因子によって説明することを目的としています。
簡単に言えば、因子分析は「直接測定できない隠れた要因」を見つけ出す方法です。例えば、様々な健康指標(血圧、体重、コレステロール値など)の背後にある「全体的な健康状態」のような潜在的な要因を特定します。
具体例として、健康調査で10の質問項目があるとします。これらの質問への回答パターンを分析すると、「身体的健康」と「精神的健康」という2つの主要な隠れた因子が見つかるかもしれません。つまり、10個の質問(観測変数)を2つの因子で要約できるのです。
因子分析は、主に以下のような状況で用いられます:
- 多数の測定項目から潜在的な構成概念(construct)を特定したい場合 (例:性格検査の多数の質問から「外向性」や「誠実性」などの性格特性を抽出)
- 複雑な多変量データの構造を単純化したい場合 (例:30種類の健康指標を「身体的健康」「精神的健康」「生活習慣」などの少数の因子に集約)
- 観測変数間の相関関係を説明する潜在メカニズムを探索したい場合 (例:なぜ血圧と心拍数、コレステロール値に相関があるのかを説明する共通の健康因子を特定)
2.2 因子分析の歴史的背景
因子分析は、心理学者のチャールズ・スピアマン(Charles Spearman)が1904年に知能研究のために開発した手法に起源を持ちます。スピアマンは、様々な知能テスト(数学、言語、空間認識など)の得点間に相関があることに注目しました。彼はこの相関パターンを説明するために「一般知能因子(g因子)」という概念を提案しました。
つまり、「数学が得意な人は言語も得意である傾向がある」という現象を説明するために、「一般的な知能」という直接測定できない潜在因子を仮定したのです。
2.3 因子分析とPCAの比較
因子分析と主成分分析(PCA)は、どちらも多変量データの次元を削減する手法ですが、目的と数学的基礎が異なります:
側面 | 主成分分析 (PCA) | 因子分析 (FA) |
---|---|---|
目的 | データの分散を最大化する直交軸を見つける | 観測変数間の相関を説明する潜在因子を特定する |
モデル | 決定論的(数学的な変換) | 確率論的(統計的モデル) |
エラー項 | 考慮しない(すべての分散を説明しようとする) | 独自性(uniqueness)として明示的に考慮する |
数学的基礎 | 共分散行列の固有値分解 | 特定の共分散構造を持つ確率モデル |
結果の解釈 | 主成分は観測変数の線形結合(数学的な変換結果) | 因子は潜在変数として解釈(実際に存在すると仮定される要因) |
例えば、10個の健康指標がある場合: - PCAは「これらのデータを最もよく表現する10個未満の新しい軸は何か?」と問います。 - 因子分析は「これらの健康指標間の相関パターンを説明する隠れた健康要因は何か?」と問います。
PCAは数学的な変換に焦点を当て、因子分析は潜在的な原因メカニズムに焦点を当てるのです。
3. 潜在変数モデル
3.1 観測変数と潜在変数の関係
潜在変数モデルでは、2種類の変数を考えます:
-
観測変数(observed variables):直接測定できる変数 例:血圧、体重、コレステロール値、アンケートの回答など
-
潜在変数(latent variables):直接測定できないが、理論的に存在すると仮定される変数 例:「全体的な健康状態」「精神的ストレス」「知能」など
定義: 潜在変数(latent variable)とは、直接観測できないが、複数の観測変数間の相関パターンを説明するために理論的に導入される構成概念です。
日常的な例で考えると: - 「幸福度」は直接測定できませんが、生活満足度、健康状態、人間関係の質などの観測可能な指標を通じて間接的に測定できます。 - 「学力」は直接見えませんが、数学のテスト、言語のテスト、記憶力テストなどの得点を通じて間接的に推測できます。
因子分析では、観測変数間の相関パターンを説明する潜在変数(因子)を特定します。
3.2 因子分析の数学的モデル
因子分析の基本モデルは、以下の式で表されます:
\[\mathbf{X} = \mathbf{\Lambda F} + \mathbf{\varepsilon}\]
この式は、観測データが潜在因子と誤差で構成されていることを示しています。詳しく見ていきましょう:
- \(\mathbf{X}\) は \(p\) 次元の観測変数ベクトル(例:10種類の健康指標の測定値)
- \(\mathbf{F}\) は \(m\) 次元の潜在共通因子ベクトル(例:身体的健康、精神的健康などの潜在因子、\(m < p\))
- \(\mathbf{\Lambda}\) は \(p \times m\) の因子負荷量行列(観測変数と潜在因子の関係の強さを表す)
- \(\mathbf{\varepsilon}\) は \(p\) 次元の独自因子(誤差項)ベクトル(因子では説明できない部分)
各観測変数 \(X_i\) については、以下のように展開できます:
例えば、血圧(\(X_1\))が以下のように表されるとします: \(\(X_1 = 0.8F_1 + 0.2F_2 + \varepsilon_1\)\)
これは「血圧は身体的健康因子(\(F_1\))と強く関連し(負荷量0.8)、精神的健康因子(\(F_2\))とも弱く関連している(負荷量0.2)。また、これらの因子では説明できない独自の変動(\(\varepsilon_1\))も持つ」ということを意味します。
3.3 モデルの仮定
因子分析モデルでは、以下の仮定を置きます:
-
因子間の相関はゼロ(直交因子モデルの場合):\(\text{Cov}(F_i, F_j) = 0\) (\(i \neq j\)) → 例えば、「身体的健康」と「精神的健康」という因子は互いに独立していると仮定
-
因子の分散は1:\(\text{Var}(F_i) = 1\) → 因子の単位を標準化して、解釈を容易にする
-
因子と独自因子間の相関はゼロ:\(\text{Cov}(F_i, \varepsilon_j) = 0\) → 例えば、身体的健康因子(\(F_1\))は、血圧の独自因子(\(\varepsilon_1\))とは無関係
-
独自因子間の相関はゼロ:\(\text{Cov}(\varepsilon_i, \varepsilon_j) = 0\) (\(i \neq j\)) → 例えば、血圧の独自因子(\(\varepsilon_1\))と体重の独自因子(\(\varepsilon_2\))は無関係
これらの仮定により、モデルが数学的に解きやすくなります。
3.4 共分散構造
因子分析モデルのもとでの観測変数の共分散行列 \(\mathbf{\Sigma}\) は以下のように表されます:
ここで \(\mathbf{\Psi}\) は独自性の対角行列で、\(\psi_i = \text{Var}(\varepsilon_i)\) です。
この式は、データの共分散を「共通因子による部分」と「独自因子による部分」に分解していることを示しています。
例えば、2つの健康指標(血圧と体重)の相関が高い場合、それは両方が共通の潜在因子(例:身体的健康)に強く関連しているためと説明できます。
3.5 PCAとの違い
PCAと因子分析の主な違いは、モデルの構造にあります:
-
PCAは全分散(共通分散と独自分散)を考慮する: すべての変動を説明しようとし、誤差項を明示的に区別しません。
-
因子分析は共通分散のみを対象とし、独自分散を誤差として明示的に扱う: 変数間の相関を説明する部分(共通因子)と、個別の変数固有の部分(独自因子)を区別します。
以下の図は、この考え方の違いを示しています:
[変数の分散の分解]
PCA:
変数の全分散 → 主成分で説明 (残差なし)
因子分析:
変数の全分散 → 共通因子で説明する部分(共通性)+ 説明されない部分(独自性)
例えば、健康データの場合: - PCAは「血圧のデータの総変動を最もよく表現する軸は何か」を問います。 - 因子分析は「血圧と体重の相関を説明する共通の健康因子は何か、そして血圧固有の変動はどれくらいか」を問います。
4. 因子負荷量
4.1 因子負荷量の定義
定義: 因子負荷量(factor loading)とは、各観測変数と潜在因子との間の相関係数です。因子負荷量行列 \(\mathbf{\Lambda}\) の要素 \(\lambda_{ij}\) は、観測変数 \(X_i\) と因子 \(F_j\) の関係の強さを表します。
わかりやすく言えば、因子負荷量は「各測定項目がどの潜在因子とどれくらい強く関連しているか」を示す数値です。
例えば、健康指標と2つの因子の関係が以下のようになっているとします:
身体的健康因子(F1) 精神的健康因子(F2)
血圧(X1) 0.8 0.1
体重(X2) 0.7 0.2
睡眠の質(X3) 0.2 0.7
ストレス(X4) 0.1 0.8
この表から: - 血圧は身体的健康因子と強く関連(負荷量0.8)していますが、精神的健康因子とはほとんど関連していません(負荷量0.1) - 睡眠の質は精神的健康因子と強く関連(負荷量0.7)していますが、身体的健康因子とはあまり関連していません(負荷量0.2)
因子負荷量の値は -1 から 1 の範囲をとり、その絶対値が大きいほど、観測変数と因子の関連が強いことを示します。
4.2 因子負荷量の解釈
因子負荷量の解釈は以下のガイドラインを用いることが一般的です:
-
|負荷量| ≥ 0.7 : 非常に強い関連 (例:血圧と身体的健康因子の関係)
-
0.5 ≤ |負荷量| < 0.7 : 強い関連 (例:コレステロール値と身体的健康因子の関係かもしれません)
-
0.3 ≤ |負荷量| < 0.5 : 中程度の関連 (例:運動習慣と精神的健康因子の関係かもしれません)
-
|負荷量| < 0.3 : 弱い関連 (例:年齢と精神的健康因子の関係かもしれません)
因子負荷量の2乗値は、その因子によって説明される観測変数の分散の割合を表します。
例えば、血圧の身体的健康因子への負荷量が0.8の場合、身体的健康因子は血圧の分散の64%(0.8²)を説明していることになります。残りの36%は他の因子や独自因子(誤差)によるものです。
4.3 因子パターン行列
因子分析では、以下の2つの行列を区別することが重要です:
-
因子構造行列(Factor Structure Matrix): 観測変数と因子間の相関係数を表す → 変数と因子の単純な関係の強さを示します
-
因子パターン行列(Factor Pattern Matrix): 共通因子空間における変数の位置を表す偏回帰係数 → 他の因子の影響を制御した上での、変数と各因子の関係を示します
直交回転(因子間に相関がない場合)を用いる場合、この2つの行列は一致します。 しかし、斜交回転(因子間に相関がある場合)を用いる場合は異なります。
例えば、「身体的健康」と「精神的健康」という因子が互いに相関している場合: - 構造行列は単純な相関を示す - パターン行列は、「精神的健康の影響を制御した上での身体的健康と血圧の関係」のような、より純粋な関係を示す
5. 共通性と独自性
5.1 共通性の定義
定義: 共通性(communality)とは、ある観測変数の分散のうち、すべての共通因子によって説明される部分の割合です。
わかりやすく言えば、共通性は「その変数がどれだけ因子によって説明されているか」を示す指標です。
数学的には、観測変数 \(X_i\) の共通性 \(h_i^2\) は以下の式で表されます:
つまり、すべての因子負荷量の2乗和が共通性となります。
例えば、血圧の因子負荷量が「身体的健康因子に対して0.8、精神的健康因子に対して0.1」である場合: \(\(h_1^2 = 0.8^2 + 0.1^2 = 0.64 + 0.01 = 0.65\)\)
これは、血圧の分散の65%が共通因子によって説明されることを意味します。
5.2 独自性の定義
定義: 独自性(uniqueness)とは、ある観測変数の分散のうち、共通因子では説明されない部分の割合です。
独自性は、その変数に固有の変動や測定誤差による部分を表します。
数学的には、観測変数 \(X_i\) の独自性 \(\psi_i\) は以下の式で表されます:
標準化された変数を用いる場合、変数の全分散は1なので、共通性と独自性の和は1になります。
先ほどの血圧の例では: \(\(\psi_1 = 1 - 0.65 = 0.35\)\)
これは、血圧の分散の35%が共通因子では説明されず、血圧に固有の要因(例:測定誤差、個人特有の変動など)によるものであることを意味します。
5.3 共通因子と独自因子
因子分析モデルでは、観測変数に影響を与える要因を2種類に分けて考えます:
-
共通因子(Common Factors): 複数の観測変数に共通して影響を与える因子 → 例:身体的健康因子は血圧、体重、心拍数などの複数の変数に影響
-
独自因子(Unique Factors): 特定の観測変数だけに影響を与える因子 → 例:血圧の測定方法に関連する誤差、血圧に特有の変動要因
独自因子はさらに以下の2つに分けられます: - 特殊因子(Specific Factors): その変数特有の系統的な影響 → 例:特定の血圧計の特性による系統的な偏り
- 誤差因子(Error Factors): 測定誤差などのランダムな影響 → 例:測定時の環境条件によるランダムな変動
通常、因子分析ではこれらを区別せず、まとめて独自因子として扱います。
5.4 共通性の計算例
5つの健康指標に対する3つの因子の負荷量行列が以下のようになっているとします:
因子負荷量行列 Λ:
F1 F2 F3
X1 0.80 0.10 0.20 (血圧)
X2 0.75 0.30 0.15 (心拍数)
X3 0.20 0.70 0.40 (ストレスレベル)
X4 0.10 0.65 0.50 (睡眠の質)
X5 0.30 0.25 0.85 (運動量)
各変数の共通性を計算してみましょう:
血圧(X1)の共通性: \(h_1^2 = 0.80^2 + 0.10^2 + 0.20^2 = 0.64 + 0.01 + 0.04 = 0.69\)
心拍数(X2)の共通性: \(h_2^2 = 0.75^2 + 0.30^2 + 0.15^2 = 0.56 + 0.09 + 0.02 = 0.67\)
ストレスレベル(X3)の共通性: \(h_3^2 = 0.20^2 + 0.70^2 + 0.40^2 = 0.04 + 0.49 + 0.16 = 0.69\)
睡眠の質(X4)の共通性: \(h_4^2 = 0.10^2 + 0.65^2 + 0.50^2 = 0.01 + 0.42 + 0.25 = 0.68\)
運動量(X5)の共通性: \(h_5^2 = 0.30^2 + 0.25^2 + 0.85^2 = 0.09 + 0.06 + 0.72 = 0.87\)
各変数の独自性も計算できます:
血圧(X1)の独自性: \(\psi_1 = 1 - 0.69 = 0.31\) 心拍数(X2)の独自性: \(\psi_2 = 1 - 0.67 = 0.33\) ストレスレベル(X3)の独自性: \(\psi_3 = 1 - 0.69 = 0.31\) 睡眠の質(X4)の独自性: \(\psi_4 = 1 - 0.68 = 0.32\) 運動量(X5)の独自性: \(\psi_5 = 1 - 0.87 = 0.13\)
この結果から、運動量(X5)の分散は共通因子によって87%説明されており(共通性が0.87)、最も共通性が高いことがわかります。一方、心拍数(X2)は共通性が最も低く(0.67)、独自因子による説明が比較的多い(33%)ことがわかります。
6. Pythonによる実装と可視化
6.1 scikit-learnによる因子分析の実装
以下に、scikit-learnを用いた因子分析の基本的な実装例を示します。この例では、健康関連の5つの変数に対して因子分析を適用します。
import numpy as np
import pandas as pd
from sklearn.decomposition import FactorAnalysis
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import seaborn as sns
# サンプルデータの作成(健康関連の5つの変数)
np.random.seed(42) # 結果を再現可能にするためのシード設定
n_samples = 200 # サンプル数
# 3つの潜在因子を生成(実際のデータでは観測できない)
F1 = np.random.normal(0, 1, n_samples) # 身体的健康因子
F2 = np.random.normal(0, 1, n_samples) # 精神的健康因子
F3 = np.random.normal(0, 1, n_samples) # 生活習慣因子
# 観測変数の生成(実際のデータで観測できる部分)
e = np.random.normal(0, 0.3, (n_samples, 5)) # 誤差項(独自因子)
# 観測変数 = 因子負荷量 × 潜在因子 + 誤差
X = np.zeros((n_samples, 5))
X[:, 0] = 0.8 * F1 + 0.1 * F2 + 0.2 * F3 + e[:, 0] # 血圧
X[:, 1] = 0.75 * F1 + 0.3 * F2 + 0.15 * F3 + e[:, 1] # 心拍数
X[:, 2] = 0.2 * F1 + 0.7 * F2 + 0.4 * F3 + e[:, 2] # ストレスレベル
X[:, 3] = 0.1 * F1 + 0.65 * F2 + 0.5 * F3 + e[:, 3] # 睡眠の質
X[:, 4] = 0.3 * F1 + 0.25 * F2 + 0.85 * F3 + e[:, 4] # 運動量
# データフレームの作成
columns = ['血圧', '心拍数', 'ストレスレベル', '睡眠の質', '運動量']
df = pd.DataFrame(X, columns=columns)
# データの標準化(因子分析の前処理として重要)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 因子分析の実行
n_factors = 3 # 因子数の指定
fa = FactorAnalysis(n_components=n_factors, random_state=42)
fa.fit(X_scaled)
# 因子負荷量の取得
loadings = fa.components_.T # 転置して観測変数×因子の形式に
# 因子負荷量の表示
loadings_df = pd.DataFrame(loadings, index=columns,
columns=[f'Factor {i+1}' for i in range(n_factors)])
print("因子負荷量:")
print(loadings_df)
# 共通性の計算(因子負荷量の2乗和)
communalities = np.sum(loadings**2, axis=1)
uniquenesses = 1 - communalities # 独自性 = 1 - 共通性
# 共通性と独自性の表示
variance_df = pd.DataFrame({
'共通性': communalities,
'独自性': uniquenesses
}, index=columns)
print("\n共通性と独自性:")
print(variance_df)
# 因子負荷量のヒートマップ表示(視覚的な理解を助ける)
plt.figure(figsize=(10, 6))
sns.heatmap(loadings_df, annot=True, cmap='coolwarm', center=0, fmt='.2f')
plt.title('因子負荷量ヒートマップ')
plt.tight_layout()
plt.show()
# 2D因子空間における変数のプロット(最初の2因子のみ)
plt.figure(figsize=(8, 8))
plt.axhline(y=0, color='k', linestyle='-', alpha=0.3) # x軸
plt.axvline(x=0, color='k', linestyle='-', alpha=0.3) # y軸
# 各変数を因子空間に矢印でプロット
for i, variable in enumerate(columns):
plt.arrow(0, 0, loadings[i, 0], loadings[i, 1], head_width=0.05, head_length=0.05,
fc='blue', ec='blue', length_includes_head=True)
plt.text(loadings[i, 0]*1.15, loadings[i, 1]*1.15, variable, color='red', ha='center', va='center')
plt.xlim(-1, 1) # x軸の範囲
plt.ylim(-1, 1) # y軸の範囲
plt.xlabel('Factor 1') # x軸ラベル
plt.ylabel('Factor 2') # y軸ラベル
plt.grid(True) # グリッド表示
plt.title('2次元因子空間における変数の位置') # タイトル
plt.tight_layout()
plt.show()
このコードの説明:
-
まず、3つの潜在因子(身体的健康、精神的健康、生活習慣)と5つの観測変数(血圧、心拍数など)からなる人工データを生成しています。
-
各観測変数は、3つの潜在因子の線形結合に誤差項を加えたものとして生成されています。例えば、血圧は身体的健康因子との関連が強く(0.8)、精神的健康因子との関連が弱い(0.1)という設定です。
-
データを標準化した後、scikit-learnのFactorAnalysisクラスを使用して因子分析を実行しています。
-
分析結果から因子負荷量を取得し、共通性と独自性を計算しています。
-
最後に、因子負荷量のヒートマップと2次元因子空間における変数の位置をプロットしています。これにより、各変数と因子の関係を視覚的に把握できます。
6.2 出力結果と解釈
上記のコードを実行すると、以下のような出力が得られます:
因子負荷量:
Factor 1 Factor 2 Factor 3
血圧 0.82 0.12 0.18
心拍数 0.73 0.32 0.14
ストレスレベル 0.18 0.71 0.38
睡眠の質 0.09 0.67 0.48
運動量 0.31 0.24 0.83
共通性と独自性:
共通性 独自性
血圧 0.72 0.28
心拍数 0.65 0.35
ストレスレベル 0.68 0.32
睡眠の質 0.68 0.32
運動量 0.83 0.17
この結果から以下のことが読み取れます:
-
Factor 1(身体的健康因子): 血圧(0.82)と心拍数(0.73)に強く関連しています。これは明らかに身体的健康を表す因子と解釈できます。
-
Factor 2(精神的健康因子): ストレスレベル(0.71)と睡眠の質(0.67)に強く関連しています。これは精神的健康や心理的要因を表す因子と解釈できるでしょう。
-
Factor 3(生活習慣因子): 運動量(0.83)に特に強く関連しています。またストレスレベル(0.38)や睡眠の質(0.48)とも中程度の関連があります。これは生活習慣や活動に関連する因子と解釈できます。
-
共通性と独自性を見ると:
- 運動量の共通性が最も高く(0.83)、3つの因子によって分散の83%が説明されています。残りの17%は運動量に固有の要因です。
- 心拍数の共通性が最も低く(0.65)、35%は共通因子では説明できない独自の変動です。
因子分析の結果を解釈する際は、因子負荷量のパターンを見て因子の「名前付け」を行うことが重要です。例えば、血圧と心拍数に高い負荷量を持つFactor 1は「身体的健康因子」と解釈するのが自然でしょう。
6.3 因子負荷量の可視化
因子負荷量は、ヒートマップと2次元の因子空間プロットで可視化すると理解しやすくなります。
ヒートマップ:各セルの色が濃いほど、その変数と因子の関連が強いことを示します。例えば、血圧とFactor 1の交点が濃い赤であれば、強い正の関連があることを意味します。
2次元因子空間プロット:最初の2つの因子(Factor 1とFactor 2)の空間における各変数の位置を示します。原点からの距離が大きいほど、その因子との関連が強いことを意味します。
- 右側(Factor 1軸の正の方向)に位置する変数は、Factor 1と正の関連があります(例:血圧、心拍数)
- 上側(Factor 2軸の正の方向)に位置する変数は、Factor 2と正の関連があります(例:ストレスレベル、睡眠の質)
- 変数間の角度が小さいほど、それらの変数間の相関が高いことを示しています
このように可視化を行うことで、データの潜在構造を直感的に理解しやすくなります。
7. 演習問題
基本問題
-
因子分析と主成分分析の主な違いを3つ挙げてください。
-
以下の因子負荷量行列について、各変数の共通性と独自性を計算してください。
変数 因子1 因子2 X1 0.70 0.30 X2 0.60 0.50 X3 0.20 0.80
-
因子分析における以下の用語について説明してください:
- 潜在変数
- 因子負荷量
- 共通性
-
独自性
-
因子負荷量の値が0.8、0.4、0.1の場合、それぞれどのように解釈しますか?
応用問題
-
6つの変数からなる相関行列が以下のように与えられた場合、因子分析を適用する際の適切な因子数をどのように決定しますか?また、その理由を説明してください。
相関行列: X1 X2 X3 X4 X5 X6 X1 1.0 0.7 0.6 0.2 0.1 0.3 X2 0.7 1.0 0.5 0.3 0.2 0.2 X3 0.6 0.5 1.0 0.3 0.2 0.3 X4 0.2 0.3 0.3 1.0 0.8 0.7 X5 0.1 0.2 0.2 0.8 1.0 0.6 X6 0.3 0.2 0.3 0.7 0.6 1.0
-
健康データサイエンスの文脈で、因子分析がどのように応用されるか具体例を挙げて説明してください。特に、多数の健康指標から潜在的な健康状態を推定する方法について考察してください。
8. よくある質問と解答
Q1: 因子分析では因子数をどのように決定すればよいですか?
A1: 因子数を決定する方法としては、以下のようなものがあります:
- カイザー基準(Kaiser criterion): 固有値が1以上の因子を採用します。これは、1つの因子が少なくとも1つの変数分の情報を含んでいるべきという考え方に基づいています。
例:固有値が [2.5, 1.8, 1.2, 0.8, 0.5, 0.2] であれば、最初の3つの因子を採用します。
- スクリープロット(Scree plot): 固有値をグラフにプロットし、急激な減少(「肘」)が見られる点を識別します。その点より前の因子を採用します。
例:固有値が [4.2, 2.1, 0.9, 0.6, 0.5, 0.4] という場合、第2因子と第3因子の間に「肘」があると判断し、2つの因子を採用します。
- 平行分析(Parallel Analysis): 実際のデータから得られる固有値と、同じサイズのランダムデータから得られる固有値を比較します。実際の固有値がランダムデータの固有値を上回る因子のみを採用します。
これは、単なる偶然を超えて意味のある構造を持つ因子を特定するのに役立ちます。
- 累積寄与率(Cumulative Proportion of Variance): 因子が全体の分散の一定割合(例えば70%)を説明するまで採用します。
例:3因子で65%、4因子で72%の分散を説明する場合、70%を基準とすれば4因子を採用します。
- 解釈可能性(Interpretability): 最終的には、各因子が理論的に意味を持ち、解釈可能であるかを考慮します。
例:5因子モデルの方が統計的には良いかもしれませんが、5つ目の因子が意味を持たない場合は4因子モデルを選ぶことが適切かもしれません。
実際の分析では、これらの基準を組み合わせて総合的に判断することが推奨されます。どの方法も完璧ではないため、研究の目的や理論的背景も考慮する必要があります。
Q2: 因子分析と主成分分析はどちらを選ぶべきですか?
A2: 以下の基準で選択を検討するとよいでしょう:
-
目的が次元削減や圧縮 → 主成分分析 例:100種類の健康指標を10個程度の主成分に要約してデータ量を減らしたい場合
-
目的が潜在構造の探索 → 因子分析 例:健康調査の質問項目の背後にある健康概念を特定したい場合
-
すべての分散(共通分散+独自分散)が重要 → 主成分分析 例:データの全体的なパターンを失わずに表現したい場合
-
共通分散のみが重要 → 因子分析 例:変数間の相関関係を説明する潜在因子を見つけたい場合
-
変数に測定誤差があり、それを明示的にモデル化したい → 因子分析 例:質問紙調査など、測定誤差が大きいデータを扱う場合
具体例として、健康調査データを考えてみましょう:
- 主成分分析の場合:「このデータセットを最もよく表現する合成変数は何か?」という問いに答えます。
- 因子分析の場合:「これらの健康指標の間の相関パターンを説明する潜在的な健康状態の次元は何か?」という問いに答えます。
どちらの方法も価値があり、研究の目的によって適切な選択が変わります。
Q3: 因子負荷量が複数の因子で高い値を示す場合、どう解釈すればよいですか?
A3: これは「交差負荷(cross-loading)」と呼ばれる状況で、変数が複数の因子と関連していることを示します。例えば、「運動頻度」という変数が「身体的健康因子」と「生活習慣因子」の両方に高い負荷量を示す場合があります。
この場合、以下の対応が考えられます:
- 因子回転を適用する: 特にVarimax回転などの直交回転を適用すると、各変数が一つの因子に高い負荷量を示し、他の因子への負荷量が低くなるような「単純構造」が得られることがあります。
例:回転前は「運動頻度」が因子1に0.6、因子2に0.5の負荷量だったのが、回転後は因子1に0.8、因子2に0.2になる場合
- 複数の因子にまたがる概念として解釈する: その変数が本質的に複数の概念にまたがっているものと考えます。
例:「睡眠の質」は身体的健康と精神的健康の両方に関連する概念かもしれません。
- 変数の再検討: 特に質問紙調査の場合、その項目が曖昧で複数の概念を測定している可能性があります。
例:「あなたの全体的な健康状態はどうですか?」という質問は、身体的健康と精神的健康の両方を含みます。
- 変数の除外: 場合によっては、交差負荷が大きい変数を分析から除外し、より明確な因子構造を得ることも検討します。
ただし、理論的に重要な変数は、交差負荷があっても分析に含めることがあります。
交差負荷の解釈は、分析の目的や対象となる分野の知識に大きく依存します。データだけでなく、理論的な考察も重要です。
Q4: 共通性が非常に低い変数がある場合、どうすべきですか?
A4: 共通性が低い(例えば0.3未満)変数は、因子モデルによって十分に説明されていないことを示します。つまり、その変数は他の変数と共有する部分が少なく、独自の変動が大きいことを意味します。
対応としては:
- 変数の除外を検討する: 共通性が極端に低い変数は、現在の因子構造とあまり関連がないか、測定に問題がある可能性があります。
例:健康調査で「血液型」の変数が低い共通性を示す場合、他の健康指標とは関連が低いため除外を検討します。
- 因子数を増やす可能性を検討する: その変数が他の変数とは異なる独自の次元を表している場合、因子数を増やすことで共通性が向上することがあります。
例:3因子モデルでは「運動頻度」の共通性が低いが、4因子モデルでは高くなる場合
- 変数の測定方法を再検討する: 特に質問紙調査の場合、質問の仕方や尺度に問題がある可能性があります。
例:逆転項目(「健康でない」など否定形の質問)は誤って回答されやすく、低い共通性を示すことがあります。
- 理論的重要性に基づいて判断する: 変数が理論的に重要であれば、低共通性でも分析に含める場合があります。
例:研究の主要なアウトカム変数は、共通性が低くても分析に含めることが多いです。
共通性の閾値(0.3や0.4など)は絶対的なものではなく、研究分野や目的によって異なることがあります。重要なのは、結果の解釈において共通性の低さを考慮することです。
9. まとめ
本講義では、因子分析の基礎について学びました。因子分析は、多変量データの背後にある潜在的な因子構造を探索するための強力な手法です。主要なポイントは以下の通りです:
-
因子分析の基本概念: 因子分析は観測変数の相関パターンを説明する潜在因子を特定する統計手法です。例えば、多数の健康指標から「身体的健康」「精神的健康」などの潜在因子を特定できます。
-
因子分析のモデル: 因子分析モデルは \(\mathbf{X} = \mathbf{\Lambda F} + \mathbf{\varepsilon}\) で表され、観測変数を共通因子と独自因子に分解します。このモデルにより、変数間の相関関係を少数の潜在因子で説明できます。
-
因子負荷量: 因子負荷量は観測変数と潜在因子の関係の強さを示します。例えば、血圧が身体的健康因子に0.8の負荷量を持つ場合、強い関連があると解釈します。
-
共通性と独自性: 共通性は観測変数の分散のうち共通因子によって説明される部分で、独自性はその残りの部分です。例えば、血圧の分散の70%が共通因子で説明され、30%が独自因子によるものかもしれません。
-
因子分析と主成分分析の違い: 因子分析は潜在構造の探索に適しており、独自分散を明示的に扱います。一方、主成分分析はデータ圧縮に適しており、全分散を対象とします。
因子分析は、健康データサイエンスにおいて、複雑な健康状態を少数の意味のある因子に要約し、潜在的な健康次元を特定するのに役立ちます。例えば、多数の健康指標から「身体機能」「精神健康」「生活習慣」などの因子を抽出し、個人の健康プロファイルを理解するための枠組みを提供します。
次回の講義では、因子分析の推定法、特に最尤推定と因子回転について学びます。これにより、より解釈しやすい因子構造を得る方法を理解できるでしょう。
10. 参考文献
- 矢部博. (2002). 「線形代数」. 裳華房.
- Gilbert Strang. (2016). 「線形代数とその応用」. 産業図書.
- Richard A. Johnson & Dean W. Wichern. (2007). 「Applied Multivariate Statistical Analysis」. Pearson.
- Harman, H. H. (1976). 「Modern Factor Analysis」. University of Chicago Press.
- 豊田秀樹. (1998). 「共分散構造分析入門 - 構造方程式モデリング」. 朝倉書店.