決断のための分布合算 京大(医)統計遺伝学分野 山田 亮
わからなくても決断する あなたは冒険旅行中 分かれ道があって、電光掲示板がある 11例目のあなたは、どちらの道を選ぶか 『右の道を選んだ者、7名あり。4名は幸福に、3名は不幸になった』 『左の道を選んだ者、3名あり。2名は幸福に、1名は不幸になった』 11例目のあなたは、どちらの道を選ぶか 我を過ぐれば憂ひの都あり、 我を過ぐれば永遠の苦患あり、 我を過ぐれば滅亡の民あり
○ × 和 X 4 3 7 Y 2 1 ○率をベータ分布で推定 (4+1)/(7+2) 4/7 道X 道Y 期待値 最頻値 2/3 ○率 p <- seq(from=0,to=1,length=100) X <- c(4,3) Y <- c(2,1) dx <- dbeta(p,X[1]+1,X[2]+1) dy <- dbeta(p,Y[1]+1,Y[2]+1) Mean.x <- (X[1]+1)/(sum(X)+2) Mean.y <- (Y[1]+1)/(sum(Y)+2) Mode.x <- X[1]/sum(X) Mode.y <- Y[1]/sum(Y) Mean.x Mean.y Mode.x Mode.y matplot(p,cbind(dx,dy),type="l") abline(v=Mean.x,col=1) abline(v=Mean.y,col=2) abline(v=Mode.x,col=1,lty=2) abline(v=Mode.y,col=2,lty=2) 最頻値 2/3 ○率 (2+1)/(3+2)
期待値で選択することは「悪くない」 方針 「期待値」が大きい方を選ぶ 「期待値」が同じなら、どちらかを選ぶ
X Y X期待値 Y期待値 ○ × 0.5 1 0.333333 2 0.4 3 4 0.285714 0.25 5 0.2 6 0.222222 7 0.272727 8 0.307692 9 0.375 10 0.352941 11
Y × Y ○ X × X ○
本当にYばかりが 選ばれるようになるか
Sele
確率的な決断 Multi-armed bandit 問題 複数のスロットマシンがあって、それぞれのマシンには「当たり」の確率が決まっているが、その確率が不明であるという マシンを1つずつ選んでは、勝負をして、各マシンの当否結果を記録しながら、勝負を繰り返すことにする どんなルールで選ぶと、儲けが最大になりやすいか、という問題
確率的な決断 Multi-armed bandit 問題 その状況でのThomson samplingとかの方が良い結果が得られることが知られている。 ごく大雑把に言うと、 データを見ても、「100%、どのアームがよいとは言い切れない」から、データから見て、「得策らしくないアームも、ある程度(確率的に)は選ぼう」 いったん、悪い方を選び勝ちになっても、判断を修正するポテンシャルが「確率的な決断」によってもたらされる
わからなくても決断する 分かれ道があって、電光掲示板がある 11例目のあなたは、どうするか 『確率的な決断が大事である』 『従って、この分かれ道に奇数回目に来た者には、電光掲示板は点灯せず、偶数回目に来た者には、点灯することとする』 11例目のあなたは、どうするか 1.適当に選ぶ 2.出直す
何を比較する? 「どちらの道を選ぶと○になる確率が高いのか」 「どちらの道が『○率が高い』のか」 これは○の期待値 「どちらの道の『○の期待値』が高いのか」 「どちらの道が『○率が高い』のか」
○ × 和 X 4 3 7 Y 2 1 期待値 (4+1)/(7+2) 期待値(2+1)/(3+2)
「どちらの道の『○の期待値』が高いのか」 × 和 X 4 3 7 Y 2 1 期待値 (4+1)/(7+2) 期待値(2+1)/(3+2) 「どちらの道の『○の期待値』が高いのか」
○ × 和 X 4 3 7 Y 2 1 (4+1)/(7+2) (2+1)/(3+2) 「どちらの道が『○率が高い』のか」
計算できる(式の導出は省略)
○率が高い確率応じて X,Yを「確率的に」選択してみよう
『右の道を選んだ者、7名あり。4名は幸福に、3名は不幸になった』 その内訳は 男 5名。2名は幸福に、3名は不幸に 女 2名。2名とも幸福に 『左の道を選んだ者、3名あり。2名は幸福に、1名は不幸になった』 男 3名。2名は幸福に、1名は不幸に 女 は左の道を選んでおらぬ
男女合算 と 女のみ 女のみ 男女合算 女のみ 男女合算 p <- seq(from=0,to=1,length=100) 男女合算 と 女のみ 女のみ 男女合算 女のみ p <- seq(from=0,to=1,length=100) #y <- cbind(dbeta(p,4+1,3+1),dbeta(p,2+1,1+1),dbeta(p,2+1,3+1),dbeta(p,2+1,0+1),dbeta(p,2+1,1+1),dbeta(p,0+1,0+1)) y <- cbind(dbeta(p,4+1,3+1),dbeta(p,2+1,1+1),dbeta(p,2+1,0+1),dbeta(p,0+1,0+1)) y1 <- cbind(dbeta(p,4+1,3+1),dbeta(p,2+1,0+1)) y2 <- cbind(dbeta(p,2+1,1+1),dbeta(p,0+1,0+1)) par(mfcol=c(1,2)) matplot(p,y1,type="l",ylab="X",ylim=c(0,3)) matplot(p,y2,type="l",ylab="Y",ylim=c(0,3)) par(mfcol=c(1,1)) 男女合算
「男女に違いなし」なら 「男女に違いあり」なら 男女合算の情報を使った方が正確 男女合算の情報に基づいて集計した方が、早く、収束する 男女別々の情報を使った方が正確
0.58 0.25 0.42 0.75 女のみ 男女合算 p <- seq(from=0,to=1,length=100) #y <- cbind(dbeta(p,4+1,3+1),dbeta(p,2+1,1+1),dbeta(p,2+1,3+1),dbeta(p,2+1,0+1),dbeta(p,2+1,1+1),dbeta(p,0+1,0+1)) y <- cbind(dbeta(p,4+1,3+1),dbeta(p,2+1,1+1),dbeta(p,2+1,0+1),dbeta(p,0+1,0+1)) y1 <- cbind(dbeta(p,4+1,3+1),dbeta(p,2+1,0+1)) y2 <- cbind(dbeta(p,2+1,1+1),dbeta(p,0+1,0+1)) yall <- cbind(dbeta(p,4+1,3+1),dbeta(p,2+1,1+1)) yfemale <- cbind(dbeta(p,2+1,0+1),dbeta(p,0+1,0+1)) par(mfcol=c(1,2)) matplot(p,y1,type="l",ylab="X",ylim=c(0,3)) matplot(p,y2,type="l",ylab="Y",ylim=c(0,3)) par(mfcol=c(1,1)) dx <- dbeta(p,4+1,3+1) dy <- dbeta(p,2+1,1+1) dxy <- outer(dx,dy,"*") dx.female <- dbeta(p,2+1,0+1) dy.female <- dbeta(p,0+1,0+1) dxy.female <- outer(dx.female,dy.female,"*") par(mfcol=c(2,2)) matplot(p,yall,type="l",ylab="X",ylim=c(0,3)) image(dxy,xlim=c(0,1),ylim=c(0,1),xlab="X",ylab="Y") contour(dxy,add=TRUE) abline(0,1) matplot(p,yfemale,type="l",ylab="Y",ylim=c(0,3)) image(dxy.female,xlim=c(0,1),ylim=c(0,1),xlab="X",ylab="Y") contour(dxy.female,add=TRUE) Decision_beta.2(c(4,3,2,1)+1) Decision_beta.2(c(2,0,0,0)+1) > Decision_beta.2(c(4,3,2,1)+1) [1] 0.4242424 > Decision_beta.2(c(2,0,0,0)+1) [1] 0.75 0.42 0.75
男女合算 女のみ 道の選択確率が異なる 『道 X vs. 道 Y、どちらにしよう?』 『男女合算 vs. 女のみ、どちらにしよう?』 男女合算 女のみ 道の選択確率が異なる 『道 X vs. 道 Y、どちらにしよう?』 確率的に選んだ 『男女合算 vs. 女のみ、どちらにしよう?』 確率的に選んでみる
(p_m,p_f) 『男女に違いがあってもよい』という立場 (p_m=p, p_f=p) 『男女に違いがない』という場合 女 X 男
X ○ × 和 男 2 3 5 女 女 X 男
『男女に差あり』 の同時分布 正方形部分の積分は こちらも1 『男女に差あり』 の同時分布 正方形部分の積分は1 X ○ × 和 男 女 X 女 X ○ × 和 男 2 3 5 女 『男女に差あり』 の同時分布 正方形部分の積分は こちらも1 『男女に差あり』 の同時分布 正方形部分の積分は1
X ○ × 和 男 女 X ○ × 和 男 2 3 5 女 『男女に差なし』 部分
X ○ × 和 男 女 X ○ × 和 男 2 3 5 女 『男女に差なし』 部分
1 1 1
0.5 1/(1+r) 事前確率 事後確率 0.5 r/(1+r) =r
仮説の比率が決まれば 2つのベータ分布の 重みづけ混合分布 1/(1+r) Beta(a+c+1,b+d+1) + r/(1+r) Beta(c+1,d+1)
女 男 800 200 1→1000人 8割男、2割女 男 X:0.2, Y:0.4 女 X:0.4, Y:0.2 0.2 vs. 0.25 10000人 女 model.1 <- my.make.model(1,1) model.2 <- my.make.model(1,2) model.3 <- my.make.model(1,0) n.pt <- 1000 X <- matrix(sample(1:2,n.pt,replace=TRUE,prob=c(0.8,0.2)),ncol=1) Prob.Vec <- list() tmp.Pr <- (X-1)*0.2+0.2 Prob.Vec[[1]] <- cbind(tmp.Pr,1-tmp.Pr) tmp.Pr <- (X-1)*(-0.2)+0.4 Prob.Vec[[2]] <-cbind(tmp.Pr,1-tmp.Pr) better.1 <- which(Prob.Vec[[1]][,1]>Prob.Vec[[2]][,1]) better.2 <- which(Prob.Vec[[1]][,1]<Prob.Vec[[2]][,1]) n.iter <- 10 out.mat.1 <- matrix(0,n.iter,length(better.1)) out.mat.2 <- matrix(0,n.iter,length(better.2)) for(i in 1:n.iter){ model.2.out <- my.simulate.model.2(model.2,X,Prob.Vec,n.iter=n.pt) better.1.selection <- (-1)*(model.2.out$selection[better.1]-2) better.2.selection <- model.2.out$selection[better.2]-1 out.mat.1[i,] <- cumsum(better.1.selection)/(1:length(better.1)) out.mat.2[i,] <- cumsum(better.2.selection)/(1:length(better.2)) } matplot(t(out.mat.1),type="l") matplot(t(out.mat.2),type="l") 男 800 200
『右の道を選んだ者、7名あり。4名は幸福に、3名は不幸になった』 幸福になった者の体重は67,53,86,71kg、不幸になった者の体重は48,52,51kgであった 『左の道を選んだ者、3名あり。2名は幸福に、1名は不幸になった』 幸福になった者の体重は41,53,49kg、不幸になった者の体重は88,68,64kgであった
帰結ごとにカーネル推定 説明変数(体重)における「みなし観測度数」を推定 「みなし観測度数」に基づく「みなしベータ分布」 「みなしベータ分布」をX,Y道間で比較
全250人 Xが良いはずの人 Yが良いはずの人
いくつかのこと 量的変数・多次元 多名義尺度における「仮説数」のハンドリング 帰結のカーネル分布推定が効かなくなる k-NN (k-nearest Neighbors)で代用できる?? 多名義尺度における「仮説数」のハンドリング 2^k : k=10くらいまでは力技でも??