Edited at

JuliaでGLM(使える選択肢)

Julia の GLM (v1.1.1) パッケージで使える一般化線形モデルの分布モデルとリンク関数と、推定したモデルに対して使える関数を列挙する。前記事の補足である。


モデリングに際して

自分の持ってるデータに GLM を適用するにあたって、

1. 分布モデル:モデリングしたい目的関数の値の型と範囲に合うもの

2. リンク関数:データをそれで変換したら線形になりそうなもの、

をそれぞれ選んで、組み合わせられるようなら 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