【问题标题】:Generate data from a coin flipping experiment从掷硬币实验中生成数据
【发布时间】:2021-03-23 21:54:20
【问题描述】:

我有一枚硬币,硬币有记忆。即最后一次翻转会影响这次翻转的正面概率。如何编写代码以从此过程生成数据?具体来说,通过这个过程,我希望能够生成 n=1000 个数据点。

P(H | H_{-1}) != P(H | T_{-1}) #probability of heads given heads in last flip is not equal to probability of heads given tails in last flip
P(T | H_{-1}) != P(T | T_{-1}) #probability of tails given heads in last flip is not equal to probability of tails given tails in last flip

{-1} represents last flip

Assume P( H | H in last flip ) = 0.75
P( H | T in last flip ) = 0.30

另外,假设硬币的第一次抛硬币正面或反面的概率相同。

非常感谢任何帮助!

【问题讨论】:

  • 能否请您简单介绍一下这两个表达式的含义?
  • @CutePanda:是的,我刚刚在更新的帖子中用简单的英文解释了这两个表达方式。
  • 你如何确定在任何给定时间出现正面翻转的概率?有具体的数值吗?如果您展示一个包含三个翻转的示例以及每个翻转的概率,您可能会更容易解释。
  • @AkilanManivannan:我已经用一些虚构的值更新了帖子。
  • 我刚刚修改了我的代码以适应您的示例。这能解决您的问题吗?

标签: python statistics coin-flipping


【解决方案1】:

这是一个可以用于实验的骨架。

import random

def flip(last_flip):
    if last_flip == "H":
        #INSERT LOGIC FOR PROBABILITY IF PREVIOUS FLIP WAS HEADS
        heads_probability = 0.75
    elif last_flip == "T":
        #INSERT LOGIC FOR PROBABILITY IF PREVIOUS FLIP WAS TAILS
        heads_probability = 0.30
    else:
        heads_probability = 0.5

    tails_probability = 1-heads_probability
    flip = random.choices(["H", "T"], weights = (heads_probability, tails_probability))[0]

    return flip


flips = []
lastFlip = None
for n in range(1000):
    newFlip = flip(lastFlip)
    flips.append(newFlip)
    lastFlip = newFlip

这使用random.choices 函数来选择概率不均匀的正面或反面。 flip 函数将前一次翻转作为输入,并计算抛硬币的新概率。您需要在这部分中填写您用于实验的逻辑(cmets 所在的位置)。

代码的主要部分翻转硬币并将结果存储在数组中。对于下一次试验,它使用之前的翻转作为前面讨论过的flip 函数的输入。

【讨论】:

  • 这个答案是金!非常感谢你这么清楚的解释!这对我有用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 2018-05-17
  • 2015-12-20
  • 1970-01-01
相关资源
最近更新 更多