No.04447 正準相関分析のエラー回避  【Suzuki】 2007/10/01(Mon) 04:31

正準相関分析における「システムは数値的に特異です」というエラーを回避する方法をご教授願います。

# http://aoki2.si.gunma-u.ac.jp/R/cancor.html
> my.cancor(dat, 1:20, 21:59)
以下にエラーsolve.default(S22) : システムは数値的に特異です:条件数の逆数 = 2.22844e-19

全ての変数を用いる必要はないため,変数を一個づつ抜いて実行してみたのですが,全ての組み合わせで同じエラーが発生しました。

ii = 1:20
jj = 21:59
out = c()
for(i in 1:length(ii)) for(j in 1:length(jj)) out = c(out, try(my.cancor(dat, ii[-i], jj[-j]), silent = TRUE) )

No.04449 Re: 正準相関分析のエラー回避  【青木繁伸】 2007/10/01(Mon) 08:31

また,変数の数がデータより多いとか?

一つだけ抜いても,2つ以上の変数に従属関係があったらエラーは起きます

http://aoki2.si.gunma-u.ac.jp/R/find_multico.html
でも試したらいかがでしょう

R オリジナルの cancor を使うと良いでしょう。SVDを使っているので,解が求まると思います。なお,cancor の係数は 1/sqrt(n-1) になっています

No.04456 Re: 正準相関分析のエラー回避  【Suzuki】 2007/10/02(Tue) 05:43

アドバイスありがとうございます。ご指摘の通り,変数の個数がサンプルの個数より多いデータ行列を使用していました。
> dim(dat)
[1] 23 59

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