玄関雑学の部屋雑学コーナー統計学入門

第17章 因子分析

この章では因子の意味と因子分析の原理、そして結果の解釈方法について解説します。 さらに因子分析の結果を利用した尺度開発の方法と、主成分分析と因子分析の使い分けについても解説します。

17.1 因子と因子分析

(1) 主成分と因子

第16章の主成分分析では互いに関連性が強い国語と英語と社会がひとつの学力を反映していて、数学と理科がそれとは別のもうひとつの学力を反映していると考え、これに基いて主成分を解釈しました。 このことから学力には2種類の基本的なものがあり、そのひとつが国語と英語と社会のテスト結果を左右し、もうひとつが数学と理科のテスト結果を左右すると考えることができます。 逆にいえば、これらの潜在的な学力を調べるために、それを反映すると思われる複数の教科のテストをしていると考えても良いと思います。

このように直接的には観測できないものの、色々な観測値に影響を与える潜在的な要因のことを因子(Factor)と呼び、実際に観測されたデータから因子を推測するための手法を因子分析(Factor analysis)といいます。 図17.1.1のように、主成分が実際に観測されたデータを要約した概括評価項目つまり目的変数に相当するのに対して、因子は実際に観測されたデータに影響を与える項目つまり説明変数に相当します。 そして因子は実際には観測できない潜在的な説明変数なので、観測されたデータから推測することになります。

図17.1.1 主成分と因子

因子分析は人間の様々な知的能力つまり知能は少数の因子から構成されているという知能理論を証明するために、心理学分野で開発された手法です。 知能理論では因子の数は一般因子と特殊因子の2つであるとする「2因子説」と、因子の数は少数ながら複数であるとする「多因子説」が提唱されていて、最近では多因子説の方が有力視されています。 しかし2因子説の方が単純なせいか、本来は生活年齢と精神年齢の比を表す値であり、知能のほんの一面を反映する指標にすぎない知能指数(IQ:Intelligence Quotient)のことを、知能全体つまり頭の良さを表す指標であると誤解している人が沢山いるのは困ったものです。

医学分野でも因子の概念は普通に用いられています。 例えば血圧や脈拍を測定するのは心機能という因子の働きを調べるためであり、AST(GOT)やALT(GPT)を測定するのは肝機能という因子の働きを調べるためです。 しかし医学分野ではできるだけ客観的なデータを評価項目にする傾向が強いので測定項目そのものを評価項目にすることが多く、因子分析はあまり用いられません。 それに対して心理学・社会学分野では因子分析が多用され、本来は主成分分析を適用すべきデータにも因子分析を適用してしまうことがよくあります。

(2) 因子分析の実例

第16章と同じ表16.1.1のデータに因子分析を適用すると、次のような結果になります。 (注1)

表16.1.1 テスト結果
生徒ID国語数学英語理科社会合計点
17280885671367
25388627044317
34425503860217
42934432438168
56629663773271
65152437265283
77338754081307
86971526370325
93565585066274
104228462944189
115725384150211
125530403245202
134961664562283
147395818577411
156336747765315
165041606753271
174271555238258
185755534652263
198147784878332
206645494063263
平均値5651595160276
○第1因子
固有値:2.58129(初期固有値 = 2.87553)
因子スコア:f1i = -4.5763144 + 0.0146727xi1 + 0.0164830xi2 + 0.0124076xi3 + 0.0055332xi4 + 0.0318327xi5
xi1、xi2、xi3、xi4、xi5:i番目の生徒の国語、数学、英語、理科、社会の点数
○第2因子
固有値:0.954138(初期固有値 = 1.19402)
因子スコア:f2i = 0.8067893 - 0.0125110xi1 + 0.0357950xi2 - 0.0045650xi3 + 0.0062451xi4 - 0.0329295xi5
表17.1.1 因子負荷量と共通性・独自性
変数第1因子第2因子共通性独自性
国語0.736500-0.3529680.6670190.332981
数学0.6197210.6976310.8707430.129257
英語0.805787-0.0551110.6523300.347670
理科0.6112980.3730900.5128820.487118
社会0.794874-0.4479170.8324540.167546
寄与率0.5162580.1908280.7070860.292914
図17.1.2 因子負荷量のプロット
表17.1.2 因子スコア間相関係数とα係数・標準偏差
 第1因子第2因子α係数標準偏差
