【ベイズデータ分析】#2 ベイズ回帰
こんにちは、ぽむぽむです。今回はベイズ回帰について授業で学んだことを記録します。
普通の回帰分析では$${y}$$と$${x}$$が以下のような関係になっていると仮定して、
$$
y = \beta_{0} + \beta_{1}x_{1} + \beta_{2}x_{2}+ \cdots + \beta_{p}x_{p}
$$
実際に観測されたデータ$${y}$$と$${x}$$をインプットすることで、回帰係数$${\beta_{0}, \beta_{1},…,\beta_{p}}$$を推定します。
この時、$${y}$$が数値かつ、カウント数ではない場合は線形回帰を用いるのがベストですし、カウント数の場合はポアソン回帰、二項の場合はロジスティック回帰という具合に分布を使い分けます。
これらをベイズバージョンにするとどうなるでしょうか?簡単に言うと、$${y}$$の分布だけでなく、回帰係数など全てのパラメータの事前分布を指定して、ベイズ的に推定する必要があります。 この note では、線形、ポアソン、ロジスティックに分けて説明します。
線形回帰
ベイズ線形回帰では以下のような関係を仮定した上で、
$$
y_{i} \sim N(\mu_{i}, \sigma^{2}), \\
\mu_{i} = \beta_{0} + \beta_{1} x_{1} + \cdots + \beta_{p}x_{p}
$$
回帰係数$${\beta_{0}, \beta_{1},…,\beta_{p}}$$と、$${y}$$の分散$${\sigma^{2}}$$ を確率変数と見做すため、それぞれについて事前分布を仮定する必要があります。しかし、このようなパラメータに関する情報を事前に持っていることは稀ですので、ほとんどの場合は以下のような弱情報事前分布を用います。
(例)
$$
\beta_{d} \sim N(0,\sigma_{d}^{2}), \\
\sigma^{2} \sim Cauchy(0, \sigma_0) \\
( \tau \sim Gamma(\alpha, \beta))
$$
※ コーディングする際に、Stan では分散$${\sigma^{2}}$$を指定しますが、Nimble では精度(分散の逆数で、ばらつきの大小を表す)$${\tau}$$ を指定する必要があります。また、ここでは$${\sigma_{d}^{2}}$$は定数としていますが、これをハイパーパラメータとする場合もあります。
Nimble や Stan でのコーディング例は長くなってしまうので、また別の note に記載しようと思います。
ロジスティック回帰
ロジスティック回帰も普段使う仮定を置いた上で、
$$
y_{i} \sim Binomial(\pi, n_{i}), \\
\pi = \cfrac{exp(\beta_{0} + \beta_{1} x_{1} + \cdots + \beta_{p}x_{p})}{1+ exp(\beta_{0} + \beta_{1} x_{1} + \cdots + \beta_{p}x_{p})}
$$
弱情報事前分布の仮定を付け加えます。
(例)
$$
\beta_{d} \sim N(0, 0.01)
$$
ポワソン回帰
ポワソン回帰も同じで、
$$
y_{i} \sim Poisson(\lambda_{i}), \\
\lambda_{i} = exp(\beta_{0} + \beta_{1} x_{1} + \cdots + \beta_{p}x_{p})
$$
に弱情報事前分布の仮定を付け加えるだけです。
(例)
$$
\beta_{d} \sim N(0, 0.01)
$$
ただし、カウントデータの場合、0となっているデータが多く、正確な推定を邪魔してくる場合があります。そのようなデータの場合は、 Zero-inflated Poisson (ZIP) モデルを使う必要があります。
ZIP モデルは、0 が無駄な 0 なのかどうか(固定の0なのか、ポアソン分布から来る0なのか)を判定し、0 ではない値にはポアソン回帰を適用します。
$$
p(y=0) = \pi + (1-\pi)exp(-\lambda) \\
p(y=y_{i}) = (1-\pi) \cfrac{\lambda^{y_{i}}exp(-\lambda)}{y_{i}!}
$$
このように、モデル自体は非常に分かりやすい構造になっているのですが、問題はコーディングです…。次回の note ではコーディング例や結果の分析方法について記録したいと思います。
この記事が気に入ったらサポートをしてみませんか?