一般化線形モデル

Julia で一般化線形モデルによる解析を行うとき GLM パッケージ中の glm 関数を利用する。

using GLM
using DataFrames

glm 関数は 4 つの引数があり、それぞれにモデル式、データ、誤差分布、リンク関数を指定する。

glm(formula, dataframe, family, link)

正規分布の一般化線形モデル(回帰分析)

データが正規分布に従い、y = ax + b の形でモデル式を仮定して、glm 関数で解析する。

x = rand(Normal(10, 2), 10)
y = 2 * rand(Normal(10, 2), 10) + rand(Normal(3, 1))
dat = DataFrame(x = x, y = y)
## 10x2 DataFrame
## | Row | x       | y       |
## |-----|---------|---------|
## | 1   | 12.3999 | 29.3305 |
## | 2   | 9.89067 | 24.3873 |
## | 3   | 10.0658 | 24.5767 |
## | 4   | 11.3    | 28.3295 |
## | 5   | 8.37261 | 27.0461 |
## | 6   | 7.61779 | 25.2877 |
## | 7   | 14.2073 | 17.8931 |
## | 8   | 7.17721 | 22.6123 |
## | 9   | 11.2305 | 23.5809 |
## | 10  | 10.0938 | 29.3477 |

glm(y ~ x, dat, Normal(), IdentityLink())
## DataFrameRegressionModel{GeneralizedLinearModel{GlmResp{Array{Float64,1},Normal,IdentityLink},DensePredChol{Float64,Cholesky{Float64}}},Float64}:
## 
## Coefficients:
##               Estimate Std.Error   z value Pr(>|z|)
## (Intercept)    28.6934   5.84526   4.90883    <1e-6
## x            -0.337472  0.559851 -0.602789   0.5466

ポアソン回帰

12 期間におけるある感染病の感染者数をポアソン回帰でモデル化する(R によるポアソン回帰の結果)。

dat = DataFrame(x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
                y = [6, 5, 14, 14, 21, 31, 38, 51, 86, 136, 169, 234])

glm(y ~ x, dat, Poisson(), LogLink())
## DataFrameRegressionModel{GeneralizedLinearModel{GlmResp{Array{Float64,1},Poisson,LogLink},DensePredChol{Float64,Cholesky{Float64}}},Float64}:
## 
## Coefficients:
##              Estimate Std.Error z value Pr(>|z|)
## (Intercept)   1.29894  0.146579 8.86173   <1e-18
## x            0.348702 0.0145349 23.9907   <1e-99

ロジスティック回帰

Juia でロジスティック回帰を行う例(R によるロジスティック回帰の結果)。

x = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
     3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
     5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8,
     8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
     10, 10]
y = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0,
     0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1]
dat = DataFrame(x = x, y = y)


glm(y ~ x, dat, Binomial(), LogitLink())
## DataFrameRegressionModel{GeneralizedLinearModel{GlmResp{Array{Float64,1},Binomial,LogitLink},DensePredChol{Float64,Cholesky{Float64}}},Float64}:
## 
## Coefficients:
##              Estimate Std.Error  z value Pr(>|z|)
## (Intercept)  -5.41911   1.03455 -5.23812    <1e-6
## x            0.869322  0.163396  5.32033    <1e-6

GLM で利用できる誤差分布とリンク関数

Julia の glm で利用できる誤差分布には以下のようなものがある。

Binomial二項分布LogitLink, LogLink, ProbitLink, CloglogLink
Gammaガンマ分布IdentityLink, InverseLink, LogLink
Normal正規分布IdentityLink, LogLink, InverseLink
Poissonポアソン分布IdentityLink, LogLink, SqrtLink

Julia で利用できるリンク関数の一覧。

CauchitLink
CloglogLink
IdentityLink
InverseLink
LogitLink
LogLink
ProbitLink
SqrtLink

References

  • Linear models (lm's) and generalized linear models (glm's) in Julia. Website
  • 舟尾 暢男. 統計解析 R-Tips 一般化線形モデル. Website