1、什么是三门问题
三门问题(Monty Hall problem) 是一个关于概率的谜题。起源于一个电视节目 Let's Make a Deal。这个问题最开始是由Steve Selvin在1975年的一封信里提出并解决。
假设在一个游戏节目中,你可以选择三扇门:一扇门后面是一辆车,另两扇门后面是山羊。在你选择一扇门后,知道门后内容的主持人打开另一扇门,门后是山羊。然后他对你说:“你想更换选择吗吗?”改变选择对你有利吗?
------节选自维基百科
2、用R语言求解
关于三门问题的分析讲解网络上多如牛毛,也有直接应用Python模拟过程求近似解的,但应用R语言重采样的还很少,正好尝试一下。
需要用到的函数
sample():用于随机实验取样
replicate():重复实验
mean():求概率
as.character():转换到字符串格式
2.1 计算坚持选择的概率
B <- 50000 #实验重复次数,越大越精确
stick <- replicate(B, {
doors <- as.character(1:3) #问题中的三门
prize <- sample(c("car","goat","goat"))
car_door <- doors[prize == "car"] #门后是车
my_pick <- sample(doors, 1) #选择三门中的一扇
show <- sample(doors[!doors %in% c(my_pick, car_door)],1) #主持人展示
stick <- my_pick #坚持选择
stick == car_door # 坚持选择是车
})
mean(stick) #求平均概率
[1] 0.33772 #结果约为三分之一
2.2 计算改变选择的概率
和上面的计算是一套逻辑,只是更改后的选择是另外两门中的其中之一。
B <- 50000
switch <- replicate(B, {
doors <- as.character(1:3)
prize <- sample(c("car","goat","goat"))
car_door <- doors[prize == "car"]
my_pick <- sample(doors, 1)
show <- sample(doors[!doors %in% c(my_pick, car_door)], 1)
stick <- my_pick
switch <- doors[!doors%in%c(my_pick, show)]
switch == car_door
})
mean(switch)
[1] 0.66546
3、结论
通过代码能够直观发现改变选择后,拿到车的概率是不改变的一半。
事实上这是一个很严谨的概率问题,各类概率论教材基本都看得到有很严谨的解释。如果大家有兴趣可以翻翻知乎下关于这个问题的解答哦~
蒙提霍尔问题(又称三门问题、山羊汽车问题)的正解是什么?。
贴一个我觉得最最简单的回答:
第一次选只能选一个门,有三分之一的胜算,如果允许一次选两个门,就有三分之二的胜算,主持人搞一搞,你换一换,等同于一开始就让你选了两个门。
--------知友 沐雨栉风
心得:碰见一个问题,应用工具和现有知识去解决,对其中的反常识之处尽心琢磨,研究背后严谨的原理,最终用简洁的语言表达出来——这大概就是我一直努力的目标了。
网友评论