Simularea problemei lui Monty Hall | R-BLOGGERS

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(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.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.