dose response curveでRの関数を読む

  • こちらから
  • こちらのモジュールと連携
  • ソースを読むときの戦略概論はこちら
  • 用量反応曲線を推定している
  • library(drc), "dose response curve"
  • 推定関数 drm(), "dose response model"
  • 処理内容を確認する(ヘルプ記事)
    • "Details" の項
    • optim()関数による近似→optim()の最適化処理関数群の中での位置づけ(こちら)
    • "minimisation of the minus log likelihood function"→尤度関数の対数の負の最小化→尤度の最大化→最尤法(こちら)
    • " least squares estimation"→「最適化」の基準。最小二乗法(こちら)
      • \sum_{i=1}^N ( w_i (y_i-f_i))^2 : 観察点ごとに「観察値と推定値」の差を取って「重みをつけて」二乗したものの総和、を最小化
    • "median abslolute deviance": 中央値とロバストなこと(外れ値がある場合に平均値はぶれるが中央値はぶれにくい。そのような性質を指して「ロバスト」)。MAD(こちら)、それと「ロバスト」の関係(こちら)
    • "lowerl and/or upperl automatically invokes constrained optimisation": 上下限辺素値を与えれば、最適化するべき変数が限定される
  • さて、関数の概要がわかったので、関数を読んで確認する
  • drm()関数の中身を次のようにしてよむことができる
drm
  • 入力と出力を確認する
    • 入力は必須入力項とオプションに分け、必須項のみから開始する
    • 出力も、推定の本体と、それに付随する情報とを選別する
  • 主要入力項と主要出力項とは、関数の中で必ず連絡しているので、そのつながりを結んでいる式・呼び出し関数を確認する
    • 長めの関数ですが、基本的には引数による条件分岐が多いだけですから、その点に留意して本筋を1本確認します
  • 字面で追いつつ、実行して確認する
    • 実行するときには、「関数を自作したときの逆」の作業をする
    • 「関数の自作」においては、処理をべたに書いて、最後にそのうちのパラメタを取り出して、function()に渡して書くことが多い
    • 「自作の逆」では、関数がとっている引数をRのべたなオブジェクトで与えた上で、関数の内側をコピーペーストで頭から実行する
    • ときに、エラーが出るが、メッセージの意味を確認すればたいていの場合は回避可能で、どこのオブジェクトにどのような値が格納されていくかの流れは確認できる
    • drm()の中で、drmOpt()という関数が使われているようだが、これは「隠し関数」のようなのでGoogle検索するとこちら
      • この中でoptim()関数が使われていてそれは以下のようになっているから、L-BFGS-B法とわかる
optim(startVec, opfct, opdfct1, hessian = hes, method = "L-BFGS-B",...