認知情報解析 カジノ体験

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