c++ - 如何将卡方分布与 C++ Boost 库一起使用?

标签 c++ boost random statistics distribution

我已经检查了 Boost 网站中的示例,但它们不是我要找的。

简单来说,我想看看骰子上的某个数字是否受到青睐,使用 600 卷,所以每个数字(1 到 6)的平均出现次数应该是 100。

我想使用卡方分布来检查骰子是否公平。

求助!请问我该怎么做??

最佳答案

假设 e[i] 和 o[i] 是数组,其中包含 6 种可能性中每一种的预期和观察到的掷骰数。在你的例子中,每个 bin 的 e[i] 是 100,而 o[i] 是 i 在你的 600 次试验中被滚动的次数。

然后您通过对 (e[i]-o[i])2/e[i] 求和来计算卡方统计量 6 个箱子。假设您的 o[i] 数组出现了 105、95、102、98、98 和 102 在完成 600 次试验后计数。

2 = 52/100 + 52/100 + 22/100 + 2 2/100 + 22/100 + 22/100 = .660

您有五个自由度(箱数减 1)。所以你要 有这样的声明

boost::math::chi_squared mydist(5);

创建表示卡方分布的 Boost 对象。

此时,您将使用 Boost 库中的 cdf 访问器函数(累积分布函数)来查找与 0.660 的卡方分数相对应的 p 值,其中五度自由。

p = boost::math::cdf(mydist,.660);

您应该得到接近 0.015 的值,如果假设原假设(即死是公平的)成立。因此,对于这组数据,不能以任何合理的置信度拒绝原假设。 (免责声明:未经测试的代码!但如果我正确理解了 Boost 文档,它应该是这样工作的。)

关于c++ - 如何将卡方分布与 C++ Boost 库一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2079937/

相关文章:

c++ - C++17和C++11中的非类型模板参数有什么区别?

c++ - 您如何确定由 'std::map' 创建的用于 'boost::pool_allocator' 的节点的大小(以跨平台方式)?

c++ - boost shared_from_this 和析构函数

javascript - 如何在页面上随机放置多个元素?

java随机数平均计算

random - 为什么程序很难生成随机数?

C++ 混淆类以增强引用的局部性?

c++ - stm32时序ULPI接口(interface)

c++ - 将派生类型的对象从 python 传递到期望 shared_ptr 为基类型的 C++ 函数时,Boost Python 运行时错误

c++ - Boost 单元测试内存重用导致本应无法通过的测试