(Acest articol a fost publicat pentru prima dată pe Jason Bryerși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Aflu că atunci când predă statistici (și probabilitate), este adesea util să simulezi mai întâi datele pentru a înțelege problema. Problema Monty Hall a apărut recent într -o clasă, așa că am implementat o funcție pentru a juca jocul.
Problema Monty Hall rezultă dintr -un spectacol de joc, Să facem o afaceregăzduit de Monty Hall. În acest joc, jucătorul alege una dintre cele trei uși. În spatele uneia se află o mașină, celelalte două sunt capre. După ce a ales o ușă, jucătorului i se arată conținutul uneia dintre celelalte două uși, care, deoarece gazda știe conținutul, este o capră. Întrebarea pentru jucător: îți schimbi alegerea?
Pentru mai multe informații, asigurați -vă că vedeți articolul Wikipedia.
Mai jos implementăm o funcție care va simula un singur joc al acestui joc. Puteți juca interactiv sau dacă specificați pick şi switch Parametri Acest lucru poate fi bucurat pentru a simula rezultatele.
monty_hall <- function(pick, switch) {
interactive <- FALSE
if(missing(pick)) {
interactive <- TRUE
cat('Pick your door:')
pick <- LETTERS(menu(c('A', 'B', 'C')))
} else {
if(!pick %in% LETTERS(1:3)) {
stop('pick must be either A, B, or C')
}
}
doors <- c('win', 'lose', 'lose')
doors <- sample(doors) # Shuffle the doors
names(doors) <- LETTERS(1:3)
if(doors(pick) == 'win') {
show <- sample(names(doors(!names(doors) %in% pick)), size = 1)
} else {
show <- doors(!names(doors) %in% pick) == 'lose'
show <- names(which(show == TRUE))
}
if(missing(switch)) {
interactive <- TRUE
cat(paste0('Showing door ', show, '. Do you want to switch your choice?'))
switch <- menu(c('yes', 'no')) == 1
}
if(switch) {
pick <- names(doors)(!names(doors) %in% c(show, pick))
}
win <- unname(doors(pick) == 'win')
if(interactive) {
if(win) {
cat('You win!')
} else {
cat('Sorry, you lost.')
}
invisible(win)
} else {
return(win)
}
}
Putem juca un singur joc:
Pick your door: 1: A 2: B 3: C Selection: 2 Showing door A. Do you want to switch your choice? 1: yes 2: no Selection: 1 You win!
Să simulăm acum 1.000 de jocuri. Vom folosi doi vectori, mh_switch şi mh_no_switchpentru a stoca rezultatele după comutarea ușilor sau nu, respectiv. Pentru fiecare iterație, alegerea inițială a ușii este selectată la întâmplare.
n_games <- 1000
mh_switch <- logical(n_games)
mh_no_switch <- logical(n_games)
for(i in 1:n_games) {
pick <- sample(LETTERS(1:3), size = 1)
mh_switch(i) <- monty_hall(pick = pick, switch = TRUE)
mh_no_switch(i) <- monty_hall(pick = pick, switch = FALSE)
}
Probabilitatea de a câștiga dacă schimbăm ușa este:
Probabilitatea de a câștiga dacă nu schimbăm ușa este:
Trebuie menționat că probabilitatea teoretică de a câștiga dacă comutați este de 2/3 și este 1/3 dacă nu comutați.
