No.16659 因子分析における負の固有値  【初学者】 2012/03/19(Mon) 18:42

あるデータで因子分析をしたところ,固有値に負の値が出てきました。10個の固有値が出力されたうち,5つめが約 0.05,6つめが約-0.07となって,以下7番目から後が負で,10番目の固有値は-0.25となっています。寄与率も,5番目までで115%となっ て,以下10番目まで「負の寄与率」となって,10番目まで合計すると100%となって,つじつまがあっています。
因子数を3つ程度にすれば,無視してもいいのでしょうけど,仮に(本当に仮にですが),6因子以上とした場合,どう評価すればいいのでしょうか。
この掲示板の過去ログで,「No.03587 因子分析のマイナスの固有値の意味」http://aoki2.si.gunma-u.ac.jp/lecture/mb-arc/arc040/03587.html というのがあったのですが,質問者の勘違いだろうとういうことでした。
ご存じの方があれば,参考文献だけでも御教示いただけませんでしょうか。

No.16660 Re: 因子分析における負の固有値  【青木繁伸】 2012/03/20(Tue) 20:37

データから計算された相関係数行列は非負の固有値を持ちます(正定値行列と言います)。
そのようにして計算された相関係数行列でも,例えば小数点以下2,3桁だけを用いた場合には誤差の関係から数個の負の固有値が得られることもあるでしょう。
なお,因子分析で固有値・固有ベクトルを求める場合に,対角成分にSMCなどの共通性の推定値を代入した相関係数行列はもはや正定値行列ではないので当然ながら負の固有値が複数個得られます。
過去ログ(No.03587)は,明らかに因子負荷量のことをいっているので,無関係です。
> (r <- cor(iris[1:4])) # アヤメのデータの4変量の相関係数
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 1.0000000 -0.1175698 0.8717538 0.8179411
Sepal.Width -0.1175698 1.0000000 -0.4284401 -0.3661259
Petal.Length 0.8717538 -0.4284401 1.0000000 0.9628654
Petal.Width 0.8179411 -0.3661259 0.9628654 1.0000000
> eigen(r)$values # 正定値行列なので,負の固有値はない
[1] 2.91849782 0.91403047 0.14675688 0.02071484

> (r2 <- round(r, 2)) # 小数点以下2桁で丸めても
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 1.00 -0.12 0.87 0.82
Sepal.Width -0.12 1.00 -0.43 -0.37
Petal.Length 0.87 -0.43 1.00 0.96
Petal.Width 0.82 -0.37 0.96 1.00
> eigen(r2)$values # 正定値行列のまま
[1] 2.91912926 0.91184362 0.14426500 0.02476212

> (r1 <- round(r, 1)) # しかし,小数点以下1桁までだと,誤差が大きくなりすぎて
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 1.0 -0.1 0.9 0.8
Sepal.Width -0.1 1.0 -0.4 -0.4
Petal.Length 0.9 -0.4 1.0 1.0
Petal.Width 0.8 -0.4 1.0 1.0
> eigen(r1)$values # 正定値行列とは言えなくなり,負の固有値が出てくる
[1] 2.94605427 0.92647779 0.14822988 -0.02076193

> SMC <- sqrt(1-1/diag(solve(r))) # 元の相関係数行列の
> diag(r) <- SMC # 対角成分を SMC で置き換えたものも
> r
Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 0.9266130 -0.1175698 0.8717538 0.8179411
Sepal.Width -0.1175698 0.7238833 -0.4284401 -0.3661259
Petal.Length 0.8717538 -0.4284401 0.9838759 0.9628654
Petal.Width 0.8179411 -0.3661259 0.9628654 0.9684267
> eigen(r)$values # 正定値行列ではなくなるので,負の固有値が出てくる
[1] 2.86481583 0.67089984 0.07827619 -0.01119287

No.16768 Re: 因子分析における負の固有値  【初学者】 2012/04/15(Sun) 18:35

1ヶ月も放置して申し訳ありません。
入院していました。
青木先生,ご返信ありがとうございます。
文字通りの初学者ですので,あまり詳しくはわかりませんが,ないことではないのですね。
もう少し勉強して内容を理解させていただきます。
お忙しいところ,本当にありがとうございました。

● 「統計学関連なんでもあり」の過去ログ--- 045 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る