[fpr 1238] テューキー

岡本安晴

岡本@金沢大学です。

  堀さんのコメント"[fpr 1237] Re: テューキー"、有り難う御座います。

  遅い理由と、なぜ速度に関して最適化をはからなかったのかについて
一応、書いておきます。

>このプログラム興味があったので、早速いただきました。しか〜し、
>遅いです。
>
>下のほうにある、群内のサンプル数がすべて等しいときのプログラム
>でも遅い。

  上のテューキーで遅い理由は主に次のことが原因と思います。

1.2重積分をクラス型を用いているためメソッドの呼び出し時の
  処理が多くなる。
    クラス型を用いたのは、その方がアルゴリズムとして分かり易い
  と思ったからです。速度の方を優先するのなら、クラス型を用いない
  方がよいと思います。
2.上の2重積分をクラス型で汎用のものとして用意したこととも関連
  しますが、元の式ではdxの外側出ているg(s)が2重積分の内側に入れて
  いるため、不必要に繰り返し計算されています。元の式の形を生かして
  2重積分を汎用のもので行うということを止めれば随分と速くなるのでは
  と思います。また、被積分関数の計算での冗長度もかなり高いことも
  計算時間に大きな影響があるのではと思います。
3.2重積分のアルゴリズム自体の効率ですが、これは他の方法と比較した
  わけではありません。機会があればいろいろ試してみたいと思っています。
4.確率1−aを与えるtの値をバイセクションで求めています。これは
  ニュートン法を使えば飛躍的に速くなることが期待できます。

  1〜4の中で一番手っ取り早い速度の向上法は、2のg(s)の計算を内側の
積分の外に出すこと、被積分関数の冗長度について配慮すること、だと思い
ます。このときはDInt.incのある汎用の2重積分を上の計算用に特化させる
必要が有ります。


>岡本 安晴「Delphiで学ぶデータ分析法」CQ出版社、1998
>の付録のフロッピーにおさめられている、標準正規分布、カイ2乗分布、
>t分布、F分布の
>accuracy(1e-17) がきついのではないか(10分以上まってもまだ
>処理していたこともあっ
>た、短気なもので処理結果をみることはなかった),1e-15 なら私の
>マシン(mpu 233mhz)で1
>秒以内で解がでます。ほかの章のプログラムをみたら 1e-15を使用
>しているものも見つけまし
>た。というのを見ても1e-17はきびしい。

  一応、デバッグのときに手元の教科書に載っている値と比較のための
計算の範囲では私としては計算時間はこの程度でよいと思いました。
  精度が17桁にしてあるのは用いている積分計算の手続きの精度に
合わせてあげてありますが、これは他のプログラムに組み込むときに
出来るだけ精度を上げておいた方がトラブルが少ないと期待されるから
です。
  10分以上かかるというのは、DFの値が特別な場合か、あるいは
浮動小数点数計算エラー・算術計算エラーなどでハングアップしている
可能性があります。

  統計的検定で必要な桁数は5桁ぐらいあれば十分でしょうから、
必要ならば収束の基準を緩めて計算することが出来ます。


  私が、速度を優先せず、できるだけ分かり易い計算手順・
アルゴリズムをそのままプログラミングしてそのソースリストを
そのまま載せているのは、これからプログラミングの勉強を
始めようとする人たちにプログラミングは易しく行うことも
できること、むやみに効率にこだわらなければ実用的な
プログラミングがそれなりに楽しく出来ることを訴えたい
からです。

  プログラミングに慣れ、時間に余裕があれば、それに応じて効率
の追求と美的センスの満足を求めることも楽しいもです。
  Pascalは、ソースリストをそのように書き換えることが容易な
言語です。

  ともかく、大学では486マシンのCPUをODP80に積み換えて
夕方計算を始めて、翌朝結果を確認するというペースでの仕事に
慣れてしまっている感覚なのが問題でもあるのでしょう。
  テューキーについては、上の2に関しての改訂版を近いうちに
アップすることを考えています。


                                           岡本 安晴
                                           c00279 (at) simail.ne.jp


スレッド表示 著者別表示 日付順表示 トップページ

ここは心理学研究の基礎メーリングリストに投稿された過去の記事を掲載しているページです。