Получите представление о критериях хи-квадрат и ANOVA.

Я не буду вдаваться в подробности того, что такое тесты хи-квадрат или ANOVA. Я просто решу несколько вопросов, связанных с этими тестами, используя Python.

Вопросы взяты из видео и книг на YouTube. Я предоставлю ссылки в разделе ссылок.

Для каждой проблемы выбран уровень значимости 0,05.

Тест независимости хи-квадрат

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

Допущения хи-квадрата включают

  1. Данные в ячейках должны быть частотами или количеством случаев, а не процентами или каким-либо другим преобразованием данных.
  2. Уровни (или категории) переменных являются взаимоисключающими.
  3. Ваши две переменные должны быть измерены на порядковом или номинальном уровне (т. е. категориальные данные).

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

H0: The two variables are independent.
H1: The two variables are not independent.

Рассмотрим следующую таблицу данных.

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

data = [[100, 150, 20],
        [20, 30, 180]]
H0 : Gender and favorite color are not related.

Импортируйте необходимые библиотеки и выполните тест.

import scipy.stats as stats
from scipy.stats import chi2
#perform the Chi-Square Test of Independence
stats.chi2_contingency(data, correction=True)

Вывод кода будет

(259.79602791196993,
 3.8548663789964316e-57,
 2,
 array([[ 64.8,  97.2, 108. ],
        [ 55.2,  82.8,  92. ]]))

Способ интерпретации вывода следующий:

chi-square test statistic:259.79
p-value:3.8548663789964316e-57
degrees-of-freedom: 2 (calculated as #rows-1 * #columns-1)
Array: The last array displays the expected values for each cell in the contingency table.

Поскольку p-значение (3,854e-57) теста меньше 0,05, мы отвергаем нулевую гипотезу. Это означает, что у нас есть достаточно доказательств, чтобы сказать, что существует связь между полом и любимым цветом.

Хи-квадрат критерия согласия

Критерий согласия хи-квадрат используется для определения того, следует ли категориальная переменная гипотетическому распределению.

H0: A variable follows a hypothesized distribution.
H1: A variable does not follow a hypothesized distribution.

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

week      = ['Sun','Mon','Tue','Wed','Thurs','Fri','Sat']
accidents = [14, 16, 8, 12, 11, 9, 14]
H0: The accidents are uniformly distributed over the week.
H1: The accidents are not uniformly distributed over the week

Рассчитать ожидаемую стоимость

observed = [14, 16, 8, 12, 11, 9, 14]
expected_value = 0
for i in observed:
    expected_value = i + expected_value
expected_value = expected_value/len(observed)
expected_data = [int(expected_value) for i in range(len(observed))]
print(expected_data)
# [12, 12, 12, 12, 12, 12, 12]

Итак, имеем следующее

observed = [14, 16, 8, 12, 11, 9, 14]
expected = [12, 12, 12, 12, 12, 12, 12]

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

statistic, pvalue = stats.chisquare(f_obs=observed, 
                                        f_exp= expected)
statistic, pvalue
(4.166666666666667, 0.6541333169963821)

Статистический показатель теста хи-квадрат равен 4,166, а соответствующее значение p равно 0,654.

Поскольку p-значение (0,654) не меньше 0,05, мы не можем отвергнуть нулевую гипотезу. То есть авиакатастрофы распределяются равномерно в течение недели.

Мы можем пойти немного дальше и вычислить критическое значение.

critical_value = chi2.ppf(q=1-alpha, df=len(observed)-1)
print('critical_value:',critical_value)
#critical_value: 12.591587243743977

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

if statistic < critical_value:
    print('We accept the null hypothesis')
else:
    print('We reject null hypothesis')
# We accept the null hypothesis

Анова-Тест

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

Однофакторный дисперсионный анализ («дисперсионный анализ») сравнивает средние значения трех или более независимых групп, чтобы определить, существует ли статистически значимая разница между соответствующими средними значениями генеральной совокупности.

Однофакторный дисперсионный анализ: предположения

  1. Нормальность — каждая выборка была взята из нормально распределенной популяции.
  2. Равные дисперсии — дисперсии совокупностей, из которых взяты выборки, равны.
  3. Независимость. Наблюдения в каждой группе независимы друг от друга, а наблюдения внутри групп были получены путем случайной выборки.
H0 : μ1 = μ2 = μ3 = … = μk (all the population means are equal)
H1 : at least one population mean is different from the rest

Допустим, вы хотите выяснить, влияет ли напиток, который пьют люди, на время их реакции. Итак, вы поставили эксперимент с тремя группами людей. Первая группа получает воду для питья, вторая – сок, а третья – кофе.

group_water  = [29, 30, 31, 31, 29]
group_juice  = [28, 29, 27, 30, 29]
group_coffee = [25, 28, 29, 27, 29]

(Если бы у вас было только 2 группы, вы могли бы использовать t-критерий).

Учитывая, что у вас есть 3 группы, вы должны использовать дисперсионный анализ.

Вариация баллов состоит из двух частей.

  • Вариация внутри каждой группы
  • Вариация между группами.

F = (межгрупповая дисперсия)/(внутригрупповая дисперсия)

Импортируйте нужную библиотеку и рассчитайте вариацию внутри каждой группы.

import numpy as np
from scipy.stats import f_oneway
print(np.std(group_water))
print(np.std(group_juice))
print(np.std(group_coffee))
# 0.8944271909999159
# 1.019803902718557
# 1.4966629547095764

Теперь, чтобы выполнить тест ANOVA

f_oneway(group_water, group_juice, group_coffee)
# F_onewayResult(statistic=4.2745098039215685,
                                  pvalue=0.03965891577699055)

