多変量解析_06_因子分析

5.8K Views

July 25, 23

スライド概要

神戸大学経営学研究科で2022年度より担当している「統計的方法論特殊研究(多変量解析)」の講義資料「06_因子分析」です。
2025/2/5: 全体的に内容に手を入れました。RmarkdownからQuartoに変更しました。

profile-image

神戸大学経営学研究科准教授 分寺杏介(ぶんじ・きょうすけ)です。 主に心理学的な測定・教育測定に関する研究を行っています。 講義資料や学会発表のスライドを公開していきます。 ※スライドに誤りを見つけた方は,炎上させずにこっそりお伝えいただけると幸いです。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Chapter 6 因子分析 Chapter 6 因子分析 複数の項目への回答に影響する共通の要因を抽出する分析法である(探索的)因子分析につい て,前半では理論的な考え方と R でのやり方を説明し,後半では実践上のいくつかのトピック (事前分析・回転・因子数の決定など)を解説しています。 本資料は,神戸大学経営学研究科で 2022 年度より担当している「統計的方法論特殊研究(多 変量解析) 」の講義資料です。CC BY-NC 4.0 ライセンスの下に提供されています。 作成者連絡先 神戸大学大学院経営学研究科 分寺杏介(ぶんじ・きょうすけ) mail: [email protected] website: https://www2.kobe-u.ac.jp/~bunji/ おまたせしました。ここからいよいよ本編中の本編です。まずは因子分析 (factor analysis) です。はじめに因子分析の基本的&数理的な考え方を紹介した後で,R でやってみます。その後, 因子分析を実施する上でのプラクティカルなポイントを押さえていきます。 事前準備 1 2 3 4 5 6 7 8 # パッケージのインストール # ↓Chapter 1 でインストールしている人はスキップ # install.packages("psych") # ↓明示的には使わないのですが,psych::fa()で必要になるので # install.packages("GPArotation") # データの読み込み dat <- readRDS("chapter04.rds") 1

2.

6.1 因子分析とは 2 6.1 因子分析とは 今回使用している dat の Q1_11 から Q1_15 はいずれも外向性 (extraversion) を測定してい る項目です。実際に項目を見てみると*1 11. Don’t talk a lot.(【逆転】あまり喋らない。) 12. Find it difficult to approach others.(【逆転】人に近づきづらいと思う。) 13. Know how to captivate people.(人を魅了できる。) 14. Make friends easily.(友達を作りやすい。) 15. Take charge.(リーダータイプである。) となっており,たしかに他人との関わりに関する内容を尋ねているようです。改めて項目間の 相関を確認してみると,逆転項目も処理済みなので全ての項目間に正の相関があります。この相 関構造を一つの指標にまとめたものの一つが 𝛼 係数でした。 項目間相関 1 2 # round()関数を使って表示桁数を減らしています round(cor(dat[, paste0("Q1_", 11:15)]), 2) 1 2 3 4 5 6 Q1_11 Q1_12 Q1_13 Q1_14 Q1_15 Q1_11 Q1_12 Q1_13 Q1_14 Q1_15 1.00 0.47 0.32 0.42 0.31 0.47 1.00 0.39 0.53 0.39 0.32 0.39 1.00 0.42 0.39 0.42 0.53 0.42 1.00 0.32 0.31 0.39 0.39 0.32 1.00 因子分析では,こうした一連の項目に関して共通する潜在的な特性値によって回答が決まって いると考えます。これをグラフィカルモデルで表すと以下のようになります。 図 6.1: 因子分析モデル 1 グラフィカルモデルでは,潜在変数は楕円で表すのが一般的です。図 6.1 に関して,項目ごと に見るとこれは回帰分析モデルのように表すことができそうです。例えば項目 Q1_11 は,説明 *1 英語の 25 項目は ?psych::bfi から確認することができます。また日本語訳は IPIP プロジェクト内にある翻 訳の情報から拝借しました。

3.

6.1 因子分析とは 3 変数を「外向性」𝑓𝑝 として,対応する回帰係数を 𝑏11 (添字は”11” の一つだけ)とすると (6.1) 𝑦𝑝,11 = 𝑓𝑝 𝑏11 + 𝜀𝑝,11 と書くことが出来ます。この表現で言えば,回帰分析の説明変数に当たるものが 𝑥𝑝 から 𝑓𝑝 に変 わっているだけです。同様にして,他の項目も 𝑦𝑝,12 = 𝑓𝑝 𝑏12 + 𝜀𝑝,12 𝑦𝑝,13 = 𝑓𝑝 𝑏13 + 𝜀𝑝,13 (6.2) 𝑦𝑝,14 = 𝑓𝑝 𝑏14 + 𝜀𝑝,14 𝑦𝑝,15 = 𝑓𝑝 𝑏15 + 𝜀𝑝,15 と表すことが出来ます。つまり,因子分析は項目レベルで見ると説明変数が潜在変数になった回 帰分析なのです。なお,因子分析では本来回帰分析と同じように結果変数 𝑦 は連続量(間隔尺度 か比率尺度)を考えています。実際に心理尺度で得られる回答(項目レベル)はカテゴリカル変 数であり間隔尺度である保証はないのですが,とりあえず今はポリシリアル相関のときと同じよ うに 𝑦 は回答の背後の潜在変数だと考えるか,間隔尺度だと仮定されたものと考えておいてくだ さい。 ここまでは実際のデータに合わせて説明をしてきましたが,以後の説明ではもう少し一般化し て説明していきます。ということで,ここで今後登場する添字を説明しておきます。なお,以下 の記号について小文字は一つの値を,大文字は総数を表しているものとします。 • [𝑝] 回答者の番号 (person) を表します。(𝑝 = 1, 2, ⋯ , 𝑃 − 1, 𝑃) • [𝑖] 項目の番号 (item) を表します。(𝑖 = 1, 2, ⋯ , 𝐼 − 1, 𝐼) (6.1) および (6.2) 式では,項目 𝑖 は 11, 12, 13, 14, 15 と対応しています。この表記を用いる と,回答者 𝑝 の項目 𝑖 に対する回答は以下のように表されます。 (6.3) 𝑦𝑝𝑖 = 𝑓𝑝 𝑏𝑖 + 𝜀𝑝𝑖 ただ,いちいち 𝑝 を書いているとちょっと面倒なので, Chapter 5 のときと同じように, 回答者の要素についてはベクトル表記にしておきます。 𝐲𝑖 = [𝑦1𝑖 𝐟 = [𝑓1 𝑓2 ⋯ 𝑓𝑃 −1 ⊤ 𝑓𝑃 ] ,𝜺𝑖 = [𝜀1𝑖 𝜀2𝑖 ⋯ 𝜀𝑃 −1,𝑖 𝑦1𝑖 𝑓1 𝜀1𝑖 ⎡ 𝑦 ⎤ ⎡𝑓 ⎤ ⎡𝜀 ⎤ 2𝑖 2 ⎢ ⎥ = ⎢ ⎥ 𝑏𝑖 + ⎢ 2𝑖 ⎥ ⎢ ⋮ ⎥ ⎢ ⋮ ⎥ ⎢ ⋮ ⎥ ⎣𝑦𝑃 𝑖 ⎦ ⎣𝑓𝑃 ⎦ ⎣𝜀𝑃 𝑖 ⎦ ⟶ 𝐲 𝑖 = 𝐟 𝑏 𝑖 + 𝜺𝑖 𝑦2𝑖 ⋯ 𝑦𝑃 −1,𝑖 ⊤ 𝑦𝑃 𝑖 ] , ⊤ 𝜀𝑃 𝑖 ] として, (6.4) としておきます。 因子分析では,回帰分析と違って説明変数(𝐟)が直接観測できない潜在変数 (latent variable) になっています。説明変数が潜在変数だと,ちょっと困ったことが起こります。それは変数のス ケールの問題です。いま,因子 𝐟 には身長や体重のときのような「単位」というものがありませ

4.

6.1 因子分析とは 4 ん。例えば,100 点満点のテストの点数を 500 点満点に換算して扱うように,𝐟 の値を 5 倍した ものを 𝐟 ′ とします。さらにこの得点にゲタを履かせる要領で,𝐟 ″ = 𝐟 ′ + 10 = 5𝐟 + 10 と置いて みます。これを使うと,先程の回帰式は 𝐲𝑖 = 𝐟 𝑏 𝑖 + 𝜺 𝑖 = (5𝐟 + 10)(0.2𝑏𝑖 ) + (𝜺𝑖 − 2𝑏𝑖 ) (6.5) = 𝐟 ″ 𝑏𝑖′ + 𝜺′𝑖 と変形が可能です。つまり 𝐟 のスケールが変わることで 𝑏𝑖′ = 0.2𝑏𝑖 および 𝜺′𝑖 = 𝜺𝑖 − 2𝑏𝑖 という 新しい解が得られてしまいます。このままでは回帰係数を一意に求めることが出来ないので,通 常因子分析モデルでは,因子の分散 𝜎𝐟2 = 1 かつ平均 0 という制約を置いています*2 。これに加 えて,通常因子分析で考える潜在変数は正規分布に従う連続量であると仮定されます。これらを まとめると,因子分析では 𝐟 ∼ 𝑁 (0, 1) という仮定が置かれていることになります。言い換える と,因子分析で推定される因子得点 𝐟 は,特に指定がなければ標準化された値として得られると いうことです。 そしてこの問題は,観測変数 𝑦 の値のスケールに客観的な単位が存在しないケース(例えば心 理尺度など)についても同様のことがいえます。これも 100 点満点のテストの点数を 500 点満点 に換算して扱うように,例えば 5 件法のリッカート尺度の得点を 5, 10, 15, 20, 25 と 5 刻みにし ても問題は無いはずです。ということで 𝐲′𝑖 = 5𝐲𝑖 として回帰式を変形させてみると, 𝐲′𝑖 = 5𝐲𝑖 = 5𝐟 𝑏𝑖 + 5𝜺𝑖 = 𝐟 × 5𝑏𝑖 + 5𝜺𝑖 = 𝐟 𝑏𝑖″ + 𝜺′𝑖 ということで,𝑏𝑖″ = 5𝑏𝑖 および 𝜺′𝑖 = 5𝜺𝑖 という新しい解が得られてしまいます。このように,因 子分析の解は回答側のスケールの影響も受けてしまうため,通常は各項目の回答は全て標準化さ れた値を使用します。説明変数(𝐟)も結果変数(𝐲𝑖 )も標準化されているという意味では,因子 負荷は標準偏回帰係数のように解釈することができる,というわけです*3 。 因子分析モデルでは,各個人の特性値の強さ(𝑓𝑝 )を因子得点 (factor score),回帰係数(𝑏𝑖 ) を因子負荷 (factor loading) と呼びます。因子負荷が高い項目ほど,その人の回答が因子得点 の高低と強く関係しています。これは,合計点を X 軸に,グループごとの平均値を Y 軸に置い たトレースラインの右上がり度の強さと近いものです。そして一般的には,右上がりの項目ほど I-T 相関も高くなります。図 6.2 でいえば,赤い項目の方が強い右上がりになっているため,青 い項目よりも因子負荷が高い項目だと考えることが出来ます。 なおグラフィカルモデルでは 図 6.3 のように,因子負荷の強さを矢印の横に書くのが一般的 です。 また,因子分析では誤差 𝜀 のほうも「因子」として取り扱います。複数の項目に共通する成分 *2 因子分析モデルの制約は,正確に言うと「パラメータが一つ固定されていれば良い」ので,別の制約として第 1 項目の因子負荷を 1 に固定するという方法を取ることもあります。 *3 回帰分析において説明変数・観測変数ともに標準化されている場合,切片項はゼロになります。これが, 「因子分 析は結局回帰分析だ」と言っておきながら (6.1) および (6.2) 式に切片項がなかった理由です。

5.

5 4 3 1 2 項目平均値 5 6 6.1 因子分析とは 10 15 20 25 30 グループ平均値 図 6.2: 仮想の 2 項目のトレースライン 図 6.3: 因子分析モデル 2(因子負荷を追加) (𝐟)を共通因子 (common factor),各項目に特有の成分(あるいは共通因子で説明されなかっ た残り)を独自因子 (unique factor) と呼び,各項目への回答はこの 2 種類の因子の和のみに よって表されていると考えるわけです。したがって,先程示した因子分析モデルの基本である (6.4) 式における 𝜺𝑖 は,実際には「誤差」ではなく「もう一つの説明変数」であると考えること があります。ということで,(6.4) 式は厳密には以下のような形をしています。 error 𝐲𝑖 = 𝐟 𝑏𝑖 + 𝜺𝑖 𝑢𝑖 ⏞ +0 ここで 𝑢𝑖 は,独自因子に対する因子負荷を表しています。このように,因子分析モデルでは回 帰分析で言うところの「誤差」は 0 と考えることが多いようです。…とはいえ,実際には 𝜺𝑖 と 「誤差」は区別のしようが無いので,独自因子得点を誤差として扱ってしまうことも多々ありま す。というかその方が多いかもしれません。 ということでグラフィカルモデルにもこの独自因子を書き込むと,図 6.4 のようになります。 ただし独自因子の因子負荷 𝑢𝑖 を自由に推定しようとすると,独自因子得点 𝜺𝑖 との間にまたス ケールの問題が生じてしまい解が一つに決まらない(例えば全ての 𝑢𝑖 を 2 倍にして 𝜺𝑖 を 0.5 倍 にしても良くなってしまう)ため,通常は 𝑢𝑖 = 1 に固定されます。 実際に論文などに載せる場合,独自因子の因子負荷はどうせ固定されるのだから,矢印の横の 「1」は省略されることが多いです。更にいうと,因子分析ではそもそも共通因子にのみ関心があ ることが圧倒的に多いので,独自因子自体を省略する形(つまり図 6.3 )で表されることも多い

6.

6.2 因子分析モデルの一般化 6 図 6.4: 因子分析モデル 3(誤差を追加) です。 6.2 因子分析モデルの一般化 回帰分析的に因子分析を見ると,独自因子は誤差のようなものなのでなるべくその影響は少な いほうが良い,といえます。極端な例を考えてみましょう。因子負荷 𝑏𝑖 = 0 の項目があるとする と,その項目の因子分析モデル式は 𝐲𝑖 = 𝐟 × 0 + 𝜺 𝑖 = 𝜺𝑖 (6.6) となります。共通因子の影響を全く受けること無く独自因子のみで回答が決定している状態で す。因子得点 𝑓𝑝 を推定する上では何の情報も持ち合わせていないこの項目は,あってもなくて も同じです。この項目に高い点数をつけていても低い点数をつけていても,𝑓𝑝 には何も関与して いないのです。ということで,基本的には因子分析では共通因子の影響が多い方が望ましいわけ です。 回帰分析では,𝑦 に占める誤差分散の割合を減らし予測の精度を上げるために,複数の説明変 数を用いることができました。因子分析でも同様に,複数の説明変数=共通因子がある状態を考 えることができます。ここでは,5 項目が 2 つの共通因子の影響を受けている,と考えてみま しょう。グラフィカルモデルでは 図 6.5 のような状態です。なお,因子番号を表す添字は trait の頭文字 𝑡 (𝑡 = 1, 2) としておきます。 当然ながら,因子 1 の項目 1 に対する因子負荷 𝑏11(添字は 2 つ:1 と 1)と因子 2 の因子負荷 𝑏21 は異なります。したがって,𝐲𝑖 に関する因子分析モデルは 𝐲𝑖 = 𝐟1 𝑏1𝑖 + 𝐟2 𝑏2𝑖 + 𝜺𝑖 (6.7) となります。 もちろん因子の数はいくつでも良いので,更に一般化して 𝑇 個の因子がある場合を考えると,

7.

6.3 モデルパラメータによる相関係数の表現 7 図 6.5: 2 因子モデル 𝐲 に関する因子分析モデルは 𝐲𝑖 = 𝐟1 𝑏1𝑖 + 𝐟2 𝑏2𝑖 + ⋯ + 𝐟𝑇 𝑏𝑇 𝑖 + 𝜺𝑖 = [𝐟1 𝐟2 ⋯ 𝑏1𝑖 ⎡𝑏 ⎤ 𝐟𝑇 ] ⎢ 2𝑖 ⎥ + 𝜺𝑖 ⎢ ⋮ ⎥ ⎣𝑏𝑇 𝑖 ⎦ (6.8) = 𝐅𝐛𝑖 + 𝜺𝑖 と書くことが出来ます。 6.3 モデルパラメータによる相関係数の表現 実際に因子分析のパラメータを推定する際には,観測変数の相関行列をもとにして計算しま す。ということで,まずは因子数が 1 の場合で因子分析モデル内のパラメータと観測変数間の相 関係数の関係性を確認してみましょう。 6.3.1 1 因子の場合 図 6.4 に示した 1 因子の因子分析モデルにおいて,2 つの項目に対する回答のモデル上での相 関関係がどのように表されるかを考えてみます。まず,各項目の回答は標準化されたものという 前提に立つと,変数間の共分散と相関係数は一致します。したがって,ある項目への回答 𝐲𝑖 と 別の項目への回答 𝐲𝑗 (𝑖 ≠ 𝑗) の共分散 𝜎𝐲𝑖 ,𝐲𝑗 および相関係数 𝑟𝐲𝑖 ,𝐲𝑗 を展開してみると 𝜎𝐲𝑖 ,𝐲𝑗 = 𝑟𝐲𝑖 ,𝐲𝑗 = 𝜎(𝑏𝑖 𝐟 +𝜺𝑖 ),(𝑏𝑗 𝐟 +𝜺𝑗 ) = 𝜎(𝑏𝑖 𝐟 ),(𝑏𝑗 𝐟 ) + 𝜎(𝑏𝑖 𝐟 ),(𝜺𝑗 ) + 𝜎(𝑏𝑗 𝐟 ),(𝜺𝑖 ) + 𝜎𝜺𝑖 ,𝜺𝑗 (6.9) = 𝑏𝑖 𝑏𝑗 𝜎𝐟2 + 𝜎(𝑏𝑖 𝐟 ),(𝜺𝑗 ) + 𝜎(𝑏𝑗 𝐟 ),(𝜺𝑖 ) + 𝜎𝜺𝑖 ,𝜺𝑗 となります。ここで,ある項目の共通因子成分と別の項目の独自因子成分は,通常の回帰分析と 同じように無関係(共分散ゼロ)と見なすことができるため, 𝜎(𝑏𝑖 𝐟 ),(𝜺𝑗 ) = 𝜎(𝑏𝑗 𝐟 ),(𝜺𝑖 ) = 0 (6.10)

8.

6.3 モデルパラメータによる相関係数の表現 8 が成り立ちます。 ということで,(6.10) 式は少し整理されて 𝑟𝐲𝑖 ,𝐲𝑗 = 𝑏𝑖 𝑏𝑗 𝜎𝐟2 + 𝜎𝜺𝑖 ,𝜺𝑗 となります。そして先程説 明したように,因子の分散 𝜎𝐟2 は 1 に固定するという制約が置かれています。したがって,2 項 目の相関係数は最終的に 𝑟𝐲𝑖 ,𝐲𝑗 = 𝑏𝑖 𝑏𝑗 + 𝜎𝜺𝑖 ,𝜺𝑗 (6.11) つまり「因子負荷の積 𝑏𝑖 𝑏𝑗 」と「独自因子同士の共分散 𝜎𝜺𝑖 ,𝜺𝑗 」の和によって表すことが出来 ます。ここで,独自因子同士の共分散 𝜎𝜺𝑖 ,𝜺𝑗 はゼロとは限りません。図 6.4 のモデルで言えば, 共通因子は「5 項目全てに共通する成分」ですが,もしかしたら図 6.6 のように「5 項目全てで は無いけれど 2 項目だけに共通する成分」などがまだ残っているかもしれません。 図 6.6: 誤差共分散がゼロにならないケース この状態では, 𝜎𝐲𝑖 ,𝐲𝑗 のときと同じ要領で 𝜎𝜺𝑖 ,𝜺𝑗 も 2 つの独自因子に対する因子負荷の積 (𝑏𝜀1 𝑏𝜀2 ≠ 0)になってしまいます。 このままだと,観測された相関係数から因子負荷 𝐛 を推定することができないので,推定でき るようにするために「全ての項目が共通因子の影響を受けている」という仮定を置きます。この 仮定が満たされている理想的な状況では,項目間で共通する成分は共通因子にすべて吸収される ため,残った独自因子同士の相関はゼロであることが期待されています。言い換えると,理想的 な状況では 2 項目間の相関係数は因子負荷の積のみ(𝑟𝐲𝑖 ,𝐲𝑗 = 𝑏𝑖 𝑏𝑗 )になることが期待されるの で,これならば因子負荷の推定が可能となるのです。 同様にして,項目 𝑖 の分散(=項目 𝑖 と項目 𝑖 の共分散)は 𝜎𝐲2 𝑖 = 𝜎𝐲𝑖 ,𝐲𝑖 = 𝑏𝑖2 + 𝜎𝜺2𝑖 (6.12) となります。つまり因子負荷の 2 乗と誤差分散の和になっています。 以上をまとめると,観測変数の相関行列 𝚺 は以下のように因子分析のパラメータの関数に変

9.

