ぎょーむ日誌 2004-04-27
2004 年 04 月 27 日 (火)
-
0830 起床.
朝飯.
コーヒー.
0920 自宅発.
曇.
0930 研究室着.
-
まーたまた釧路大会雑用.
きりなし感あるんだけど,
1040 きりあげる.
いつまでもこんなことやってられん.
とはいえ,
いろいろなメイルがぽつぽつくるわけだが.
-
苫小牧直径成長モデリング.
R
の
optim()
を使った最尤推定やろーとしてるわけだが
……
とうとう,
というべきか
R の不可解計算コストを無視できない問題を発見してしまった.
コマンドラインなどから
optim()
を直接よべばまあまあの速度で計算するのに,
ある関数内で
optim()
を使うと計算進捗がえらく遅くなってしまう,
というものだ.
この計算速度低下の原因は関数間で生じてしまった
大量データコピーである可能性が高い.
しかしながら,
現時点では対策はおろかどこで大量コピーが生じているのかもわからない.
ふーむ
……
-
1320-1350 北大構内走.
曇天.
昼飯.
-
午前中に発覚した計算のろのろ問題にとりくむ.
いろいろぢたばたしてみたんだが
……
たとえば,
new.env()
わざなどは,
この場合は有用ではない.
今回の計算ではそもそもデータは .GlobalEnv
に入ってるからだ.
-
いろいろと試行錯誤.
どういう場合に速くなり,
どういう状況では遅くなるのか
……
で,
よーやくにしてわかった.
data.frame
からある条件をみたす行をとりだす.
これは print()
などするとあたかも vector
であるかのように見える.
しかしながらこれはいぜんとして
data.frame
なのである.
で,
R 内部の機構はわからないんだけど,
これを関数間でやりとりするとコストの高いコピーが発生して,
計算が遅くなる.
これが原因だった.
-
対策は
……
いんちきな方法を考案した.
つまり
data.frame
をやりとりするのが問題であるなら,
「解毒」
すればよろしかろー,
ということで
sapply()
にほうりこんで vector
化してしまった.
あまり抜本的ではない.
-
で,
計算は 5-6 倍速くなったわけだが,
それでもなお遅い.
ひとつ収束させるのに 2-3 秒かかる.
すると,
ひとつの気象値セットの最尤推定値を得るのに
1 分以上かかる,
ということで.
気象値セットが数千個あるってことは
……
-
ともかくこれを A801 の dell 機 (Pentium4 2.4GHz)
にもっていて数百とーりの場合について計算させてみる.
さーて,
どうなることやら.
明朝までに終るかな.
-
なぜかしら東北大の河田さんからややこしー統計学質問が.
しかも苫小牧直径成長モデリングで使ってる
負の二項分布に関するもの.
glm.nb()
の control
オプションで glm.control(trace = 3)
などと指定すると theta の推定値が変化していく様子がわかる.
で,
このデータの場合は収束しない,
と.
-
ひとくぎりついたんで
2050 研究室発.
2110 帰宅.
体重 73.4kg.
晩飯.
-
[今日の運動]
-
北大構内走 1320-1350.
ストレッチング.
-
腹筋運動 30 ×
3 回.
腕立ふせ 3 ×
3 回.
-
[今日の食卓]
- 朝 (0850):
米麦 0.8 合.
コマツナ.
- 昼 (1400):
弁当.
研究室お茶部屋.
米麦 0.8 合.
コマツナ.
- 晩 (2230):
米麦 0.8 合.
チンゲンサイ・ピーマン・ホタテの炒めもの.