★ princo(s)でNaNエラー ★

3687. princo(s)でNaNエラー Shimp 2004/07/14 (水) 17:20
└3692. Re: princo(s)でNaNエラー 青木繁伸 2004/07/14 (水) 19:08
 └3701. Re^2: princo(s)でNaNエラー Shimp 2004/07/14 (水) 22:56
  └3703. Re^3: princo(s)でNaNエラー 青木繁伸 2004/07/14 (水) 23:27


3687. princo(s)でNaNエラー Shimp  2004/07/14 (水) 17:20
R 1.9.0 日本語化Patched(Windows版)を使用しています。
http://aoki2.si.gunma-u.ac.jp/R/princo.html の主座標分析関数の利用を検討しているのですが,使用例に記載のコマンドを実行すると

 Warning message:
 NaNs produced in: sqrt(res$values)

の警告が出ます。

 ...これは私側の問題なのでしょうか...

     [このページのトップへ]


3692. Re: princo(s)でNaNエラー 青木繁伸  2004/07/14 (水) 19:08
>  ...これは私側の問題なのでしょうか...

関数と,使用例はどのように R に食わせましたか?
Web ページに表示されるものをカット&ペーストでやってみてもそうなんですか。
私のところは R 1.9.1 (非日本語化  だってMacintoshだもん)
やってみると,以下の通り(見にくいし,日本語は化けるけど)
> princo <- function(s)
+ {
+     n <- nrow(s)
+     m <- apply(s, 2, sum)/n
+     h <- s+sum(s)/n^2-outer(m, m, "+")
+     res <- eigen(h)
+     res$vectors <- res$vectors*matrix(sqrt(res$values), n, n, byrow=TRUE)
+     colnames(res$vectors) <- names(res$values) <- paste("Axis", 1:n)
+     rownames(res$vectors) <- paste("Object", 1:n)
+     res$values <- res$values[res$values > 1e-5]
+     ax <- length(res$values)
+     res$vectors <- res$vectors[,1:ax]
+     if (ax > 2) {
+         plot(res$vectors[,1:2])
+         abline(v=0, h=0)
+         text(res$vectors[,1], res$vectors[,2], 1:n, pos=4, offset=.2)
+     }
+     res
+ }
> 
> s <- matrix(c(
+         0, -1, -2, -3,
+         -1, 0, -3, -4,
+         -2, -3, 0, -1,
+         -3, -4, -1, 0
+ ), byrow=TRUE, ncol=4)
> 
> princo(s)
$values
  Axis 1   Axis 2   Axis 3 
5.236068 1.000000 0.763932 

$vectors
             Axis 1 Axis 2     Axis 3
Object 1 -0.8506508   -0.5  0.5257311
Object 2 -1.3763819    0.5 -0.3249197
Object 3  0.8506508   -0.5 -0.5257311
Object 4  1.3763819    0.5  0.3249197

     [このページのトップへ]


3701. Re^2: princo(s)でNaNエラー Shimp  2004/07/14 (水) 22:56
> 関数と,使用例はどのように R に食わせましたか?
> Web ページに表示されるものをカット&ペーストでやってみてもそうなんですか。

 はい。webページからコピー&ペーストしました。
 R 1.9.1のオリジナルを落としてきて試してみましたが,現象は変わりませんでした。
 念のため,コンソールのコピーして貼っておきますが...
> princo <- function(s)
+ {
+     n <- nrow(s)
+     m <- apply(s, 2, sum)/n
+     h <- s+sum(s)/n^2-outer(m, m, "+")
+     res <- eigen(h)
+     res$vectors <- res$vectors*matrix(sqrt(res$values), n, n, byrow=TRUE)
+     colnames(res$vectors) <- names(res$values) <- paste("Axis", 1:n)
+     rownames(res$vectors) <- paste("Object", 1:n)
+     res$values <- res$values[res$values > 1e-5]
+     ax <- length(res$values)
+     res$vectors <- res$vectors[,1:ax]
+     if (ax > 2) {
+         plot(res$vectors[,1:2])
+         abline(v=0, h=0)
+         text(res$vectors[,1], res$vectors[,2], 1:n, pos=4, offset=.2)
+     }
+     res
+ }
> 
> s <- matrix(c(# 4行4列の類似度行列例(ファイルから読んでも良い)
+ 0, -1, -2, -3,
+ -1, 0, -3, -4,
+ -2, -3, 0, -1,
+ -3, -4, -1, 0
+ ), byrow=TRUE, ncol=4)
> 
> princo(s)
$values
  Axis 1   Axis 2   Axis 3 
5.236068 1.000000 0.763932 

$vectors
             Axis 1 Axis 2     Axis 3
Object 1 -0.8506508   -0.5  0.5257311
Object 2 -1.3763819    0.5 -0.3249197
Object 3  0.8506508   -0.5 -0.5257311
Object 4  1.3763819    0.5  0.3249197

Warning message: 
NaNs produced in: sqrt(res$values) 
 どなたか「うちのWindowsでは問題なし」っておっしゃって下さると,議論が進みそうな気もするのですが...

 とりあえず,数量化IV類(qt4関数)は警告無しで使えているのでこちらで仕事を進めてみます。
 もしも,何か判ったらレスを下さると幸甚に存じます。
 宜しくお願い致します。

     [このページのトップへ]


3703. Re^3: princo(s)でNaNエラー 青木繁伸  2004/07/14 (水) 23:27
Windows ではないですが,UNIX マシン(正確な呼び方ではないがご容赦)にインストールしてあるものでも,同じ warning 出ますね。
で,私も,やって見てれば良かったのだけど,warning が文句を言うところの原因をプリントしてやってみてください。具体的には,
res <- eigen(h)
の後に
print("res$values")
print(res$values)
を入れて見てください(print("res$values")は入れなくてもいい)。

文句を言う方では,
[1] "res$values"
[1]  5.236068e+00  1.000000e+00  7.639320e-01 -1.306145e-17
となっていました。
4つ目の数値がマイナスで,「そんなもんの平方根はとれへんで〜〜」といってるわけですね。で,「計算できへんから NaN にしたった」と言ってます。
実質的には,後への影響はありません。

文句を言わないMacintoshはどうやっているのかと同じくチェックしてみると,
> princo(s)
[1] "res$values"
[1] 5.236068e+00 1.000000e+00 7.639320e-01 7.836868e-17
だそうです。どっちが偉いと言うことでもないですが,どうしても木になるということなら,先ほど二行挿入したところへ代わりに
res$values[res$values < 0] <- 0
を入れておくとか。(念のため,あまり絶対値の大きい負の値になったら本当にエラーメッセージを吐いて死ぬとかにしておいた方がよいかも)。

     [このページのトップへ]


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