6.3 モデルパラメータによる相関係数の表現 9 換することが出来ます。 𝜎𝑦2 𝜎𝑦1 ,𝑦2 𝜎𝑦1 ,𝑦3 𝜎𝑦1 ,𝑦4 𝜎𝑦1 ,𝑦5 ⎡𝜎 1 𝜎𝑦22 𝜎𝑦2 ,𝑦3 𝜎𝑦2 ,𝑦4 𝜎𝑦2 ,𝑦5 ⎤ ⎢ 𝑦2 ,𝑦1 ⎥ 𝜎𝑦23 𝜎𝑦3 ,𝑦4 𝜎𝑦3 ,𝑦5 ⎥ 𝚺 = ⎢𝜎𝑦3 ,𝑦1 𝜎𝑦3 ,𝑦2 ⎢𝜎𝑦4 ,𝑦1 𝜎𝑦4 ,𝑦2 𝜎𝑦4 ,𝑦3 𝜎𝑦24 𝜎𝑦4 ,𝑦5 ⎥ 𝜎 𝜎 𝜎 𝜎 𝜎𝑦25 ⎦ ⎣ 𝑦5 ,𝑦1 𝑦5 ,𝑦2 𝑦5 ,𝑦3 𝑦5 ,𝑦4 𝑏12 + 𝜎𝜺2 𝑏1 𝑏2 𝑏1 𝑏3 𝑏1 𝑏4 𝑏1 𝑏5 ⎡ 𝑏 𝑏 1 𝑏2 + 𝜎 2 𝑏2 𝑏3 𝑏2 𝑏4 𝑏2 𝑏5 ⎤ 2 1 𝜺2 2 ⎢ ⎥ 2 2 𝑏3 𝑏2 𝑏3 + 𝜎 𝜺 3 𝑏3 𝑏4 𝑏3 𝑏5 ⎥ = ⎢ 𝑏3 𝑏1 ⎢ 𝑏4 𝑏1 𝑏4 𝑏2 𝑏4 𝑏3 𝑏42 + 𝜎𝜺24 𝑏4 𝑏5 ⎥ 2 2 𝑏 𝑏 𝑏 𝑏 𝑏 𝑏 𝑏 𝑏 𝑏 ⎣ 5 1 5 2 5 3 5 4 5 + 𝜎𝜺5 ⎦ 𝜎𝜺21 0 0 0 𝑏12 𝑏1 𝑏2 𝑏1 𝑏3 𝑏1 𝑏4 𝑏1 𝑏5 2 ⎡ 2 ⎡𝑏 𝑏 ⎤ 0 𝜎 0 0 𝑏2 𝑏2 𝑏3 𝑏2 𝑏4 𝑏2 𝑏5 𝜺2 ⎢ 2 1 ⎥ ⎢ 2 2 0 𝜎𝜺3 0 𝑏3 𝑏4 𝑏3 𝑏5 ⎥ + ⎢ 0 = ⎢𝑏3 𝑏1 𝑏3 𝑏2 𝑏3 ⎢𝑏4 𝑏1 𝑏4 𝑏2 𝑏4 𝑏3 𝑏42 𝑏4 𝑏5 ⎥ ⎢ 0 0 0 𝜎𝜺24 0 0 0 ⎣𝑏5 𝑏1 𝑏5 𝑏2 𝑏5 𝑏3 𝑏5 𝑏4 𝑏52 ⎦ ⎣ 0 𝑏1 ⎡𝑏 ⎤ ⎢ 2⎥ = ⎢𝑏3 ⎥ [𝑏1 𝑏2 ⎢𝑏4 ⎥ ⎣𝑏5 ⎦ = 𝐛⊤ 𝐛 + 𝚿 𝑏3 𝑏4 0 0 ⎤ ⎥ 0 ⎥ 0 ⎥ 𝜎𝜺25 ⎦ (6.13) 𝑏5 ] + 𝚿 あとは 𝚺 とのズレがなるべく小さくなるような 𝐛, 𝚿 の値を計算していけばよいわけです。 なお 𝚿 は観測変数の誤差分散を対角成分にもつ対角行列です。正確には 𝚿 は独自因子間の相 関行列(あるいは誤差共分散行列)なわけですが,上述の仮定のもとでは,誤差共分散=非対角 成分はゼロとなることを期待した上で,パラメータを推定していくのです。言い換えると,観測 変数間の相関関係のうち,共通因子(𝐛⊤ 𝐛)では説明できない部分が大きいと,上述の計算では まともに観測変数の因子構造を正確に表現することはできないのです。 この「共通因子(𝐛⊤ 𝐛)では説明できない部分」の大きさを考えるために,改めて (6.12) 式に ついて見てみます。この式の左辺の 𝜎𝐲2 𝑖 は,𝐲𝑖 が標準化されているため 1 となります。つまり, 𝑏𝑖2 と 𝜎𝜀2𝑖 の和は 1 です。そして 𝑏𝑖2 の部分は,観測変数の分散を 1 としたとき,そのうち共通因 子で説明可能な分散の割合を表しており,これは共通性 (communality) と呼ばれています。つ まり共通性は因子負荷の二乗に合致します。また,残りの 𝜎𝜀2𝑖 の部分は共通因子では説明できな い(=独自因子で説明可能な)分散の割合であり,これは独自性 (uniqueness) と呼ばれていま す。つまり(当然ですが)共通性と独自性の和は必ず 1 になります。また,共通性は,回帰分析 における決定係数 𝑅2 (結果変数 𝑦 の分散のうち説明変数で説明可能な分散の割合)に相当する ものです。 あとはどうにかして因子負荷 𝐛 および誤差分散 𝚿 が計算できたら,次はこれらを固定した上 で,𝐲 とのズレが最も小さくなるように因子得点 𝐟 の値を計算する,というのが一般的な手順で す。因子分析のような潜在変数モデルでは,多くの場合因子得点と因子負荷を同時に推定するの はかなり大変なので,このように先に項目パラメータを確定させてから回答者の特性値パラメー

10.

6.3 モデルパラメータによる相関係数の表現 10 タを推定する,という 2 段階の手続きをとります。 6.3.2 多因子の場合 因子の数が増えても,基本的には同じような形で観測変数の相関行列 𝚺 を分解していくこと になります。ちょっと長くなりますが,2 因子モデルでの 2 項目の共分散=相関係数を展開して みましょう。異なる項目の共通因子成分 𝑏𝑡𝑖 𝐟𝑡 と誤差成分 𝜀𝑗 が無相関,かつ誤差項目間の相関も 共通因子間の相関もゼロ*4 ,すなわち 𝜎(𝑏𝑡𝑖 𝐟𝑡 ),(𝜺𝑗 ) = 𝜎(𝑏𝑡𝑗 𝐟𝑡 ),(𝜺𝑖 ) = 0 (6.14) 𝜎(𝜺𝑖 ),(𝜺𝑗 ) = 0 𝜎(𝑏1𝑖 𝐟1 ),(𝑏2𝑗 𝐟2 ) = 𝜎(𝑏2𝑖 𝐟2 ),(𝑏1𝑗 𝐟1 ) = 0 だと仮定すると,項目 𝐲𝑖 , 𝐲𝑗 の共分散=相関行列 𝚺 の (𝑖, 𝑗) 成分は 𝜎𝐲𝑖 ,𝐲𝑗 = 𝑟𝐲𝑖 ,𝐲𝑗 = 𝜎(𝑏1𝑖 𝐟1 +𝑏2𝑖 𝐟2 +𝜺𝑖 ),(𝑏1𝑗 𝐟1 +𝑏2𝑗 𝐟2 +𝜺𝑗 ) = 𝜎(𝑏1𝑖 𝐟1 ),(𝑏1𝑗 𝐟1 ) + 𝜎(𝑏1𝑖 𝐟1 ),(𝑏2𝑗 𝐟2 ) + 𝜎 ⏞(𝑏 ⏞⏞ ⏞⏞ 1𝑖 𝐟1 ),(𝜺𝑗 ) 0 0 + ⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞ 𝜎(𝑏2𝑖 𝐟2 ),(𝑏1𝑗 𝐟1 ) + 𝜎(𝑏2𝑖 𝐟2 ),(𝑏2𝑗 𝐟2 ) + 𝜎(𝑏2𝑖 𝐟2 ),(𝜺𝑗 ) 0 + ⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞⏞ 𝜎(𝜺𝑖 ),(𝑏1𝑗 𝐟1 ) + 𝜎(𝜺𝑖 ),(𝑏2𝑗 𝐟2 ) + 𝜎(𝜺𝑖 ),(𝜺𝑗 ) = 𝑏1𝑖 𝑏1𝑗 𝜎𝐟21 + 𝑏2𝑖 𝑏2𝑗 𝜎𝐟22 = 𝑏1𝑖 𝑏1𝑗 + 𝑏2𝑖 𝑏2𝑗 = [𝑏1𝑖 = 𝐛⊤ 𝑖 𝐛𝑗 (6.15) 𝑏 𝑏2𝑖 ] [ 1𝑗 ] 𝑏2𝑗 となります。同様にして,項目 𝐲𝑖 の分散= 𝚺 の (𝑖, 𝑖) 成分は 2 2 𝜎𝐲𝑖 ,𝐲𝑖 = 𝑏1𝑖 + 𝑏2𝑖 + 𝜎𝜺2𝑖 = [𝑏1𝑖 𝑏 𝑏2𝑖 ] [ 1𝑖 ] + 𝜎𝜺2𝑖 𝑏2𝑖 (6.16) 2 = 𝐛⊤ 𝑖 𝐛𝑖 + 𝜎𝜺𝑖 となります。ここから,多因子の場合でも共通性は因子負荷の二乗(和)に合致するということ がわかります。 あとはこれを複数の項目・因子に拡張するだけです。各項目の因子負荷ベクトルを横に並べて *4 「共通因子間の相関もゼロ」という 3 行目の仮定は,図 6.5 において 𝑓 と 𝑓 の間に直接的なパスが無いこと 1 2 に相当します。

11.

6.4 とりあえずやってみよう 11 いけば,全項目での全因子の負荷行列は 𝐁 = [𝐛1 𝐛2 𝑏11 ⎡ 𝑏 ⎢ 21 =⎢ ⋮ ⎢𝑏𝑇 −1,1 ⎣ 𝑏𝑇 ,1 ⋯ 𝐛𝐼 ] 𝑏12 𝑏22 ⋮ 𝑏𝑇 −1,2 𝑏𝑇 ,2 ⋯ ⋯ ⋱ ⋯ ⋯ 𝑏1𝐼 𝑏2𝐼 ⎤ ⎥ ⋮ ⎥ 𝑏𝑇 −1,𝐼 ⎥ 𝑏𝑇 ,𝐼 ⎦ (6.17) となります。すると観測変数の相関行列 𝚺 は結局 𝚺 = 𝐁⊤ 𝐁 + 𝚿 𝐛⊤ 1 ⎡𝐛⊤ ⎤ = ⎢ 2 ⎥ [𝐛1 𝐛2 ⋯ 𝐛𝐼 ] + 𝚿 ⎢ ⋮ ⎥ ⎣𝐛⊤ 𝐼⎦ 𝐛⊤ 𝐛⊤ ⋯ 𝐛⊤ 1 𝐛1 1 𝐛2 1 𝐛𝐼 ⎡𝐛⊤ 𝐛 𝐛⊤ 𝐛 ⋯ 𝐛⊤ 𝐛 ⎤ 1 2 2 2 2 𝐼⎥ + 𝚿 =⎢ ⎢ ⋮ ⋮ ⋱ ⋮ ⎥ 𝐛⊤ ⋯ 𝐛⊤ ⎣𝐛⊤ 𝐼 𝐛1 𝐼 𝐛2 𝐼 𝐛𝐼 ⎦ (6.18) と分解でき,あとは 1 因子のときと同じように 𝐁, 𝚿 を推定するだけです。 6.4 とりあえずやってみよう このあたりでひとまず R で因子分析をやってみて,実際のデータから何が出てくるのかをみ てみたいと思います。R にはデフォルトで factanal() という関数が用意されているのですが, ちょっとモダンな方法に関して不十分なので,もっと色々できる関数を使用します。psych パッ ケージにある fa() という関数を使用しましょう。fa() 関数では,因子数を nfactors という 引数で与えます。今回は Q1_1 から Q1_10 の 10 項目に対して 2 因子に設定してみました。つま り,図 6.7 のモデルに対して因子負荷(全ての矢印の係数)を計算してみます。 図 6.7: 10 項目に対して 2 つの共通因子

12.

6.4 とりあえずやってみよう 12 とりあえず因子分析 1 2 3 4 library(psych) # まずは2因子でやってみます res_fa <- fa(dat[, paste0("Q1_", 1:10)], nfactors = 2) res_fa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Factor Analysis using method = minres Call: fa(r = dat[, paste0("Q1_", 1:10)], nfactors = 2) Standardized loadings (pattern matrix) based upon correlation matrix MR1 MR2 h2 u2 com Q1_1 -0.08 0.42 0.16 0.84 1.1 Q1_2 0.00 0.68 0.47 0.53 1.0 Q1_3 -0.03 0.77 0.58 0.42 1.0 Q1_4 0.14 0.46 0.27 0.73 1.2 Q1_5 0.03 0.61 0.38 0.62 1.0 Q1_6 0.57 -0.05 0.31 0.69 1.0 Q1_7 0.64 -0.02 0.40 0.60 1.0 Q1_8 0.55 0.02 0.31 0.69 1.0 Q1_9 0.68 0.00 0.46 0.54 1.0 Q1_10 0.57 0.06 0.35 0.65 1.0 32 33 34 35 36 37 MR1 MR2 SS loadings 1.87 1.83 Proportion Var 0.19 0.18 Cumulative Var 0.19 0.37 Proportion Explained 0.51 0.49 Cumulative Proportion 0.51 1.00 With factor correlations of MR1 MR2 MR1 1.00 0.32 MR2 0.32 1.00 Mean item complexity = 1 Test of the hypothesis that 2 factors are sufficient. df null model = 45 with the objective function = 2.14 with Chi Square = 5190.53 df of the model are 26 and the objective function was 0.16 The root mean square of the residuals (RMSR) is 0.04 The df corrected root mean square of the residuals is The harmonic n.obs is prob < 1.1e-50 0.05 2432 with the empirical chi square 311.44 with

13.

6.4 とりあえずやってみよう 38 39 40 41 42 43 44 45 46 47 48 The total n.obs was < 2.2e-64 2432 13 with Likelihood Chi Square = 379.19 Tucker Lewis Index of factoring reliability = 0.881 RMSEA index = 0.075 and the 90 % confidence intervals are BIC = 176.48 Fit based upon off diagonal values = 0.98 Measures of factor score adequacy MR1 MR2 Correlation of (regression) scores with factors 0.87 0.88 Multiple R square of scores with factors 0.76 0.78 Minimum correlation of possible factor scores 0.51 0.56 with prob 0.068 0.082 6.4.1 因子負荷量 3 4 5 6 7 8 9 10 11 12 13 14 Standardized loadings (pattern matrix) based upon correlation matrix MR1 MR2 h2 u2 com Q1_1 -0.08 0.42 0.16 0.84 1.1 Q1_2 0.00 0.68 0.47 0.53 1.0 Q1_3 -0.03 0.77 0.58 0.42 1.0 Q1_4 0.14 0.46 0.27 0.73 1.2 Q1_5 0.03 0.61 0.38 0.62 1.0 Q1_6 0.57 -0.05 0.31 0.69 1.0 Q1_7 0.64 -0.02 0.40 0.60 1.0 Q1_8 0.55 0.02 0.31 0.69 1.0 Q1_9 0.68 0.00 0.46 0.54 1.0 Q1_10 0.57 0.06 0.35 0.65 1.0 fa() 関数では,データフレームを与えると,まずそのデータフレームに対して cor() 関数の 要領で相関行列を計算します。そしてその相関行列から因子負荷行列を出しています。左の MR1 および MR2 という部分が因子負荷(𝐁⊤ )を表しています*5 。論文では,良く「値が一定以上の ところを太字にする」や「一定以下のところを空白にする」という形で記載されています。試し に値が 0.4 以上のところを太字にすると,表 6.1 のようになります。 また,print() 関数に引数 sort=TRUE を与えると,因子負荷行列がいい感じになるように項 目を並び替えてくれます。 1 print(res_fa, sort = TRUE) *5 MR というのは,因子負荷行列を最小残差法 (Minimum Residual) で計算したことを表しています。詳細は Section 6.10 にて説明します。

14.

6.4 とりあえずやってみよう 14 表 6.1: 因子負荷の表 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 MR1 MR2 Q1_1 -0.08 0.42 Q1_2 0.00 0.68 Q1_3 -0.03 0.77 Q1_4 0.14 0.46 Q1_5 0.03 0.61 Q1_6 0.57 -0.05 Q1_7 0.64 -0.02 Q1_8 0.55 0.02 Q1_9 0.68 0.00 Q1_10 0.57 0.06 Factor Analysis using method = minres Call: fa(r = dat[, paste0("Q1_", 1:10)], nfactors = 2) Standardized loadings (pattern matrix) based upon correlation matrix item MR1 MR2 h2 u2 com Q1_9 9 0.68 0.00 0.46 0.54 1.0 Q1_7 7 0.64 -0.02 0.40 0.60 1.0 Q1_10 10 0.57 0.06 0.35 0.65 1.0 Q1_6 6 0.57 -0.05 0.31 0.69 1.0 Q1_8 8 0.55 0.02 0.31 0.69 1.0 Q1_3 3 -0.03 0.77 0.58 0.42 1.0 Q1_2 2 0.00 0.68 0.47 0.53 1.0 Q1_5 5 0.03 0.61 0.38 0.62 1.0 Q1_4 4 0.14 0.46 0.27 0.73 1.2 Q1_1 1 -0.08 0.42 0.16 0.84 1.1 (以下略) 出力を見ると,確かに因子負荷行列の行の並び順が変わっています。一番上には「他の因子よ り因子 1 への負荷が最も高い項目のうち,MR1 が最も高い項目」がおかれ,後もそれに続いて います。つまり全ての項目を「どれか一つの因子のグループに属するとしたら」という感じで並 び替えてくれるわけです。論文に載せる際なども,これで表示される順にすると見やすいのでは ないかと思います。 また,psych パッケージの fa.diagram() 関数を使うと,図 6.8 のようにグラフィカルモデ ル的なものを描いてくれます。もちろんそのまま論文に載せたりできるレベルではないですが, 項目と因子の関係をざっと眺めたいときには役に立ちそうです。

15.

6.4 とりあえずやってみよう 15 表 6.2: 因子負荷の表(並べ替え後) MR1 MR2 Q1_9 0.68 0.00 Q1_7 0.64 -0.02 Q1_6 0.57 -0.05 Q1_10 0.57 0.06 Q1_8 0.55 0.02 Q1_3 -0.03 0.77 Q1_2 0.00 0.68 Q1_5 0.03 0.61 Q1_4 0.14 0.46 Q1_1 -0.08 0.42 一応グラフィカルモデル的なものを出す 1 fa.diagram(res_fa, cut = 0.3) Factor Analysis Q1_9 Q1_7 Q1_10 Q1_6 Q1_8 Q1_3 Q1_2 Q1_5 Q1_4 Q1_1 0.7 0.6 0.6 0.6 0.6 MR1 0.3 0.8 0.7 0.6 0.5 0.4 MR2 図 6.8: グラフィカルモデル デフォルトでは各項目には「最も高い因子負荷を持つ因子」のみ矢印を引くよう ( simple=TRUE) ですが,引数 simple=FALSE とすることで複数因子からの矢印を引くことも可能です。ただ数字 が重なったりして見にくいかもしれません。また,引数 cut は「その絶対値以下の因子負荷や因 子間相関の矢印は引かない」というものです。なので先程のコードでは,因子負荷や因子間相関 が 0.3 以下のものは省略されている…と言っても今回は「最も高い因子負荷」に 0.3 以下のもの が無いので違いが分かりませんが…。

16.

6.4 とりあえずやってみよう 6.4.2 因子負荷を「解釈」する 因子分析は相関行列を対象にした分析法ですが,その目的の一つは項目をグルーピングすると ともに,その背後にある共通因子が何者であるかを解釈してあげることです。例えば共通因子 MR1 は Q1_6 から Q1_10 に対して高い負荷を持っていた一方で,Q1_1 から Q1_5 に対する因子 負荷は低い値でした。そのため,MR1 を「解釈」するうえでは,Q1_6 から Q1_10 に共通する要 素のみを考えたら良く,Q1_1 から Q1_5 は気にしなくて良いといえます。 ということで,実際に Q1_6 から Q1_10 の質問項目を見てみると, 6. Am exacting in my work.(自分の仕事には厳しく要求する。) 7. Continue until everything is perfect.(完璧になるまでやり続ける。) 8. Do things according to a plan.(計画に基づき行動する。) 9. Do things in a half-way manner.(【逆転】物事を中途半端に行う。) 10. Waste my time.(【逆転】時間を無駄にする。) という 5 つです。逆転項目も含めて,これらに共通する要素を考えると(人によって感じ方は 異なると思いますが)MR1 には例えば「計画性」や「慎重さ」のような名前が考えられるでしょ う。ちなみに,公式にはこれらの項目の背後にあるものは「誠実性 (conscientiousness)」と呼ば れています。 因子の「解釈」の意味を少し別の視点から見もてみましょう。項目をグルーピングする場合に は,単純に因子負荷の値が似ている項目は距離が近いと考えることができます。ということで, 先ほど得られた因子負荷をもとに散布図を書いてみます。図 6.9 は X 軸に MR1 を,Y 軸に MR2 の値をとった各項目の因子負荷量のプロットです。psych パッケージにある fa.plot() 関数で 簡単に描くことが出来ます*6 。 因子負荷のプロット 1 fa.plot(res_fa) こうして見ると,確かに Q1_1 から Q1_5 のグループと,Q1_6 から Q1_10 のグループに分か れているように見えますね。そして Q1_1 から Q1_5 のグループでは MR1 の値がゼロに近く,反 対に Q1_6 から Q1_10 のグループでは MR2 の値がゼロに近いので,各点は軸の近くに位置して います。いま,MR2 の軸に名前をつける( 「解釈」する)ことを考えてみましょう。これは「どの ような内容の項目において MR2 の値が大きくなるか」を考えることなので,MR2 の値が大きい項 目(ここでは Q1_1 から Q1_5)の間に共通する要素を探せば良いはずです。このとき重要なの は,Q1_6 から Q1_10 は MR2 の値がほぼゼロなので,MR2 を「解釈」する際には考える必要はな さそうだ,という点です。反対に MR1 の「解釈」においては Q1_1 から Q1_5 を無視することが できそうです。このように,各項目の因子負荷がどちらか一方にだけ高い値で,もう一方の因子 に対してはほぼゼロになっていると,MR1 と MR2 はそれぞれ異なるグループに共通する要素を反 映したものとして,ほぼ独立に「解釈」することができるわけです。 *6 ちなみに 3 因子以上の場合,fa.plot() は各因子ペアごとの散布図を並べてくれます。 16

17.

6.4 とりあえずやってみよう 17 0.4 3 2 5 4 1 0.0 MR2 0.8 Factor Analysis 810 7 9 6 0.0 0.2 0.4 0.6 MR1 図 6.9: 因子負荷のプロット …ということで,因子分析の目的からすると,得られる因子負荷行列においては一つの項目は なるべく一つの因子だけに高い負荷を持つという状態が望ましいとされています。これを単純構 造 (simple structure) と呼びます。一方で,もしも単純構造から外れた項目,つまり「複数の因 子に高い負荷量をもつ項目」があると,複数の共通因子の間に共通項があることを加味した解釈 が必要になってしまい,かなり大変そうだということが見えてきます。 因子負荷量の出力の一番右の列にあった com はこの単純構造の程度を表した指標です。これが 1 に近いほど,その項目は 1 つの因子にのみ高い負荷を持っているという判断ができます。今回 の結果では,Q1_4 が 1.2 と最も高い値になっています。たしかに,他の項目と比べると MR1 と MR2 の差が小さいようです。が,実際のところ 1.2 は相当マシな値です。どれくらい大きかった ら気をつけたら良いか,という基準は特に無いですが… 6.4.3 因子の解釈と項目の選定 ということで,無事因子負荷行列が計算できたら,表 6.2 や(2 因子なら)図 6.9 をもとに, それぞれの因子に負荷が高い項目のグループを見て,共通の要因を見つけてあげて,因子に名前 をつける( 「解釈」する)ことになります。ここは領域の知識などが要求されるところです。なの で同じデータであっても人によっては異なる名前をつける可能性があります。また,そもそも共 通する内容が見当たらないような項目が同じグループに入ってしまうことも実際には多々ありま す。そのような場合には,解釈しやすいグルーピングを求めて共通因子の数を変えるということ も検討する必要があります(詳細は Section 6.11) 。そして解釈した因子の名前が真っ当かどう かは,査読者ないし読者が判断することになります。因子の名前に客観的な「正解」というもの は無いので,納得させられたら勝ちなわけです。 また,当然ながら因子分析の結果は手元のデータから得られる,つまり使用したデータによっ て結果は異なるものです。そのため,先行研究で作成された尺度をそのまま用いた場合でも,因 子構造が同じものが得られるとは限りません。特に先行研究と属性の異なる集団でデータを集め

18.

6.4 とりあえずやってみよう た場合や,古い尺度を使用する場合には改めて因子分析を行い,同じ因子構造が得られることを 確認してから分析を進めるのが良いでしょう。 今回のデータのように各項目がほぼ一つの因子のみに高い負荷を持っている場合には解釈は容 易なのですが,多くの実データではきっと複数の因子に高い負荷を持っている項目や,どの因子 にも高い負荷を持っていない項目が出現するでしょう。このような場合,とりあえず単純構造を 求めて厄介な項目は削除するという手続きを取っている研究が結構多く見られます。 どの因子にも高い負荷を持っていない項目は,言い換えると独自性が高い項目であり,因子得 点を算出する上ではあってもなくてもあまり変わらないと予想されます。したがって,項目数を 減らしたい場合などには優先的に除外対象としたら良いでしょう。一方で複数の因子に高い負 荷を持っている項目を削除してしまうかは結構悩ましいところです。実際の尺度作成論文では, 「複数の因子に 0.3 以上の負荷を持つ項目は削除した」的な手続きが書かれていることがよくあ ります。この手続きが正しいかどうかは,時と場合によると思われます。 一般的に心理尺度を作成する場合には,なるべく「みんなが使いやすいモノサシ」を開発しよ うとしています。そして,共通のモノサシを用いることで異なる研究間での結果を比較可能にし ようと考えたりしています。そのため,尺度得点としては因子得点ではなく和得点を用いること が多いです。因子得点を用いた場合,データ毎に因子構造が変わってしまうので異なるデータ間 での因子得点の比較などは難しくなってしまいます。さて,下位概念ごとの和得点を計算する場 合,直感的には「その因子に高い負荷を持っている項目の和」を使えば良さそうです。この時に, 複数の因子に高い負荷を持つ項目があると,その項目の回答は複数の下位概念でカウントされて しまうため,実質的に他の項目の倍の価値を持ってしまうことになります。こうした問題点を避 けるという目的であれば,複数の因子に高い負荷を持つ項目は使わずに,もっと使いやすい(単 純構造な)項目を使って尺度を構成するのは悪くない方法だと思います。 一方で,尺度開発が目的ではない(例えば人に使ってもらうというよりは単純に項目をグルー ピングして共通項を取り出したい,他の人が作った尺度を使うが先行研究と比較する予定はな い,などの)場合には,項目数を減らす必要も無ければ和得点を使う必要もありません。因子得 点を計算する上では,複数の因子に高い負荷を持っている項目も重要(むしろきっと共通性が高 いのでかなり役に立つ)です。このような場合に,「他の研究でもやっているから」という理由 で安直に「複数の因子に高い負荷を持っている項目は削除」としてしまうのは悪手と言えるで しょう。 また,構造的な問題として「1 項目だけが高い負荷を持っている因子」は通常使用しません*7 。 因子分析の目的は「複数の項目に共通して影響する潜在変数を抽出する」ことなので,他のどの 項目とも独立している一匹狼に対して「因子」という見方はあまりしないのです。統計的にも,1 項目だけの因子の場合,その項目への回答と因子得点は完全に一致するため,標準化してしまえ ば回答値をそのまま使えば良いということがいえます。ただし,それはそれで他の項目とは独立 した「何か」を測定している項目ではあるので,この場合も削除するかはよく考えてください。 以上の話は,全て統計的な視点からのことです。実際に項目を削除するかは,構成概念と項目 の内容との関係を改めて精査したり,因子の解釈においてノイズになっていないかを検討したり *7 加えて,実は SEM の数理的には 1 因子には 3 項目以上あることが望ましかったりもします。 18

19.

6.5 因子負荷の推定法の実際 19 といった,妥当性の内容的な側面からのチェックも忘れずに行ってください。 6.5 因子負荷の推定法の実際 因子分析も回帰分析モデルと同じように,共通因子の成分 𝐅𝐛𝑖 によって回答 𝐲 を予測(ある いは近似)することが目的です。回帰分析では決定係数が高いほど予測の精度が良かったよう に,因子分析でも共通性の割合が高いほうが基本的には嬉しいものです。当然ながら,共通性の 割合は共通因子の数が増えるほど高くなるわけですが,fa() 関数に引数 nfactors が用意され ていたように,因子分析では共通因子の数は分析者が自由に設定できます。とはいえ本当にいく つでも良いわけではなく,因子分析の目的からすると「観測変数を適当な数のグループに分けた い」はずです。その「適当な数」を求める際には,例えば回帰分析における変数選択(決定係数 があまり上がらない説明変数は入れないようにする)と同じ要領で,共通性が大きく増加しない ような共通因子は入れないようにしようなどといったことが言えそうです。 ここで,因子分析における「共通因子の数」の意味を理解するために,実際にどのように因子 負荷行列を計算しているかを紹介します。これに基づいて実際に因子数を決めるための方法に関 しては Section 6.11 にて紹介します。なお本 Section で紹介するものは,因子分析におけるパラ メータ推定法の一種である主因子法と呼ばれる方法です。他にも因子負荷行列を推定する方法は ある(Section 6.10 を参照)のですが,観測変数間の相関関係の説明の分かりやすさから,主因 子法に基づいて説明をしていきます。 因子分析で因子負荷行列を求めるという行為は,観測変数間の 𝐼 × 𝐼 相関行列 𝚺 から,(6.17) 式に示されている 𝑇 × 𝐼 の行列 𝐁 を得る,ということです。そのために使われるのが,固有値 分解と呼ばれる行列の変換方法です。細かいことは省略しますが,固有値分解とは対称行列(こ こでは 𝐼 × 𝐼 相関行列 𝚺)を (6.19) 𝚺 = 𝐗𝚲𝐗⊤ という要素に分解する操作のことです。ここで,𝐗 は 𝐼 本の線形独立な長さ 𝐼 の縦ベクトル(固 有ベクトル)が横に並んだ形 𝐗 = [𝐱1 𝐱2 ⋯ 𝑥11 ⎡𝑥 𝐱𝐼 ] = ⎢ 21 ⎢ ⋮ ⎣𝑥𝐼1 𝑥12 𝑥22 ⋮ 𝑥𝐼2 ⋯ ⋯ ⋱ ⋯ 𝑥1𝐼 𝑥2𝐼 ⎤ ⎥ ⋮ ⎥ 𝑥𝐼𝐼 ⎦ (6.20) をしています。つまり 𝐼 × 𝐼 の行列です。 また,𝚲 は固有値 (𝜆1 , 𝜆2 , ⋯, 𝜆𝐼 ) を対角成分にもつ対角行列 𝜆1 ⎡0 𝚲=⎢ ⎢ ⋮ ⎣0 0 𝜆2 ⋮ 0 ⋯ 0 ⋯ 0⎤ ⎥ ⋱ ⋮⎥ ⋯ 𝜆𝐼 ⎦ (6.21) になっています。 R では eigen() という関数で固有値分解を行うことができるので,実際に行列を分解→復元 してみましょう。

20.

6.5 因子負荷の推定法の実際 20 行列を固有値分解 1 2 3 # Q1_1からQ1_5の相関行列で試してみます eig <- eigen(cor(dat[, 2:6])) eig$values # 固有値 1 [1] 2.4143113 0.8819440 0.6987614 0.5517027 0.4532806 1 eig$vectors # 固有ベクトル 1 2 3 4 5 6 [,1] [,2] [,3] [,4] [,5] [1,] -0.3333328 0.8503498 -0.132707026 -0.3843622 -0.02118902 [2,] -0.4936057 0.1622930 0.002823959 0.7651945 0.38011021 [3,] -0.5164665 -0.1419179 0.239729691 0.0954805 -0.80407389 [4,] -0.4058417 -0.3777438 -0.802813913 -0.2100389 0.06305300 [5,] -0.4623825 -0.2962012 0.529528437 -0.4620716 0.45227951 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ここで,固有ベクトルに関してはそれぞれ要素の二乗和が 1,つまり 𝐼 (6.22) ∑ 𝑥2𝑖𝑗 = 𝐱𝑗⊤ 𝐱𝑗 = 1 ∀𝑗 𝑖=1 となるように標準化された値が算出されています。 固有値分解からもとの行列を復元 1 2 3 4 # 復元した値 eig$vectors %*% diag(eig$values) %*% t(eig$vectors) # もとの(相関)行列 cor(dat[, 2:6]) 1 2 3 4 5 6 7 8 9 10 11 12 [,1] [,2] [,3] [,4] [,5] [1,] 1.0000000 0.3527771 0.2744489 0.1616950 0.1945084 [2,] 0.3527771 1.0000000 0.4974111 0.3501907 0.3925362 [3,] 0.2744489 0.4974111 1.0000000 0.3848005 0.5131434 [4,] 0.1616950 0.3501907 0.3848005 1.0000000 0.3211529 [5,] 0.1945084 0.3925362 0.5131434 0.3211529 1.0000000 Q1_1 Q1_2 Q1_3 Q1_4 Q1_5 Q1_1 1.0000000 0.3527771 0.2744489 0.1616950 0.1945084 Q1_2 0.3527771 1.0000000 0.4974111 0.3501907 0.3925362 Q1_3 0.2744489 0.4974111 1.0000000 0.3848005 0.5131434 Q1_4 0.1616950 0.3501907 0.3848005 1.0000000 0.3211529 Q1_5 0.1945084 0.3925362 0.5131434 0.3211529 1.0000000 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 確かに完全に一致しています。

21.

6.5 因子負荷の推定法の実際 21 これだけだと何をやっているかまだよく分からないと思いますが,とりあえず固有値分解の結 果をそのまま因子負荷行列 𝐁 として使っていくことにしましょう。(6.18) 式では,𝚺 を「共通因 子に起因する成分」𝐁⊤ 𝐁 と「独自因子に起因する成分」𝚿 に分解していました。このうち 𝐁⊤ 𝐁 の部分を固有値分解によって求めるならば,𝐁 = √ 𝚲𝐗⊤ としたら良さそうです。こうして求め られた因子負荷行列 𝐁 は,もとの観測変数間の相関行列 𝚺 の非対角成分,つまり相関関係につ いては完全に復元できる因子負荷行列になっています(𝚿 を無視しているので対角成分は復元で きない)。ちなみに図で表すと,因子負荷行列 𝐁 の因子数が項目数と同じ(𝑇 = 𝐼)ということ なので,例えば 5 項目ならば図 6.10 のような状態です。 図 6.10: 因子数と項目数が同じケース ここでは固有値分解の意味までは踏み込みません。とりあえず固有値分解を使えば行列をベク トル(とスカラー)に分解できるということ,そして項目数と同じ数の共通因子があれば,観測 変数間の相関関係を完全に表現できるということを理解しておいてください。 ただ,因子分析の目的は「複数の観測変数の背後にある少数の共通因子を見つけ出したい」な ので,その目的からすると図 6.10 のように「項目数と同じ数の共通因子」があっても何も嬉し くないですね。ここからどうにかして図 6.3 や 図 6.5 のように項目数よりもできるだけ少ない 数の共通因子によって,観測変数間の相関構造をできるだけ正確に表現したいものです。 ということで,固有値分解の性質を更に深掘りしていきます。固有値分解の式を,𝚲 の対角成 分の要素(固有値)ごとに分けて見てみると, 𝚺 = 𝐗𝚲𝐗⊤ = 𝜆1 𝐱1 𝐱1⊤ + 𝜆2 𝐱2 𝐱2⊤ + ⋯ + 𝜆𝐼 𝐱𝐼 𝐱𝐼⊤ (6.23) という形に展開することができます。つまり各固有ベクトルに,対応する固有値をかけたものの 和になっているということです。そして固有値分解の嬉しい性質として,固有値の大きいところ だけを使った近似ができるという点があります。例えば上の式に関して,固有値の一番大きい 𝜆1

22.

6.5 因子負荷の推定法の実際 22 に関するところだけを使った 𝚺 ≅ 𝜆1 𝐱1 𝐱1⊤ −0.333 ⎡−0.494⎤ ⎢ ⎥ = 2.414 ⎢−0.516⎥ [−0.333 −0.494 −0.516 ⎢−0.406⎥ ⎣−0.462⎦ 0.268 0.397 0.416 0.327 0.372 ⎡0.397 0.588 0.615 0.484 0.551⎤ ⎢ ⎥ = ⎢0.416 0.615 0.644 0.506 0.577⎥ ⎢0.327 0.484 0.506 0.398 0.453⎥ ⎣0.372 0.551 0.577 0.453 0.516⎦ −0.406 −0.462] (6.24) は,単一のベクトルと定数による近似の中では最も良い近似になっている*8 のです。つまり, もしも共通因子を 1 個だけにしたい場合には,固有値分解で得られた √𝜆1 𝐱1⊤ を因子負荷ベクト ル 𝐛 とすることで,𝐛⊤ 𝐛 = 𝜆1 𝐱1 𝐱1⊤ が共通因子が 1 個だけという条件の中では観測変数の相関 行列 𝚺 を最も良く近似できる因子負荷ベクトルになることが分かる,というのが固有値分解の すごいところです。 同様に, 𝚺 ≅ 𝜆1 𝐱1 𝐱1⊤ + 𝜆2 𝐱2 𝐱2⊤ (6.25) は 2 つのベクトルを使った近似の中では最も良い近似になっており,因子 1,2 に関する因子負荷 の横ベクトルをそれぞれ 𝐛1 , 𝐛2 とおけば, 𝐁⊤ 𝐁 = [𝐛⊤ 1 = [𝐱1 𝐛1 𝐛⊤ 2 ] [𝐛 ] 2 𝜆 𝐱2 ] [ 1 0 = [√𝜆1 𝐱1 0 𝐱1⊤ ][ ] 𝜆2 𝐱2⊤ √𝜆2 𝐱2 ] [ (6.26) √𝜆1 𝐱1⊤ ] √𝜆2 𝐱2⊤ という形で,因子の数がいくつであっても一因子のときと同様に,相関行列を最も良く近似でき る因子負荷行列 𝐁 を求めることができるわけです。 ここまでの議論からは • 因子の数は最大でも 𝐼 個である(固有値分解するため) • 因子の数が増えるほどデータの相関行列をより良く近似できる • 固有ベクトルはすべて標準化(𝐱𝑖⊤ 𝐱𝑖 = 1)されており固有値は大きい順に並んでいるた め,1 個目の因子が一番強い といったことがわかります。 *8 厳密には,ここで近似しているのは 𝚺 − 𝚿 = 𝐛⊤ 𝐛 です。しかし実際には 𝚿 はわからないので,計算上は「対 角成分を 𝚿 に置き換えた 𝚺」について固有値分解を繰り返すことで,「非対角成分だけ近似された状態」を求 めます。なので上の近似も対角成分(全て 1 になるはず)はあまりうまく近似されていません。

23.

6.5 因子負荷の推定法の実際 23 ではここで,固有ベクトルによる相関行列の近似のイメージを掴むための例を見てみます*9 。 以下の 図 6.11 は, (仮想的な)48 項目の相関行列をヒートマップに落とし込んだものです。無相 関のところを白色として,黄色が濃いほど正の相関が強く,黒が濃いほど負の相関が強い場所を 表すように色をつけたところ,偶然ニッコリ笑顔にみえるような相関行列が得られたとします。 0 10 cor 1.0 20 y 0.5 0.0 -0.5 30 40 50 0 10 20 30 40 50 x 図 6.11: 相関行列 では,この相関行列を固有値分解して,最初の固有ベクトルのみを使った近似 𝜆1 𝐱1 𝐱1⊤ を見 てみましょう。うまく近似できたら 図 6.11 のようなニッコリ笑顔になっているはずですが, 図 6.12 にはその面影は全くありません…。最初の固有ベクトル 1 個だけを使った近似は,因子 分析で言えばすべての項目が概ね単一の共通因子のみの影響を受けている状態(図 6.3)を考え ているわけですが,図 6.11 の相関行列では負の相関を持つ(黒く塗りつぶされた)ペアもそれ なりに存在しているため,一因子ではさすがに無理がある,ということを表しています。 ということで,もう少し多くの固有ベクトルを使って近似してみましょう。図 6.13 ではそれ ぞれ c(2:5, 10, 48) 個の固有ベクトルを使った近似に基づくヒートマップが描かれています。 当然 48 個全てを使えば完璧な復元ができる(6.19 式)わけですが,この図を見ると大体 5 個く らいでもニッコリ笑顔の感じは割と復元されているように見えます。固有値分解を用いること で,本来の変数の数(この例では 48)よりもかなり少ない数(この例では 5-10 くらい)の共通 因子があれば,もとの相関行列の大体の感じを説明可能となります。これこそが因子分析が目指 している「なるべく少ない共通因子で説明する」の本質なのです。つまり因子分析では,観測さ れた 𝐼 × 𝐼 相関行列 𝚺 を固有値分解し,そのうち 𝑇 (𝑇 < 𝐼) 個の固有値と固有ベクトルを使っ *9 ここで紹介しているのは画像処理における次元圧縮のマネです。

24.

6.5 因子負荷の推定法の実際 24 0 10 cor 20 y 0.50 0.25 0.00 30 40 50 0 10 20 30 40 50 x 図 6.12: 第 1 固有ベクトルのみでの近似は失敗 て,相関行列を 𝚺 ≅ 𝜆1 𝐱1 𝐱1⊤ + 𝜆2 𝐱2 𝐱2⊤ + ⋯ + 𝜆𝑇 𝐱𝑇 𝐱𝑇⊤ (6.27) 𝑇 = ∑ 𝜆𝑡 𝐱𝑡 𝐱𝑡⊤ 𝑡=1 という形で近似しているのです。 2個で近似 3個で近似 10 30 -0.5 40 0 10 20 30 40 1.0 0.5 0.0 -0.5 20 0.0 40 50 50 0 10 20 x 30 40 5個で近似 40 50 50 20 40 30 40 50 40 50 48個全部 10 10 cor 1.5 1.0 0.5 0.0 -0.5 20 30 40 50 30 0 10 20 30 40 50 cor 1.0 20 0.5 y y 30 x 10 0 y cor 1.5 1.0 0.5 0.0 -0.5 20 20 0 x 10個で近似 10 10 1.0 0.5 0.0 -0.5 30 0 0 cor 20 x 0 50 10 cor y y 0.5 30 0 10 cor 1.0 20 50 4個で近似 0 y 0 0.0 30 -0.5 40 50 x 図 6.13: もっといっぱい使って近似 0 10 20 30 x 40 50

25.

6.5 因子負荷の推定法の実際 25 ちなみに,すべて項目の因子負荷の二乗和を固有値分解的に表すと, 𝑇 𝐼 tr(𝐁⊤ 𝐁) = ∑ ∑ 𝜆𝑡 𝑥2𝑖𝑡 (6.28) 𝑡=1 𝑖=1 𝑇 𝐼 = ∑ 𝜆𝑡 ∑ 𝑥2𝑖𝑡 𝑡=1 𝑖=1 という形になります。固有値分解で得られる固有ベクトルは標準化されているため, 𝐼 (6.29) ∑ 𝑥2𝑖𝑡 = 1 ∀𝑡 𝑖=1 となっています。したがって, 𝑇 tr(𝐁⊤ 𝐁) = ∑ 𝜆𝑡 (6.30) 𝑡=1 となります。これは,固有値こそが因子負荷の合計を決めており,ひいては分散説明率(共通性) の合計を規定していることを表しています。ここからも,共通因子の数を決める際に何を意識し たら良いかが見えてきます。 • 相関構造が複雑な場合,共通因子の数が少なすぎるとデータへの当てはまりが悪くなるの で良くない • 因子の数が増えるほど分散説明率が増える=共通性の値が大きくなる • 後ろの固有値になるほど影響が小さくなるので,無くても良くなってくる 実際にどういった指標を用いて因子数を決めたら良いかは Section 6.11 までお待ち下さい。 先ほど fa() によって得られた因子負荷はかなり単純構造に近かったわけですが,いま説明し たように,固有値分解によって因子負荷を推定すると解は一つ(𝐛𝑡 = √𝜆𝑡 𝐱𝑡 )に決まります。 そして第 1 因子については,全ての因子負荷に最も大きい固有値(𝜆1 )がかかっているわけなの で,基本的に 1 つ目の共通因子は全ての項目に対して高い因子負荷となりがちです。このままで は,1 つ目の共通因子は常に「総合的な何か」としか解釈できなくなってしまいそうです。 ただ実際にはそんなことはありません。これには因子分析の解の不定性が大きく関係してい ます。 6.5.1 因子の回転 まずは因子分析における解の不定性を数理的に説明していきます。 (6.8) 式では,単一の項目 𝑖 に関する因子分析モデルを,回帰分析と同様に 𝐲𝑖 = 𝐟1 𝑏1𝑖 + 𝐟2 𝑏2𝑖 + ⋯ + 𝐟𝑇 𝑏𝑇 𝑖 + 𝜺𝑖 = [𝐟1 𝐟2 = 𝐅𝐛𝑖 + 𝜺𝑖 ⋯ 𝑏1𝑖 ⎡𝑏 ⎤ 𝐟𝑇 ] ⎢ 2𝑖 ⎥ + 𝜺𝑖 ⎢ ⋮ ⎥ ⎣𝑏𝑇 𝑖 ⎦ (6.7)

26.

6.5 因子負荷の推定法の実際 26 表 6.3: 因子負荷行列 (𝐁⊤ ) F1 F2 0.702 0.238 0.683 0.500 0.787 0.532 0.811 -0.492 0.694 -0.499 0.665 -0.273 と表現しました。これを全項目についてまとめて線形代数で表すと,以下のようになります。 𝐘 = [𝐲1 𝐲2 ⋯ 𝑓11 𝑓12 ⎡𝑓 𝑓22 = ⎢ 21 ⎢ ⋮ ⋮ ⎣𝑓𝑃 1 𝑓𝑃 2 = 𝐅𝐁 + 𝐄 𝐲𝐼 ] ⋯ ⋯ ⋱ ⋯ 𝑓1𝑇 𝑏11 𝑓2𝑇 ⎤ ⎡ 𝑏21 ⎥⎢ ⋮ ⎥⎢ ⋮ 𝑓𝑃 𝑇 ⎦ ⎣𝑏𝑇 1 𝑏12 𝑏22 ⋮ 𝑏𝑇 2 ⋯ ⋯ ⋱ ⋯ 𝑏1𝐼 𝜀11 𝑏2𝐼 ⎤ ⎡ 𝜀21 ⎥+⎢ ⋮ ⎥ ⎢ ⋮ 𝑏𝑇 𝐼 ⎦ ⎣𝜀𝑃 1 𝜀12 𝜀22 ⋮ 𝜀𝑃 2 ⋯ ⋯ ⋱ ⋯ 𝜀1𝐼 𝜀2𝐼 ⎤ ⎥ ⋮ ⎥ 𝜀𝑃 𝐼 ⎦ (6.31) 表記がこんがらがってきたのでおさらいしておきますが, • 因子得点 𝑓𝑝𝑡 にある 2 つの添字は回答者(𝑃)と因子(𝑇) • 因子負荷 𝑏𝑡𝑖 にある 2 つの添字は因子(𝑇)と項目(𝐼) • 残差 𝜀𝑝𝑖 にある 2 つの添字は回答者(𝑃)と項目(𝐼) です。ここで,共通因子に関する部分 𝐅𝐁 について次のような操作を考えてみます。 • 因子負荷行列 𝐁 に対して,正則な(=逆行列が存在する)対称行列 𝐀 を左からかけたも のを 𝐁̃ = 𝐀𝐁 とする • 因子得点行列 𝐅 に対して,その逆行列 𝐀−1 を右にかけたものを 𝐅̃ = 𝐅𝐀−1 とする すると,𝐅̃ 𝐁̃ = 𝐅𝐀−1 𝐀𝐁 = 𝐅𝐁 となります。そして正則な対称行列 𝐀 というのは無限に存 在しています。したがって,観測された相関行列 𝚺 に対する当てはまりが同じになる因子得点 𝐅 と因子負荷 𝐁 の組み合わせが無限に存在しているわけです。そうだとすると,その中でどの 組み合わせを最終的に使えばよいのでしょうか… 因子分析では,この不定性をむしろ利用して,都合の良い組み合わせを選んで使うということ にしています。具体的に,𝐅𝐁 を自由に変換できると何が嬉しいのかを,もう少しイメージを交 えて説明しましょう。ある 6 項目の相関行列に対して固有値分解を行い,得られた 2 つの因子に 対する因子負荷量(表 6.3 )を二次元にプロットしたものが図 6.14 です。どうやら 3 項目ずつ のグループに分かれそうですね。ですがこのままでは全ての項目が因子 1 に対して高い負荷を 持っているため,因子 1 は「総合的な何か」としか解釈できません。 図 6.14 のようなプロットに対して,正則な対称行列 𝐀 による変換は,プロットの軸を回転さ

27.

6.5 因子負荷の推定法の実際 27 1 0.75 0.5 0.25 -1 -0.75 -0.5 -0.25 0.25 0.5 0.75 1 -0.25 -0.5 -0.75 -1 図 6.14: 仮想的な 2 因子 せることに相当します。例えば 2 次元の回転ならば, 𝐀=[ cos 𝜃 sin 𝜃 − sin 𝜃 ] cos 𝜃 (6.32) という行列を左からかけることは,原点を中心に時計回りに 𝜃 度回転することに対応していま す。また,この行列には逆行列 𝐀−1 = [ cos 𝜃 sin 𝜃 ] − sin 𝜃 cos 𝜃 (6.33) が存在しているため,𝐅̃ = 𝐅𝐀−1 の計算も可能です。試しに 図 6.15 のように軸を時計回りに 45 度回転させると,図 6.14 よりは単純構造に近づけることができそうです。 実際に因子負荷行列を変換させてみると, 𝐀𝐁 = [ cos 45∘ sin 45∘ − sin 45∘ 0.702 0.683 ][ cos 45∘ 0.238 0.500 =[ 0.707 0.707 −0.707 0.702 0.683 ][ 0.707 0.238 0.500 0.328 =[ 0.665 0.129 0.836 0.180 0.921 0.933 0.226 0.787 0.811 0.532 −0.492 0.787 0.811 0.532 −0.492 0.844 0.138 0.694 −0.499 0.694 −0.499 0.665 ] −0.273 0.665 ] −0.273 0.663 ] 0.277 となり,表 6.3 よりはいい感じに 3 項目ずつに分かれました。 ここまでは,2 つの軸が直角に交わった状態を保ちながら回転をさせてきました。このような 回転のことを直交回転 (orthogonal rotation) と呼びます。固有値分解で得られる(初期状態 の)固有ベクトルは,互いに直交するようになっています。直交するということは,言い換える と相関がないということです。つまり,直交回転は因子間相関がゼロという制約のもとで単純構 造を目指す回転なのです。ですが,ほとんどの場合ではわざわざ因子間相関をゼロに制約する必

28.

6.5 因子負荷の推定法の実際 28 25 1. 25 . -1 1 -1 75 0. 5 .7 -0 5 0. -0 .5 25 0. -0 5 .2 -0 5 .2 25 0. .5 -0 5 0. 5 .7 -0 75 0. -1 1 5 .2 -1 25 1. 図 6.15: 45 度回転させると 要はないでしょう。むしろ,因子の間には少なからず相関関係が見られるはずです。 2 つの因子の相関係数は,2 つの軸が作る角度 𝜃 に対して cos 𝜃 になります。直交回転では必ず 相関が cos 90∘ = 0 になっているわけですが,もし 2 つの因子の軸が作る角度が 90∘ 以外になっ ても良いならば,図 6.15 よりも更に良い単純構造が目指せそうです。実際に,例えば回転行列 𝐀を 𝐀=[ 0.613 0.582 −0.902 ] 0.922 と設定すると,変換後の因子負荷行列 𝐁̃ は 0.613 0.582 −0.902 0.702 0.683 ][ 0.922 0.238 0.500 0.787 0.811 0.532 −0.492 0.216 =[ 0.628 −0.032 0.002 0.941 0.859 0.949 0.018 0.876 0.654 ] −0.057 0.135 𝐀𝐁 = [ 0.694 −0.499 0.665 ] −0.273 となり,直交回転のときよりもさらに単純構造になりました。 図 6.16 のように,因子間の相関を認めながら回転を行うことを斜交回転 (oblique rotation) と呼びます。なお,回転行列 𝐀 によって初期解を回転させた時,因子得点行列 𝐅 は 𝐅̃ = 𝐅𝐀−1 と変換されているため,因子間相関行列 𝚽 は (𝐀𝐀⊤ )−1 によって求めることができます。例えば 先程の数値例の場合は, 𝚽 = (𝐀𝐀⊤ )−1 = ([ ≃[ 0.613 0.582 1 0.400 −0.902 0.613 0.582 ][ ]) 0.922 −0.902 0.922 −1 0.400 ] 1 となり,回転後の因子間相関は 0.4 と計算できます。cos 𝜃 = 0.4 ということは,図 6.16 の 2 軸

29.

6.5 因子負荷の推定法の実際 29 図 6.16: 斜交回転させると が作る角度がおよそ 𝜃 = 66.4 度になっている,ということです。 INFO 回転後の因子間相関の導出 あるデータ行列 𝐗 は,各行が個人を,各列が変数を表している 𝑃 × 𝐼 の行列とします ( dat などと同じ形式) 。これに対する分散共分散行列 𝚺 の (𝑠, 𝑡) 成分は変数 𝑠 と変数 𝑡 の 共分散なので, 𝜎𝑠𝑡 = 1 𝑃 ∑(𝑥 − 𝑥𝑠̄ )(𝑥𝑝𝑡 − 𝑥𝑡̄ ) 𝑃 𝑝=1 𝑝𝑠 = 𝐸 [(𝑥𝑝𝑠 − 𝑥𝑠̄ )(𝑥𝑝𝑡 − 𝑥𝑡̄ )] と単純に因子得点の積の期待値になります。ただし 𝑥𝑠̄ は変数 𝑠 の平均値です。 これを因子得点行列 𝐅 に置き換えて考えてみると,因子分析では基本的な設定の一つとし て,各行(各因子の因子得点)の平均値(𝑥𝑠̄ や 𝑥𝑡̄ に相当するもの)はそれぞれ 0 という 制約を置いているため,因子 𝑠 と因子 𝑡 の共分散は 𝜎𝑠𝑡 = 1 𝑃 ∑𝑓 𝑓 𝑃 𝑝=1 𝑝𝑠 𝑝𝑡 = 𝐸 [𝑓𝑝𝑠 𝑓𝑝𝑡 ] となります。同様に,各列(因子得点)の標準偏差は 1 に制約されているため,分散共分 散行列 𝚺 はそのまま相関行列として見ることができます。 ということで因子得点の相関行列は,上の式を行列全体に拡張することで 𝐸[𝐅⊤ 𝐅] と表す ことができます。回転前の初期解(固有ベクトル同士)は必ず無相関なので,𝐸[𝐅⊤ 𝐅] = 𝐈 ⊤ ということです。𝐅̃ ⊤ = (𝐅𝐀−1 )⊤ = 𝐀−1 𝐅⊤ であることを利用すると,回転後の因子間

30.

6.6 因子分析の結果の続き 相関は 30 ⊤ 𝐸[𝐅̃ ⊤ 𝐅]̃ = 𝐸[𝐀−1 𝐅⊤ 𝐅𝐀−1 ] ⊤ = 𝐀−1 𝐸[𝐅⊤ 𝐅]𝐀−1 ⊤ = 𝐀−1 𝐈𝐀−1 ⊤ = 𝐀−1 𝐀−1 = (𝐀𝐀⊤ )−1 となるわけです。 直交回転にせよ斜交回転にせよ,図 6.14 から図 6.16 における各項目のプロットの位置関係は 変わりません。また,共通性と独自性の値も変わりません。回転の不定性を利用することによっ て,「相関行列から項目のグルーピングを行う」という基本姿勢は変わること無く,より解釈し やすいように因子負荷量をいい感じにしてあげるわけです。 改めて fa() の出力に戻ると,3,4 列目の h2 と u2 はそれぞれ共通性と独自性を表していま す。Q1_1 の場合,共通性が 0.16,独自性が 0.84 ということで,観測変数の分散(標準化されて いるので 1)のうち 0.16 だけがこの 2 つの因子によって説明されていることになります。なお ̃ の値 h2 の値は単純な因子負荷の二乗和ではなく,回転後の因子間相関を考慮した diag(𝐁̃ ⊤ 𝚽𝐁) になっています*10 。 6.6 因子分析の結果の続き ここからは,先ほど fa() 関数で得られた結果を見ながら,因子負荷以外の部分についても解 説していきたいと思います。 改めて因子分析の結果を表示 1 res_fa 1 2 3 4 5 6 7 8 9 10 Factor Analysis using method = minres Call: fa(r = dat[, paste0("Q1_", 1:10)], nfactors = 2) Standardized loadings (pattern matrix) based upon correlation matrix MR1 MR2 h2 u2 com Q1_1 -0.08 0.42 0.16 0.84 1.1 Q1_2 0.00 0.68 0.47 0.53 1.0 Q1_3 -0.03 0.77 0.58 0.42 1.0 Q1_4 0.14 0.46 0.27 0.73 1.2 Q1_5 0.03 0.61 0.38 0.62 1.0 Q1_6 0.57 -0.05 0.31 0.69 1.0 *10 回転前後で共通性の値は変わらないため,h2 の値は回転前の初期解の因子負荷の二乗和には一致します。回転 して因子間相関を持ったことで,各因子の影響のうち僅かな部分が別の因子を経由したものに置き換わったとい うイメージです。

31.

6.6 因子分析の結果の続き 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 Q1_7 Q1_8 Q1_9 Q1_10 31 0.64 -0.02 0.40 0.60 1.0 0.55 0.02 0.31 0.69 1.0 0.68 0.00 0.46 0.54 1.0 0.57 0.06 0.35 0.65 1.0 MR1 MR2 SS loadings 1.87 1.83 Proportion Var 0.19 0.18 Cumulative Var 0.19 0.37 Proportion Explained 0.51 0.49 Cumulative Proportion 0.51 1.00 With factor correlations of MR1 MR2 MR1 1.00 0.32 MR2 0.32 1.00 Mean item complexity = 1 Test of the hypothesis that 2 factors are sufficient. df null model = 45 with the objective function = 2.14 with Chi Square = 5190.53 df of the model are 26 and the objective function was 0.16 The root mean square of the residuals (RMSR) is 0.04 The df corrected root mean square of the residuals is 0.05 The harmonic n.obs is 2432 with the empirical chi square 311.44 with prob < 1.1e-50 The total n.obs was 2432 with Likelihood Chi Square = 379.19 with prob < 2.2e-64 Tucker Lewis Index of factoring reliability = 0.881 RMSEA index = 0.075 and the 90 % confidence intervals are BIC = 176.48 Fit based upon off diagonal values = 0.98 Measures of factor score adequacy MR1 MR2 Correlation of (regression) scores with factors 0.87 0.88 Multiple R square of scores with factors 0.76 0.78 Minimum correlation of possible factor scores 0.51 0.56 0.068 0.082

32.

6.6 因子分析の結果の続き 6.6.1 因子寄与率・分散説明率 16 17 18 19 20 21 MR1 MR2 SS loadings 1.87 1.83 Proportion Var 0.19 0.18 Cumulative Var 0.19 0.37 Proportion Explained 0.51 0.49 Cumulative Proportion 0.51 1.00 一番上の SS loadings は因子負荷の二乗和 (sum of squared loadings) を表していると思わ れます。実際には単純な二乗和 diag(𝐁⊤ 𝐁) ではなく,これに回転後の因子間相関を考慮した値 ̃ が出ています*11 。例えば因子 1 を例にとって見ると,因子 1 の得点 𝐟1 は,それぞ diag(𝐁̃ ⊤ 𝚽𝐁) れの項目に対する因子負荷量 𝑏1𝑖 を通じて各項目の分散をある程度 (𝑏1𝑖 ) 説明します。ただ,因 子 1 の影響はこれにとどまりません。因子 2 と相関があるということは,𝐟1 の値とある程度連動 して 𝐟2 の値も変化します。仮にこの相関関係を回帰分析的に言えば,𝐟1 は 𝐟2 に対して僅かな分 散説明率を持っているわけです。ということで,𝐟1 が 𝐟2 を介して各項目に対してもつ僅かな分 散説明率 𝑏2𝑖 も合算されて SS loadings が計算されています。 2 つ目の Proportion Var は,観測変数全体に対する各因子の分散説明率を表しています。今 回は 10 項目のデータで因子分析を行っていますが,各観測変数は標準化されているため,分散 の合計は 10 です*12 。この 10 に対して,因子 1 の寄与の合計 ( SS loadings) は 1.87 なので, Proportion Var は 0.187 となります。つづく Cumulative Var は,その分散説明率の累積(累 積寄与率)です。今回の場合,因子 1 と因子 2 はそれぞれ 0.187 および 0.183 という分散説明率 (因子寄与率)なので,第二因子の Cumulative Var には,その合計で 0.370 という値が入るわ けです。言い換えると,今回の分析では 2 因子でこの 10 項目の分散のうちおよそ 37% が説明さ れる,ということになります。この Cumulative Var の値があまりにも低い場合は,まだ各項 目の独自性が高すぎる(=共通因子の数が少ないかも)ということです。せっかく因子得点を算 出しても,結局各項目への回答はその因子以外の要因で決まっている割合が大きいということに なり,因子得点の意味が問われてしまいます。もうお分かりかもしれませんが,因子分析では因 子の数を増やすほど累積寄与率は上がるので,累積寄与率が一定の値になるまで因子数を増やす というアプローチも無いことは無いでしょう*13 。 一番下の 2 つ Proportion Explained と Cumulative Proportion は,共通因子で説明可 能な部分のうち,各因子が占める割合(および累積割合)を表しています。ここまで解釈する ことはあまり無い気がしますが,例えば Proportion Explained が低すぎる因子がある場合に は,相対的に「なくても良い」という判断に使えるかもしれませんね。 ̃ 𝐁̃ ⊤ ) でした。それに対して因 *11 項目の共通性は,因子負荷行列 𝐁 を列(項目)ごとに二乗和したもの diag(𝐁𝚽 ̃ という順番になっているの 子寄与率は因子負荷行列を行(因子)ごとに二乗和しているため,diag(𝐁̃ ⊤ 𝚽𝐁) です。 *12 「合計点の分散」ではなく「分散の合計」です。なので観測変数間の相関などは気にする必要はありません。 *13 一説には,50% くらいの累積寄与率はほしいという声もあったりするそうです。 32

33.

6.6 因子分析の結果の続き 6.6.2 因子間相関 23 24 25 26 With factor correlations of MR1 MR2 MR1 1.00 0.32 MR2 0.32 1.00 見ての通り,回転後の因子間の相関行列 𝚽 = (𝐀𝐀⊤ )−1 です。相関があまりに高い場合には, もしかしたら因子を統合してしまっても良いのかもしれません。もちろん内容次第ですが。 他にも下の方にはいろいろな値が出ていますが,因子分析の結果を解釈するだけならとりあえ ずここまで理解できていれば十分です。ということで,続いては得られた因子負荷を所与とし て,因子得点の計算に進みましょう。 6.6.3 因子得点 実は因子得点 𝐅 は,fa() の出力の中に $scores という名前で入っています。 因子得点を出す 1 head(res_fa$scores) 1 2 3 4 5 6 7 MR1 MR2 1 -1.38258689 -0.8922837 2 -0.34481092 -0.2707195 3 -0.11683020 -0.4538879 4 -1.08523045 0.1082199 5 -0.06184927 -0.8948835 6 1.35556644 0.4285821 ​ ​ ​ 観測された因子得点の相関を見てみると,モデル上の回転後の因子間相関 𝚽 とは少し異なり ます。報告する際には気をつけてください。 因子得点の相関と因子間相関は別もの 1 cor(res_fa$scores) 1 2 3 MR1 MR2 MR1 1.000000 0.392582 MR2 0.392582 1.000000 ​ ​ ​ 図 6.17 は因子得点と合計点の散布図です。確かに合計点が高い人ほど因子得点も高くなって いるようです。 33

34.

6.6 因子分析の結果の続き 34 因子得点と合計点の散布図 # MR2はQ1_1からQ1_5に対応 == Q1_A plot(dat$Q1_A, res_fa$scores[, 2]) ​ ​ ​ -2 -1 0 1 ​ -3 ​ res_fa$scores[, 2] 1 2 5 10 15 20 25 30 dat$Q1_A 図 6.17: 因子得点と合計点の散布図 尺度得点として,合計点の代わりに因子得点を用いることのメリットは大きく分けて 2 つある と考えます。1 つ目は,得点のばらつきです。図 6.17 を見るとわかるように,合計点が同じ人で あっても因子得点はかなりばらつきがあります。この理由は,項目ごとに因子負荷が異なるため です。因子負荷が高いほど,因子得点が高い人と低い人を明確に識別できる項目です。したがっ て,因子負荷が高い項目に「とても当てはまる」と回答した人はかなりの確度で因子得点が高い といえます。一方で,因子負荷がほぼゼロの項目では,因子得点が高いから「当てはまる」と回 答しているとはいえません。したがって,この項目に「とても当てはまる」と回答した人の因子 得点が高いという保証はありません。尺度得点として合計点を使うということは,このように各 項目が因子得点の推定に与える情報の強さを無視して,一律同じパワーを持っていると仮定して いることと同じです。そのため,特に因子負荷がばらつくような状況下では,単純な合計点がそ の人の潜在的な特性の強さを正確に表しているとはあまり言えないかもしれないのです*14 。 因子得点を用いるもう一つのメリットは,モデル上は誤差が分離されるという点です。図 6.4 にあるように,因子分析モデルでは各項目への回答は「共通因子」と「独自因子」の影響を受け ていると考えます。このとき,誤差(特に偶然誤差)は,他の項目とは無関係に生じるものなの で独自因子の中に吸収されているという見方ができます。したがって,共通因子の部分には誤差 の影響は含まれていないと考え,因子得点はある意味では純粋な値として扱うことができる,と されているのです。 *14 尺度としての使いやすさや計算の簡便性を考えると合計点を使うのはありなのですが,個人的には例えば尺度得 点として重み付け和を使う,みたいな方法はもっと広まっても良いのでは,と思っています。

35.

6.7 カテゴリカル因子分析 35 6.7 カテゴリカル因子分析 (ここからは因子分析を行うにあたってのプラクティカルな話題をいくつか紹介します。 ) 因子分析では,相関行列をもとに因子負荷行列を求めています。その相関行列に関して, Chapter 4(I-T 相関のところ)では,カテゴリカル変数の場合の特別な相関(ポリシリアル相 関)の話をしました。因子分析の時にも同じことが言えます。 ここまでは,観測されたデータを普通の連続変数とみなして因子分析を行ってきましたが,心 理尺度のようにカテゴリカルな観測変数の場合には,相関係数が過小評価されてしまうため,結 果的に共通因子のパワーも弱く評価されてしまいます。つまり,因子分析での項目間の相関関係 は,本当は背後にある潜在的な値に対して求められるべきです。そこで,因子分析に用いる相関 をピアソンの積率相関係数ではなくポリコリック相関(カテゴリカル変数同士の相関係数)に変 更することを考えます。このように,各観測変数を連続変数(間隔尺度)ではなく順序尺度とみ なして因子分析を行うことをカテゴリカル因子分析と呼んだりします。 Chapter 4(I-T 相関のところ)では,ポリシリアル相関などのカテゴリカルな相関を計算す るためのパッケージとして polycor を紹介しました。ポリコリック相関を計算する関数はこの パッケージの中にも( polychor())あるのですが,データフレーム全体に対して相関行列を計 算することは出来ないので,ここでは別の関数を使用します*15 。 psych パッケージにある polychoric() 関数を使用しましょう。 ポリコリック相関を計算する 1 2 3 4 # 毎回列名を指定するのが面倒なので先に作っておく cols <- paste0("Q1_", 1:10) cor_poly <- polychoric(dat[, cols]) cor_poly 1 2 3 4 5 6 7 8 9 10 11 12 Call: polychoric(x = dat[, cols]) Polychoric correlations Q1_1 Q1_2 Q1_3 Q1_4 Q1_5 Q1_6 Q1_7 Q1_8 Q1_9 Q1_10 Q1_1 1.00 Q1_2 0.42 1.00 Q1_3 0.33 0.57 1.00 Q1_4 0.19 0.41 0.43 1.00 Q1_5 0.24 0.45 0.58 0.37 1.00 Q1_6 0.02 0.12 0.14 0.11 0.17 1.00 Q1_7 0.00 0.15 0.16 0.26 0.14 0.49 1.00 Q1_8 0.03 0.22 0.15 0.16 0.15 0.35 0.40 1.00 Q1_9 0.14 0.20 0.17 0.22 0.17 0.43 0.45 0.41 1.00 *15 polycor パッケージにある hetcor() 関数は,データフレームに対してポリコリック・ポリシリアル・ピアソ ンの相関行列を出してくれる関数です。ただこの関数では,データフレームの各列がカテゴリカルであるかを自 動的に判別して,変数のペアごとに適切な相関を算出します。したがって,この関数を使う場合は事前にカテゴ リカル変数の型を as.factor() 等で変換する必要があります。

36.

6.7 カテゴリカル因子分析 13 14 15 16 17 18 19 20 21 22 23 24 25 26 36 Q1_10 0.05 0.16 0.19 0.29 0.20 0.31 0.34 0.40 0.54 1.00 with tau of 1 2 3 4 5 Q1_1 -1.9 -1.2 -0.743 -0.3262 0.43 Q1_2 -2.1 -1.5 -1.179 -0.4783 0.48 Q1_3 -1.8 -1.3 -0.963 -0.3284 0.61 Q1_4 -1.7 -1.1 -0.877 -0.3756 0.23 Q1_5 -2.0 -1.3 -0.909 -0.2425 0.68 Q1_6 -2.0 -1.4 -0.917 -0.2308 0.77 Q1_7 -1.9 -1.2 -0.764 -0.1126 0.84 Q1_8 -1.9 -1.2 -0.757 -0.0072 0.95 Q1_9 -2.0 -1.2 -0.632 -0.1678 0.60 Q1_10 -1.3 -0.6 -0.014 0.2884 0.92 polychoric() は,相関行列に加えて各項目のカテゴリ閾値( tau)を list 形式で返します。 その中からポリコリック相関行列そのものを出力したい場合には cor_poly$rho で取り出すこ とが出来ます。あとはこれを fa() 関数に与えるだけです。これまで fa() 関数にはデータフ レームを与えてきましたが,中でやっているのは結局「相関行列を計算する→因子負荷行列の初 *16 期解を計算する→回転する」なので,実は相関行列を直接与えることも可能です。 fa() 関数に相関行列を直接与える場合は,引数 n.obs が必要になります。これは因子負荷の 計算自体には必要ないのですが,fa() の出力でいうと下の方に表示される検定などに必要な情 報です。欠測値がある場合には厄介なのですが,事前に欠測のあるデータを削除している場合に は普通に nrow で大丈夫です。 カテゴリカル因子分析 (1):相関行列を与える 1 2 res_fa_cat <- fa(cor_poly$rho, nfactors = 2, n.obs = nrow(dat)) res_fa_cat 1 2 3 4 5 6 7 8 9 Factor Analysis using method = minres Call: fa(r = cor_poly$rho, nfactors = 2, n.obs = nrow(dat)) Standardized loadings (pattern matrix) based upon correlation matrix MR2 MR1 h2 u2 com Q1_1 -0.09 0.48 0.21 0.79 1.1 Q1_2 0.00 0.74 0.55 0.45 1.0 Q1_3 -0.03 0.81 0.65 0.35 1.0 Q1_4 0.16 0.49 0.32 0.68 1.2 Q1_5 0.04 0.64 0.43 0.57 1.0 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ *16 細 か い 話 を す る と, fa() ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 関 数 に デ ー タ フ レ ー ム を 与 え た 場 合, 相 関 係 数 の 計 算 時 に は use="pairwise.complete.obs"が指定されていることになります。そのため,もしも欠測値の無いデー タのみで因子分析をしたい場合には,事前に use="complete.obs"で相関行列を計算して与える,という使い 方もできます。もっというと fa() 関数自体が引数 use を受け付けるのですが。

37.

6.7 カテゴリカル因子分析 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Q1_6 Q1_7 Q1_8 Q1_9 Q1_10 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 0.62 -0.04 0.36 0.64 1.0 0.68 -0.03 0.45 0.55 1.0 0.58 0.02 0.35 0.65 1.0 0.72 0.01 0.53 0.47 1.0 0.60 0.06 0.39 0.61 1.0 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ MR2 MR1 SS loadings 2.11 2.11 Proportion Var 0.21 0.21 Cumulative Var 0.21 0.42 Proportion Explained 0.50 0.50 Cumulative Proportion 0.50 1.00 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ With factor correlations of MR2 MR1 MR2 1.00 0.34 MR1 0.34 1.00 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ Mean item complexity = 1 Test of the hypothesis that 2 factors are sufficient. ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ df null model = 45 with the objective function = 2.78 with Chi Square = 6749.62 df of the model are 26 and the objective function was 0.22 ​ ​ ​ ​ ​ ​ ​ 32 33 34 35 36 37 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ The root mean square of the residuals (RMSR) is 0.04 The df corrected root mean square of the residuals is ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 38 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 0.05 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ Tucker Lewis Index of factoring reliability = 0.867 RMSEA index = 0.09 and the 90 % confidence intervals are 0.084 0.097 BIC = 338.13 Fit based upon off diagonal values = 0.98 Measures of factor score adequacy MR2 MR1 Correlation of (regression) scores with factors 0.89 0.91 Multiple R square of scores with factors 0.79 0.82 Minimum correlation of possible factor scores 0.58 0.64 ​ ​ ​ ​ The harmonic n.obs is 2432 with the empirical chi square 367.22 with prob < 5.9e-62 The total n.obs was 2432 with Likelihood Chi Square = 540.84 with prob < 1.2e-97 ​ ​ ​ ​ 39 40 41 42 43 44 45 46 47 48 37 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 本 Chapter の前半では,ピアソンの積率相関係数を使って因子分析を行っていましたが,それ と比べると因子負荷の値が基本的には大きくなっています。もともと相関係数が過小推定されて いたために,因子負荷も過小推定されていたと考えるのが妥当でしょう。今回カテゴリカル因子

38.

6.7 カテゴリカル因子分析 38 分析を行ったことによって,より正しい因子負荷量を求めることができたといえます。 こんな感じで,カテゴリカル因子分析をするためにはポリコリック相関行列を計算しておく必 要があるのですが,もう少しラクな方法もあります。実は psych::fa() では,使用する相関係 数を引数 cor によって指定することが出来ます。 カテゴリカル因子分析 (2):fa() 関数に計算させる 1 2 res_fa_cat <- fa(dat[, cols], nfactors = 2, cor = "poly") res_fa_cat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Factor Analysis using method = minres Call: fa(r = dat[, cols], nfactors = 2, cor = "poly") Standardized loadings (pattern matrix) based upon correlation matrix MR2 MR1 h2 u2 com Q1_1 -0.09 0.48 0.21 0.79 1.1 Q1_2 0.00 0.74 0.55 0.45 1.0 Q1_3 -0.03 0.81 0.65 0.35 1.0 Q1_4 0.16 0.49 0.32 0.68 1.2 Q1_5 0.04 0.64 0.43 0.57 1.0 Q1_6 0.62 -0.04 0.36 0.64 1.0 Q1_7 0.68 -0.03 0.45 0.55 1.0 Q1_8 0.58 0.02 0.35 0.65 1.0 Q1_9 0.72 0.01 0.53 0.47 1.0 Q1_10 0.60 0.06 0.39 0.61 1.0 32 33 34 35 MR2 MR1 SS loadings 2.11 2.11 Proportion Var 0.21 0.21 Cumulative Var 0.21 0.42 Proportion Explained 0.50 0.50 Cumulative Proportion 0.50 1.00 With factor correlations of MR2 MR1 MR2 1.00 0.34 MR1 0.34 1.00 Mean item complexity = 1 Test of the hypothesis that 2 factors are sufficient. df null model = 45 with the objective function = 2.78 with Chi Square = 6749.62 df of the model are 26 and the objective function was 0.22 The root mean square of the residuals (RMSR) is 0.04 The df corrected root mean square of the residuals is 0.05

39.

6.8 (おまけ)因子分析をする前に 36 37 38 39 40 41 42 43 44 45 46 47 48 The harmonic n.obs is 2432 with the empirical chi square 367.22 with prob < 5.9e-62 The total n.obs was 2432 with Likelihood Chi Square = 540.84 with prob < 1.2e-97 Tucker Lewis Index of factoring reliability = 0.867 RMSEA index = 0.09 and the 90 % confidence intervals are 0.084 0.097 BIC = 338.13 Fit based upon off diagonal values = 0.98 Measures of factor score adequacy MR2 MR1 Correlation of (regression) scores with factors 0.89 0.91 Multiple R square of scores with factors 0.79 0.82 Minimum correlation of possible factor scores 0.58 0.64 結果は先程と同じになっているはずです。 ちなみに 萩生田・繁桝(1996)では,シミュレーション研究をもとに,多くの場合はピアソン の積率相関係数で十分(ポリコリック相関と大差ない)という結論を出していたりもします。数 理的に厳密なのはポリコリック相関ですが,実際には不適解を出してしまったり,回答者のいな いカテゴリがあると面倒だったりと,実用上は問題点もあったりします。また,ポリコリック相 関係数を安定的に推定するためにはデータが数百はあることが望ましいです。そのため,まずは カテゴリカル因子分析をやってみて,解が得られない or 不安定な場合には普通にピアソンの積 率相関を用いた方法にしても良いのではないかと思います。 6.8 (おまけ)因子分析をする前に 因子分析は,複数の観測変数の背後に共通の要因が存在し,また観測変数間の相関関係がその 共有の要因のみによって説明される,というモデルを仮定した分析です。したがって,因子分析 を行う前には • そもそも観測変数の間には相関関係が存在しており, • その相関関係が, (特定の2変数間の関係ではなく)概ね全ての観測変数群の関係性によっ て説明可能である ことを確認すると良いかもしれません。2点目がちょっと分かりづらいかもしれませんが(言 葉でどう説明したら良いのか迷いました),これは図 6.6 にあるような,全ての観測変数に共通 する相関の要因(共通因子)とは異なる「共通因子では説明できない要因」によって2変数の相 関が規定されてほしくない,ということを意味しています。そこで,この節では上記の2つを検 証するための方法*17 を簡単に紹介します。 *17 どうやら SPSS ではこの後紹介する分析の結果がデフォルトで出てくるようです。一方でここで紹介している 分析を(SPSS 以外で分析をする人が)論文にも書かなかったとしても咎められる可能性は高くないので「出来 39

40.

6.8 (おまけ)因子分析をする前に 40 6.8.1 Bartlett の球面性検定 Bartlett の球面性検定(Bartlett, 1950, 1951)では,共通因子の影響を除いたあとの「独自因 子得点の相関行列」𝚿 が単位行列である,という帰無仮説を立てて検定を行っています。具体的 には,以下の検定統計量(Browne, 1968) 𝜒2𝑚 = − (𝑃 − 2𝐼 + 11 2𝑇 − ) ln|𝚿| 6 3 (6.34) が自由度 12 [(𝐼 − 𝑇 )2 − 𝐼 − 𝑇] の 𝜒2 分布に漸近的に従うことを利用して統計的仮説検定を行い ます。念のため再度示しておきますが, • [𝑃]: 回答者 (𝑃erson) の数 • [𝐼]: 項目 (𝐼tem) の数 • [𝑇]: 共通因子 (𝑇rait) の数 を表しています。また,|𝚿| は 𝚿 の行列式を表しています。細かい式の意味はともかく,重要 なのは 𝜒2𝑚 の中の ln|𝚿| の部分です。𝚿 に限らず,相関行列(全ての対角成分が 1)の行列式の 値は必ず 0 から 1 の間の値になること,そして行列式の値が 1 になるのは単位行列(全ての変数 間が無相関)の場合であることが知られています*18 。したがって,その対数を取った ln|𝚿| は, 変数間の相関が高いほど大きなマイナスの値を取るようになっています。ということで,これの 符号をひっくり返すことで,検定統計量 𝜒2𝑚 は相関行列 𝚿 の「全体としての相関の強さ」を表 しているといえるわけです。 そんな Bartlett 検定ですが,検定の目的からすると,帰無仮説「𝚿 が単位行列である」が棄却 されなければ嬉しいような気がします。しかし実際には,独自因子間の相関を検証する目的,つ まり因子分析の結果得られた 𝚿 に対して Bartlett の球面性検定を使用することは現状ほぼ無 いようです。 実際の Bartlett の球面性検定(SPSS で出力される結果)では,共通因子の数が 0(𝑇 = 0) であると設定して検定を行います。このとき「独自因子得点の相関行列」𝚿 イコール「観測変数 の相関行列」𝚺 となるため,球面性検定の帰無仮説は「観測変数の相関行列が単位行列である」 , すなわち全ての観測変数は無相関であると見ることができます。この場合,帰無仮説が棄却され てくれれば「観測変数間に相関関係がある」ことが言えるため,共通因子を置いた因子分析を行 う意味があると言えるわけです。 R では,psych パッケージに cortest.bartlett() という関数が用意されています。 Bartlett の球面性検定 1 2 3 # cor_polyはpsych::polychoric()で既に出している相関行列 # listの中のrhoがポリコリック相関行列の本体なので cortest.bartlett(cor_poly$rho, n = nrow(dat)) ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ そうならやってみてもいいんじゃないかなぁ」くらいの位置づけとして紹介します。 *18 これは,アダマールの不等式というものによって証明される性質です。

41.

6.8 (おまけ)因子分析をする前に 1 2 3 4 5 6 7 8 $chisq [1] 6749.621 ​ 41 ​ ​ ​ ​ ​ $p.value [1] 0 $df [1] 45 ​ ​ ​ ​ ​ ​ 出力された p.value が 0.05 より小さければ帰無仮説が棄却されて「因子分析をやる意味あ り」ということになるのですが,上の 𝜒2𝑚 の式からもわかるように,この方法も一般的な統計的 仮説検定の例に漏れず,サンプルサイズがある程度大きくなったらほぼ確実に有意になってしま います。そして,そもそも心理尺度のようなデータでは,観測変数間の相関がゼロなんてことは 相当の大失敗でもしない限りあり得ないはずです。その意味では,Bartlett の球面性検定は(回 帰分析における F 検定と同様)しなかったところで大した問題ではないと言えるでしょう*19 。 6.8.2 KMO (Kaiser-Meyer-Olkin) 続いては,独自因子に起因する相関があるかを確認する方法を紹介します。ここでは KMO (Kaiser-Meyer-Olkin) または MSA (measure of sampling adequacy) と呼ばれる指標(Kaiser, 1970)を紹介します。 KMO はイメージ分析(Guttman, 1953)と呼ばれる方法に基づく考え方です。これは,複数 の観測変数間の相関関係に関する多変量解析法として,主成分分析・因子分析に続く第3の方法 として提案されたものらしく,因子分析のような不定性が無いことや,(多変量正規)分布の仮 定が必要ないという点で因子分析よりも general な方法とされています(が,現状あまり使われ ていないと思います…) 。 イメージ分析では,各観測変数 𝑥𝑖 について「それ以外の全ての観測変数」を用いた重回帰分 析を行います。 𝑥𝑖 = 𝑥𝑖̂ + 𝑒𝑖 𝑥𝑖̂ = 𝑤1 𝑥1 + 𝑤2 𝑥2 + ⋯ + 𝑤𝑖−1 𝑥𝑖−1 + 𝑤𝑖+1 𝑥𝑖+1 + ⋯ + 𝑤𝐼 𝑥𝐼 (6.35) すると,観測変数 𝑥𝑖 は「いずれかの観測変数と関係がある部分」𝑥𝑖̂ と「いずれの観測変数と も関係がない部分」𝑒𝑖 に分けることができます。そしてイメージ分析では,𝑥𝑖̂ のことをイメージ スコア,𝑒𝑖 のことを反イメージスコアと呼びます。式からもなんとなく分かるように,イメージ スコア 𝑥𝑖̂ は,他の観測変数と(相関)関係がある部分を表しているため,これは因子分析の文脈 では共通因子得点に相当しています。同様に,反イメージスコアは独自因子得点に相当するわけ です。したがって,反イメージスコアの相関行列を見ることによって,図 6.6 に示されるような 共通因子では取り切れない「独自因子間の相関」を見ることができる,という考えに至ります。 具体的なやり方としては,まず反イメージスコアの相関行列を以下の式(Kaiser, 1970)によっ *19 実際に私は SPSS を使わないので,ここに来て修士論文の審査をするまでこの検定の存在を知りませんでした。

42.

6.8 (おまけ)因子分析をする前に て求めます。 42 𝐐 = 𝐒𝚺−1 𝐒 (6.36) 𝐒 = diag(𝚺−1 )−1/2 なんだかややこしい式ですが,最終的に得られる行列 𝐐 の各要素は,対応する2変数の反イメー ジスコアの相関係数=「それ以外の全ての観測変数」の影響を除いた偏相関係数に等しくなって います。つまり,𝐐 の非対角成分が0に近いほど「観測変数間の相関の大部分が他の観測変数と の共通成分で説明できる」≒共通因子のようなものがあることを意味するため,因子分析を行う ことが妥当であると示されるわけです。 ここまでの背景を説明して,ようやく KMO の登場です。KMO は上で説明したものをまとめ て一つの指標としたもので, 2 ∑ ∑𝑖≠𝑗 𝑟𝑖𝑗 KMO = (6.37) 2 + ∑∑ ∑ ∑𝑖≠𝑗 𝑟𝑖𝑗 𝑞2 𝑖≠𝑗 𝑖𝑗 という式で表されます(Kaiser & Rice, 1974) 。ここで 𝑟𝑖𝑗 , 𝑞𝑖𝑗 はそれぞれデータから計算され た相関行列 𝚺 と反イメージ相関行列 𝐐 における変数 𝑖, 𝑗 の相関係数を表しています。つまり, KMO は「そもそも観測変数間には十分な相関 𝑟𝑖𝑗 がある」かつ「他の変数と無関係な独自成分 同士の相関 𝑞𝑖𝑗 は小さい」という程度を表した指標と言えるでしょう。 なお,KMO は上述のようにデータ全体に対してだけでなく,各変数ごとに計算することもで きます。といっても考え方は簡単で,上の式を特定の変数の列のみで計算したら良いだけです。 2 ∑𝑗=1,⋯𝑖−1,𝑖+1,⋯,𝐼 𝑟𝑖𝑗 KMO𝑖 = 2 +∑ ∑𝑗=1,⋯𝑖−1,𝑖+1,⋯,𝐼 𝑟𝑖𝑗 𝑞2 𝑗=1,⋯𝑖−1,𝑖+1,⋯,𝐼 𝑖𝑗 (6.38) KMO𝑖 が低い場合,その変数は他の変数との相関がそもそも強くない可能性が高いため,因子分 析から除外することを検討すると良いかもしれません。 R では,psych パッケージに KMO() という関数が用意されています。 KMO(またの名を MSA) 1 2 # cor_polyは先程計算済みのポリコリック相関 KMO(cor_poly$rho) 1 2 3 4 5 6 Kaiser-Meyer-Olkin factor adequacy Call: KMO(r = cor_poly$rho) Overall MSA = 0.8 MSA for each item = Q1_1 Q1_2 Q1_3 Q1_4 Q1_5 Q1_6 0.76 0.80 0.78 0.84 0.82 0.80 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ Q1_7 0.79 ​ ​ ​ ​ ​ ​ Q1_8 0.85 ​ ​ ​ ​ ​ ​ Q1_9 Q1_10 0.79 0.79 ​ ​ ​ ​ ​ ​ ​ 出力のうち,Overall MSA がデータ全体に計算した KMO の値です。 また,MSA for each item = 以下に示されているのが,変数ごとに計算した KMO𝑖 の値です。具体的にどの程度あれば良い か,というのはあまり明確ではないような気もしますが,Kaiser(1974)では,以下のような基

43.

6.9 回転の方法 43 準を示しています。 表 6.4: KMO の基準(Kaiser, 1974) 値 評価 .9 以上 marvelous .8 以上 meritorious .7 以上 middling .6 以上 mediocre .5 以上 miserable .5 未満 unacceptable ということで,Overall MSA の値が 0.5 以上であればとりあえず”acceptable” と言えるよう にも見えますが,式の定義からすると,KMO が 0.5 になるのは「データにおける相関係数」と 「反イメージ相関係数」が同じ大きさの場合なので,実質的に共通因子が存在しないようなケー ス(各変数を独立に乱数生成した場合とか: Shirkey & Dziuban, 1976)に相当すると考えられま す。そういうわけで,実際にデータ分析をする際には,なんとなくですが 0.8 くらいはあったほ うが良いのではないか,という気がします*20 。 6.9 回転の方法 Section 6.5.1 では,回転のメカニズムおよびその目的を説明しました。回転するためには,回 転後の因子負荷行列がいい感じに単純構造に近づくように回転行列を指定する必要があります。 そのためには, 「いい感じ」の基準を決めなければいけません。 そもそも「単純構造」とは何なのでしょうか。Thurstone(1947)による具体的 (にして理想 的) な単純構造の条件は以下のとおりです。 1. 各項目は少なくとも 1 つの因子に対して因子負荷が 0 であること 2. 各因子は少なくとも因子数 𝑇 個の項目に対して因子負荷が 0 であること 3. 2 つの因子に着目した場合に,一方の因子の要素は 0 で他方の因子の要素は 0 でない項目 があること(=異なる因子を識別可能な項目が存在すること) 4. 因子数が 4 以上の時に,そのうち 2 つの因子に着目した場合に,どちらの要素も 0 である 項目があること 5. 2 つの因子に着目した場合に,どちらの要素も 0 である項目が少ないこと この「単純構造」の条件になるべく近づけるための回転の方法について,数多くの基準が提案 されてきました。fa() 関数で利用可能なもののうち,有名と思われるものについていくつか紹 介します(基本的な回転法の整理およびレビューについては Browne, 2001 などを参照) 。 *20 こんなことになっている原因として考えられるのは,KMO には複数の定義があり,取りうる値の範囲が異なる こと(Kaiser, 1981),表に示された基準が厳密には KMO に関するものではない(単純構造の程度に関するも のである)こと,などがありそうですがよく分かりません。

44.

6.9 回転の方法 44 6.9.1 直交回転系 直交回転で最も有名なのはバリマックス回転 (varimax rotation) でしょう。この方法では,因 子負荷行列に対して 2 𝐼 𝐼 ⎧ ⎫ 1 { } 2 2 2 ∑ ⎨∑ (𝑏𝑡𝑖 ) − (∑ 𝑏𝑡𝑖 ) ⎬ 𝐼 𝑖=1 } 𝑡=1 { ⎩ 𝑖=1 ⎭ 𝑇 (6.39) という目的関数が最大になるように回転を行います。最初の ∑ 記号によって,この計算が「列 ごとに何かを計算したものの総和を求めている」ということがわかります。列ごとに求めている ものは,因子負荷量の二乗の分散のようなものです。ある変数 𝑥 の分散を求める方法として, 𝜎𝑥2 = 2 1 1 ∑ 𝑥2 − ( ∑ 𝑥) 𝑛 𝑛 (6.40) というものがありました。すこし調整の項があったりしますが,基本的にはこれと同じようなこ とをしている(𝑥 のところに 𝑏𝑡𝑖 が入っている)わけです。variance を max にするので vari-max という名前なわけですね。直感的には,因子負荷の分散の二乗和が最大になるようにしてやる と,それぞれの因子について「負荷が高い観測変数」と「負荷が低い観測変数」があることにな るため,単純構造の条件 2 に近づきそうです。 6.9.2 斜交回転系 斜交回転で最も有名なのはプロマックス回転 (promax rotation) だと思います。プロマック ス回転ではプロクラステス回転*21 (procrustes rotation) をベースに回転を行うため,まずはプ ロクラステス回転の説明をしておきます。プロクラステス回転では,回転のゴールをただの単純 構造ではなく,仮説や理論から導き出されるターゲット行列に設定し,ターゲット行列とのズレ が最小になるように回転を行います。ターゲット行列には,例えば先行研究で観測された因子負 荷行列などを設定することができるのですが,そのような行列を探してきて設定するのは結構大 変なことです。そこでプロマックス法では,まずバリマックス法などの直交回転による回転を行 い,得られた因子負荷行列を調整することでターゲット行列をデータから作成します。具体的に は,バリマックス回転で得られた因子負荷行列について,値が大きい要素はより大きく,値が小 さい要素はより小さくすることで,バリマックス解よりもさらに「理想に近い」行列を作成して います。プロマックス回転は,それ自体が「単純構造」に向かって何らかの基準を最適化する方 法ではありません。バリマックス回転をベースに解を求めているということは,例えばそもそも バリマックス回転でうまく単純構造が出なかった場合には失敗する可能性があります。計算量が 少ないことなどから昔はよく使われていた方法のようです。 プロマックス回転よりももっと直接的に,できるだけ完全な単純構造(完全クラスター解)に 近づけたい場合には,いっそターゲット行列を完全クラスター解になるように作ってしまえば良 いでしょう。独立クラスター回転(Harris-Kaiser independent cluster rotation: Kiers & Ten Berge, 1994)*22 はそのような考え方に基づいています。方法はとてもシンプルで,まずバリマッ *21 名前の由来はギリシャ神話に登場するプロクルーステスのベッドです。 *22 fa() 関数では,直交回転( clusterT)と斜交回転( clusterQ)を両方選ぶことが出来ます。cluster と指

45.

6.9 回転の方法 45 クス回転で因子負荷行列の直交解をもとめ,その行列の各行の中で絶対値が最も大きい(各項目 が最も高い負荷を持っている共通因子)1 つをその符号に応じて ±1,その他を 0 としたターゲッ ト行列を設定し,これに向けてプロクラステス回転を行います。当然「完全クラスター解にでき るだけ近づくように」回転されるので,各項目は 1 つの共通因子にのみ高い負荷を持った構造に なりやすいと言えます。 fa() 関数のデフォルトはオブリミン回転 (oblimin rotation) と呼ばれる方法です。実際に は,コーティミン回転 (quartimin rotation) と呼ばれる方法を行っているような気がします*23 。 コーティミン回転では,以下の基準を最小化します。 𝑇 𝑇 𝐼 2 2 ∑ ∑ {∑ 𝑏𝑡𝑖 𝑏𝑠𝑖 } 𝑡=1 𝑠≠𝑡 (6.41) 𝑖=1 最初の 2 つの ∑ 記号によって,因子のペアごとに何かしらの計算を行い総和を求めていること がわかります。その中身は同じ項目 𝑖 に対する因子負荷の二乗の積です。この式は,同じ項目に 因子 𝑡 と因子 𝑠 が両方とも高い因子負荷を持っていた場合にのみ大きな値になります。したがっ て,コーティミン基準を最小化するということは特に単純構造の条件 3 を目指している,と言え るでしょう。 他によく使われる気がするのは,ジオミン回転 (geomin rotation) でしょうか*24 。この方法で は,以下の目的関数を最小化するように回転を行います。 𝐼 𝑇 2 ∑ {∏ 𝑏𝑡𝑖 } 𝑖=1 𝑡=1 1 𝑇 (6.42) 波括弧の中は,因子負荷の二乗をすべてかけたものを求めています。したがって,ジオミン回転 では項目ごとに因子負荷の二乗の幾何平均 (geometric mean) を計算して,その総和を取ってい るのです。幾何平均は上の式からも分かるように,一つでも 0 に近い要素があれば小さな値にな ります。したがって,Thurstone の基準の 1 番を直接的に達成しようとしている基準と言えま す。一方で,0 に近い要素が 1 個以上ならば,2 個でも 3 個でも幾何平均はあまり変わらないの で,各変数が複数の因子に高い負荷を持つこと (cross-loading) を許容しやすい回転法と言われ ています。完全な単純構造がそもそもあまり期待されないような場合には良いかもしれません。 ここで紹介した以外にも,因子の回転法はかなりたくさんあります。その中でどれを使えばよ いかについては,特に決まっていない(個人の好みな)気がします。強いて言うなら,大抵の場 合は斜交回転をしておけば良いでしょう。方法によって,因子間相関が高く出やすいものがあれ ば低く出やすいもの,単純構造に近づきやすいものや近づきにくいものなどがあるので,いろい ろな方法を試してみていい感じの因子負荷行列になる回転法を選べば良いのではないかと思い ます。 fa() 関数では,引数 rotate によって回転法を指定することができます。これまでは指定 定した場合は斜交回転になります。 *23 オブリミン回転は,コーティミン回転やコバリミン回転などの回転法を一般化したものなので,コーティミン回 *24 転はオブリミン回転の特殊なケースなのです。 fa() 関数では,直交ジオミン回転( geominT)と斜交ジオミン回転( geominQ)を両方選ぶことが出来ます。

46.

6.9 回転の方法 46 していなかったので rotate="oblimin"になっていたわけですが,試しに直交回転であるバリ マックス回転で因子負荷を求めてみましょう。 直交(バリマックス)回転 1 res_fa_varimax <- fa(dat[, cols], nfactors = 2, cor = "poly", rotate = 2 "varimax") res_fa_varimax 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 Factor Analysis using method = minres Call: fa(r = dat[, cols], nfactors = 2, rotate = "varimax", cor = "poly") Standardized loadings (pattern matrix) based upon correlation matrix MR1 MR2 h2 u2 com Q1_1 -0.01 0.45 0.21 0.79 1.0 Q1_2 0.13 0.73 0.55 0.45 1.1 Q1_3 0.12 0.80 0.65 0.35 1.0 Q1_4 0.24 0.51 0.32 0.68 1.4 Q1_5 0.15 0.64 0.43 0.57 1.1 Q1_6 0.60 0.06 0.36 0.64 1.0 Q1_7 0.66 0.09 0.45 0.55 1.0 Q1_8 0.58 0.12 0.35 0.65 1.1 Q1_9 0.71 0.14 0.53 0.47 1.1 Q1_10 0.61 0.16 0.39 0.61 1.1 MR1 MR2 SS loadings 2.12 2.11 Proportion Var 0.21 0.21 Cumulative Var 0.21 0.42 Proportion Explained 0.50 0.50 Cumulative Proportion 0.50 1.00 Mean item complexity = 1.1 Test of the hypothesis that 2 factors are sufficient. df null model = 45 with the objective function = 2.78 with Chi Square = 6749.62 df of the model are 26 and the objective function was 0.22 The root mean square of the residuals (RMSR) is 0.04 The df corrected root mean square of the residuals is 0.05 The harmonic n.obs is 2432 with the empirical chi square 367.22 with prob < 5.9e-62 The total n.obs was 2432 with Likelihood Chi Square = 540.84 with prob < 1.2e-97

47.

6.10 モデルパラメータの推定法 35 36 37 38 39 40 41 42 43 Tucker Lewis Index of factoring reliability = 0.867 RMSEA index = 0.09 and the 90 % confidence intervals are BIC = 338.13 Fit based upon off diagonal values = 0.98 Measures of factor score adequacy MR1 MR2 Correlation of (regression) scores with factors 0.88 0.9 Multiple R square of scores with factors 0.77 0.8 Minimum correlation of possible factor scores 0.54 0.6 47 0.084 0.097 出力を見ると,直交回転なので因子間相関が出力されていません。また Section 6.7 で出した res_fa_cat(オブリミン解)と比べると,各項目について負荷量の低い側の因子の負荷量がや や大きめになっていることがわかります。このように,基本的には斜交回転のほうが単純構造に 近い結果を得ることができるため,よっぽどの理由が無ければ斜交回転にしておくのがおすすめ です。 6.10 モデルパラメータの推定法 Section 6.5 で紹介したモデルパラメータの推定法は,あくまでもひとつの方法です。因子分 析におけるパラメータ(直交解)の推定法には,他にもいくつかの選択肢があります。 6.10.1 主因子法 一昔前のスタンダードだったのが主因子法です。基本的には Section 6.5 で説明したとおりで す。固有値分解をして,固有値が大きい(ある意味「主たる」 )因子から順に使っていく,という ものでした。ただ Section 6.5 の説明だけでは実はまだ不十分です。 固有値分解は,観測変数間の相関行列 𝚺 のうち,共通因子に起因する部分(つまり 𝐁⊤ 𝐁)の みを対象とする話でした。しかし,私達の手元にあるのは 𝐁⊤ 𝐁 + 𝚿 としての 𝚺 のみです。そ して 𝚺 そのものを固有値分解したところで,本当に欲しい 𝐁⊤ 𝐁 に相当する因子負荷行列を得 ることは出来ません。 𝚺 の対角成分の中から独自因子に起因する要素を取り除くためには,誤差共分散行列 𝚿 を特 定する必要があります。しかし,私達の手元にあるのは 𝐁⊤ 𝐁 + 𝚿 としての 𝚺 のみです。そし て 𝚺 の対角成分に占める 𝚿 の割合(=独自性)は, 「1− 共通性」として計算されるため,結局 共通性が分からない限りこれはどうしようもありません…。 ということで,このままでは 𝚺 の対角成分が 𝐁⊤ 𝐁 と 𝚿 にどのように分解されているかが決 められないので,解が一つに定まりません。これをクリアするため, (反復)主因子法では,以下 の手順によって各変数の共通性の値を推定しながらモデルパラメータを求めています。 1. 共通性の初期値を適当に決める 2. データの相関行列の対角成分を共通性の暫定値に置き換えた行列を固有値分解する 3. 2. の結果をもとに改めて共通性を計算する

48.

6.10 モデルパラメータの推定法 48 4. 共通性の値が変わらなくなる(計算が収束する)まで 2-3. を繰り返す 5. 𝐁⊤ 𝐁 + 𝚿 の対角成分が 1 になるように 𝚿 を決める 実は,主因子法によって得られる解は後述する最小二乗法と同じになるらしいです。ただ計算 効率などの面から現在では最小二乗法のほうが用いられているようです。 6.10.2 最小二乗法 𝐁 の推定に際しては,まず大前提として 𝚿 の非対角成分はゼロ,すなわち共通因子の影響を 取り除けば誤差共分散は全て消えるという仮定が重要となります。もし本当に誤差共分散が全て ゼロなのであれば,𝚺 と 𝐁⊤ 𝐁 の非対角成分は完全に一致するはずです。そしてもちろん 𝚺 の 対角成分と 𝐁⊤ 𝐁 + 𝚿 の対角成分も完全に一致します(というかそうなるように 𝚿 の要素を調 整したら良い)。ですが,もちろん実際には共通因子数が 𝑇 < 𝐼 である限りは非対角成分にはズ レが生じてしまいます。最小二乗法および次に紹介する最尤法では,この「ズレ」を定量化した もの(不一致度関数)が最小になるようにパラメータを反復計算していきます。 2 最小二乗法は fa() 関数のデフォルトになっている方法です。[(𝐁⊤ 𝐁 + 𝚿) − 𝚺)] の対角成 分の和(トレース)を計算すると,全ての非対角要素のズレの二乗和を求めることができます (対角要素のズレの二乗和は 0 です)。あとはこれが最小になるように,𝐁 と 𝚿 を計算するだけ です。 6.10.3 最尤法 共通因子と独自因子が多変量正規分布 𝟎 𝚽 𝑁 (𝝁, 𝐒) = ([ 𝐶 ] , [ 𝐶𝐶 𝟎𝑈 𝟎𝑈𝐶 𝟎𝐶𝑈 ]) 𝐈𝑈𝑈 (6.43) に従うと仮定します。なお,添字の 𝐶 は共通因子に関する部分,𝑈 は独自因子に関する部分を表 しています。したがってここでは • 共通因子,独自因子ともに平均はゼロ(𝟎𝐶 , 𝟎𝑈 ) • 共通因子同士の相関は認める(𝚽𝐶𝐶 ≠ 𝟎) • 独自因子同士の相関は認めないので,対角成分が 1 の単位行列(𝐈𝑈𝑈 ) • 共通因子と独自因子の間は無相関(𝟎𝐶𝑈 ) ということが仮定されています。Section 6.1 では,共通因子得点のスケールを「平均 0, 分散 1」にすると説明しましたが,最尤法では尤度関数を得るために,これに加えて(多変量)正規分 布であるという仮定を置きます。 この仮定のもとでは,標準化された観測変数 𝐲 は以下の多変量正規分布に従います。 𝐲 ∼ 𝑁 (𝟎, 𝐁⊤ 𝐁 + 𝚿) (6.44) あとは普通の最尤法に従って,データと最も整合的な(尤度が最大になる)𝐁 および 𝚿 を求め たら良いわけです。

49.

6.10 モデルパラメータの推定法 最尤法は,最小二乗法などと比べると,データの多変量正規性を仮定しているなどの理由か ら,統計的に高度な方法となっています。そして一般的に,最尤推定量は一致性や有効性など, 推定量として望ましい性質を持つことが知られています。そのため,計算がうまくいく場合には 最小二乗法などよりも最尤法のほうが望ましいとされています。一方で,多変量正規性の仮定な どが推定に悪影響を及ぼす場合があります。例えば「データが少ない」「因子数が必要以上に多 い」といったときに共通性の推定値が 1 を超える (Heywood case と呼ばれる) といった不適解が 出てしまうこともしばしばあります。そのような場合には,最小二乗法などの別の方法によって 推定を行うのが良いかもしれません。また,そもそも回答データが単峰にならないことが予測さ れる(極端な選択肢が選ばれやすいと考えられる)ような場合には,最尤法は正しくない可能性 があります。 fa() 関数では,fm という引数によって因子の推定法を指定することが出来ます。試しに最尤 法でやってみましょう。 因子の推定法を指定 1 2 3 4 # デフォルトはfm="minres"(最小二乗法) # fm="pa"とすると主因子法もできる res_fa_ml <- fa(dat[, cols], nfactors = 2, cor = "poly", fm = "ml") res_fa_ml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Factor Analysis using method = ml Call: fa(r = dat[, cols], nfactors = 2, fm = "ml", cor = "poly") Standardized loadings (pattern matrix) based upon correlation matrix ML2 ML1 h2 u2 com Q1_1 -0.08 0.47 0.20 0.80 1.1 Q1_2 0.01 0.71 0.51 0.49 1.0 Q1_3 -0.03 0.82 0.66 0.34 1.0 Q1_4 0.16 0.49 0.32 0.68 1.2 Q1_5 0.03 0.67 0.46 0.54 1.0 Q1_6 0.61 -0.03 0.36 0.64 1.0 Q1_7 0.66 -0.02 0.43 0.57 1.0 Q1_8 0.58 0.02 0.34 0.66 1.0 Q1_9 0.73 0.00 0.54 0.46 1.0 Q1_10 0.62 0.05 0.41 0.59 1.0 ML2 ML1 SS loadings 2.12 2.11 Proportion Var 0.21 0.21 Cumulative Var 0.21 0.42 Proportion Explained 0.50 0.50 Cumulative Proportion 0.50 1.00 With factor correlations of ML2 ML1 49

50.

6.11 因子数の決め方 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 ML2 1.00 0.34 ML1 0.34 1.00 Mean item complexity = 1 Test of the hypothesis that 2 factors are sufficient. df null model = 45 with the objective function = 2.78 with Chi Square = 6749.62 df of the model are 26 and the objective function was 0.22 The root mean square of the residuals (RMSR) is 0.04 The df corrected root mean square of the residuals is 0.05 The harmonic n.obs is 2432 with the empirical chi square 377.19 with prob < 5.6e-64 The total n.obs was 2432 with Likelihood Chi Square = 532.87 with prob < 5.4e-96 Tucker Lewis Index of factoring reliability = 0.869 RMSEA index = 0.09 and the 90 % confidence intervals are 0.083 0.096 BIC = 330.16 Fit based upon off diagonal values = 0.98 Measures of factor score adequacy ML2 ML1 Correlation of (regression) scores with factors 0.89 0.91 Multiple R square of scores with factors 0.79 0.82 Minimum correlation of possible factor scores 0.59 0.64 今回のようにデータがきれいな場合には,最尤法でも問題なく解を得ることが出来ます。この ような場合には,最尤法での結果を報告するほうが良いかもしれません。 6.11 因子数の決め方 因子分析では因子数を分析者が自由に選ぶことが出来ます。これまでは,dat の最初の 10 項 目を使って,因子数を 2 に決め打ちして因子分析を行っていました。あらかじめ因子数が分かっ ていたり,理論的に目処が立っている場合にはその因子数で分析を行えば良いのですが,尺度を ボトムアップに作成するような場合や,自分が集めたデータでも先行研究と同様の因子構造が得 られるかを検証する場合には,因子数はわからないことが多いです。ここでは,統計的に因子数 を決定するためのいくつかの(伝統的な)基準を紹介します。比較的新しい(高度な)方法につ いては,堀・牧野(2024)などを参照してください。

51.

6.11 因子数の決め方 6.11.1 カイザー(・ガットマン)基準 因子分析は,データの相関行列(正確には独自性を除いた 𝐁⊤ 𝐁)を固有値分解することで因 子負荷行列を求めていました。このとき,各因子に対する因子負荷は固有ベクトルを固有値倍し たもの(√𝜆𝑡 𝐱𝑡⊤ )として算出されていました。したがって,固有値こそが因子負荷の合計を決 めており,ひいては分散説明率(共通性)の合計を規定しているということが言えます。実は, 𝐼 × 𝐼 相関行列を固有値分解して得られる 𝐼 個の固有値は,合計が必ず 𝐼 になるという性質があ ります。つまり,固有値は 𝐼 個の項目に対する分散説明率を再配分した値である,とも言えそう です。イメージ的には,例えば第一因子に対する固有値(固有値の中の最大値)が 3 だとすると, その因子は一つで合計 3 項目分の分散を説明しているということです。1 個で 3 項目分の説明力 を持っているということは,結果的に次元数を減らすことに役立っていると言えそうです。 このように考えると,固有値が 1 より小さい因子は 1 項目分の情報も持っていないことになる ため,因子としてはザコと言えます。また,独自因子は 1 項目のみに影響を与えている因子なの で,固有値を計算するとしたら 1 になります。この意味でも,固有値が 1 以下の因子はやはり要 らなさそうです。この「固有値が 1 以上の因子のみを使う」という基準をカイザー(・ガットマ ン)基準と呼びます。カイザー基準は(未だに!)よく用いられている方法ですが,その問題点 も長らく指摘されています。いくつかの研究によって,状況によって因子数を少なめに見積もっ たり(Cliff, 1988)多めに見積もったり(Zwick & Velicer, 1986)することが知られており,正 しい因子数を出してくれるのはかなり限定的な状況のようです。言ってしまえば「カイザー基準 は大雑把であり,それほどあてにならない」(堀,2005)ということで,現在ではあまり採用さ れない基準という印象があります。 6.11.2 スクリーテスト 固有値を順に並べたものをスクリープロット (scree plot) と呼びます。psych パッケージでは scree() 関数によって図 6.18 のように簡単にプロット可能です。 スクリープロット 1 scree(dat[, cols]) なお,結果は FA の方を見てください。PC という方は主成分分析での結果です。ほとんどの場 合主成分分析のプロットの方が上に来ます。なぜそうなるかは Section 6.13 を見てください。ま た,デフォルトでは Y 軸が 1 のところに実線が引かれています。これは先程のカイザー基準を 表しています。つまり今回の場合カイザー基準的には 2 因子が妥当ということになります。 scree() 関数にデータフレームを与えた場合には,そのデータフレームに対してピアソンの 積率相関を求めて固有値を計算します。先程紹介したポリコリック相関に基づく固有値を見たい 場合には,事前にポリコリック相関を計算しておき,それを scree() 関数に与える必要があり ます。 51

52.

52 3.0 Scree plot 1.0 2.0 PC FA 0.0 Eigen values of factors and components 6.11 因子数の決め方 2 4 6 8 10 factor or component number 図 6.18: スクリープロット ポリコリック相関でスクリープロット # cor_polyはpsych::polychoric()で既に計算済みのやつ scree(cor_poly$rho) ​ ​ Scree plot 1.0 2.0 3.0 PC FA 0.0 ​ Eigen values of factors and components 1 2 2 4 6 8 10 factor or component number 図 6.19: ポリコリック相関でスクリープロット あまり違いはないように見えますが,最初の因子を比べると,わずかに図 6.19 のほうが 図 6.18 よりも大きな固有値になっているはずです。 このスクリープロットを用いて行うスクリーテスト (scree test) と呼ばれる因子数選択で は,プロット的に傾きがなだらかになる手前の因子数を選択する,という方法です。図 6.18 や 図 6.19 では,いずれも最初の 2 因子は傾きが強く,第 3 因子以降はなだらかになっています。 したがってスクリーテスト的にも因子数は 2 が妥当,という判断ができます。 イメージ的には固有値分解では,まず第一固有値が「全てに共通する成分」をごっそり持って いきます。第 2 固有値以降は,その残りの中から共通成分を取り出していきます。したがって, あるところからはもう絞りカスしか残っていない状態になり,固有値的には下の方で大差ない状 態になってしまいます。スクリーテストでは,この「下の方で大差ない状態」とくらべて如実に

53.

6.11 因子数の決め方 53 大きな固有値にはなにか意味があると考えて,その因子数を採用しているわけです。 ただ,今回のデータのように因子数がハッキリとしたきれいなデータではない場合には,これ ほどハッキリと変化点を見出すことが出来ないケースが結構多いです。そのような場合には客観 的に因子数を決めづらかったりもするので,やはりまだアバウトな方法と言えそうです。 6.11.3 平行分析 カイザー基準では一律で 1 以上の固有値のある因子には意味がある,という判断をしていまし た。平行分析 (parallel analysis) では,代わりに「乱数での固有値」との比較を行います。完全 に乱数のデータでは本来相関は無いはずですが,標本誤差の関係などで相関が完全にゼロになる ことはありません。相関が完全にゼロではない限りは,固有値分解を行うと第一固有値の値は 1 よりも少しだけ大きくなります。試しにやってみましょう。 乱数で固有値を出してみる 1 2 3 # 1000行10列の一様乱数行列 dat_rnd <- matrix(runif(10 * 1000), ncol = 10) eigen(cor(dat_rnd)) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 eigen() decomposition $values [1] 1.1531292 1.0889700 1.0765136 1.0248099 1.0075078 0.9926984 0.9533219 [8] 0.9367722 0.8834080 0.8828690 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ $vectors [,1] [,2] [,3] [,4] [,5] [1,] 0.112436984 -0.37121765 0.47341966 -0.20738992 0.103139623 [2,] 0.484608727 0.05575061 -0.01770245 0.32996851 0.067515555 [3,] -0.228692064 -0.48815828 0.20308039 0.28649476 0.500656646 [4,] -0.232490192 0.40499060 0.29262518 -0.48025212 -0.123849547 [5,] -0.031949135 0.16118059 -0.61178243 0.08781265 0.161289155 [6,] -0.557884289 0.24802394 0.15782882 0.25838357 -0.001868273 [7,] 0.007055743 -0.48064664 -0.17069328 -0.39982071 -0.395600998 [8,] -0.240054398 -0.05764926 -0.32196831 -0.47149177 0.598441643 [9,] -0.015405949 -0.27818657 -0.32376559 -0.02988766 -0.222218221 [10,] 0.525349112 0.23988743 0.10898482 -0.27903649 0.358854999 [,6] [,7] [,8] [,9] [,10] [1,] -0.07380739 0.68971166 0.07746406 0.28930807 0.03051726 [2,] 0.27094157 0.09815149 -0.72312285 0.13720316 0.15336519 [3,] 0.12276860 -0.09821372 -0.09707071 -0.54777825 -0.03495240 [4,] 0.32906603 0.16989052 -0.25314902 -0.44589225 0.22420762 [5,] -0.24956474 0.62789616 -0.01514297 -0.32785652 -0.02723450 [6,] 0.01486085 0.14087695 -0.29134682 0.27164195 -0.59735607 [7,] -0.29098840 -0.10511832 -0.46338991 -0.15375669 -0.29889905 ​

54.

6.11 因子数の決め方 26 27 28 [8,] [9,] [10,] 54 0.09714458 -0.14690604 -0.19076435 0.40467304 0.15420830 0.79986315 0.15216131 0.22122246 0.04312236 -0.23139465 0.03729309 -0.07919072 0.11141185 -0.16749641 -0.63231066 確かに第一固有値の値は 1.153 となり,1 よりも大きな値になりました。というか,もしこの データにカイザー基準を当てはめると,5 因子もあることになってしまいます。 実際には乱数には因子など無いはずなので,平行分析では乱数で得られた固有値よりも小さい 値は因子として無意味と判断します。R では fa.parallel() という関数があるのでやってみま しょう。 平行分析 1 2 # この関数には引数corが用意されている fa.parallel(dat[, cols], cor = "poly") 1 Parallel analysis suggests that the number of factors = and the number 2 Parallel Analysis Scree Plots 1.0 2.0 3.0 PC Actual Data PC Simulated Data PC Resampled Data FA Actual Data FA Simulated Data FA Resampled Data 0.0 eigenvalues of principal components and factor analysis of components = 2 2 4 6 8 10 Factor/Component Number 図 6.20: 平行分析 青い線が実際のデータでの固有値を,赤い点線が乱数での固有値を表しています。 (乱数を使う のでやるたびに微妙に結果が変わるかもしれませんが)Parallel analysis suggests that the number of factors = 2 ということで,因子数 2 が提案されました*25 。 6.11.4 累積寄与率 分散説明率の観点から言えば,共通因子によってある程度の割合は説明されていないと,「結 局独自因子(よくわからないもの)で回答が決まってるんでしょ」となってしまいます。因子の *25 ここでも number of components は主成分分析の話なので無視して OK です。

55.

6.11 因子数の決め方 55 表 6.5: 各項目が 1 因子のみに負荷を持つように無理やり変換 MR2 MR1 Q1_1 0.000 0.478 Q1_2 0.000 0.743 Q1_3 0.000 0.813 Q1_4 0.000 0.486 Q1_5 0.000 0.642 Q1_6 0.617 0.000 Q1_7 0.680 0.000 Q1_8 0.580 0.000 Q1_9 0.720 0.000 Q1_10 0.603 0.000 数を増やせば累積寄与率は必ず上昇するので,因子数の最低条件として,累積寄与率が一定の値 以上になっていない場合には因子の数を増やすというアプローチを取ることもあるようです。必 要な累積寄与率の基準は一律で決まっているわけではないですが,一説によると最低 50% はほ しいと言われています(小杉,2018) 。 6.11.5 VSS 因子分析では単純構造が望ましい状態であり,なるべくこれを目指して回転が行われます。 VSS (Very Simple Structure) 基準(Revelle & Rocklin, 1979)では,得られた結果を強制的 に単純構造にしたときのデータとの整合性を見ます。 完全な単純構造では,各項目は 1 つの因子にのみ負荷を持っているはずです,そこで VSS で は最も高い負荷を持っている因子以外の負荷をゼロにした因子負荷行列を考えます。Section 6.7 で出した res_fa_cat で言えば,表 6.5 のような状態にする,ということです。 この「無理やり単純構造にする」という操作はやや強引に感じられるかもしれませんが,例え ば複数の下位尺度からなら心理尺度において,因子得点として和得点を使うということは,結果 的に各項目が 1 因子のみに負荷している(しかも因子負荷が全て同じであるとみなしている)と 仮定しているわけなので,そう考えると「よくあること」なのです(本当にそれで良いかはまた 別の話) 。 ̃ そして,この因子負荷行列(𝐁̃ VSS とします) に対して,𝐁̃ ⊤ VSS 𝚽𝐁VSS によって相関行列を復 元します。これをデータの相関行列 𝚺 と比較して,差が小さければ「単純構造とみなした時に ̃ データと整合性がある」ということになります。そこで,まず要素ごとの差 𝐁̃ ⊤ VSS 𝚽𝐁VSS − 𝚺 をとり,この行列の要素の二乗和を 𝑀 𝑆VSS とします。同様に,データの相関行列 𝚺 の要素の

56.

6.11 因子数の決め方 56 二乗和を 𝑀 𝑆 とすると,𝑉 𝑆𝑆 は 𝑉 𝑆𝑆 = 1 − 𝑀 𝑆VSS 𝑀𝑆 (6.45) となります。この計算を,様々な因子数で行い,最も 𝑉 𝑆𝑆 の値が小さくなったところが「単純 構造として解釈した時に最もデータと整合的な因子数」ということになるわけです。 psych パッケージには,VSS() という関数が用意されています。 VSS 1 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 # 引数corが用意されています VSS(dat[, cols], cor = "poly") Very Simple Structure Call: vss(x = x, n = n, rotate = rotate, diagonal = diagonal, fm = fm, n.obs = n.obs, plot = plot, title = title, use = use, cor = cor) VSS complexity 1 achieves a maximimum of 0.72 with 2 factors VSS complexity 2 achieves a maximimum of 0.81 with 2 factors The Velicer MAP achieves a minimum of 0.04 with 2 factors BIC achieves a minimum of 10.65 with 5 factors Sample Size adjusted BIC achieves a minimum of 26.53 with 5 factors Statistics by number of factors vss1 vss2 map dof chisq prob sqresid fit RMSEA BIC SABIC 1 0.61 0.00 0.059 35 2.8e+03 0.0e+00 7.1 0.61 0.180 2507 2618 2 0.72 0.80 0.035 26 5.4e+02 1.2e-97 3.6 0.80 0.090 338 421 3 0.66 0.80 0.060 18 3.1e+02 1.1e-54 3.1 0.83 0.081 168 225 4 0.63 0.81 0.084 11 1.3e+02 1.3e-22 2.5 0.86 0.067 45 80 5 0.60 0.79 0.127 5 5.0e+01 1.7e-09 2.3 0.88 0.061 11 27 6 0.47 0.73 0.186 0 1.1e+00 NA 1.9 0.89 NA NA NA 7 0.49 0.77 0.272 -4 5.9e-05 NA 2.0 0.89 NA NA NA 8 0.48 0.75 0.454 -7 1.1e-07 NA 1.9 0.89 NA NA NA complex eChisq SRMR eCRMS eBIC 1 1.0 4.2e+03 1.4e-01 0.157 3937.2 2 1.1 3.7e+02 4.1e-02 0.054 164.5 3 1.2 2.1e+02 3.1e-02 0.048 64.8 4 1.4 7.8e+01 1.9e-02 0.038 -7.6 5 1.7 2.8e+01 1.1e-02 0.034 -10.7 6 1.8 4.0e-01 1.4e-03 NA NA 7 1.9 2.2e-05 1.0e-05 NA NA 8 1.9 4.1e-08 4.3e-07 NA NA complexity 1 というのは,𝐁̃ VSS として各項目が 1 つの因子のみに負荷している状態,つま り完全な単純構造を仮定した状態での結果です。同様に,各項目が上位 2 つの因子にのみ負荷し

57.

6.11 因子数の決め方 57 0.8 Very Simple Structure Fit Very Simple Structure 2 1 4 3 2 4 3 2 1 1 4 3 2 4 3 2 4 3 2 1 1 1 6 7 8 0.0 0.4 1 3 2 1 1 2 3 4 5 Number of Factors 図 6.21: VSS のプロット ている状態を 𝐁̃ VSS に仮定した場合の結果が complexity 2 となっています*26 。図 6.21 は各 complexity における VSS の値です。1 の線を見ると,Number of Factors が 2 のところで最 も高い値になっています。これが出力されているわけです。ということで VSS(complexity 1) 的 には 2 因子が妥当だという判断がされました。 VSS() では他にも,次に示す MAP を始めとした様々な指標が出力されます。論文などで報 告されることがあるものをざっと確認しましょう。 6.11.6 MAP MAP (Minimum average partial; 最小平均偏相関) では,データの相関行列のうち共通因 子の影響を取り除いた偏相関の部分に着目します。いわばこれは誤差どうしの相関であり,もし これが全てゼロであれば,独自因子の間に別の共通因子が存在していないことになる(図 6.6 を 参照)ため,因子数として妥当だと判断できます。計算自体はさほど難しくなく,まずはふつう に 𝑘 因子で因子分析の初期解を求めます。つまり,データの相関行列 𝚺 を固有値分解して,得 られた固有ベクトル [𝐱1 𝐗𝑘 = [𝐱1 𝐱2 ⋯ 𝐱2 ⋯ 𝐱𝑘−1 𝐱𝑘 𝐱𝑘+1 ⋯ 𝐱𝐼 ] のうち最初の 𝑘 個のみを用いた 𝐱𝑘 ] と,対応する 𝑘 個の固有値を対角成分においた行列 𝚲𝑘 を用いて 𝚺 を 近似します。 𝚺 ≅ 𝐗 𝑘 𝚲𝑘 𝐗 ⊤ 𝑘 (6.46) 𝐏 = 𝚺 − 𝐗𝑘 𝚲𝑘 𝐗⊤ 𝑘 (6.47) そして,𝚺 との差を取ります。 このとき,diag(𝐏)− 2 𝐏diag(𝐏)− 2 の非対角成分が,𝑘 個の共通因子の影響を取り除いた後の各 1 1 変数間の偏相関係数を表します。したがって,MAP ではこの非対角成分の要素の二乗の平均値 を計算します。これを 𝑘 の数を変えて行い,最も小さい MAP を出した 𝑘 が妥当な因子数 𝑇 だ *26 一応内部的には complexity 8 まで計算されていますが,それはもう単純構造では無いのでは? という気がす るので大抵の場合は complexity 2 くらいまで見ておけば十分でしょう。

58.

6.12 𝜔 係数 58 という判断ができるわけです。 6.11.7 その他 他にも,VSS() 関数では次のような基準による評価を行っています。 • 情報量規準 BIC が最も小さくなる因子数 • 共通因子の影響を取り除いた残差相関行列に対する 𝜒2 統計量 • モデルの適合度指標 (RMSEA, SRMR など:SEM のときに説明します) 6.11.8 最後は解釈可能性 ここまで様々な基準によって最適な因子数を推定しました。ですがその結果は一貫していませ ん。今回の場合,多くの指標は(データの設計通り)因子数 2 を提示しましたが,一方で 3 や 5 といった数を出したものもあります。それぞれの指標・基準は異なる視点からの評価なので,こ のように結果が変わるのは当然のことです。その上で,実際に因子数を決める場合にはどうした ら良いのでしょうか。 因子分析で重要なのは,解釈可能性だと考えています。因子の名前を決める際には,分析者が 自身の知識と経験をフル活用して項目の共通点をラベリングしなければいけません。そして,統 計的に最適と思われる因子数が提案されたとしても,その結果は標本誤差の影響を受けている可 能性がゼロとは言えません。したがって,探索的に因子数を決定する際には, 1. まず VSS() や fa.parallel() によって因子数にアタリをつける 2. 提案された因子数(多くの場合は VSS() で出力される MAP と BIC の間)に関して実際に 因子分析を行う 3. 得られた結果をもとに因子の解釈を行う 4. 最もしっくり来る解釈が得られた因子数および因子構造を採用する という手順で行われることが多いでしょう。もしも全ての統計的な基準が指している因子数に おいて解釈が難しいという事態に直面したら,そのときは泣いてください。 6.12 𝜔 係数 信頼性係数のところでは,𝛼 係数はあまり良くない指標であることをお話しました。ここでは, 因子分析の考え方に基づく,より良い(とされている)信頼性係数の 𝜔 係数を紹介します。 6.12.1 基本的な考え方 古典的テスト理論 (𝑥 = 𝑡 + 𝑒) における信頼性係数は 𝜌= 𝜎𝑡2 𝜎2 = 1 − 𝑒2 2 𝜎𝑥 𝜎𝑥

59.

6.12 𝜔 係数 59 という式で定義されていました。 ここで古典的テスト理論のモデルを因子分析 (𝐲𝑖 = 𝐟 𝑏𝑖 + 𝜺𝑖 ) に当てはめて考えてみます。真 値 𝑡 にあたる部分が 𝐟 𝑏𝑖 ,誤差 𝑒 に当たる部分が 𝜺𝑖 だと考えると,信頼性係数 𝜌 は,観測変数 𝑦 の分散のうち 𝐟 𝑏𝑖 の分散説明率になります。また,共通の因子から影響を受けている 2 変数の相 関係数は,各変数への因子負荷の積 (𝑏𝑖 𝑏𝑗 ) で表されました。さらに,観測変数 𝑦 の共通性(=分 散説明率)は,その変数に対する因子負荷の二乗和で表されていました。これらを総合すると, 各項目の因子負荷が大きいほど,内的一貫性が高いということが言えそうです。 𝜔 係数はこの考え方に基づき,一因子モデルであれば以下の式によって係数を求めます(𝑢 は unidimensional の頭文字)。 𝐼 𝜔𝑢 = 2 𝐼 (∑𝑖=1 𝑏𝑖 ) = 𝜎𝑦2𝑡𝑜𝑡𝑎𝑙 (∑𝑖=1 𝑏𝑖 ) 2 2 (∑𝐼𝑖=1 𝑏𝑖 ) + ∑𝐼𝑖=1 𝜎𝜀2𝑖 (6.48) なお,𝜎𝑦2𝑡𝑜𝑡𝑎𝑙 は合計点の分散を表しています。𝜔 係数の基本的な考え方はこれだけなのですが, 実際にはいろいろな 𝜔 を考えることができます。 INFO Composite Reliability (CR) と Average Variance Extracted (AVE) (主 に マ ー ケ テ ィ ン グ の 分 野 で は?) 妥 当 性 の 収 束 的 証 拠 の 一 つ と し て 合 成 信 頼 性 (Composite Reliability; CR) や Average Variance Extraced (AVE) と呼ばれる 指標(Bagozzi & Yi, 1988; Fornell & Larcker, 1981)が用いられているようです。これら の指標の考え方は,結局のところ 𝜔 係数と同じで,各観測変数の分散に対して,それらの 変数から抽出された共通因子による説明力の割合が大きければ,それらの変数は確かに同 じ構成概念を測定しているだろう,と考えているわけです。実際に,CR の式は上で紹介 した 𝜔𝑢 と全く同じです(Padilla & Divers, 2016) 。 これに対して AVE は,もう少し直接的に「観測変数の分散の合計のうちどれだけの割合 が共通因子で説明できるか」を求めているようです。したがって,AVE の計算式は CR (𝜔𝑢 )と似て非なるものになっています。 AVE = ∑𝐼𝑖=1 𝑏𝑖2 𝐼 𝐼 ∑𝑖=1 𝑏𝑖2 + ∑𝑖=1 𝜎𝜀2𝑖 (6.49) 考え方の違いは名前にも表れているのですが, CR(𝜔𝑢 ) 複数の観測変数の集合体 (composite) としての和得点における真値の分散説明 率を考えている。複数の観測変数が集まった場合,誤差が無相関であればそれぞれ 打ち消し合うことが期待されるため,変数の数が増えるほどその値は大きくなりや すい(これが因子負荷を先に全て足してから 2 乗するあたりに現れている) 。 AVE 観測変数一つ一つにおける平均的な真値の分散説明率を考えている。そのため観測 変数が増えるほどその値は大きくなりやすいとは限らず,基本的に CR よりは低い 値が出る。しかし観測変数そのものにおける信頼性を評価しているという点で,CR

