Rによる簡単な組合せシミュレーション
以下の組合せの確率をシミュレーションで求めてみたいです。
R小学校の6年1組は遠足で京都に行くことになりました。クラスの総数は30人であり、そこからくじ引き(無作為)に5人選んで6つの班を作ります。Aくんが同じクラスのBさんと同じ班になる確率はいくつでしょうか。
コード
simulation <- function(nreps) { team_info <- list() team_info$count_same_team <- 0 for (rep in 1:nreps) { team_info$num_class <- 1:30 team_info$chosen <- 0 team_info <- choose_team(team_info, 5) if (team_info$chosen > 0) next team_info <- choose_team(team_info, 5) if (team_info$chosen > 0) next team_info <- choose_team(team_info, 5) if (team_info$chosen > 0) next team_info <- choose_team(team_info, 5) if (team_info$chosen > 0) next team_info <- choose_team(team_info, 5) if (team_info$chosen > 0) next team_info <- choose_team(team_info, 5) } print(team_info$count_same_team / nreps) } choose_team <- function(han, size){ team <- sample(han$num_class, size) han$chosen <- length(intersect(1:2, team)) if (han$chosen == 2) han$count_same_team <- han$count_same_team + 1 han$num_class <- setdiff(han$num_class, team) return(han) }
> simulation(100) [1] 0.14
【参考文献】
『アート・オブ・Rプログラミング』8.6.3 応用例:組合せシミュレーション(PP.203-204)