ill-identified diary

所属組織の見解などとは一切関係なく小難しい話しかしません

[R] glmnet を glm みたいに使う

この記事は最終更新日から3年以上が経過しています

2019/12/15 追記: 今は caret, mlr, mlr3等便利バッケージが増えたので, 以下の内容をあえて使うメリットはないです.

概要

  • 本文よりリンクの面積の方が大きいしょぼい記事
  • glmnet()glm() の構文っぽく使う関数を雑に作った.
  • 今は caretがあるのであまり意味はない.

内容

glmnet パッケージの glmnet() は名前でわかるように一般化線形モデル (GLM) を elastic net で正則化してくれる関数だが, 組み込みの glm() と違って formula で式を与えられないので若干めんどくささがある*1. また, リンク関数も指定できず, 自分で応答変数を変換してから使う必要がある.

今は caret と併用すればデータフレームと formula でモデルを定義できる部分は可能になるので意味は薄いが, 適当に作ってみた.

glmnet 自体の簡単な解説はここなんかを.

www.slideshare.net

GLM の解説は久保本 (緑本) が定番か.


以下が本題. elastic net なので, formula で指定した説明変数がすべて使われるわけでなく, 選択肢の候補である. よってデフォルトでは y~. つまり y 以外の全変数を候補として扱う. 厳密にテストしてないのでいろいろ問題がありそう*2.
2017/5/1: プログラムを清書


giste3a394011fc1e3e18d051c3fff95fbc5


以上


*1:つまり, factor型のカテゴリ変数を自分でパースしなければならない

*2:たとえば, 出力にリンク変数の変換情報がないため, そのまま predict する際は手動で変換前の値に復元する必要がある