第1因子10.0102560.7108660.957201
第2因子0.01025610.0007210.918749

因子分析を適用するデータは各項目の単位が異なることが多いので、普通は各項目を標準化してから因子を計算します。 そして図17.1.1からわかるように、原理的に因子と主成分はよく似たものになるはずですから主成分を利用して因子を推測します。 そのため因子分析の結果は第16章の第3節で説明した各項目を標準化してから主成分を求めた結果と似たものになります。 (→16.3 特殊な主成分分析)

(3) 因子分析結果の解釈

主成分と同様に、原理的には因子も項目数と同じ数だけ求めることができます。 しかし因子数が少ないほど結果を解釈しやすいので、適当な基準で因子数を制限します。 その基準としては次のようなものがあります。

  1. 初期固有値が1以上の因子だけ抽出
  2. 固有値が0よりも大きい因子だけ抽出
  3. 因子数を指定する

1番めの基準の初期固有値というのは、因子を推測するために最初に求める主成分の固有値のことです。 この主成分は各項目を標準化してから求めたものなので全ての主成分の固有値を合計すると項目数に一致し、平均値は1になります。 そして固有値は主成分の分散つまりバラツキ具合を表し、この値が大きいほど多くの情報を持っていることを表します。 したがって主成分の固有値が1以上あるということは、その主成分が平均以上の情報を持っているということになります。

2番めの基準は固有値が正の因子だけ抽出するということです。 主成分と違って因子の固有値は負になることがあります。 しかし固有値が負の因子はデータの誤差を反映している可能性が高いので採用しない方が無難です。

3番目の基準は科学的な知見または仮定に基いて因子の数を指定する方法です。 例えば表16.1.1のデータでは、先行研究や科学的知見に基づいて学力には「文化系学力」と「理科系学力」の2種類があるということがわかっているとしたら、最初から因子数を2つと決めて因子を推測します。

因子の意味を解釈するには因子と各項目との相関係数である因子負荷量(factor loading)を利用します。 表17.1.1と図17.1.2から第1因子は全体的な学力を表し、第2因子は「数学・理科」の学力と「国語・英語・社会」の学力のどちらが優勢かというタイプを表していると、一応は解釈できそうです。 しかし因子は主成分のような概括評価項目ではないので、このような解釈ではわかりづらい時があります。 そこで少々強引ですが第1因子は「国語・英語・社会」の学力を表し、第2因子は「数学・理科」の学力を表していると解釈することもできます。 因子が説明変数つまり原因項目であるということを考えると、こちらの解釈の方がわかりやすいと思います。

表17.1.1の共通性(communality)は主成分の寄与率に相当するものであり、第1因子の因子負荷量と第2因子の因子負荷量をそれぞれ平方して合計した値です。 この値は図17.1.2において、原点から各プロットまでの平方距離に相当します。 独自性(uniqueness)は1から共通性を引いた値であり、2つの因子では説明できない情報の割合を表します。 この値は図17.1.2において、原点と各プロットを通る直線を引き、その直線と半径1の円の交点と各プロットまでの平方距離に相当します。 独自性は残差分散(residual variance)とも呼ばれ、残りの因子の情報と標本誤差を合わせたものになります。

表17.1.1の寄与率は各因子の因子負荷量を平方して平均した値です。 そして全ての因子の寄与率を合計した値が共通性の寄与率になり、1から共通性の寄与率を引いた値が独自性の寄与率になります。 寄与率は観測されたデータの全情報のうち因子によって説明できる情報の割合を表します。 上記の結果から第1因子は5教科の情報の約52%を説明でき、第2因子は約19%の情報を説明できることと、これら2つの因子で全情報の約71%を説明できることがわかります。

