Проверка независимости с помощью байесовской статистики

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Давно обещал рассказать, как можно проверять гипотезы о независимости переменных с помощью байесовской статистики, вместо стандартного критерия хи-квадрат. Мой рассказ по необходимости содержит много технических подробностей; тем не менее, я постараюсь сделать его доступным для тех, кто знает основы теории вероятностей и при этом хочет разобрать хотя бы один пример применения байесовской статистики.

Пример применения

Предположим, мы хотим узнать, связаны ли политические предпочтения людей с их страхом перед терактами. Мы можем устроить опрос, в котором будет два вопроса: "Кто вы - либерал или консерватор", с двумя вариантами ответа, и "О чём вы больше всего беспокоились в день недавнего теракта", скажем, с четырьмя вариантами ответа.

Затем нужно собрать как можно больше ответов на эти вопросы. Традиционным способом - останавливая людей на улице или обзванивая по телефону - или инновационным, просто разместив опрос у себя на странице в социальной сети. В последнем случае надо будет предложить 2 x 4 = 8 вариантов ответа, чтобы каждый участник мог выбрать нужный ответ одновременно на оба вопроса.

Третий этап - статистический анализ полученных результатов. Пусть X - случайная величина с m=2 различными значениями, выражающая ответ на первый вопрос, Y - случайная величина с n=4 значениями, выражающая ответ на второй вопрос. Нам нужно понять, зависимы ли X и Y или нет в смысле теории вероятностей. Если между соответствующими явлениями есть причинно-следственная связь, прямая (X является причиной Y или Y является причиной X) или косвенная (есть некий фактор Z, влияющий одновременно на X и Y), то соответствующие случайные переменные будут зависимы. В противном случае они окажутся независимы.

Результаты опроса мы можем представить в виде матрицы m x n, записав в ячейке (i,j) количество респондентов, выбравших вариант i при ответе на первый вопрос и вариант j при ответе на второй вопрос. Например, для опроса о связи политических предпочтений и беспокойства после теракта может получиться такая матрица:

6 25 20 38

2 12 5 17

Данные позаимствованы из вот этого опроса ВКонтакте.

Как же теперь понять, есть зависимость или нет?

Постановка задачи

Пусть X и Y - дискретные случайные величины, принимающие m и n различных значений соответственно. Можно считать, что X может принимать значения от 1 до m, а Y - от 1 до n. Пусть N - количество независимых наблюдений пары (X,Y), а сами наблюдаемые значения - (x_1,y_1),...,(x_N,y_N). В нашем примере m=2, n=4, N=125 (общее количество респондентов). Обозначим через a_{ij} количество наблюдений, в которых X=i и Y=j, т.е. количество индексов k от 1 до N, для которых x_k=i и y_k=j. Значения a_{ij} образуют матрицу A размера m x n, состоящую из целых неотрицательных чисел с общей суммой N.

Требуется установить, являются ли случайные величины X и Y независимыми или нет, и с какой степенью уверенности мы можем это утверждать.

Есть различные способы понимания того, что такое "степень уверенности" для таких задач. С точки зрения байесовской статистики это - просто (субъективная) вероятность того, что X и Y независимы.

Общая схема проверки гипотез по формуле Байеса

Напомним общую схему проверки каких угодно гипотез с помощью формулы Байеса. Если H (от слова Hypothesis) - гипотеза (некое случайное событие, в котором мы пока не очень уверены), а E (от слова Evidence) - наблюдение, то формула Байеса выглядит так:

P(H|E) = P(H) * P(E|H) / P(E)

Здесь P(H) - априорная вероятность гипотезы H (то есть вероятность, приписываемая H до того, как мы произвели наблюдения и пронаблюдали E), P(H|E) - условная вероятность H при условии E, она же апостериорная вероятность H (то есть вероятность H после учёта наблюдения E), P(E) - вероятность наблюдать E безотносительно каких-либо гипотез.

Эту формулу можно рассматривать как формулу пересчёта априорной вероятности гипотезы P(H) в апостериорную вероятность P(H|E) : необходимо умножить априорную вероятность на множитель P(E|H) / P(E).

Если у нас несколько независимых наблюдений E, E', E'', то можно либо учесть их все одновременно, подставив конъюнкцию событий EE'E'' в качестве E в формулу Байеса, либо учитывать их по очереди: сначала получить P(H|E) из P(H), учтя E; затем, используя ранее вычисленное P(H|E) в качестве новой "априорной" вероятности гипотезы H, учесть E' с помощью условной формулы Байеса:

