c

codeye

V1

2023/04/30阅读：26主题：默认主题

# 蒙蒂霍尔悖论

P(门1 = 车| 打开=门3)

P(门2 = 车| 打开=门3)

P(打开 = 门 3 | 门 1 = 汽车) = 1/2

P(打开 = 门 3 | 门 2 = 汽车) = 1

P(打开 = 门 3 | 门 1 = 汽车) X P(门 1 = 汽车) = 1/2 X 1/3 = 1/6

P(打开 = 门 3 | 门 2 = 汽车) X P(门 1 = 汽车) = 1 X 1/3 = 1/3

P(打开 = 门 3) = 1/6 + 1/3 = 1/2

P(门 1 = 汽车 | 打开 = 门 3) = (1/6) / (1/2) = 1/3

P(门 2 = 汽车 | 打开 = 门 3) = (1/3) / (1/2) = 2/3

``chance_of_winning_ifswitch_list = []#放弃最初选择，改选另外的门chance_of_winning_ifdonotswitch_list = []#坚持最初选择的门percentage_diff_list = []相差的百分比``

``# Repeat 10000 trials with 1000 samples per trialfor i in range(10000):        results_list = []        for i in range(1000):                door_list = ["car", "goat", "goat"]                         random.shuffle(door_list)                chosen_door_number = random.sample(range(3), 1)                chosen_door = door_list[chosen_door_number[0]]                        if chosen_door != "car":                        results_list.append(1)                else:            results_list.append(0)        # Compute winning percentage if choose to switch      chance_of_winning_ifswitch = sum(results_list)/len(results_list)*100                      # Compute winning percentage if choose not to switch    chance_of_winning_ifdonotswitch = 100 - chance_of_winning_ifswitch                            # Compute difference in winning percentage between the two strategies                 percentage_diff = chance_of_winning_ifswitch - chance_of_winning_ifdonotswitch                   # Append the results to respective lists                    chance_of_winning_ifswitch_list.append(chance_of_winning_ifswitch)                                 chance_of_winning_ifdonotswitch_list.append(chance_of_winning_ifdonotswitch)        percentage_diff_list.append(percentage_diff)``

``# Import required packagesimport randomimport numpy as npimport scipy.statsimport matplotlib.pyplot as pltimport pandas as pd####----Create Monty Hall Game Simulation----##### Create empty lists to store simulation results outputchance_of_winning_ifswitch_list = []chance_of_winning_ifdonotswitch_list = []percentage_diff_list = []# Set a seed value for reproducibilityrandom.seed(1234)# Create simulation using for-loops# Repeat 10000 trials with 1000 samples per trialfor i in range(10000):    results_list = []        for i in range(1000):        door_list = ["car", "goat", "goat"]        random.shuffle(door_list)            chosen_door_number = random.sample(range(3), 1)        chosen_door = door_list[chosen_door_number[0]]            if chosen_door != "car":            results_list.append(1)        else:            results_list.append(0)          chance_of_winning_ifswitch = sum(results_list)/len(results_list)*100              # Compute winning percentage if choose to switch    chance_of_winning_ifdonotswitch = 100 - chance_of_winning_ifswitch                # Compute winning percentage if choose not to switch    percentage_diff = chance_of_winning_ifswitch - chance_of_winning_ifdonotswitch    # Compute difference in winning percentage between the two strategies        # Append the results to respective lists    chance_of_winning_ifswitch_list.append(chance_of_winning_ifswitch)                    chance_of_winning_ifdonotswitch_list.append(chance_of_winning_ifdonotswitch)    percentage_diff_list.append(percentage_diff)####----Analysis of the simulation results----##### Create a function to calculate 95% confidence intervalsdef mean_confidence_interval(data, confidence=0.95):    a = 1.0 * np.array(data)    n = len(a)    m, se = np.mean(a), scipy.stats.sem(a)    h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)    return m, m-h, m+h# Compute 95% confidence intervals of chance of winning if choose to switchmean_confidence_interval(chance_of_winning_ifswitch_list)# Compute 95% confidence intervals of chance of winning if choose not to switchmean_confidence_interval(chance_of_winning_ifdonotswitch_list)# Compute 95% confidence intervals of difference in chances of winning between the two strategiesmean_confidence_interval(percentage_diff_list)####----Simple visualisation of the simulation results----####fig = plt.figure(figsize = (15,8))ax1, ax2, ax3 = fig.subplots(3, 1)# Title and caption of plotfig.suptitle("Comparison of winning odds between strategies", fontsize = 20, fontweight = "bold")fig.text(.99, .010, "Visualisation:@nxrunning", ha='right', fontsize = 15)# Subplot number 1ax1.set_title("Distribution of winning percentage if choose not to switch", loc = "left", fontweight = "bold")ax1.hist(chance_of_winning_ifswitch_list, alpha = 1, color = "#023047", edgecolor = "white", bins = (30))ax1.set_ylabel("Frequency")ax1.set_xlabel("Odds of winning (%)", fontsize = 13)ax1.annotate("95% Confidence Interval:\n[66.646, 66.705]", xy = (70, 500), fontsize = 13)# Subplot number 2ax2.set_title("Distribution of winning percentage if choose not to switch", loc = "left", fontweight = "bold")ax2.hist(chance_of_winning_ifdonotswitch_list, alpha = 1, color = "#ffb703", edgecolor = "white", bins = (30))ax2.set_xlabel("Odds of winning (%)", fontsize = 13)ax2.set_ylabel("Frequency")ax2.annotate("95% Confidence Interval:\n[33.295, 33.354]", xy = (36.7, 500), fontsize = 13)# Subplot number 3ax3.set_title("Distribution of differences in odds of winning between the two strategies", loc = "left", fontweight = "bold")ax3.hist(percentage_diff_list, alpha = 1, color = "#fb8500", edgecolor = "white", bins = (30))ax3.set_ylabel("Frequency")ax3.set_xlabel("Odds of winning (%)", fontsize = 13)ax3.annotate("95% Confidence Interval:\n[33.293, 33.410]", xy = (40, 500), fontsize = 13)fig.tight_layout()# Removing top and right bordersax1.spines['top'].set_visible(False)ax1.spines['right'].set_visible(False)ax2.spines['top'].set_visible(False)ax2.spines['right'].set_visible(False)ax3.spines['top'].set_visible(False)ax3.spines['right'].set_visible(False)# Adjust space between title and subplotsplt.subplots_adjust(top=0.90)# Save plotfig.savefig('Montyhallproblemsimulation.png', dpi=500)``

c
V1