因子スコア(因子得点)は被験者ごとに求めた因子の具体的な値であり、上記の結果のように主成分スコアと似た式で推測します。 因子は説明変数に相当するので、推測した因子スコアと因子負荷量を使って元のデータを復元できます。 例えば1番目の生徒の因子スコアを求め、その値と因子負荷量からテストの点数を復元すると次のようになります。

○1番目の生徒の因子スコアと復元した点数
第1因子スコア:f11 = -4.5763144 + 0.0146727×72(国語) + 0.0164830×80(数学) + 0.0124076×88(英語) + 0.0055332×56(理科) + 0.0318327×71(社会)=1.46061
第2因子スコア:f21 = 0.8067893 - 0.0125110×72(国語) + 0.0357950×80(数学) - 0.0045650×88(英語) + 0.0062451×56(理科) - 0.0329295×71(社会)=0.379615
国語:標準化された点数 = 0.7365(国語と第1因子の因子負荷量)×1.46061(f11) - 0.352968(国語と第2因子の因子負荷量)×0.379615(f21) = 0.9417473
 → 元の単位の点数 = x11 = 0.9417473×13.9596(国語の標準偏差) + 56.35(国語の平均値) ≒ 69
 ∴72(実際の点数) − 69(共通性による復元点数) = 3(独自性による復元誤差)
数学:標準化された点数 = 0.619721(数学と第1因子の因子負荷量)×1.46061(f11) - 0.697631(数学と第2因子の因子負荷量)×0.379615(f21) = 1.170002
 → 元の単位の点数 = x12 = 1.170002×21.6421(数学の標準偏差) + 50.8(数学の平均値) ≒ 76
 ∴80(実際の点数) − 76(共通性による復元点数) = 4(独自性による復元誤差)
英語:標準化された点数 = 0.805787(英語と第1因子の因子負荷量)×1.46061(f11) - 0.0055111(英語と第2因子の因子負荷量)×0.379615(f21) = 1.156022
 → 元の単位の点数 = x13 = 1.156022×14.5829(英語の標準偏差) + 58.85(英語の平均値) ≒ 76
 ∴88(実際の点数) − 76(共通性による復元点数) = 12(独自性による復元誤差)
理科:標準化された点数 = 0.611298(理科と第1因子の因子負荷量)×1.46061(f11) + 0.37309(理科と第2因子の因子負荷量)×0.379615(f21) = 1.034499
 → 元の単位の点数 = x14 = 1.034499×14.5829(理科の標準偏差) + 50.6(理科の平均値) ≒ 68
 ∴56(実際の点数) − 68(共通性による復元点数) = -12(独自性による復元誤差)
社会:標準化された点数 = 0.794874(社会と第1因子の因子負荷量)×1.46061(f11) - 0.447917(社会と第2因子の因子負荷量)×0.379615(f21) = 0.9909649
 → 元の単位の点数 = x15 = 0.9909649×13.4942(社会の標準偏差) + 59.75(社会の平均値) ≒ 73
 ∴71(実際の点数) − 73(共通性による復元点数) = -2(独自性による復元誤差)

このデータの場合は因子が2つだけであり、独自性が約29%ほどあるので、完全に復元できるわけではないものの、ある程度(約71%程度)は復元できることがわかると思います。 またこれらの計算から因子分析の目的は元のデータをうまく説明(復元)できる因子モデルを構築することであることと、因子スコアおよび因子負荷量と元のデータの関係、さらに共通性と独自性の関係が何となくわかると思います。

因子スコアは平均値が0で標準偏差が1になり、お互いに独立になることが理想です。 しかし因子スコアは誤差のある推測値なので平均値は0にできるものの、標準偏差は近似的に1にしかできず、因子スコア同士の相関係数も近似的に0にしかできません。 これらのことは表17.1.2を見るとわかると思います。

また因子についてもクロンバックのα係数を計算することができます。 しかし主成分と同様に因子の信頼性の指標というよりも、因子の特徴を判断するための参考として用いる方が良いと思います。 (→16.2 主成分分析結果の解釈)

