3.4 ロジスティック回帰モデル
いま,サンプルサイズnのデータが与えられているとする. y=(y1,…,yn)⊤を目的変数,その他の変数をまとめた変数ベクトルxi=(1,x(1)i,x(2)i,…,x(m)i)⊤,i=1,2,…,nとする.つまり,目的変数はm+1個と考える.
y=[y1y2⋮yn]∈{0,1}n,X=[1x(1)1x(2)1⋯x(m)11x(1)2x(2)2⋯x(m)2⋮⋮⋮⋱⋮1x(1)nx(2)n⋯x(m)n]∈Rn×(m+1)
目的変数yiは0,1どちらかの値のみを取る.すなわちyi∈{0,1}である. この時ロジスティック回帰モデルでは次のようなモデルを仮定する.すなわちyi=1となるような確率π(xi)=πiとして
π(xi)=exp(x⊤iβ)1+exp(x⊤iβ)
と定義する.ここで,β=(β0,β1,…,βm)⊤であり,
x⊤β=β0+β1xi+⋯+βmxm
である. 常に分母>分子が成り立つことと,指数関数の値は非負であることから,0≤π(xi)≤1が成り立つ.この式の右辺はロジスティック関数とも呼ばれ,図 3.1のようになる.
# プロットするためのベクトルを生成
f <- function(x){
exp(0.5 + 1.0 * x) / {1 + exp(0.5 + 1.0 * x)}
}
x <- seq(-4, 4, 0.01)
dd <- data.frame(
x = x,
y = f(x)
)
fig <- ggplot(dd) +
geom_line(aes(x=x, y=y)) +
ggtitle("Logistic function") +
ylab("p(x)")
plot(fig)
Figure 3.1: ロジスティック関数の形状
図の通り,0 1の範囲でS字カーブを描くような関数形をしている.特にこの関数はシグモイド関数とも呼ばれ
exp(x)1+exp(x)=11+exp(−x)
と変形できることから後者の表現で定義されている場合もある.念のためこれが同じものであることを確かめておこう. exp(−x)=[exp(x)]−1であることに注意すると
exp(x)1+exp(x)={[exp(x)1+exp(x)]−1}−1={exp(−x)[1+exp(x)]−1}−1=1exp(−x)(1+exp(x))=11+exp(−x) とできる.
また,π(xi)に対して以下のように定義される変換をロジット変換と呼ぶ.
g(x⊤β)=log[π(x⊤β)1−π(x⊤β)]=x⊤β
ロジット変換について,g(x⊤)=x⊤βとなることは課題とする.
このモデルにおいては,それぞれのサンプルについてyi=1となる確率を観測することができないため,残差を求められず,最小二乗法を適用することができない. そのため,対数尤度と呼ばれる量を最大化する最尤法を用いる.
最尤法の手続きについて簡単に紹介する.回帰分析と同様に何らかの意味で最も良いパラメーターの推定値ˆβを求めたい.このとき最尤法では,尤度関数という概念を用いて推定値を決定する.
尤度関数とは,確率関数P(x;θ)または確率密度関数f(x;θ)をxの関数ではなく,パラメーターθの関数と見たものである. 関数の形自体は変わらないが,変数の見方を変える.またxに関しては与えられたデータの値で固定しておく. このようにしてθについての関数として最大化を検討する.
まず観測値が互いに独立であるという仮定の下でロジスティック回帰モデルの尤度関数l(β)は
l(β)=n∏i=1π(x⊤iβ)yi[1−π(x⊤iβ)]1−yi
と表される.この関数の対数とったものL(β)を対数尤度関数とよぶ.するとL(β)は
L(β)=log(l(β))=n∑i=1{yilog[π(x⊤iβ)]+(1−yi)log[1−π(x⊤iβ)]}
となる.この関数を最大化するようなβを求めるために,βで微分することで尤度方程式
n∑i=1xi[yi−π(x⊤iβ)]=0
を得る.この尤度方程式は非線形のため解析に解くことが難しいことが知られており,プログラムを用いて数値的に近似解を求めるのが一般的である.RやPythonでは多くの場合パラメーターを推定する関数などが開発者や第三者によって提供されているので分析者が個別に推定のためのプログラムを一から開発する必要はない.
大まかにはこのような考え方であるということを把握しておいてほしい.