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 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る