※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。
2017年 05月 23日
linkFunction <- function(b1, b2) { function(x, r) { 1 / (1 + exp(-b1 - b2 * x - r)) } } l <- linkFunction(-0.5, 0.3) cat("r\tq\t\tdbinom\t\tdnorm\t\tmixed\n") for (r in seq(-1, 1, by = 0.1)) { q <- l(0.8, r) b <- dbinom(7, 20, q) n <- dnorm(r, mean = 0, sd = 1) mixed <- b * n cat(r, "\t", q, "\t", b, "\t", n, "\t", mixed, "\n") }このコードは二項分布と正規分布を掛けて得られる数値を出力します。 二項分布のパラメータである、事象の発生確率 `q` はリンク関数から得られます。 リンク関数には `x` と `r` という変数があって、`r` の方が正規分布から生成されます。 計算したのは、`dbinom(7, 20, q)` と `dnorm(r, 0, 1)` の積です。 コードを実行すると次の出力が得られます。
r q dbinom dnorm mixed -1 0.2209739 0.07762054 0.2419707 0.0187819 -0.9 0.2386673 0.0987262 0.2660852 0.02626959 -0.8 0.2573095 0.1210895 0.2896916 0.03507862 -0.7 0.2768782 0.1429499 0.3122539 0.04463668 -0.6 0.2973393 0.1621339 0.3332246 0.05402699 -0.5 0.3186463 0.1763681 0.3520653 0.06209308 -0.4 0.3407396 0.1837016 0.3682701 0.06765181 -0.3 0.3635475 0.1829363 0.3813878 0.06976967 -0.2 0.3869858 0.1739386 0.3910427 0.06801741 -0.1 0.4109596 0.1577226 0.3969525 0.06260837 0 0.4353637 0.1362616 0.3989423 0.05436053 0.1 0.4600851 0.1120753 0.3969525 0.04448858 0.2 0.4850045 0.08771599 0.3910427 0.0343007 0.3 0.5099987 0.06530726 0.3813878 0.02490739 0.4 0.5349429 0.04625377 0.3682701 0.01703388 0.5 0.5597136 0.03116972 0.3520653 0.01097378 0.6 0.5841905 0.01999504 0.3332246 0.00666284 0.7 0.608259 0.01221858 0.3122539 0.003815299 0.8 0.6318124 0.007119175 0.2896916 0.002062365 0.9 0.6547535 0.003959494 0.2660852 0.001053563 1 0.6769959 0.00210485 0.2419707 0.000509312`r` に対して `q` は単調に増加しています。 二項分布の部分で計算しているのは、事象が `20` 回中 `7` 回起きる確率なので、`q` が小さい時は小さい値を取ります。 `q` が増加すると、だんだん確率は上がりますが、増加し過ぎると `7` 回より多い回数、事象が発生しやすくなるので、あるところで最大をとって、後は下がります。 正規分布は `0` を中心とした山なりの分布なので、`r` が `0` に近い値なら確率は高く、そこから離れるほど小さくなります。 この二つを掛け合わせた値は、だいたいどっちも大きな値を取るときに大きいですが、どちらの最大とも微妙にずれたところに最大がきているのが分かります。