前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

R数据分析:著名的“三门问题”的R语言模拟

qiguaw 2024-09-02 20:23:34 资源文章 37 ℃ 0 评论

今天又发现一个好玩的问题分享给大家,就是曾经令无数人困惑的三门问题,今天我用R语言给大家模拟一遍,让大家更好的理解这个非常著名博弈问题。

三门问题

三门问题(Monty Hall problem)也称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,它出自美国的电视游戏节目Let's Make a Deal。

Monty Hall是上个世纪60年代,电视游戏节目“Let's Make a Deal”的主持人,这个悖论便是以他的名字来命名的。节目的规则是这样的:

参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,如果参赛者选中后面有车的那扇门就可赢得该汽车,另外两扇门后面则各藏有一只山羊。

当参赛者选定了一扇门,但未去开启它的时候,节目主持人会开启剩下两扇门的其中一扇背后没有汽车的门,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。

此时的问题是:换另一扇门会否增加参赛者赢得汽车的机率。

答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。

而不是我们的第一反应:换不换无所谓都是二分之一,这是错的。

这是一个十分违反个人直觉的答案,但是事实确实是这样的。

R语言模拟

对于三门问题我们可以给出如下代码进行模拟:

B <- 10000
monty_hall <- function(strategy){
  doors <- as.character(1:3)
  prize <- sample(c("car", "goat", "goat"))
  prize_door <- doors[prize == "car"]
  my_pick  <- sample(doors, 1)
  show <- sample(doors[!doors %in% c(my_pick, prize_door)],1)#不是参赛者选择的也不是有奖励的
 
  stick <- my_pick
  stick == prize_door
  
  switch <- doors[!doors%in%c(my_pick, show)]
  choice <- ifelse(strategy == "stick", stick, switch)
  choice == prize_door
}

首先设定模拟次数B,这个你也可以设定的再大一点,然后按照三门问题的游戏要求设定函数:

先定义有奖的门prize_door,然后参赛者随意选择一扇门my_pick,此时主持人在另外两扇门中选择一扇并不有奖励的门(!doors %in% c(my_pick, prize_door)打开,这个门为show。

好,此时参赛者可以选择stick即坚持自己的选择,我们此时可以每一次运行函数可以得到一个逻辑值stick == prize_door,对逻辑值求均值后即为stick时得奖的概率。

当然,参赛者可以选择换门switch,即选择换既不是自己当初选择的也非主持人打开的[!doors%in%c(my_pick, show)]门。此时switch== prize_door依然得到逻辑值,求平均后得到换门时得奖的概率。

好啦,运行上面的函数:

stick <- replicate(B, monty_hall("stick"))
mean(stick)
#> [1] 0.342
switch <- replicate(B, monty_hall("switch"))
mean(switch)
#> [1] 0.668

验证了三门问题的解:确实不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。

小结

今天建立了一个函数对著名的“三门问题”进行了模拟,不知道大家想明白了没有。感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python和R的,加油。

(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)


往期内容:

R数据分析:在tidyverse中“do”起什么作用

R数据分析:如何用R做数据模拟

R数据分析:dplyr包学习笔记(吐血整理宇宙无敌详细版)

R语言作图:如何在同一图层画多个geoms

R语言作图:ggplot2 分面(facet)相关设置

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表