原理的に因子分析は厳密な解を求めることができず、近似解しか求められません。 そのため近似計算の方法によって色々な手法があり、それぞれ結果が微妙に異なります。 そこで手法と計算条件を色々と変えて試行錯誤的に何度も計算し、最も解釈しやすい結果を選ぶのが普通です。 (注2)


(注1) 因子は次のようにして導出します。

モデル:
= ' + =' + UD
データ行列:
(共通)因子スコア行列:
因子負荷量行列:   残差行列:
独自因子スコア行列:   重み行列:

ここで次のような前提を置き、この前提で求めた解を直交解といいます。 ただし、場合によっては各スコアが独立という前提を置かない斜交解を求めることもあります。

各データが標準化されているので、データの相関行列は単純積和行列によって求めることができます。

= ' = (FL' + UD)'(FL' + UD) = LF'FL' + LF'UD + DU'FL' + DU'UD = LL' + 2
:特殊な相関行列
共通性:   相関係数: (i≠j)
残差分散行列:   独自性:dj2

因子を最大値であるp個まで求めると、次のようにして因子スコアを求めることができます。

= ' + → [ - ] = FL' → = [ - ][']-1
0 = LL' → 0-1 = [LL']-1 → [']-1 = 0-1
= [ - ]0-1   .k = [ - ]0-1.k

これらの関係から、共通性と独自性を何らかの方法で決定できれば因子負荷量と因子スコアを求められることがわかります。 ところが相関行列は観測データから求められますが、残差分散行列は求めることができず、共通性と独自性を一意に決定することはできません。 そこで普通は共通性と独自性に色々な制約条件をつけて因子負荷量を求めます。 その制約条件によって因子分析には色々な手法があり、それぞれの解は微妙に異なります。

ここでは主成分分析との整合性が高い主因子法(PFA:Principal Factor Analysis)について説明しましょう。 この手法では因子負荷量の平方和を最大にするという条件で因子負荷量を求めます。

ラグランジュの未定乗数法の束縛条件:.k'.k = 1
.k'.k = ([ - ]0-1.k)'([ - ]0-1.k) = .k'0-1[ - ]'[ - ]0-1.k
    = .k'0-1[ - 2]0-1.k=.k'0-1.k = 1
h(.k,λ) = .k'.k - λ(.k'0-1.k - 1) → 最大化
と置くと
0.k - λ.k = → [0 - λp].k =  (.k)

以上のように、因子負荷量を求めることは特殊な相関行列0の固有ベクルトを求めることに帰着します。 独自性を無視して = とすると0 = となり、各項目を標準化した時の主成分分析と一致します。 これを主成分法といい、この時の解を主成分解といいます。

通常は0の対角要素つまり共通性に適当な初期値を代入し、反復計算によって因子負荷量を求めます。 反復計算をせずに最初の解をそのまま用いる方法を狭義の主因子法と呼び、反復計算を行う方法を反復計算主因子法と呼ぶこともあります。

共通性の初期値=共通性の下限値: (rjj-1の対角要素)
独自性の初期値=独自性の上限値:
※hj2はj番目の項目に対する他の項目の重寄与率――因子分析ではSMC(Squared Multiple Correlation)と呼ぶこともある――に相当する
※hj2は共通性の下限値になり、dj2は独自性の上限値になる
hj2を対角要素に代入した0(1)から因子負荷量を求め、新しい共通性を計算して0(2)と更新する
Q = {tr(0(m) - 0(m+1))}2 < εの時収束 (ε = 10-3〜6)

