サイコロを3つなげ、その和が何であるかをかけるギャンブルがあるそうです。
和が、4~10ならsmall, 11~17ならlargeとおおよそ2択のギャンブルだそうです。(3をx、18をyと呼ぶことにします)
Kくんが体験したのは「過去50回の結果がlargeが70%と表示されていたので、次はsmallじゃないかと思いsmallに賭けて、実際にsmallが出た」ということでした。この出来事がどの程度よく起きるのかシミュレーションを用いて検証しまししょう。
# 非効率だけど、直感的に分かりやすいと思われる例 # 1試行の関数 die <- function() { die1<-sample(1:6,1) die2<-sample(1:6,1) die3<-sample(1:6,1) die.sum = die1 + die2 + die3 if (die.sum==3) { result="X" } else { if (die.sum==18) { result="Y" } else { if (die.sum<11){ result="small" } else { result="large" } } } return(result) } # 51試行の結果を表す関数 SL51=function( ) { n.rep=51 res=rep("N",51) for (i_rep in 1:n.rep) { res[i_rep]=die() } p.large=sum(res[1:50]=="large")/50 return(list(p.large=p.large,last.result=res[51])) } # 51試行をN.REP回繰り返す関数 ck.kurimoto <- function(n.rep) { p.hist = rep(0,n.rep) lr.hist = rep("N",n.rep) for (i_rep in 1:n.rep) { result=SL51() p.hist[i_rep] = result$p.large lr.hist[i_rep] = result$last.result } return(list(p.hist=p.hist,lr.hist=lr.hist)) } # 50試行の内、Lが出た割合が70%以上のものを選択 index70=which(m.result$p.hist>=0.7) sum(m.result$lr.hist[index70]=="small")/length(index70) # 上の3つの関数をまとめたもの n.rep=1e6 die.mat = matrix(sample(c("X","Y","S","L"), n.rep*51,prob=c(1/16,1/16,7/16,7/16),replace=T),nrow=n.rep) p.large=rowSums(die.mat[,1:50]=="L")/50 index70=which(p.large>=0.7) ck51L70=die.mat[index70,51] table(ck51L70)/length(index70)