P(H|EE') = P(H|E) * P(E'|HE) / P(E'|E)

Если E и E' независимы сами по себе и при условии H, эта формула упрощается:

P(H|EE') = P(H|E) * P(E'|H) / P(E')

Затем можно точно так же учесть E'', используя P(H|EE') в качестве новой "априорной" вероятности H. Как бы мы ни считали, итоговая вероятность P(H|EE'E'') не будет зависеть от способа подсчёта, потому что математика непротиворечива.

Обычно нас интересует не одна гипотеза H, а несколько: H_1, H_2, ..., H_k. Нам хочется понять, какая из гипотез лучше всего объясняет наблюдаемые данные E, то есть которая из вероятностей P(H_i|E) больше всех. Формула Байеса может быть в принципе применена по отдельности к каждой из гипотез H_i. Однако, если эти гипотезы взаимоисключающи и покрывают все варианты, т.е. известно, что из них верна ровно одна, только неизвестно, какая именно, то можно переписать формулу Байеса, заменив в ней знаменатель P(E) на

P(E)= P(EH_1)+P(EH_2)+...+P(EH_k) = P(E|H_1)P(H_1)+...+P(E|H_k)P(H_k)

Тогда получим

P(H_i|E)=P(E|H_i)P(H_i)/(сумму всех таких выражений по i)

Можно также записать, что P(H_i|E) пропорционально P(E|H_i)P(H_i) с единым коэффициентом пропорциональности для всех i, равным 1/P(E):

P(H_i|E) ~ P(E|H_i)P(H_i)

Затем коэффициент пропорциональности может быть найден из условия, что сумма всех P(H_i|E) должна быть равна единице, поскольку ровно одна из гипотез H_i может быть истинна:

P(H_1|E)+P(H_2|E)+...+P(H_k|E) = 1

При таком подходе мы получаем возможность записывать формулу Байеса без знаменателя, рассматривая вероятности гипотез "с точностью до неизвестного нормирующего множителя"; сам множитель может быть найден в самом конце вычислений исходя из требования, чтобы сумма апостериорных вероятностей всех гипотез равнялась единице.

Применение для проверки независимости

Теперь мы хотим применить только что изложенную схему пересчёта вероятностей гипотез к нашей конкретной задаче проверки независимости переменных X и Y на основе конечного множества наблюдений их значений. Какие у нас будут гипотезы?

На первый взгляд, у нас две гипотезы:

H_0: "X и Y независимы"

H_1: "X и Y зависимы"

Кроме того, у нас есть наблюдение E, состоящее из N независимых отдельных наблюдений E_1, E_2, ..., E_N пары (X,Y):

E = E_1E_2...E_N

Для того, чтобы применить формулу Байеса, нам надо знать априорные вероятности H_0 и H_1 - мы возьмём P(H_0)=P(H_1)=1/2, исходя из "принципа безразличия" Лапласа (в народной формулировке: "вероятность встретить динозавра на улице равна 50%: либо встретишь, либо нет"; однако, если добавить сюда слово "априорная" и затем учесть по формуле Байеса свидетельства, говорящие о том, что динозавры, судя по всему, давно вымерли, получится не такой уж нелепый результат).

Кроме того, нам надо уметь вычислять P(E|H_0) и P(E|H_1). И вот здесь нас подстерегают две проблемы.

Во-первых, мы бы хотели, чтобы отдельные наблюдения E_1, E_2, ..., E_N были бы независимы при условии H_0, а также при условии H_1, чтобы мы могли написать

P(E|H_0)=P(E_1|H_0)P(E_2|H_0)...P(E_N|H_0)

и аналогично для P(E|H_1).

Во-вторых, нам надо бы уметь вычислять P(E_k|H_0) и P(E_k|H_1). Напомним, наблюдение E_k в нашем случае - это случайное событие "X=x_k, Y=y_k". Его вероятность P(X=x_k,Y=y_k) задаётся совместным распределением случайных величин X и Y, которое, однако, нам неизвестно!

Что же делать? Откуда взять информацию о совместном распределении случайных переменных X и Y, то есть набор вероятностей p_{ij}:=P(X=i,Y=j), i=1,2,..,m, j=1,2,...,n ?

Уточнение гипотез

Дело в том, что нам надо уточнить каждую из гипотез H_0 и H_1, разбив их на более точные подгипотезы, содержащие в себе необходимые нам предположения о совместном распределении X и Y.

Уточнение гипотезы H_0

Для H_0 такие подгипотезы задаются парой наборов ?', ?'', где ?' = (?'_1,...,?'_m) есть распределение величины X, то есть набор из m неотрицательных чисел с суммой 1; по смыслу ?'_i = P(X=i), а ?'' = (?''_1,...,?''_n) - распределение величины Y, то есть набор из n неотрицательных величин с суммой 1.

Теперь вместо одной большой гипотезы H_0 у нас целый континуум гипотез H_{0,?',?''}, параметризованный m+n непрерывными параметрами, на которые наложено два уравнения; иначе говоря, у нас есть m+n-2 степени свободы, а говоря более строго - значения параметров (?',?'') пробегают (m+n-2)-мерное многообразие с краем. Геометрически ?' пробегает (m-1)-мерный симплекс, ?'' - (n-1)-мерный симплекс, а пара (?',?'') - декартово произведение этих симплексов.

Поскольку H_0 включает в себя предположение о независимости X и Y, мы можем вычислить

P(X=i,Y=j|H_{0,?',?''}) = P(X=i|H_{0,?',?''})P(Y=j|H_{0,?',?''}) = ?'_i ?''_j

Отсюда

P(E|H_{0,?',?''})=произведение (?'_i ?''_j)^{a_{ij}} по всем i=1..m, j=1..n.

Всё почти готово для вычисления апостериорного распределения вероятностей на гипотезах H_{0,?',?''}. Нам не хватает только априорных вероятностей этих гипотез. Будем считать, снова пользуясь принципом безразличия Лапласа, что априорное распределение вероятностей P(H_{0,?',?''}|H_0) задаётся (с точностью до нормировочной константы) мерой Лебега d?'d?'' на произведении (m-1)-мерного и (n-1)-мерного симплекса, описанном выше.

Уточнение гипотезы H_1

Для H_1 величины X и Y не являются независимыми, поэтому нам придётся задавать целиком совокупное распределение X и Y, а не распределения X и Y по отдельности. Для этого мы заведём набор ?, состоящий из mn компонент ?_{ij}, i=1..m, j=1..n, где по смыслу ?_{ij}=P(X=i,Y=j). Теперь ?=(?_{11},?_{12},...,?_{mn}) состоит из mn неотрицательных чисел с суммой 1; геометрически значения ? пробегают (mn-1)-мерный симплекс.

Теперь разобьём гипотезу H_1 на континуум взаимоисключающих гипотез H_{1,?}; тогда

P(X=i,Y=j|H_{1,?})=?_{ij}

и потому

P(E|H_{1,?})=произведение (?_{ij})^{a_{ij}} по i=1..m, j=1..n.

Нам снова не хватает априорного распределения вероятностей P(H_{1,?}|H_1); мы снова используем меру Лебега d? на (mn-1)-мерном симплексе, домноженную на подходящую нормировочную константу, руководствуясь принципом безразличия Лапласа ("если у нас есть k одинаково выглядящих взаимоисключающих гипотез, надо приписать каждой из них априорную вероятность 1/k").

Вспомогательный интеграл

Введём следующее обозначение. Пусть c=(c_1,...,c_k) - последовательность неотрицательных чисел. Переменная x=(x_1,...,x_k) пусть пробегает (k-1)-мерный симплекс, т.е. все x_i должны быть неотрицательны, а их сумма равна единице. Заведём на симплексе меру Лебега dx, нормированную условием, что объём симплекса должен равняться единице. После этого обозначим

I(c) = I(c_1,...,c_k) := интеграл по симплексу (x_1)^{c_1}...(x_k)^{c_k} dx

По определению, I(0,0,...,0)=1, поскольку интеграл от единицы равен объёму симплекса, который был отнормирован в единицу.

Чуть позже мы дадим общую формулу для вычисления I(c) для любых значений c; перед этим мы продемонстрируем, зачем вообще нам нужны такие интегралы.

Вычисление апостериорных вероятностей

Теперь всё готово для вычисления апостериорных вероятностей гипотез H_0, H_1, H_{0,?',?''} и H_{1,?} при условии E - точнее, плотности распределения апостериорных вероятностей в двух последних случаях, поскольку речь идёт о континууме гипотез.

Неформально формула Байеса выглядит так:

P(H_{0,?',?''}|E)=P(E|H_{0,?',?''})P(H_{0,?',?''})/P(E)

На самом деле эта формула не слишком осмысленна, поскольку вероятность отдельной гипотезы H_{0,?',?''} равна нулю; однако, обозначив плотность этой вероятности относительно меры Лебега d?'d?'' через p(H_{0,?',?''}), получим корректную формулу

p(H_{0,?',?''}|E)=P(E|H_{0,?',?''}) p(H_{0,?',?''})/P(E)

Запишем её условный вариант при условии H_0:

p(H_{0,?',?''}|EH_0)=P(E|H_{0,?',?''}H_0) p(H_{0,?',?''}|H_0) / P(E|H_0)

Заметим, что P(E|H_{0,?',?''}H_0)=P(E|H_{0,?',?''}), поскольку H_{0,?',?''}H_0=H_{0,?',?''}, и что p(H_{0,?',?''}|H_0)=1, поскольку мы берём плотности относительно меры Лебега d?'d?'', нормированной на единицу, и мы договорились взять именно d?'d?'' в качестве априорного распределения подгипотез H_{0,?',?''} при условии H_0. Поэтому

p(H_{0,?',?''}|EH_0) = P(E|H_{0,?',?''}) / P(E|H_0)

Осталось заметить, что интеграл левой части относительно меры d?'d?'' должен равняться единице, поскольку гипотезы H_{0,?',?''} образуют подразбиение гипотезы H_0, так что "сумма" их вероятностней, обычных или условных, равна единице. Отсюда

P(E|H_0) = интеграл P(E|H_{0,?',?''}) d?'d?'' по произведению симплексов

Вспомним формулу для P(E|H_{0,?',?''}): это

P(E|H_{0,?',?''})=произведение (?'_i ?''_j)^{a_{ij}} по i=1..m, j=1..n.

Введём обозначения для сумм по строкам и столбцам матрицы (a_{ij}):

a_{i-}:=сумма a_{ij} по j=1..n

a_{-j}:=сумма a_{ij} по i=1..m

Тогда формулу для P(E|H_{0,?',?'') можно переписать в виде произведения:

P(E|H_{0,?',?''}) = произведение (?'_i)^{a_{i-}} по i=1..m * произведение (?''_j)^{a_{-j}} по j=1..n.

Интеграл этого произведения, умноженного на d?'d?'', по прямому произведению двух симплексов, есть интеграл первого сомножителя на d?' по первому симплексу, умноженный на интеграл второго сомножителя на d?'' по второму симплексу. Используя наше обозначение I() для интегралов одночленов по симплексу, получаем

P(E|H_0)=I(a_{1-},...,a_{m-}) I(a_{-1},...,a_{-n})

Аналогичным образом, только проще, вычисляется P(E|H_1): это интеграл P(E|H_{1,?})d? по (mn-1)-мерному симплексу; с учётом того, что P(E|H_{1,?}) - это произведение (?_{ij})^{a_{ij}), мы видим, что

P(E|H_1)=I(a_{11},a_{12},...,a_{1n},a_{21},...,a_{mn})

Снова применим формулу Байеса. Поскольку

P(H_0|E)=P(E|H_0)P(H_0)/P(E)

и

P(H_1|E)=P(E|H_1)P(H_1)/P(E)

мы можем разделить одну формулу на другую и получить

P(H_0|E) / P(H_1|E) = P(E|H_0)/P(E|H_1) * P(H_0)/P(H_1)

Поскольку верна ровно одна из гипотез H_0 или H_1, мы знаем, что P(H_1)=1-P(H_0) и P(H_1|E)=1-P(H_0|E); иначе говоря, если c(H_0) означает шансы события H_0 (вероятность того, что оно случится, делить на вероятность того, что не случится), то

с(H_0|E) = c(H_0) * P(E|H_0)/P(E|H_1)

Если мы берём в качестве априорных вероятностей P(H_0)=P(H_1)=1/2, то c(H_0)=1, и потому

c(H_0|E) = P(E|H_0)/P(E|H_1) = I(a_{1-},...,a_{m-}) I(a_{-1},...,a_{-n}) / I(a_{11},a_{12},...,a_{mn}).

Отсюда мы легко найдём искомую вероятность P(H_0|E)=c(H_0|E)/(1 + c(H_0|E)) независимости наблюдаемых случайных величин X и Y, при условии, что научимся вычислять вспомогательные интегралы I(c_1,...,c_k).

Вычисление вспомогательного интеграла I(c_1,...,c_k)

Осталось научиться вычислять вспомогательный интеграл I(c_1,...,c_k) для неотрицательных c_1, ..., c_k. Формула для него такова:

I(c_1,...,c_k) = ?(c_1+1)...?(c_k+1)?(k)/?(c_1+...+c_k+k)

Здесь ?(x) - гамма-функция Эйлера. Её значения в целых точках - факториалы: ?(n+1)=n!, поэтому для целых неотрицательных c_1, ..., c_k получаем формулу, отдалённо напоминающую формулу для мультиномиального коэффициента:

I(c_1,...,c_k) = c_1! c_2! ... c_k! (k-1)! / (c_1+...+c_k+k-1)!

Это и есть недостающее звено для вычисления c(H_0|E).

Осталось, собственно, доказать формулу для I(c_1,...,c_k) через гамма-функцию. Для этого домножим подынтегральное выражение (x_1)^{c_1}...(x_k)^{c_k} на exp(-x_1-...-x_k) и проинтегрируем по всем неотрицательным x_1,..., x_k (не обязательно с суммой 1). Обозначим итоговый интеграл через J(c_1,...,c_k).

С одной стороны, подынтегральное выражение есть произведение выражений (x_i)^{c_i} exp(-x_i) dx_i, и потому J(c_1,...,c_k) есть произведение таких интегралов, взятых по неотрицательным x_i:

J(c_1,...,c_k) = J(c_1)...J(c_k)=?(c_1+1)...?(c_k+1).

Равенство J(c_i) = ?(c_i+1) для одного такого интеграла верно просто по определению гамма-функции.

Вычислим теперь J(c_1,...,c_k) другим способом. Для этого сделаем замену переменных: запишем набор (x_1,...,x_k) в виде (sy_1,...,sy_k), где s>0, а сумма y_i равна единице (и потому s - это сумма x_i). Тогда наш интеграл равен интегралу

(sy_1)^{c_1}...(sy_k)^{c_k} exp(-s) s^{k-1} ds dy

вычисленному по прямому произведению положительного луча (пробегаемого s) и (k-1)-мерного симплекса (пробегаемого y). Такой интеграл разваливается в произведение двух: интеграла

s^{c_1+...+c_k+k-1}exp(-s)ds

вычисленному по положительным s; это ?(c_1+...+c_k+k), и интеграла

y_1^{c_1}...y_k^{c_k}dy,

вычисленному по (k-1)-мерному симплексу; это как раз искомый I(c_1,...,c_k), с точностью до умножения на некоторую константу C, связанную с нормировкой меры Лебега на симплексе и зависящую только от размерности k. Отсюда

C I(c_1,...,c_k) ?(c_1+...+c_k+k) = ?(c_1+1)...?(c_k+1)

Осталось вычислить константу C; её можно найти из условия нормировки I(0,0,...,0)=1, которое даёт С ?(k)=1, т.е. C=1/?(k)=1/(k-1)!.

Алгоритм вычисления вероятности H_0

Приведём итоговый алгоритм вычисления апостериорной вероятности гипотезы H_0 о независимости случайных величин X и Y на основании набора их наблюдений E, заданного с помощью (m x n)-матрицы (a_{ij}), как объяснено выше. Итак:

  • Пусть b_i := сумма чисел в i-ой строке матрицы a
  • c_j :=сумма чисел в j-ом столбце матрицы a
  • s := сумма всех компонент матрицы a
  • I_1 := b_1! ... b_m! (m-1)! / (s+m-1)!
  • I_2 := c_1! ... c_n! (n-1)! / (s+n-1)!
  • I_{12} := a_{11}! a_{12}! ... a_{1n}! a_{21}! ... a_{mn}! (mn-1)! / (s+mn-1)!
  • c_0 := 1 (априорные шансы H_0)
  • c := c_0 I_1 I_2 / I_{12} (апостериорные шансы H_0)
  • P(H_0|E) := c / (1+c) (вероятность независимости)

Сравнение с критерием хи-квадрат

Полученные формулы и алгоритм, как ни странно, проще формул для классического критерия хи-квадрат, не требуют использования вспомогательных таблиц, и к тому же работают даже в тех случаях, когда некоторые ячейки матрицы малы или вовсе равны нулю, что недопустимо для критерия хи-квадрат. В действительности можно показать, что критерий хи-квадрат является приближенной версией формул байесовской статистики, получающейся, если заменить логарифмы факториалов их приближёнными значениями по формуле Стирлинга, затем сократить большую часть логарифмов, а оставшиеся заменить на начало их разложения в ряд Тейлора. Именно поэтому байесовская статистика работает всегда, будучи точным решением, а критерий хи-квадрат - только когда использованные приближения не вносят слишком большую ошибку. Более подробное сравнение частотной и байесовской статистики есть в книге Джейнса [1].

Реализация алгоритма

При желании этот алгоритм легко реализуется практически на любом языке программирования. Надо только вместо самих факториалов вычислять их логарифмы, во избежание переполнения значений с плавающей запятой.

Программа на C++ (bayes_stat.cpp)

#include

#include

using namespace std;

const double indep_chances = 1.0;

double logfact (int n) {

double f = 0;

for (int i = 2; i <= n; i++) {

f += log (i);

}

return f;

}

int main () {

int m, n;

cin >> m >> n;

int b[m], c[n], s = 0;

double fa = 0.0, fb = 0.0, fc = 0.0;

fill (b, b + m, 0);

fill (c, c + n, 0);

for (int i = 0; i < m; i++) {

for (int j = 0; j < n; j++) {

int a;

cin >> a;

b[i] += a;

c[j] += a;

s += a;

fa += logfact (a);

}

fb += logfact (b[i]);

}

for (int j = 0; j < n; j++) {

fc += logfact (c[j]);

}

double log_pX = fb + logfact (m - 1) - logfact (s + m - 1);

double log_pY = fc + logfact (n - 1) - logfact (s + n - 1);

double log_pXY = fa + logfact (m*n - 1) - logfact (s + m*n - 1);

double p = 1 / (1 + indep_chances * exp (log_pX + log_pY - log_pXY));

cout << "dependence probability is " << p << ", independence probability is " << 1 - p << " ";

cout << "(apriori dependence probability was " << 1 / (1 + indep_chances) << ") ";

return 0;

}

Программа на Haskell (BayesStat.hs)

import Data.List

import Control.Monad

indep_chances = 1.0 :: Double

logfact n = sum $ map (log . fromIntegral) [1..n]

evidence_prob stat =

let n = length stat

stat' = (n - 1) : stat

sum_log_f = sum $ map logfact $ stat'

log_f_sum = logfact $ sum stat' in

sum_log_f - log_f_sum

indep_belief ev =

let pXY = evidence_prob $ concat ev

pX = evidence_prob $ map sum ev

pY = evidence_prob $ map sum $ transpose ev in

exp (pX + pY - pXY)

chances_to_prob c = c / (c + 1.0)

indep_prob ev = chances_to_prob (indep_chances * (indep_belief ev))

main = do

m <- liftM (read . head . words) getLine

lines <- replicateM m getLine

let evidence = map (map read . words) lines

let p = indep_prob evidence

putStr $ "dependence probability is " ++ show (1-p)

putStrLn $ ", independence probability is " ++ show p

putStrLn $ "(apriori independence probability was " ++ show (chances_to_prob indep_chances) ++ ")"

Использование программ

После компиляции и запуска надо ввести в стандартный ввод на первой строке числа m и n, разделённые пробелом, и затем m строк по n чисел в каждой - элементы матрицы a_{ij}. Программа выдаст вычисленные вероятности независимости и зависимости. Например:

$ g++ bayes_stat.cpp -o bayes_stat

$ ./bayes_stat

2 4

6 25 20 38

2 12 5 17

dependence probability is 0.0561535, independence probability is 0.943847

(apriori dependence probability was 0.5)

Или:

$ ghc BayesStat.hs

[1 of 1] Compiling Main ( BayesStat.hs, BayesStat.o )

Linking BayesStat ...

$ ./BayesStat

2 4

6 25 20 38

2 12 5 17

dependence probability is 5.615346402452037e-2, independence probability is 0.9438465359754796

(apriori independence probability was 0.5)

Или в режиме интерпретации:

$ ghci BayesStat.hs

GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help

[1 of 1] Compiling Main ( BayesStat.hs, interpreted )

Ok, modules loaded: Main.

*Main> indep_prob [[6,25,20,38],[2,12,5,17]]

0.9438465359754796

*Main>

Мы видим, что с вероятностью 94% между политическими предпочтениями человека и его беспокойством после терактов нет зависимости.


Источник: telegra.ph

Комментарии: