概率代码问题

Cur*_*ite 5 c# statistics

当我使用isWinConfidence切换isWinDefault时,我得到了截然不同的结果.我觉得他们应该是一样的.我的代码或统计数据中是否存在我误解的错误?

此测试旨在模拟单次硬币1倍与硬币翻转多次.

问题是

如果P(x)是70%那么p(x)*100应该在70%的时间内> = 70,不是吗?

谢谢.

    private void TestWin()
    {
        double headsUp = 0;
        double testRuns = 100;
        for (double i = 0; i < testRuns; i++)
        {
            if (IsWinConfidence())
            {
                headsUp++;
            }

        }
        label1.Text = "Probability of Heads is " + headsUp /testRuns;

    }

    private bool IsWinDefault()
    {
        if (r.NextDouble() <= .7)
        {
            return true;
        }
        return false;
    }

    private bool IsWinConfidence()
    {
        int headsCount = 0;
        for (double x = 0; x < 100; x++)
        {
            if (IsWinDefault())
                headsCount++;

        }

        double pHeadsCount = headsCount / 100d;
        if (pHeadsCount >= .7 )
        {
            return true;
        }
        else
        {
            return false;
        }


    }
Run Code Online (Sandbox Code Playgroud)

ang*_*son 2

这是简单的答案:

70% 的概率意味着平均抛 100 次硬币会产生 70 次正面朝上。然而,有时会超过 70,有时会更少。

换句话说,每批抛 100 次硬币,正面朝上的数量将接近 70 个。有时低于 70,有时高于 70,有时正好 70。

因此,如果数字在 70 左右波动,那么如果您询问“它在 70 或等于 70 上方波动的频率”,您将得到的答案是“大约 50% 的时间”,这是理所当然的。

所以你没有用你的代码问正确的问题。

事实上,将 IsWinConfidence 循环中的数字增加到更高的值会得到接近 50 的数字。


让我们在这里分析一下你们的论点。

你是说如果你有:

一枚有偏差的硬币,70% 的情况下,落地时正面朝上,30% 的情况下,落地时正面朝下

那么你是说:

如果我抛硬币 100 次,正面朝上的次数应该超过 70 次

一者并不导致另一者,你的论点在这里有一个缺陷。概率与保证无关,而与平均值有关。

如果概率是绝对的,你的第二个陈述应该是:

如果我抛硬币 100 次,我应该得到 70 次正面朝上

注意这里缺少“超过”。

相反,第一个参数的含义是:

如果我抛硬币 100 次,然后再抛 100 次,然后再抛 100 次,然后再抛 100 次,以此类推,那么平均每抛 100 次就会有 70 次正面朝上

现在,我对概率计算了解不够,无法分解你的循环和计数,但我确实知道,只要遵循逻辑,你的论点就会失败。

让我们尝试另一种方法。

如果硬币是均匀的,尽管有偏差,这意味着在抛 100 次硬币中,有时会得到超过 70 次,有时会少于 70 次。

在我天真的想法中,这意味着……平均而言,你只有一半的时间会掷到 70 次以上的硬币。

通过将循环中的数字增加到 100.000,我得到的置信函数返回接近 50。这似乎支持了我的理论。

但正如我所说,我成为概率专家(甚至涉足者)的机会小于零。