一般化線形モデル(Generalized Linear Model: GLM)のメモ。
【目次】
・線形回帰モデルでは、誤差が互いに独立に正規分布に従うことを前提としている(不遍性・等分散性・独立性・正規性)。
・そのため誤差構造が正規分布ではない場合、モデルの当てはまりが悪い。
・GLMでは誤差構造が何の分布に従うかを指定できる。
計算式
GLMは分布族・リンク関数・線形予測子でモデリングする。
「リンク関数 (期待値) = 線形予測子」で期待値を のスケールに写像し、この空間で線形モデルを作成する。
「逆リンク関数(リンク関数の逆数)」で線形予測子を元のスケールに写像し、期待値を得る。
■ ロジスティック回帰での例
・ロジスティック回帰では誤差構造が二項分布に従うと仮定する。
・ロジット関数(リンク関数)でロジット値に変換し、線形モデルを作成する。確率値は(0, 1)の範囲をとるが、ロジット値は の範囲となる。
・ロジスティック関数(ロジット関数の逆数、シグモイド関数とも言う)を使って線形予測子から確率値を得る。
・下図は1%刻みの確率値とそのロジット値の対応図。
(Rコードを見る)
data1 <- data.frame(p=seq(0,1,0.01)) %>% mutate(logit=log(p/(1-p)), type="確率") data2 <- data1 %>% mutate(type="ロジット") data3 <- union_all(data1,data2) %>% mutate( val =if_else(type=="確率", p, logit) ,grp =p ,type=factor(type, level=c("確率","ロジット")) ) ggplot(data=data3, mapping=aes(type, val, group=grp)) + geom_point() + geom_line() + labs(x="", y="", title="確率値とロジット値", caption="🄫Cochineal19") + scale_y_continuous(limits=c(-6,6), breaks=c(seq(-5,5,1),0.5)) + theme(plot.title=element_text(size=30) ,axis.title=element_text(size=25) ,axis.text=element_text(size=20) ,legend.title=element_text(size=20) ,legend.text=element_text(size=20))
GLMの例
Rのfamily
オブジェクトの分布族とリンク関数(デフォルト):
binomial(link = "logit") gaussian(link = "identity") Gamma(link = "inverse") inverse.gaussian(link = "1/mu^2") poisson(link = "log") quasi(link = "identity", variance = "constant") quasibinomial(link = "logit") quasipoisson(link = "log")
上記から4モデルを記載。
モデル | 目的変数 | 分布族 | リンク関数 |
期待値 |
線形回帰 | 連続値 |
正規分布 | 恒等リンク |
|
ロジスティック回帰 | 二値の離散値 |
二項分布 | ロジットリンク |
|
ポアソン回帰 | 非負の離散値 |
ポアソン分布 | 対数リンク |
|
ガンマ回帰 | 非負の連続値 |
ガンマ分布 | 逆数リンク |
glm(y~x, data=ads, family=gaussian(link="identity")) #-- 線形回帰 glm(y~x, data=ads, family=binomial(link="logit")) #-- ロジスティック回帰 glm(y~x, data=ads, family=poisson(link="log")) #-- ポアソン回帰 glm(y~x, data=ads, family=Gamma(link="inverse")) #-- ガンマ回帰 geeglm(y~x, data=ads,family=poisson(link="log"), id=id) #-- 修正ポアソン回帰
#-- ロジスティック回帰の例 proc genmod data=ads; class effects(ref="control") ; model response(event="1") = effects / dist=binomial link=logit lrci type3 ; ods output ParameterEstimates=_Est; run;
ちなみに
ロジスティック回帰の回帰係数を指数変換⇒オッズ比
ポアソン回帰の回帰係数を指数関数⇒リスク比
(コックス回帰の回帰係数を指数変換⇒ハザード比)
> library(tidyverse) > library(geepack) > n <- 100 > ads <- data.frame( + id=c(seq(1,n*2)) + ,x=c(rep(0,n),rep(1,n)) + ,y=c(rbinom(n,1,0.7),rbinom(n,1,0.3)) ) > (mtx1 <- matrix(xtabs(~x+y,data=ads),2)) [,1] [,2] [1,] 22 78 [2,] 67 33 > glm1 <- glm(y~x, data=ads, family=binomial(link="logit")) #-- ロジスティック回帰 > glm2 <- glm(y~x, data=ads, family=poisson(link="log")) #-- ポアソン回帰 > exp(coef(glm1)) #-- オッズ比 (Intercept) x 3.5454545 0.1389208 > exp(coef(glm2)) #-- リスク比 (Intercept) x 0.7800000 0.4230769 > > glm3 <- geeglm(y~x, data=ads,family=poisson(link="log"), id=id) #-- 修正ポアソン回帰 > exp(coef(glm3)) #-- リスク比 (Intercept) x 0.7800000 0.4230769
参考資料
データ解析のための統計モデリング入門(岩波書店), 久保拓弥
多変量解析実務講座テキスト, 実務教育研究所
https://eprints.lib.hokudai.ac.jp/dspace/bitstream/2115/49477/4/kubostat2008c.pdf
生態学データ解析 - FrontPage
http://ibis.t.u-tokyo.ac.jp/suzuki/lecture/2014/dataanalysis/L4.pdf
http://web.sfc.keio.ac.jp/~maunz/DSB19/DSB19_06.pdf
http://www.sigmath.es.osaka-u.ac.jp/~kano/research/application/gasshuku02/sas1/MIXED.pdf
https://www.sas.com/content/dam/SAS/ja_jp/doc/event/sas-user-groups/usergroups13-a-05-02.pdf
一般化線形モデルと一般化線形混合モデル - Qiita
一般化線形モデル (GLM):一般線形モデルの拡張モデル | 研究型データサイエンティストのブログ