Как проверить свои данные с помощью статистических тестов в Python

Как проверить свои данные с помощью статистических тестов в Python


Перейти по ссылкам

  • Что такое проверка гипотез?
  • Зачем нужны статистические тесты?
  • t-тест Стьюдента
  • Линейная регрессия
  • ANOVA
  • Непараметрические тесты

Наличие данных — это только половина дела. Как узнать, действительно ли ваши данные имеют значение? С помощью простого кода на Python вы можете быстро проверить, являются ли различия в данных действительно значимыми.

Что такое проверка гипотез?

В статистике проверка гипотез — это использование методов для подтверждения того, являются ли результаты выборки или группы выборок статистически значимыми. Иными словами, проверка гипотез определяет, являются ли результаты случайными или нет. Проверка гипотез количественно оценивает различия между выборками, чтобы определить, имеют ли они значение.

Исследователи обычно формулируют нулевую гипотезу, которая предполагает, что результаты не являются значимыми, а затем пытаются опровергнуть её в пользу альтернативной гипотезы, что результаты являются статистически значимыми. Это похоже на презумпцию невиновности в суде, где обвиняемый считается невиновным, пока его вина не доказана. Исследователи будут считать, что результаты не являются статистически значимыми, пока тест не отвергнет нулевую гипотезу.

Хорошим примером является клиническое исследование нового лекарства. Одной группе пациентов будет дан плацебо, а другой — тестируемое лекарство. Группы будут проверяться, чтобы определить, оказывает ли лекарство значимый эффект. Если лекарство предназначено для контроля артериального давления, тест может сравнивать систолическое артериальное давление между группами.

Ранее тесты проводились с использованием математических формул и таблиц, найденных в справочниках и в конце учебников по статистике; однако современное программное обеспечение, включая библиотеки Python, значительно ускоряет эту работу. Это еще одна причина, по которой Python так хорош для продвинутого анализа данных.

Статистическое тестирование обычно проводится в пределах определенного порога, известного как уровень альфа. Чтобы быть уверенным в результатах на 95%, альфа составила бы 0,05, что соответствует 5% уровню значимости. Если вы хотите быть уверенным на 99%, альфа составила бы 0,01. Это формирует p-значение, которое нужно проверить, чтобы принять или отвергнуть нулевую гипотезу. На уровне 95% вы отвергнете нулевую гипотезу, если p-значение будет ниже 0,05, а на уровне 99% — если оно будет ниже 0,01.

Ранняя версия этой статьи смешала определения ложноположительных и ложноотрицательных результатов. Ошибка типа I — это ложноположительный результат, а ошибка типа II — ложноотрицательный результат. HTG сожалеет об этой ошибке.

В тестировании гипотез возможно совершение двух основных ошибок. Ошибка первого рода, или ложноположительная ошибка, возникает, когда вы отвергаете гипотезу, которую следует принять. Ошибка второго рода, или ложоотрицательная ошибка, возникает, когда вы принимаете гипотезу, которую следует отвергнуть.

Ошибки в проверке гипотез могут иметь серьезные последствия, например, в клинических испытаниях, когда принимается альтернативная гипотеза о том, что лекарство эффективно, хотя на самом деле оно может быть неэффективным или даже вредным. Лучшая защита от обоих типов ошибок — иметь как можно больший объем выборки.

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

Зачем нужны статистические тесты?

Статистические тесты используются, потому что самостоятельно довольно трудно понять, имеет ли данные какой-либо смысл. Если фармацевтическая компания собирается выводить на рынок новый препарат, необходимо показать, что препарат действительно работает. Здесь и нужны клинические испытания. Или вы можете работать в сфере, такой как маркетинговые исследования, где вы хотите показать, что потребители, которые покупают один продукт, с большой вероятностью купят и другой.

Статистические тесты — это не только проведение вычислений, но и критическое осмысление данных.

t-тест Стьюдента

Статистическое тестирование обычно вводится на начальных курсах статистики с использованием нормального распределения, с известной колоколообразной кривой, потому что его расчеты просты. Однако для большинства реальных исследований это непрактично по двум причинам: требуется знание стандартного отклонения популяции, которого исследователь, скорее всего, не будет иметь, а также нужны большие размер выборки, что может быть сложно получить исследователям.

Чтобы преодолеть эти ограничения, там, где распределение данных похоже на нормальное распределение, в большинстве реальных исследований вместо этого используется t-тест Стьюдента. Нулевая гипотеза обычно заключается в том, что среднее значение выборки равно какому-либо значению или что средние двух выборок равны.

Библиотека Pingouin полезна для проведения статистических тестов, включая t-тест.