60.

6.12 𝜔 係数 60 とは異なる価値を持っている。 という感じです。たぶん。 6.12.2 Bifactor な 𝜔 例えば学力を考えてみると,ある科目で良い点が取れる生徒は他の科目でも良い点を取ること が多いでしょう。因子分析的に言えば,これは全ての科目が一つの因子の影響を受けている,と いう見方が出来ます。ですが,果たして国語と数学と英語と…様々な科目の学力をたったひとつ の因子で説明できるのでしょうか。図 6.22 のように,特に知能などを扱う領域では「総合的な もの」である G 因子と,特定の項目にのみ影響を与える因子がそれぞれ存在するという双因子 (Bifactor) モデルというものを考えることがあります。 図 6.22: 双因子モデル 双因子モデルに基づけば,観測変数は G 因子による部分が追加されて 𝐲𝑖 = 𝐠𝑏𝑖𝑔 + 𝐟 𝑏𝑖 + 𝜺𝑖 (6.50) となります。こうなると, 「信頼性」に複数の解釈が生まれます。 まず,図 6.22 の 5 科目のテストに共通している部分のみ(全体としての内的一貫性)を考え ると,これは G 因子による分散説明率のみを取り上げる必要があります。したがって, 2 𝜔ℎ = (∑𝐼𝑖=1 𝑏𝑖𝑔 ) 𝜎𝑦2𝑡𝑜𝑡𝑎𝑙 (6.51) という 𝜔 係数が考えられます (ℎ は hierarchical の頭文字)。 一方で,特定の項目にのみ影響を与えるものを含めた「共通因子によって説明可能な部分」 (ど

61.

6.12 𝜔 係数 61 ちらかというと元の信頼性の定義に近い)を考えると, 𝐼 𝜔𝑡 = 2 𝐼 (∑𝑖=1 𝑏𝑖𝑔 ) + (∑𝑖=1 𝑏𝑖 ) 2 𝜎𝑦2𝑡𝑜𝑡𝑎𝑙 (6.52) という 𝜔 係数が考えられます(𝑡 は total の頭文字) 。 どの 𝜔 係数も間違いではありません。ただ視点が異なるだけなのです。その上でどのように使 い分けるかですが,これは仮説での因子構造によります(Flora, 2020) 。心理尺度を作成する場 合には,尺度全体として一つの構成概念を反映していると考えるでしょう。もし一因子性が満た されている場合には,最初に紹介した 𝜔𝑢 を用いるのが良いでしょう。 もし • 因子構造として多因子を仮定しているが,尺度得点としては全項目の合計点を利用しよう と考えている場合 • もともと一因子で尺度を作ろうとしていたけれども結果的に一因子性が満たされなくなっ てしまった場合 には,適切な因子構造のもとで 𝜔 を計算する必要があります。つまり特定の項目にのみ影響を 与える因子に加えて G 因子に相当するものを用意し,この G 因子の分散説明率をもって尺度全 体の内的一貫性を求めるべき,ということで 𝜔ℎ を使用すべきかもしれません。 なお,尺度の内的一貫性という観点で言えば,𝜔𝑡 を使うことは基本的には無いと思っていてよ い気がします。 psych::omega() という関数は,𝜔 係数を求めることができる関数です。 omega_u を求める 1 2 # 引数poly=TRUEにするとポリコリック相関でやってくれる omega(dat[, cols], nfactors = 1, poly = TRUE) 1 2 Warning in schmid(m, nfactors, fm, digits, rotate = rotate, n.obs = n.obs, : Omega_h and Omega_asymptotic are not meaningful with one factor 1 2 3 4 5 6 7 8 9 10 11 Omega Call: omegah(m = m, nfactors = nfactors, fm = fm, key = key, flip = flip, digits = digits, title = title, sl = sl, labels = labels, plot = plot, n.obs = n.obs, rotate = rotate, Phi = Phi, option = option, covar = covar) Alpha: 0.78 G.6: 0.81 Omega Hierarchical: 0.79 Omega H asymptotic: 1 Omega Total 0.78

62.

6.12 𝜔 係数 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 62 Schmid Leiman Factor loadings greater than g F1* h2 h2 u2 p2 com Q1_1 0.31 0.09 0.91 1 1 Q1_2 0.57 0.33 0.33 0.67 1 1 Q1_3 0.59 0.35 0.35 0.65 1 1 Q1_4 0.54 0.29 0.29 0.71 1 1 Q1_5 0.54 0.29 0.29 0.71 1 1 Q1_6 0.46 0.21 0.21 0.79 1 1 Q1_7 0.52 0.27 0.27 0.73 1 1 Q1_8 0.49 0.24 0.24 0.76 1 1 Q1_9 0.58 0.34 0.34 0.66 1 1 Q1_10 0.54 0.30 0.30 0.70 1 1 With Sums of squares g F1* h2 2.72 0.00 0.79 0.2 of: general/max 3.44 max/min = 9.493814e+15 mean percent general = 1 with sd = 0 and cv of 0 Explained Common Variance of the general factor = 1 The degrees of freedom are 35 and the fit is 1.15 The number of observations was 2432 with Chi Square = 2779.53 with prob < 0 The root mean square of the residuals is 0.14 The df corrected root mean square of the residuals is 0.16 RMSEA index = 0.18 and the 10 % confidence intervals are 0.174 0.185 BIC = 2506.65 Compare this with the adequacy of just a general factor and no group factors The degrees of freedom for just the general factor are 35 and the fit is 1.15 The number of observations was 2432 with Chi Square = 2779.53 with prob < 0 The root mean square of the residuals is 0.14 The df corrected root mean square of the residuals is 0.16 RMSEA index = 0.18 BIC = 2506.65 and the 10 % confidence intervals are Measures of factor score adequacy g F1* Correlation of scores with factors 0.89 0 Multiple R square of scores with factors 0.79 0 Minimum correlation of factor score estimates 0.59 -1 0.174 0.185

63.

6.12 𝜔 係数 55 56 57 58 59 63 Total, General and Subset omega for each subset Omega total for total scores and subscales Omega general for total scores and subscales Omega group for total scores and subscales g F1* 0.78 0.79 0.79 0.79 0.00 0.00 引数 nfactors は,G 因子以外の共通因子の数を指定します。nfactors=1 にした場合,G 因 子との識別性を失うため,実質的に 1 因子(G 因子のみ)での因子分析を行っているのと同じ状 態になります。デフォルトでは nfactors=3 となっていますが,この設定で計算した場合,実質 4 因子(G 因子に加えて 3 つの共通因子)で因子分析を行うことになります。その結果,G 因子 のみを考慮する 𝜔ℎ では過小推定してしまい,一方 𝜔𝑡 では因子数が多すぎて過大推定になって しまいがちなようです(岡田,2011) 。 出力を見てみましょう。 6 7 8 9 10 Alpha: G.6: Omega Hierarchical: Omega H asymptotic: Omega Total 0.78 0.81 0.79 1 0.78 一番上には alpha() 関数と同じように 𝛼 係数および G6 を出してくれています。その下に続 いているのが 𝜔ℎ (omega hierarchical) です。報告する際にはこの値を示せば OK です。その下 にある Omega H asymptotic は,「項目数が無限にあったら」 ,つまり「独自因子の影響を無視 できたら」という状況での 𝜔ℎ 係数なので報告の必要がありません。最後には 𝜔𝑡 係数が表示され ています。nfactors=1 のときには 𝜔ℎ と同じ値になります*27 。 12 13 14 15 16 17 18 Schmid Leiman Factor loadings greater than g F1* h2 h2 u2 p2 com Q1_1 0.31 0.09 0.91 1 1 Q1_2 0.57 0.33 0.33 0.67 1 1 Q1_3 0.59 0.35 0.35 0.65 1 1 0.2 (以下略) 因 子 負 荷 行 列 で す。 nfactors=1 の 場 合, G 因 子 の み で の 因 子 分 析 の 結 果 に な り ま す。 fa(dat[,cols],nfactors=1) と同じ値が出ているはずです。 今回は,最初に作成した cols に含まれる 10 項目で omega() を実行しましたが,この 10 項 目は 2 因子ぶんの項目になっています。続いて 2 因子にして結果を見比べてみましょう。 *27 nfactors=1 のときには G 因子と共通因子を識別できないので,𝜔𝑡 のほうも G 因子のみで推定を行っていま す。そのために 2 つは同じ値になるのです。

64.

6.12 𝜔 係数 64 2 因子だとどうなるの 1 omega(dat[, cols], nfactors = 2, poly = TRUE) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 Omega Call: omegah(m = m, nfactors = nfactors, fm = fm, key = key, flip = flip, digits = digits, title = title, sl = sl, labels = labels, plot = plot, n.obs = n.obs, rotate = rotate, Phi = Phi, option = option, covar = covar) Alpha: 0.78 G.6: 0.81 Omega Hierarchical: 0.42 Omega H asymptotic: 0.51 Omega Total 0.83 35 36 37 38 39 40 41 Schmid Leiman Factor loadings greater than 0.2 g F1* F2* h2 h2 u2 p2 com Q1_1 0.22 0.39 0.21 0.21 0.79 0.24 1.70 Q1_2 0.43 0.60 0.55 0.55 0.45 0.34 1.82 Q1_3 0.46 0.66 0.65 0.65 0.35 0.33 1.79 Q1_4 0.38 0.39 0.32 0.32 0.68 0.45 2.22 Q1_5 0.40 0.52 0.43 0.43 0.57 0.37 1.88 Q1_6 0.33 0.50 0.36 0.36 0.64 0.31 1.76 Q1_7 0.38 0.55 0.45 0.45 0.55 0.32 1.78 Q1_8 0.35 0.47 0.35 0.35 0.65 0.36 1.85 Q1_9 0.43 0.58 0.53 0.53 0.47 0.35 1.84 Q1_10 0.39 0.49 0.39 0.39 0.61 0.38 1.93 With Sums of squares g F1* F2* h2 1.5 1.4 1.4 1.9 of: general/max 0.76 max/min = 1.4 mean percent general = 0.34 with sd = 0.05 and cv of Explained Common Variance of the general factor = 0.35 0.16 The degrees of freedom are 26 and the fit is 0.22 The number of observations was 2432 with Chi Square = 540.84 with prob < 1.2e-97 The root mean square of the residuals is 0.04 The df corrected root mean square of the residuals is 0.05 RMSEA index = 0.09 and the 10 % confidence intervals are 0.084 0.097 BIC = 338.13 Compare this with the adequacy of just a general factor and no group factors The degrees of freedom for just the general factor are 35 and the fit is

65.

6.12 𝜔 係数 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 65 1.35 The number of observations was 2432 with Chi Square = 3282.92 < 0 The root mean square of the residuals is 0.19 The df corrected root mean square of the residuals is 0.21 RMSEA index = 0.195 BIC = 3010.05 and the 10 % confidence intervals are with prob 0.19 0.201 Measures of factor score adequacy g F1* F2* Correlation of scores with factors 0.66 0.75 0.76 Multiple R square of scores with factors 0.43 0.56 0.58 Minimum correlation of factor score estimates -0.14 0.12 0.16 Total, General and Subset omega for each subset Omega total for total scores and subscales Omega general for total scores and subscales Omega group for total scores and subscales g F1* F2* 0.83 0.78 0.78 0.42 0.27 0.28 0.39 0.51 0.51 Omega Q1_9 g 0.4 0.4 0.3 0.4 0.4 0.5 0.4 0.4 0.4 0.2 Q1_7 0.6 0.6 0.5 0.5 0.5 Q1_6 Q1_10 Q1_8 Q1_3 Q1_2 Q1_5 Q1_4 Q1_1 0.7 0.6 0.5 0.4 0.4 F1* F2* 図 6.23: omega() のプロット 先ほどとは打って変わって,Omega Hierarchical の値がかなり低下しました。データがか なりきれいに 2 因子に分かれているため,「すべてに共通の 1 因子 (G 因子)」の影響がかなり弱 いことがわかります。このような状態では,10 項目の合計点の内的一貫性は低い,という判断に なるわけです。このように,𝜔ℎ では内的一貫性だけでなく「一因子性」も評価してあげること が出来ている感じがします。 omega() 関数では,デフォルトで図 6.23 のようなプロットを出してくれます。F1 および F2 に関しては,因子分析を行った結果をもとに,勝手に最適なグルーピングをしてくれているわけ

66.

6.13 主成分分析との違い 66 です。ボトムアップに尺度を作成するような場面では,fa() の結果に基づくこのやり方で 𝜔ℎ を 求めるのが良いでしょう。一方で,もともと因子構造の仮定があるような場合は,omega() 関数 は勝手にグループを決定してしまうので使えません。そのような場合には,次回とりあげる SEM の枠組み( lavaan パッケージ)で 𝜔ℎ を計算しましょう。 6.13 主成分分析との違い 因子分析は,よく主成分分析と対比される手法です。ここで少しだけその違いを説明しておき ましょう。 主成分分析の主目的は,次元圧縮です。これは,複数の変数を合体させて最も高い説明力を持 つ「最強の変数」を作るようなイメージです。グラフィカルモデル的には 図 6.24 のようになり ます。因子分析モデル( 図 6.4 )と比べると,矢印の向きが逆になっているわけです。 図 6.24: 主成分分析モデル そして,主成分分析ではとにかく「なるべく分散説明率の高い主成分を作る」ことで「なるべ く少ない数の変数にまとめる」ことが重要となります。そのため,全ての項目間に正の相関があ る場合には,基本的に第一主成分に対しては全ての項目が高い負荷量を示すと考えられます*28 。 これと比べると,因子分析では項目をいくつかのグループに分ける意識が強いと言えます。その ため,因子数は最小限というよりも「メリハリのある分かれ方(=単純構造)をする数」になる ように設定されることが多いです。 また,数理的には主成分分析では誤差を想定しないという違いがあります。なので図 6.24 に おいても,これに誤差項(独自因子)を追加することはありません。もう少し具体的に説明しま しょう。因子分析(主因子法)では,観測変数の相関行列 𝚺 を 𝐁⊤ 𝐁 + 𝚿 と分解した上で,𝐁⊤ 𝐁 の部分に対して固有値分解を行うことで因子負荷量を計算していました。これに対して主成分分 析では 𝚺 そのものを固有値分解したものが主成分負荷量になります。主成分分析のほうが 𝚿 の ぶんだけ大きな値の行列を固有値分解するため,得られる固有値も大きな値になります。 R の psych パッケージでは,pca() という関数で行うことが出来ます。固有値分解の結果と 見比べてみましょう。 *28 ただ,主成分の解釈をしようと考えるケースもあるらしく,その場合には主成分軸の回転をすることもあります (林他,2008)。ただしこの場合得られる得点は「なるべく分散説明率の高い」を追求した得点ではないため,厳 密には主成分分析ではなくなる,という見方もあるようです。

67.

6.13 主成分分析との違い 67 固有値分解 1 2 3 eig <- eigen(cor(dat[, cols])) # 主成分負荷量は固有ベクトルに固有値の平方根をかけた値になる eig$vectors[, 1] * sqrt(eig$values[1]) 1 2 [1] -0.3240019 -0.5916129 -0.6105479 -0.5661146 -0.5645371 -0.5047118 [7] -0.5737352 -0.5470221 -0.6143070 -0.5920611 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 主成分分析 1 2 # デフォルトではバリマックス回転してしまうので,引数rotateを指定する pca(dat[, cols], nfactors = 2, rotate = "none") 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Principal Components Analysis Call: principal(r = r, nfactors = nfactors, residuals = residuals, rotate = rotate, n.obs = n.obs, covar = covar, scores = scores, missing = missing, impute = impute, oblique.scores = oblique.scores, method = method, use = use, cor = cor, correct = 0.5, weight = NULL) Standardized loadings (pattern matrix) based upon correlation matrix PC1 PC2 h2 u2 com Q1_1 0.32 0.46 0.32 0.68 1.8 Q1_2 0.59 0.49 0.59 0.41 1.9 Q1_3 0.61 0.52 0.64 0.36 1.9 Q1_4 0.57 0.28 0.40 0.60 1.5 Q1_5 0.56 0.44 0.51 0.49 1.9 Q1_6 0.50 -0.45 0.46 0.54 2.0 Q1_7 0.57 -0.44 0.53 0.47 1.9 Q1_8 0.55 -0.38 0.45 0.55 1.8 Q1_9 0.61 -0.42 0.56 0.44 1.8 Q1_10 0.59 -0.35 0.47 0.53 1.6 PC1 PC2 SS loadings 3.08 1.83 Proportion Var 0.31 0.18 Cumulative Var 0.31 0.49 Proportion Explained 0.63 0.37 Cumulative Proportion 0.63 1.00 Mean item complexity = 1.8 Test of the hypothesis that 2 components are sufficient. The root mean square of the residuals (RMSR) is 0.09 with the empirical chi square 1871.22 with prob < 0

68.

6.13 主成分分析との違い 32 Fit based upon off diagonal values = 0.88 PC1 列は符号こそ異なりますが,データの相関行列をそのまま固有値分解した結果と一致する 値が得られています。 68

69.

69 参考文献 参考文献 Bagozzi, R. P., & Yi, Y. (1988). On the evaluation of structural equation models. Journal of the Academy of Marketing Science, 16(1), 74–94. https://doi.org/10.1007/BF02723327 Bartlett, M. S. (1950). Tests of significance in factor analysis. British Journal of Statistical Psychology, 3(2), 77–85. https://doi.org/10.1111/j.2044-8317.1950.tb00285.x Bartlett, M. S. (1951). The effect of standardization on a χ 2 approximation in factor analysis. Biometrika, 38(3/4), 337–344. https://doi.org/10.2307/2332580 Browne, M. W. (1968). A comparison of factor analytic techniques. Psychometrika, 33(3), 267–334. https://doi.org/10.1007/BF02289327 Browne, M. W. (2001). An overview of analytic rotation in exploratory factor analysis. Multivariate Behavioral Research, 36(1), 111–150. https://doi.org/10.1207/S15327906M BR3601_05 Cliff, N. (1988). The eigenvalues-greater-than-one rule and the reliability of components. Psychological Bulletin, 103(2), 276–279. https://doi.org/10.1037/0033-2909.103.2.276 Flora, D. B. (2020). Your coefficient alpha is probably wrong, but which coefficient omega is right? A tutorial on using R to obtain better reliability estimates. Advances in Methods and Practices in Psychological Science, 3(4), 484–501. https://doi.org/10.1177/25152459 20951747 Fornell, C., & Larcker, D. F. (1981). Evaluating structural equation models with unobservable variables and measurement error. Journal of Marketing Research, 18(1), 39–50. https://doi.org/10.2307/3151312 Guttman, L. (1953). Image theory for the structure of quantitative variates. Psychometrika, 18(4), 277–296. https://doi.org/10.1007/BF02289264 萩生田 伸子・繁桝算男(1996) .順序付きカテゴリカルデータへの因子分析の適用に関する いくつかの注意点 心理学研究,67 (1), 1–8. https://doi.org/10.4992/jjpsy.67.1 林 邦好・冨田 誠・田中豊(2008) .主成分分析における軸の回転について 19(2), 89–101. https://doi.org/10.20551/jscswabun.19.2_89 計算機統計学,

70.

70 参考文献 堀 一輝・牧野直道(2024) .測定モデルユーザーのための次元性評価法総論 日本テスト学 会誌,20, 135–167. https://doi.org/10.24690/jart.20.1_135 堀啓造(2005) .因子分析における因子数決定法――並行分析を中心にして―― 香川大学経 済論叢,77 (4), 35–70. Kaiser, H. F. (1970). A second generation little jiffy. Psychometrika, 35(4), 401–415. https://doi.org/10.1007/BF02291817 Kaiser, H. F. (1974). An index of factorial simplicity. Psychometrika, 39(1), 31–36. https://doi.org/10.1007/BF02291575 Kaiser, H. F. (1981). A revised measure of sampling adequacy for factor-analytic data matrices. Educational and Psychological Measurement, 41(2), 379–381. https: //doi.org/10.1177/001316448104100216 Kaiser, H. F., & Rice, J. (1974). Little jiffy, mark IV. Educational and Psychological Measurement, 34(1), 111–117. https://doi.org/10.1177/001316447403400115 Kiers, H. A. L., & Ten Berge, J. M. F. (1994). The Harris-Kaiser independent cluster rotation as a method for rotation to simple component weights. Psychometrika, 59(1), 81–90. https://doi.org/10.1007/BF02294267 小杉考司(2018) .言葉と数式で理解する多変量解析入門 北大路書房 岡田謙介(2011) .クロンバックのαに代わる信頼性の推定法について――構造方程式モ デリングによる方法・McDonald のωの比較―― 日本テスト学会誌, 7, 37–50. https: //doi.org/10.24690/jart.7.1_37 Padilla, M. A., & Divers, J. (2016). A comparison of composite reliability estimators: coefficient omega confidence intervals in the current literature. Educational and Psychological Measurement, 76(3), 436–453. https://doi.org/10.1177/0013164415593776 Revelle, W., & Rocklin, T. (1979). Very simple structure: an alternative procedure for estimating the optimal number of interpretable factors. Multivariate Behavioral Research, 14(4), 403–414. https://doi.org/10.1207/s15327906mbr1404_2 Shirkey, E. C., & Dziuban, C. D. (1976). A note on some sampling characteristics of the measure of sampling adequacy (MSA). Multivariate Behavioral Research, 11(1), 125–128. https://doi.org/10.1207/s15327906mbr1101_9 Thurstone, L. L. (1947). Multiple-factor analysis: a development and expansion of the vectors of mind. University of Chicago Press.

71.

参考文献 Zwick, W. R., & Velicer, W. F. (1986). Comparison of five rules for determining the number of components to retain. Psychological Bulletin, 99(3), 432–442. https: //doi.org/10.1037/0033-2909.99.3.432 71