本エントリについて
会社で隔週で統計やデータマイニングに関する勉強会を行っており,
その中で輪読していたデータ解析のための統計モデリング入門(通称緑本)における4章のロジスティクス回帰を担当した際に
書籍のサンプルコードをすべてJuliaでやってみようと試みた時に苦労したことの記録になります
ハマったのは2つで
- カテゴリカル変数をそのまま扱えない
- binomialをfamilyに指定する際にライブラリの仕様によって目的変数に2次元の値を指定できない
カテゴリカル変数をどう扱うか
RのDataFrameやPythonのPandasを用いた場合は読み込んだデータをそのまま用いることができるがJuliaの場合はカテゴリカル変数をそのまま適用することができなかった.
Juliaでカテゴリカル変数を扱う場合にはPooledDataArray型に変換してあげる必要があります.
サンプルデータは以下のようにF要素がカテゴリデータになっています
data = readtable("data4a.csv")
data[:f] = convert(PooledDataArray,data[:f])
こうするとカテゴリカル変数をGMLライブラリで扱えるようになります.
familyにbinomialを指定する際に目的変数に2次元の値を指定できない
上記のようにJuliaのGLMでfamilyに指定した場合には目的変数が0.0~1.0の範疇でなくてはならないという条件が設定されています.
上記はpythonのstatsmodelの場合ですが,
1次元の場合は値をそのまま,2次元の値(a, b)の場合はa/(a+b)の値を返すような実装になっています.
binomial(二項分布)はN(=a+b)回ある事象を発生させた時にa回成功してb回失敗するといった現象を表すのに用いられます.
もともとa/(a+b)を返すのだし,そのまま成功確率としてa/(a+b)を与えればJuliaも共通になると思われるかもしれませんが,
その場合Nがいくつだったかという情報が欠損してしまうことになります.
結果として不適切な最適化が行われてしまう可能性があるということです.
まとめ
JuliaでやってみてやっぱりPythonって便利だなーって思ったのが第一感です.
ドキュメントが充実していたり,実際にやってみた系の情報が多いのであまり未知のトラブルにぶつかることも少ないです.
しかしJuliaにはこうやっていろいろ調べて行きながら元コードに当たったり,実装を持ってきたであろう別言語の実装に当たったりすることでいろいろな発見があって非常に面白く
またコード自体が非常に親しみやすいフォーマットで書かれているために元コードにあたって調べるのも比較的容易です(主観)
まだまだ成長段階の言語で,ライブラリなどは更に成長段階でありますが,そういった初期のころにしか味わえないわくわく感を味わいたい方は是非Juliaの世界に足を踏み入れてみてはいかがでしょうか
蛇足
GLMのJulia解説記事ぐらいだれか書いてるだろと思って書き始めたらそもそもなかったので次はそれを書きます…