Поскольку это p-значение меньше 0,05, мы принимаем альтернативную гипотезу.
То есть напиток действительно влияет на время реакции.

Двусторонний дисперсионный анализ

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

Чтобы результаты двухфакторного дисперсионного анализа были достоверными, должны выполняться следующие допущения:

  1. Нормальность — переменная ответа примерно нормально распределена для каждой группы.
  2. Равные отклонения — отклонения для каждой группы должны быть примерно равными.
  3. Независимость. Наблюдения в каждой группе независимы друг от друга, а наблюдения внутри групп были получены путем случайной выборки.

Исследователь хочет знать, влияют ли на результаты теста пол или возраст, или и то, и другое. Она собирает информацию об этом эксперименте. Собранные ею данные выглядят следующим образом. (Я воспроизвел данные с помощью pandas и numpy)

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
data = pd.DataFrame({'Gender': np.tile(np.repeat(['Boys', 'Girls'], 3),3),
                   'Age': np.repeat(['10', '11', '12'], 6),
                   'Score': [4,6,8,4,8,9,
                             6,6,9,7,10,13,
                             8,9,13,12,14,16
                   
                              ]
                  })
data

Собранные данные

model = ols('Score ~ C(Age) + C(Gender) + C(Gender) * C(Age)', 
                                             data = data).fit()               
sm.stats.anova_lm(model, typ=2)

Поскольку p-значение пола (0,035) меньше 0,05, это означает, что пол оказывает значительное влияние на результаты теста.

Поскольку p-значение возраста (0,006) меньше 0,05, это означает, что возраст оказывает значительное влияние на результаты теста.

Поскольку p-значение возраста и пола (0,556) больше, чем 0,05, мы можем сказать, что взаимодействие пола и возраста (комбинированное) не оказывает существенного влияния на результаты теста.

Рекомендации

Однофакторный дисперсионный анализ: https://www.youtube.com/watch?v=ITf4vHhyGpc&ab_channel=JDavidEisenberg

Хи-квадрат качества теста: https://tranquileducation.weebly.com/uploads/1/3/7/6/13765138/question_i__nov-dec_2010.pdf

Тест независимости хи-квадрат: https://www.youtube.com/watch?v=LE3AIyY_cn8&ab_channel=statslectures

Двусторонний дисперсионный анализ (часть 1) : https://www.youtube.com/watch?v=lZFmFuZGQTk&ab_channel=statisticsfun

Двусторонний дисперсионный анализ (часть 2):https://www.youtube.com/watch?v=cNIIn9bConY&ab_channel=statisticsfun

Двусторонний дисперсионный анализ (часть 3):https://www.youtube.com/watch?v=ajLdnsLPErE&ab_channel=statisticsfun