StatsBeginner: 初学者の統計学習ノート

初学者が統計学、機械学習、R、Pythonの勉強の過程をメモっていくノート。

統計メモ:因子分析で斜交回転を行っても、共通性の値は変わらない

 2年ぐらい前にブログに書こうと思って、下書きしたまま放置してたネタを見つけました。
 今となっては単なる思い出なのですが、せっかくなのでエントリにしておきます。
 
 当時、因子分析における「共通性」の扱いについて勘違いをしていました。
 プロマックス回転など斜交回転を行った因子分析の結果を報告する際に、寄与率と共通性を報告している例をみかけたんですが、それらの値は斜交回転の場合も算出可能なのか?報告する意味あるのか?と疑問に思っていました。
 復習しておくと、各共通因子について、全ての観測変数との相関係数(因子が直交している場合は因子負荷に一致)の二乗和を計算したものが因子寄与で、これを観測変数の数(=総分散)で割ったものが寄与率となり、「その因子が観測変数の情報量の何%ぐらいを説明できているのか」が分かる。また共通性は、各因子が直交する場合は、各観測変数について全ての因子に対する負荷量の二乗和を計算したもので、「その観測変数の情報量は、共通因子によって何%ぐらい説明できているのか」が分かるものです。
 
 それでたとえばこのサイトでは、寄与率も共通性も、斜交回転の場合は報告しないでよいと書いてあります。
 心理データ解析第8回(3)

プロマックス回転のような斜交回転の場合,寄与率を計算することができないので,出力されない。

プロマックス回転のTableに必要な情報は,項目,因子パターンに示された負荷量,因子間相関である。共通性や因子寄与は記入しなくてもよい。

 
 寄与率の方は分かりやすくて、斜交回転を行うということは因子間相関を認めるわけで、各因子が説明する情報が直交分解できてない(重複して説明している)ということになるので、寄与率を計算しても意味がないということになると思います。(そう思うんですが、『心理学研究』でプロマックス回転を行って寄与率を報告している論文をいくつか見たことがあるので、なんか意味があるのかもしれないけど……あるの?)

 
 で、当時よくわかってなかったのが共通性の扱いで、斜交回転した場合は報告する意味ないんじゃないの?と思ったのですが、これは勘違いでした。
 南風原朝和著『心理統計学の基礎』では、斜交回転時の共通性について、観測変数と共通因子のベクトルの関係から説明する記述がありました。また、豊田秀樹著『因子分析入門 Rで学ぶ最新データ解析』という本をみると、斜交回転を行っても共通性の値は(直交回転を行った時と)変わらないとも書いてありました。
 
 ただその理由が分からなくて当時悩んでいたのですが、考えてみたらこれは単純な話でした。
 以下の図は、『心理統計学の基礎』に出てくる図に私が赤字を追記したものです。共通性というのは、「共通因子で表される部分」のベクトルの長さに当たるのですが、そもそも初期解を求める時点で共通性と独自性に分解されており、因子軸の回転というのは、この図でいうと共通因子が乗っかっている平面上で共通因子のベクトルを回転させるという話なので、観測変数の共通性と独自性への分解とは関係ないということになりますね。
 
 
f:id:midnightseminar:20160831001407p:plain
 
 
 あとついでに、これも当時調べたことなんですが、Rに標準で組み込まれているfactanal()関数による因子分析と、Psychパッケージのfa()関数による因子分析の出力を比較すると、扱っている数字が微妙に違うようでした。
 以下の画像はあるデータを両関数で因子分析(プロマックス回転)した結果をエクセルにまとめたものなんですが、fa()関数の場合「SS loadings」の欄には回転前の因子負荷量の二乗和(=因子寄与)が入っている一方、factanal()関数の場合は回転後の因子負荷量の二乗和が表示されています(途中の数字を省略してしまってるのでこの図からは計算できないですが)。
 「Proportion Var」の欄はそれらの値を観測変数の個数で割ったものです(という説明がよくされるのですが、観測変数の個数というより、観測変数の分散の総和と言うべきですね。標準化してるので観測変数の個数と一致します)。「Cumulative Var」の欄は、左から順に足していった累積の値です。
 
 
f:id:midnightseminar:20160831001504p:plain