この反復計算法をトムソンの反復分解法(Thomson's refactoring method)といいます。 この手法はハーマン(Harman)の最小残差法(Minres法:Minimizing residual method)と実質的に同等になります。

因子数qを决定する基準としては次のようなものがあります。

  1. の固有値が1よりも大きいものの数
  2. 0の固有値が0よりも大きいものの数
  3. 因子数を指定する

表16.1.1のデータについて実際に計算してみましょう。

(1) 相関行列を求める。

(2) 相関行列の固有値のうち値が1よりも大きいものをベキ乗法によって求め、因子数を决定する。
第1初期固有値:λ1 = 2.87553  第2初期固有値:λ2 = 1.19402   因子数:q = 2
(3) 相関行列の逆行列を求め、その対角成分を用いて特殊な相関行列の初期値を作る。


(4) 特殊な相関行列の固有値と固有ベクトルをベキ乗法によって2個求め、因子負荷量行列を求める。
第1固有値:λ1 = 2.44489  第2固有値:λ2 = 0.725566
第1固有ベクトル:   第2固有ベクトル:
※固有ベクトルは大きさが1に規格化されている。 そのため固有値の平方根を掛けて因子負荷量にする。

(5) 因子負荷量から共通性を求め、それを新しい共通性として特殊な相関行列を更新する。
共通性:

(6) 収束基準を満足しているかどうか判定する。
Q = {tr(0(1) - 0(2))}2 = 0.0309708 > 10-4 ← 収束していない
(7) 収束するまで4番から6番を繰り返す。
16回目の第1固有値:λ1 = 2.58129 第2固有値:λ2 = 0.954138
第1固有ベクトル: 第2固有ベクトル:
  
Q = {tr(0(15) - 0(16))}2 = 8.87054×10-5 < 10-4 ← 16回目で収束!
(8) 寄与率と因子スコア計算用係数を求める。
第1固有値の寄与率:   第2固有値:
因子スコア: = XR-1
第1因子スコア:f1i = -4.5763144 + 0.0146727xi1 + 0.0164830xi2 + 0.0124076xi3 + 0.0055332xi4 + 0.0318327xi5
第2因子スコア:f2i = 0.8067893 - 0.0125110xi1 + 0.0357950xi2 - 0.0045650xi3 + 0.0062451xi4 - 0.0329295xi5

因子スコアは、本来は = [ - ]0-1として求めるべきです。 しかし独自因子スコア行列を合理的に求めることができないので、便宜的に上記の式で推測します。 これをハーマンの回帰法といい、真の因子スコアとの誤差を最小にするための手法です。 ただし回帰法で求めた場合、因子スコアの分散が1にならず、因子スコア同士が独立にならず、因子スコアと独自因子スコアも独立になりません。 その代わりの尺度変換(重みを付ける)に対しては不変性があり、因子スコアから元のデータを復元した値は因子軸を回転しても同じ値になります。

.1'.2 = 0 → 2つのベクトルは直交する
(-1.1)'(-1.2) = -0.0007 → 2つのベクトルは直交しない → 回帰法で求めた因子スコアは独立ではない

因子スコアが求められれば、 = FL'として元のデータを復元することができます。 ただしこの式で復元したは標準化された値なので、実測値のデータに戻すには各項目の標準偏差を掛けてから平均値を足す必要があります。

(注2) 主因子法と並んでよく用いられる手法として最尤法があります。 最尤法は元のデータと因子スコアが多変量正規分布に従うという仮定の下に、共通性と独自性つまり因子負荷量行列と重み行列の最尤解を求める手法です。 (→付録1 各種の確率分布)

p次元正規分布:
確率変数ベクトル:   母平均ベクトル:   母(分散)共分散行列:
p次元標準正規分布 N(,):
この場合は母相関係数行列:
〜 N(,)   〜 N(,)   〜 N(,)
の最尤推定値をlとすると l = ' + 2
尤度関数:
対数尤度関数:  ただし = '
L(,2)をで偏微分してと置くと

= l-1
この式とl = ' + 2の関係から次のような式を導くことができる。
[-1-1][-1] = [-1][ + '-2]
ここで['-2]が対角行列になるような直交解を求めることにすると、[ + '-2]は[-1-1]の固有値を成分にする対角行列になる。 このことから[-1-1]の固有値を成分にする対角行列をΛ、規格化された固有ベクトルを並べた行列をとすると
[-1] = [Λ - ]1/2
= [Λ - ]1/2
2 = diag(l - ') = diag( - ') = diag(-')

以上からに適当な初期値を代入し、[-1-1]の固有値と固有べクルトを求めることによっての最尤推定値を求めることができます。 そしてこれを利用してを更新し、反復計算によって最尤解を求めることができます。 ただし固有値の中に1以下のものがあると[Λ - ]1/2が不適切になってしまい、最尤推定値が求められません。 そのため1よりも大きい固有値だけを用いて最尤解を求めます。 最尤法の手順を整理すると次のようになります。

(1) 次のような方法での初期値を求める。
○独自性の上限値:  rjj-1の対角要素
※主因子法の初期値と原理的に同じ方法。 繰り返し計算によって独自性の値が小さくなっていくので、[-1-1]の固有値が大きくなっていく。 そのため繰り返し計算の途中で1よりも大きい固有値が増えて因子数が増えることがある。
○因子数に基づいた推定値:  q:因子数
※Joreskogによって提唱された方法。 最初に因子数を指定しなければならないので、因子数が決まっている時に適している。 因子数が決まっていない時は主成分法などで因子数を決定しておく必要がある。
因子分析は初期値の影響を受けやすいが、最尤法は特に受けやすい。 そのため初期値を色々と変えて何度も計算し、解釈しやすい結果を選ぶ。
(2) [-1-1]の1よりも大きい固有値と、それに対応する固有ベクトルを求める。
固有値行列:   固有ベクトル行列:  ‖k‖ = 1 (k = 1,…,q)
(3) 因子負荷量行列を求める
= [Λ-]1/2
(4) 独自性を更新する
2 = diag( - ')   
(5) 収束したかどうかチェックする
{tr(2(m) - 2(m+1))}2 < εの時収束  または  {tr(LL'(m) - LL'(m+1))}2 < εの時収束 (ε = 10-3〜6)
※収束していない時は(2)に戻って繰り返す

最尤法では尤度比検定を利用して因子モデルによって観測されたデータがうまく復元できるかどうかの検定、つまり因子モデルと観測データのズレを検定することができます。 ただし「ズレが小さい」と結論するためには尤度比の許容範囲を決めて統計的仮説検定を行う必要があります。 しかし尤度比の許容範囲を決めるのは困難なので、普通は有意性検定になってしまいます。 そのため実質的な意味はあまりありませんが、一応、紹介しておきます。

因子モデル( = lとしたモデル)の対数尤度:
飽和モデル( = としたモデル)の対数尤度:
対数尤度比:   尤度比:LR = exp{L(l) - Lf}
ズレの検定統計量:
※Bartlettは上式のnの代わりに次のような式を用いた方がχ2分布により近似すると指摘している。(1951)
ズレの検定統計量:
自由度:
χLOF2 > χ2LOF,α)の時、有意水準100α%で有意 → 因子モデルのズレが大きい → 因子数が足らない

表16.1.1のデータについて独自性の上限値を初期値にして計算すると、11回の反復計算で収束して次のような結果になります。 主因子法と同じ初期値を用いたので、よく似た結果になっています。 そして尤度比が約0.82であり、尤度比検定の結果は有意水準5%で有意ではありません。 このことから、一応、因子モデルと観測データのズレはあまり大きくない、つまり因子数は足りていると解釈できます。

表17.1.3 最尤法による因子負荷量
変数第1因子第2因子共通性独自性
国語0.762209-0.3031420.6728570.327143
数学0.5483930.7001230.7909070.209093
英語0.8182110.0171460.6697630.330237
理科0.5914040.4433410.5463100.453690
社会0.818538-0.3832680.8168990.183101
寄与率0.5141860.1851610.6993470.300653
第1因子:固有値 = 10.5847(初期固有値 = 6.83082)
第2因子:固有値 = 4.77346(初期固有値 = 2.54975)
対数尤度比:ln(LR) = -0.195714  尤度比:LR = 0.822247
尤度比検定:χLOF2 = 0.316404(p = 0.573777) < χ2(1,0.05) = 3.841 … 有意水準5%で有意ではない