More Related Content Similar to ベイズ統計によるデータ解析 (20) ベイズ統計によるデータ解析7. 例えば、こんなデータが取れたとして
5.097619 4.739361 5.043244 4.900209 2.144241 5.696769 4.599765 5.660213 4.725296 5.413399 6.060124 4.651123 6.825011 5.470168 5.183248
6.638745 4.585580 4.667343 5.976032 4.210353 5.185514 6.493493 7.273484 4.066497 3.902228 5.452190 5.158625 5.670559 4.299030 3.233771
4.124408 4.816949 3.177765 5.413869 5.487815 5.700734 3.392919 6.173498 5.116845 5.711175 5.663199 3.236745 5.948633 5.813683 4.379466
5.121760 5.407056 6.411262 5.912322 7.168033 5.311681 4.584248 5.287710 5.319160 5.718889 3.863626 5.338596 7.049403 4.188569 6.656043
6.362131 5.624633 4.162418 6.983732 5.500695 5.760462 5.422008 4.340230 3.922458 5.251651 4.629502 4.333435 4.348886 5.319397 6.809805
4.765379 6.678206 3.876237 6.169109 5.620210 6.842464 4.848263 7.919140 1.766848 6.357274 6.476970 4.761353 5.808619 4.153477 3.824963
3.946617 4.931306 8.043766 4.491263 4.034097 6.112363 4.393849 5.677416 4.745125 5.404468 3.776096 3.812235 5.986581 4.754237 4.633297
4.130216 4.679160 5.235021 5.704180 5.162655 5.032664 4.695279 4.315680 5.029518 5.264364 5.258068 5.384935 4.993829 3.447141 5.353625
4.609873 6.471006 4.966741 4.801584 2.921762 3.885551 5.629536 5.186492 5.594274 5.268044 5.405003 5.666580 5.319052 5.128434 5.319156
4.152650 6.704329 2.267780 4.461929 5.485227 5.418058 5.895172 4.675607 5.059135 5.436931 5.975803 4.695386 3.988178 5.985443 4.420043
ある地点で、同時に150台の装置を動かして
なにかの濃度測定を一斉に行ったと仮定
17. 平均や標準偏差は分布のパラメータ
f (X) = aX2 + bX + c
このような式だと、aやbの値でf (X)のグラフの形が決まる。
同じようにμやσの値でnormal(x)のグラフの形が決まる。
normal 𝑥 =
1
2𝜋𝜎2
𝑒
− 𝑥−𝜇 2
2𝜎2
このようなグラフの形を決める変数が、分布のパラメータ。
30. 計算結果
>t.test(basedata)
One Sample t-test
data: basedata
t = 60.384, df = 149, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
4.954923 5.290185
sample estimates:
mean of x
5.122554
34. ベイズの計算は、何をしているのか(概念)
μ= 5, σ=1 μ= 5.5, σ=0.8 μ= 4.3, σ=1.2
μとσについて、様々な値を用いてグラフを描き、どのグラフがヒストグラム
と一致しているかを調べる。
このパラメータの選択が大変すぎて、高速な計算機が出現するまでベイズ統計
が利用されなかった。
*注:この説明は、敢えて話の流れを重視しております。実は、正確ではありません。
43. 前述の平均値の幅を求めるプログラム
プログラム1
data <- list(Y = basedata,
N = length(basedata))
inits <- list(list(mu = 4.5, sigma = 0.8),
list(mu = 4.8, sigma = 1.1),
list(mu = 5.2, sigma = 1.3),
list(mu = 5.5, sigma = 0.7))
それらのパラメータの初期値は、こんな感じで設定だよ。
44. 前述の平均値の幅を求めるプログラム
プログラム2(続き)
model {
for (n in 1:N){
Y[n] ~ normal(mu, sigma);
}
mu ~ normal(0,100);
sigma ~ normal(0,100);
}
今までのデータと
パラメータを使って
想像しているモデルを
指定するよ。
データYの数字は、平均mu、
標準偏差sigmaの正規分布か
ら抽出されたとみなすよ。
muとかsigmaは
現時点では、どういう数字を
とるか、よく分からないよ。
46. 計算結果
• 3秒ほどで、結果が出ます。
Inference for Stan model: stanmodel1.
4 chains, each with iter=10000; warmup=400; thin=5;
post-warmup draws per chain=1920, total post-warmup draws=7680.
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
mu 5.12 0.00 0.09 4.95 5.06 5.12 5.18 5.29 7680 1
sigma 1.05 0.00 0.06 0.93 1.00 1.04 1.09 1.18 7382 1
lp__ -81.27 0.01 1.04 -84.17 -81.64 -80.95 -80.53 -80.26 7608 1
Samples were drawn using NUTS(diag_e) at Wed Dec 06 15:53:46 2017.
For each parameter, n_eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor on split chains
(at convergence, Rhat=1).
53. 相関係数とは(復習的に。あとで使います)
• データ系列X = {x1, x2, x3,・・・・・xn}
Y = {y1, y2, y3,・・・・・yn}があったときに
r =
𝑠 𝑥𝑦
𝜎𝑥 𝜎 𝑦
𝑠 𝑥𝑦 =
1
𝑛 𝑖=1
𝑛
𝑥𝑖 − 𝜇 𝑥 𝑦𝑖 − 𝜇 𝑦 ← 共分散、μxはxの平均値
𝜎𝑥 =
1
𝑛 𝑖=1
𝑛
𝑥𝑖 − 𝑥 2 ← 標準偏差
相関係数求めるためには、共分散、それぞれの標準偏差が必要となる。
55. ベイズ統計のおさらい
𝑃 𝐵 𝐴 ∝ 𝑃 𝐴 𝐵 𝑃 𝐵
条件Aが与えられた場合に条件Bが成立する確率は、条件Bが与えられた場
合に条件Aが成立する確率と条件Bが起きる確率の積で表される。
あるAという条件が決まっており、結果としてBという事柄が発生した。で
も、逆に考えると、Bという事柄が起きるというのは、条件Aが何だったら、
最も起こりやすいのか?
58. 観測値の尤度が
最大になるようにすればよい
• 𝑖 𝑝 𝑃𝑀𝑖, 𝑆𝑂4𝑖 𝜇 𝑃𝑀, 𝜇 𝑆𝑂4, 𝑠 𝑃𝑀
2
, 𝑠𝑆𝑂4
2
, 𝑠 𝑃𝑀,𝑆𝑂4
が最大になるような𝜇 𝑃𝑀, 𝜇 𝑆𝑂4, 𝑠 𝑃𝑀
2
, 𝑠𝑆𝑂4
2
, 𝑠 𝑃𝑀,𝑆𝑂4を探し出せばよ
い。
ちょっとまって、上の話は、データが全部ある時の話。
欠測値の話はどうなった?
欠測データについては、SO4(と、それに関連するパラメータ)が
無いので、上の式から、それらを抜いたものが尤度となる。
• 𝑖 𝑝 𝑃𝑀𝑖 𝜇 𝑃𝑀, 𝑠 𝑃𝑀
2
59. 実際のStanプログラムは以下の通り。
data{
int<lower=0> N;
vector[2] d[N];
int<lower=0> Nmiss;
real d2[Nmiss];
}
parameters {
vector[2] mu;
real<lower=0> var_PM;
real<lower=0>
var_SO4;
real cov;
}
transformed parameters{
matrix[2,2] sigma;
sigma[1,1] <- var_PM;
sigma[2,1] <- cov;
sigma[1,2] <- cov;
sigma[2,2] <- var_SO4;
}
model{
for(i in 1:N)
d[i] ~ multi_normal(mu, sigma);
for(j in 1:Nmiss)
d2[j] ~ normal(mu[1], sqrt(sigma[1,1]));
}
generated quantities{
real cor;
cor <- cov / sqrt(var_PM *
var_SO4);
}
意外と短い?
(といっても、自分で書いたわけじゃないけど)
61. 推定結果(確認)
• まずは手元にあるデータのみを使って、プログラムの正確性を
確認。
mean se_mean sd 2.50% 25% 50% 75% 97.50%
mu[1] 10.02 0.01 0.23 9.59 9.88 10.03 10.18 10.46
mu[2] 2.12 0 0.08 1.96 2.07 2.12 2.17 2.28
var_PM 8.71 0.04 0.98 7.05 8.01 8.61 9.31 10.75
var_SO4 1 0 0.11 0.8 0.92 0.99 1.07 1.24
cov 1.82 0.01 0.28 1.32 1.62 1.8 2 2.44
sigma[1,1] 8.71 0.04 0.98 7.05 8.01 8.61 9.31 10.75
sigma[1,2] 1.82 0.01 0.28 1.32 1.62 1.8 2 2.44
sigma[2,1] 1.82 0.01 0.28 1.32 1.62 1.8 2 2.44
sigma[2,2] 1 0 0.11 0.8 0.92 0.99 1.07 1.24
cor 0.62 0 0.05 0.51 0.59 0.62 0.65 0.71
lp__ -300.66 0.06 1.6 -304.55 -301.42 -300.34 -299.46 -298.58
普通に計算すると0.617・・・プログラムは正常に働いている
62. 推定結果(本番)
• 欠測値データを補完して相関係数を推定
mean se_mean sd 2.50% 25% 50% 75% 97.50%
mu[1] 16.09 0.01 0.42 15.25 15.8 16.09 16.37 16.92
mu[2] 3.39 0.01 0.16 3.07 3.28 3.39 3.5 3.71
var_PM 56.33 0.16 4.56 47.74 53.25 55.88 59.33 65.11
var_SO4 3.1 0.02 0.53 2.17 2.73 3.06 3.43 4.19
cov 11.77 0.07 1.5 8.95 10.79 11.7 12.69 14.85
sigma[1,1] 56.33 0.16 4.56 47.74 53.25 55.88 59.33 65.11
sigma[1,2] 11.77 0.07 1.5 8.95 10.79 11.7 12.69 14.85
sigma[2,1] 11.77 0.07 1.5 8.95 10.79 11.7 12.69 14.85
sigma[2,2] 3.1 0.02 0.53 2.17 2.73 3.06 3.43 4.19
cor 0.89 0 0.02 0.84 0.88 0.9 0.91 0.93
lp__ -881.55 0.07 1.73 -886.03 -882.42 -881.18 -880.28 -879.4
Hさんは、「0.89が全体の相関係数ですね」と
爽やかに答えました。
66. ベイズ推定は何をしているのか?
μPM σPM μSO
4
σSO
4
sPM,SO
4
1 1 1 1 1
μPM σPM μSO
4
σSO
4
sPM,SO
4
1.1 1 1 1 1
どっちの
一致度が
高いか? μPM σPM μSO
4
σSO
4
sPM,SO
4
1.1 1 1 1 1
μPM σPM μSO
4
σSO
4
sPM,SO
4
1.2 1 1 1 1
どっちの
一致度が
高いか?
μPM σPM μSO
4
σSO
4
sPM,SO
4
1.3 1 1 1 1
μPM σPM μSO
4
σSO
4
sPM,SO
4
1.2 1 1 1 1
どっちの
一致度が
高いか?
μPM σPM μSO
4
σSO
4
sPM,SO
4
0.9 1 1 1 1
μPM σPM μSO
4
σSO
4
sPM,SO
4
1.2 1 1 1 1
どっちの
一致度が
高いか?
こういう勝ち抜き戦を繰り返し行います。もちろん、すべてのパラメータ
に対して。今回の場合は1000回程度、1分くらいで計算が終わりますが、
複雑なモデルでは50000回くらいで20時間とかかかります、はい。