2013年5月4日土曜日

js-STARのバグを調べたら,とっても奥が深かった

ユーザーからバグ情報が寄せられた。大変ありがたい。

        観測値1    観測値2
-----------------------------------------
群1      9       1
群2      5       5
-----------------------------------------
両側検定  :  p=0.0759   +  (.05<p<.10)
片側検定  :  p=0.0704   +  (.05<p<.10)

両側確率が, p=0.0759 だが,Rだと両側検定   0.1409 となる。

ちなみに,群1の数値を入れ替えた場合


        観測値1    観測値2
-----------------------------------------
群1      1       9
群2      5       5
-----------------------------------------
両側検定  :  p=0.1409   ns (.10<p)
片側検定  :  p=0.0704   +  (.05<p<.10)


これだと正しい??
調べてみるとなかなか奥が深かった。
求め方の詳しいことは群馬大の青木先生のページを見てください。

今回の場合は下の◎の数値をすべて足すと両側確率になります。

0.005417956656346785 ◎1
0.06501547987616153 ◎2
0.24380804953560606
0.3715170278637803
0.24380804953560564
0.06501547987616159 ◎3
0.005417956656346785 ◎4

ところが,◎2と◎3を比較してみてください。
これは等しいはずなのですが,17桁目が違っています。
この計算には,大きな桁数でも計算できるように対数を使っているのですが,そのためにこのような微妙な誤差がでてしまったようです。
いろいろ考えたのですが,結局,15桁目で四捨五入することにしました。
とても,まれな例だと思うのですが,ユーザーさんよく見つけてくれました。


0 件のコメント:

コメントを投稿