我已经检查了 Boost 网站中的示例,但它们不是我要找的。p>
简单来说,我想看看骰子上的某个数字是否受到青睐,使用 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/