Как использовать распределение хи-квадрат в библиотеке C ++ Boost? - PullRequest
9 голосов
/ 17 января 2010

Я проверил примеры на веб-сайте Boost, но они не являются тем, что я ищу.

Проще говоря, я хочу посмотреть, является ли число на кубике предпочтительным, используя 600 бросков, поэтому среднее число появлений каждого числа (от 1 до 6) должно быть 100.

И я хочу использовать распределение хи-квадрат, чтобы проверить, честен ли кубик.

Помогите !, пожалуйста, как мне это сделать?

1 Ответ

12 голосов
/ 17 января 2010

Предположим, что e [i] и o [i] - это массивы, содержащие ожидаемое и наблюдаемое количество бросков для каждой из 6 возможностей. В вашем случае, e [i] равно 100 для каждого бина, а o [i] - это количество раз, которое я бросил в ваших 600 испытаниях.

Затем вы вычисляете статистику хи-квадрат путем суммирования (e [i] -o [i]) 2 / e [i] за 6 корзин. Допустим, ваш массив o [i] содержит 105, 95, 102, 98, 98 и 102 считает после выполнения ваших 600 испытаний.

Чи 2 = 5 2 / 100 + 5 2 / 100 + 2 2 / 100 + 2 2 / 100 + 2 2 / 100 + 2 2 / 100 = .660

У вас есть пять степеней свободы (количество бинов минус 1). Итак, вы собираетесь иметь объявление вроде

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

для создания объекта Boost, представляющего ваше распределение хи-квадрат.

На этом этапе вы использовали бы функцию доступа cdf (накопительную функцию распределения) из библиотеки Boost, чтобы найти значение p, соответствующее баллу хи-квадрат 0,660 с пятью степенями свободы.

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

Вы должны получить что-то близкое к 0,015, что было бы интерпретировано как (1 - .015) = 98,5% вероятность наблюдения показателя хи-квадрат по крайней мере до 0,660, если принять нулевую гипотезу (что умереть честно) Таким образом, для этого набора данных нулевая гипотеза не может быть отклонена с любым разумным уровнем достоверности. (Отказ от ответственности: непроверенный код! Но если я правильно понимаю документацию Boost, это должно работать так.)

...