Julia の GLM (v1.1.1) パッケージで使える一般化線形モデルの分布モデルとリンク関数と、推定したモデルに対して使える関数を列挙する。前記事の補足である。
モデリングに際して
自分の持ってるデータに GLM を適用するにあたって、
- 分布モデル:モデリングしたい目的関数の値の型と範囲に合うもの
- リンク関数:データをそれで変換したら線形になりそうなもの、
をそれぞれ選んで、組み合わせられるようなら glm() で指定してモデリングする。今一つピンと来ない時は、試せる組み合わせを全部試す。
使い方
using GLM, RDatasets
dat = RDatasets.dataset("datasets", "iris") # R の iris データ
mod = glm(@formula(SepalLength ~ SepalWidth * Species), # 目的変数と説明変数
dat, # データ
Normal(), # 分布モデル
IdentityLink()) # リンク関数
使える分布モデル
目的関数の値の型と範囲に合い、かつ分布の様子をうまく表せそうなものを選ぶ。
分布モデル | 関数名 | 目的変数 | 備考 | ありがちな組み合わせ |
---|---|---|---|---|
ベルヌーイ分布 | Bernoulli() | 0か1の二値 | LogitLink | |
二項分布 | Binomial() | 0か1の二値 | LogitLink | |
ガンマ分布 | Gamma() | 非負実数 | InverseLink | |
正規分布 | Normal() | 全ての実数 | IdentityLink | |
ポアソン分布 | Poisson() | 非負整数 | 目的変数の期待値 = 分散 | LogLink |
負の二項分布 | NegativeBinomial(θ) | 非負整数 | 期待値 < 分散 | LogLink |
負の二項分布を使いたいがθの値をどうしていいかわからないというときは、glm() の代わりにθの値も推定する negbin() を使う。
使えるリンク関数
リンク関数の選択肢はこんな感じ。もしかしたら「対象となる分布」には Julia では使えないものも混ざっているかもしれないが、GLMパッケージのバージョンアップで対応するかもしれない。
リンク関数$f(y)$ | 目的変数$y$ | 対象となる分布 | 備考 |
---|---|---|---|
CauchitLink() | 0か1の二値 | 二項分布 | |
CloglogLink() | $0<y<1$ | 二項分布 | $f(y)=\log(-\log(1-y))$ |
IdentityLink() | 全ての実数 | ポアソン、ガンマ、正規 | 変換しない $f(y) = y$ |
InverseLink() | 非零の実数 | ガンマ、正規 | $f(y) = 1/y$ |
InverseSquareLink() | 非零の実数 | 逆正規分布 | $f(y) = 1/y^2$ |
LogitLink() | 0か1の二値 | ベルヌーイ、二項 | ロジスティックの逆関数 |
LogLink() | 非負の実数、整数 | 二項、ポアソン、ガンマ、正規 | $f(y) = \log(y)$ |
NegativeBinomialLink() | 非負で上限のある整数 | 負の二項分布 | $f(y)=\log(y/(y+θ))$、θは指定する |
ProbitLink() | 非負実数 | 二項分布 | 正規分布の累積分布関数の逆関数 |
SqrtLink() | 非負実数 | ポアソン | $f(y)=\sqrt{y}$ |
モデルができたら
得られたモデルに対して使える関数には以下のようなものがある。モデルの情報を取り出したり、モデルをもとに計算したりする。
関数 | |
---|---|
coef() | 線形予測子の係数を返す |
deviance() | モデルの逸脱度を返す |
dof_residual() | 残差の自由度を返す |
glm() | 一般化線形モデルを当てはめて返す |
lm() | 一般線形モデルを当てはめて返す |
stderror() | モデルの各係数の標準誤差を返す |
vcov() | モデルの分散共分散行列を返す |
predict() | モデルから目的変数の予測値を計算して返す |
また、得られたモデルのオブジェクト内にいくつかフィールドがある。上の関数では見られない値も、フィールドを直接参照したらわかる。glmfit.jl 内で GwtslmResp 構造体に定義されている。モデルのオブジェクトを mod とすると、たとえば逸脱度残差には mod.model.rr.wrkwt でアクセスできる。
フィールド | 意味 | 型 |
---|---|---|
y | 目的変数値 | FPVector |
d | 分布モデル | UnivariateDistribution |
devresid | 逸脱度残差 | FPVector |
eta | 線形予測子の値 | FPVector |
mu | 予測値(モデルが予測する分布の期待値) | FPVector |
offset | 線形予測子に加えるオフセット | FPVector |
wrkwt | 最終的に得られた重み | FPVector |
wrkresid | 最終的に得られたモデルの残差 | FPVector |