Как проверять гипотезы? Идея статистического вывода.
Дисклеймер: если вы не знаете материал предыдущей статьи, то мы советуем вам сначала ознакомиться с ним.
В большинстве случаев мы работаем не с генеральной совокупностью, а выборкой, но выводы все-таки хочется сделать о генеральной совокупности.
Генеральная совокупность — это совокупность всех объектов, которые представляют интерес в конкретном исследовании.
Выборка — это группа объектов, отобранных из генеральной совокупности для исследования.
Гипотеза — предположение о характеристиках некоторой случайной величины.
- Геймеры имеют в среднем меньший процент жира, чем офисные работники
- Есть связь между количеством полученных пятерок в учебном году и iq
- Монета честная (вероятность выпадения орла и решки по 0.5)
- Данные происходят из нормального распределения
Введем два понятия: нулевая и альтернативная гипотеза.
Нулевая гипотеза (H0) — гипотеза, которая предполагает, что наше предположение ошибочно (в генеральной совокупности нет никаких различий или взаимосвязей)
Альтернативная гипотеза (H1) — гипотеза, которая предполагает, что наше предположение верно (наше отклонение значимо)
Н0: распределение частот не отличается от ожидаемого
Н1: распределение частот отличается от ожидаемого (между переменными есть связь)
Изначально мы допускаем, что верна нулевая гипотеза, то есть на самом деле никаких различий или взаимосвязей в генеральной совокупности нет. После этого мы можем рассчитать p-value.
P-value — вероятность того, что мы получили такие или еще более выраженные различия абсолютно случайно. Именно это значение покажет статистическую значимость наших различий.
Рассчитывается это значение при помощи статистических критериев. Но перед этим мы должны выбрать уровень значимости.
Уровень значимости — такое p-value, меньше которого мы принимаем альтернативную гипотезу. То есть это порог оценки результата как статистически значимого. Он может быть 0.05, 0.01, 0.001 и тд, но в сообществе 0.05 принят как стандарт.
Критерии бывают параметрические, непараметрические и согласия.
- Параметрические критерии проверяют гипотезы, исходя из предположения о нормальности распределения признака в генеральной совокупности и предположения некоторых параметров этого распределения.
Примеры: t-критерий Стьюдента, F-критерий Фишера, коэффициент корреляции Пирсона
- Непараметрические критерии не включают в расчёт параметры вероятностного распределения и основаны на оперировании частотами или рангами. Частоты - количество наблюдений, соответствующих определенным характеристикам. Ранги же присваиваются после ранжирования значений переменных. Если два одинаковых значения имеют разный ранг, то им присваивается новый ранг - средний из рангов этих значений.
Примеры: критерий Хи-квадрат, критерий Манна-Уитни, критерий Мак-Нимара
Примеры: критерий согласия Колмогорова, критерий согласия Пирсона
Давайте разберем пример проверки гипотезы о различии средних баллов по математике у мужчин и женщин.
Датасет возьмем с Kaggle, мировой data science соцсети.
male = df[df['gender'] == 'male']['math score'] # оценки мужчин female = df[df['gender'] == 'female']['math score'] # оценки женщин
Так как мы имеем дело с выборкой, то нам необходимо использовать статистические критерии для проверки данной гипотезы.
Возможно, нам для решения данной задачи поможет t-критерий Стьюдента, но для начала нужно убедиться в соблюдении предпосылок для его использования.
Важно помнить, что статистические критерии — это математические модели, а значит должны соблюдаться условия для их применения. У t-критерия этих условия всего два: нормальность распределения в группах и статистическое равенство дисперсий. Без этих предпосылок модель будет давать некорректные результаты.
Проверим распределение наших данных на нормальность с помощью графика qq-plot. Он проверяет соответствие наблюдаемых квантилей распределения наших данных теоретическим для нормального. Таким образом, чем больше точек принадлежат прямой линии, тем ближе распределение к нормальному.
import statsmodels.api as sm import matplotlib.pyplot as plt import scipy.stats as stats fig, ax = plt.subplots(figsize=(7,4)) fig = sm.qqplot(female, dist=stats.norm, fit=True, line='q', ax=ax)
fig, ax = plt.subplots(figsize=(7,4)) fig = sm.qqplot(male, dist=stats.norm, fit=True, line='q', ax=ax)
Большинство точек лежат на линии или очень близко к ней, значит можно сказать, что распределения приблизительно нормальные, что допустимо, можем двигаться дальше.
Осталось проверить статистическую неразличимость дисперсий. Проверим это с помощью теста Бартлетта. Подробнее про работу этого статистического тест можно прочитать здесь. К слову, если бы мы получили, что дисперсии различаются, то нам бы пришлось просто немного изменить способ расчета степеней свободы, о которых мы поговорим ниже.
stats.bartlett(male, female) # результаты # BartlettResult(statistic=2.8752171755095928, pvalue=0.08995283913928581)
У него нулевая гипотеза в том, что дисперсии двух выборок не различаются, следовательно нам бы хотелось p-value > 0.05, что мы и получили.
Ура! Все предпосылки для использования t-критерия соблюдены, следовательно можем переходить к проверке гипотезы.
Теперь приступим к сравнению средних.
Нулевая гипотеза: средние значения баллов у мужчин и женщин в генеральной совокупности не отличаются. То есть разница между средними равна 0.
Альтернативная гипотеза: средние в генеральной совокупности отличаются
Критерий основывается на предположении, что данные в генеральной совокупности распределены нормально. Нашим уровнем значимости будет 0,05.
Сначала мы принимаем нулевую гипотезу, тогда если множество раз извлекать выборки из нашей генеральной совокупности, а потом извлекать из них средние, то разница средних у мужчин и женщин распределилась бы в соответствии с t-распределением и средней разницей, равной нулю. (Если вы ничего не поняли, то осмыслите каждое слово несколько раз).
T-распределение — симметричное распределение с одним самым популярным значением, похожее на нормальное, но у которого более вероятны попадания значений в "хвосты" распределения
Теперь нам необходимо посчитать t-статистику. Она покажет, на сколько стандартных отклонений отличается наблюдаемая разница между средними и их гипотетическая разница в соответствии с нулевой гипотезой, которая в нашем случае равна нулю.
n_1, n_2 = male.shape[0], female.shape[0] #количество наблюдений в выборках print('количество степеней свободы =', n_1 + n_2 - 2) print('t =', round(stats.ttest_ind(male, female, equal_var=True)[0], 3)) print('p-value =', stats.ttest_ind(male, female, equal_var=True)[1]) # вывод в консоль # количество степеней свободы = 998 # t = 5.383 # p-value = 9.120185549328822e-08
Мы получили p-value < 0.05, что говорит о статистически значимом различии средних. Важно помнить, что p-value ничего не говорит о силе или величине эффекта различия. Потому что значимым может оказаться и малейшее различие.
Итак, если верить, что выборка была репрезентативна, а наша модель правильная, то различия в средних баллах по математике статистически значимы.
Продолжим наш разговор про статистику
При расчете статистики для критерия вручную мы должны посчитать количество степеней свободы и с помощью таблицы критических значений узнать, значим ли наш результат. То есть вы должны понять по таблице, входит ли ваше значение в критическую область при данных параметрах. Если значение вышло за критическую область, то это равносильно тому, что p-value < 0.05, а значит мы можем принять альтернативную гипотезу.
При расчете с помощью python мы получим готовое p-value сразу же, после чего нам лишь придется сравнить его с нашим уровнем значимости.
Количество степеней свободы — это количество значений или наблюдений в выборке, которые могут быть изменены независимо друг от друга без изменения ее структуры. Это количество влияет на форму распределения — чем больше степеней свободы, тем ближе распределение к нормальному.
Рассмотрим, как меняется t-распределение при разных степенях свободы:
fig, ax = plt.subplots(figsize = (9, 6)) x = np.linspace(-5, 5, 100) ax.plot(x, stats.norm.pdf(x, 0, 1), color='r') ax.plot(x, stats.t.pdf(x, df=5), color='g') ax.plot(x, stats.t.pdf(x, df=2)) ax.set_title('Форма распределения при увеличении степеней свободы', fontsize = 18) ax.set_xlim(-5, 5)ax.set_ylim(0, 0.45) ax.spines['right'].set_visible(False)ax.spines['top'].set_visible(False) ax.spines['left'].set_linewidth(0.2) ax.spines['bottom'].set_linewidth(0.2) plt.legend(['норм. распределение', 'ddof = 5', 'ddof = 2'])
Как можно заметить, "хвосты" уменьшаются, а распределение приближается к нормальному при увеличении числа степеней свободы
Критическое значение статистики — такое значение, при котором p-value равно уровню значимости при данном количестве степеней свободы. Таблицы с такими значениями можно найти в интернете.
Например, если бы мы выбрали, уровень значимости 0.05 для t-распределения с 10 степенями свободы, то вот мы могли бы визуализировать критическое значение:
Как можно увидеть из графика, критическое значение по определению это примерно 2,28.
Как считается p-value?
Допустим, мы знаем количество степеней свободы и посчитали наше значение статистики, значит мы знаем наше теоретическое распределение статистик.
Допустим, мы получили какое-то p-value. Если верна нулевая гипотеза, то вероятность получить такие или еще более выраженные различия абсолютно случайно равна p-value.
P-value так же является площадью под кривой распределения при значениях статистики, большей, чем наша наблюдаемая. А вот большей по модулю или нет определяет характер нашего тестирования гипотезы.
Статистические тесты гипотез бывают двусторонние и односторонние.
Односторонние тесты проверяют отклонение только в одну сторону, двусторонние же смотрят отклонения по модулю.
Односторонние тесты используются, когда отклонение в другую сторону в принципе невозможно, и мы в этом уверены.
Визуализация p-value для нашего примера с оценками по математике:
Рассмотрим более наглядные примеры p-value для одностороннего и двустороннего теста:
Пример, когда мы рассматриваем отклонения только в одну сторону:
Пример, когда мы рассматриваем отклонения по модулю (как в нашем примере):
Сайт, на котором можно визуализировать p-value
Ошибки
При тестировании гипотез мы можем совершать ошибки первого и второго рода.
Ошибка первого рода происходит, когда мы принимаем альтернативную гипотезу, когда на самом деле верна нулевая. Например, если мы получили p-value = 0.045, приняли альтернативную гипотезу, но в реальности оказалось, что наблюдаемые различия получены случайно.
Ошибка второго рода происходит, когда мы не принимаем альтернативную гипотезу, когда на самом деле она верна.
Ошибка второго рода — это как выкинуть настоящий алмаз, подумав, что это подделка.
Итоговый алгоритм проверки гипотезы:
- Формулируем нулевую и альтернативную гипотезы
- Выбираем уровень значимости
- Выбираем статистический критерий
- Проверяем предпосылки
- Счет статистики и p-value
- Делаем статистический вывод