1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JuliaでGLM(使える選択肢)

Last updated at Posted at 2019-03-25

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
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?