サイコロを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)