Я смоделирую тест, используя случайно сгенерированные числа из нормального распределения. Сначала я импортирую NumPy и вызову генератор случайных чисел.

import numpy as np rng = np.random.default_rng()      

Вы можете посмотреть этот и другие примеры кода в Jupyter notebook, который я разместил на своей странице GitHub. Теперь давайте сгенерируем небольшой образец значений из нормального распределения, состоящий из 15 элементов.

a = rng.standard_normal(15)

Т-тест предполагает, что значения имеют нормальное распределение. Мы знаем, что в этой выборке они нормально распределены, потому что были сгенерированы из нормального распределения, но Pingouin имеет тест, который позволяет определить это с использованием теста Шапиро-Уилка для малых выборок.

import pingouin as pg pg.normality(a)      

Давайте проверим это на нулевую гипотезу с помощью библиотеки Pingouin, исходя из того, что среднее значение этой выборки равно 0,45:

pg.ttest(a,.45)

Значение p равно 0,99, что означает, что мы не можем отвергнуть нулевую гипотезу ни на уровне значимости 0,05, ни на уровне 0,01.

Линейная регрессия

Вы, возможно, видели линейную регрессию, когда подбирается прямая линия по набору точек данных, но возможно, вы не знали, что при этом проводится статистический тест. Модель линейной регрессии Pinguin сообщает t-статистику и p-значение. Это проверяет нулевую гипотезу о том, что наклон или крутизна линии регрессии равны 0, то есть линия горизонтальна. Значение p настолько мало, что здесь оно представлено в научной нотации.

Мы можем визуализировать регрессию с помощью другой библиотеки — Seaborn. Seaborn включает множество тестовых данных. Мы будем использовать набор данных о чаевых в ресторанах Нью-Йорка. Загрузим его:

import seaborn as sns tips = sns.load_dataset('tips')     

Мы рассмотрим набор данных, чтобы увидеть, какие поля доступны. Это объект pandas DataFrame, который похож на базу данных SQL. Мы используем метод head:

tips.head()      

Давайте сравним общий счет с размером чаевых. Мы построим линию регрессии на диаграмме рассеяния, где чаевые зависят от счета, с счетом по оси X и чаевыми по оси Y:

sns.regplot(x='total_bill',y='tip')     

Вы могли бы заметить, что это, похоже, подходит.

Мы также можем использовать метод linear_regression из Pingouin для более формального анализа, а также округлить значения, чтобы их было легче увидеть:

pg.linear_regression(tips['tip'],tips['total_bill']).round(2)     

Вы можете видеть значения коэффициентов для линии регрессии, но обратите внимание на t-значение и p-значение. Это показывает, что мы можем отвергнуть нулевую гипотезу о том, что наклон равен 0. Чем дальше наклон от 0, тем больше t-значение. В этом примере t-значение равно 14,26. P-значение равно 0,0, что указывает на то, что результаты будут значимыми при любом уровне альфа.

ANOVA

В то время как t-тест сравнивает одну или несколько выборок, а регрессия исследует связи между одной переменной и другой, ANOVA, или анализ дисперсии, рассматривает значение внутри категории. Мы снова воспользуемся Pingouin, чтобы изучить длину ласт пингвинов среди видов. Для нулевой гипотезы мы будем исходить из того, что между видами нет различий

penguins = pg.read_dataset('penguins') pg.anova(data=penguins,dv='flipper_length_mm',between='species').round(2)      

Поскольку p-значение равно 0.0, мы можем отклонить нулевую гипотезу и сделать вывод, что вид является значимым предиктором длины ласты.

Непараметрические тесты

Распространённая проблема статистических тестов заключается в том, что они предполагают, что данные следуют определённому распределению. Например, t-тест предполагает, что данные нормально распределены. Многие реальные данные, особенно полученные в результате человеческой деятельности, имеют перекос. Непараметрические тесты пытаются обойти это, не предполагая конкретного распределения данных.

Тест Манна — Уитни является непараметрическим аналогом t-критерия Стьюдента. Он также включён в Pingouin. Сначала давайте сгенерируем два списка случайных чисел:

a = rng.random(15) b = rng.random(15)     

Давайте проверим, равны ли средние значения, используя критерий Манна — Уитни:

pg.mwu(a,b)

Существует также непараметрическая версия ANOVA — критерий Крускала-Уиллиса. Мы можем использовать его снова с нашими данными о пингвинах:

pg.kruskal(data=penguins,dv='flipper_length_mm',between='species').round(2)      

У нас аналогичные результаты с нашим первоначальным тестом ANOVA, показывающие, что вид является значимым предиктором длины плавника.


Статистическое тестирование в Python предоставляет способ убедиться, что ваши данные имеют значение. Проверка данных занимает всего несколько секунд.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *