2010-01-17 38 views
9

我檢查了Boost網站上的例子,但他們不是我要找的。如何在C++ Boost庫中使用卡方分佈?

說得簡單,我想,以查看是否在模具上的數目是有利的使用軋輥600,所以每數(1至6)的平均出現應當是100

我想使用卡方分佈來檢查死亡是否公平。

Help!,我該怎麼做?

回答

11

假設e [i]和o [i]是包含6個可能性中每一個的預期和觀察計數的數組。在你的情況下,每個垃圾箱的e [i]是100,而o [i]是我在600次試驗中滾動的次數。

然後,通過求和計算卡方統計(E [I] -o [I])/E [I]在 6個箱。假設您的o [i]陣列在進行600次試驗後出現105,95,102,98,98和102 。

智 = 5 /100 + 5 /100 + 2 /100 + 2 /100 + 2 /100 + 2 /100 = .660

你有五個自由度(箱數減1)。所以,你要 已經聲明像

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

創建表示您的卡方分佈Boost的對象。

此時,您可以使用Boost庫中的cdf訪問器函數(累積分佈函數)查找對應於具有五個自由度的卡方分數.660的p值。

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

你應該得到的東西接近0.015,這將被解釋爲(1 - 0.015)觀察卡方得分至少爲極端爲0.660,中= 98.5%的概率如果假設空假設(死亡是公平的)持有。所以對於這組數據,零假設不能以任何合理的置信水平被拒絕。 (免責聲明:未經測試的代碼!但是,如果我正確理解了Boost文檔,這就是它的工作方式。)

+0

來自維基百科:「p-值不是零假設爲真的概率。」......「假設零假設爲真,p值是獲得至少與實際觀察到的一樣極端的檢驗統計量的概率。「 – telliott99 2010-01-25 12:50:40

+0

@ telliott99:你是對的...我已經重新修改了這一部分,以澄清假設測試結果的解釋。 – 2010-01-25 17:44:06