Дисперсионный анализ Уэлча является альтернативой типичному однофакторному дисперсионному анализу , когда нарушается допущение о равных дисперсиях .
В следующем пошаговом примере показано, как выполнить дисперсионный анализ Уэлча в Python.
Шаг 1: Создайте данные
Чтобы определить, приводят ли три разных метода обучения к разным экзаменационным баллам, профессор случайным образом назначает 10 студентов для использования каждого метода (метода A, B или C) в течение одной недели, а затем заставляет каждого студента сдать экзамен одинаковой сложности.
Экзаменационные баллы 30 студентов показаны ниже:
A = [64, 66, 68, 75, 78, 94, 98, 79, 71, 80]
B = [91, 92, 93, 90, 97, 94, 82, 88, 95, 96]
C = [79, 78, 88, 94, 92, 85, 83, 85, 82, 81]
Шаг 2: Тест на равные отклонения
Затем мы можем выполнить тест Бартлетта, чтобы определить, равны ли дисперсии между каждой группой.
Если p-значение тестовой статистики меньше некоторого уровня значимости (например, α = 0,05), то мы можем отклонить нулевую гипотезу и сделать вывод, что не все группы имеют одинаковую дисперсию.
Мы можем использовать следующий код для выполнения теста Бартлетта в Python:
import scipy. stats as stats
#perform Bartlett's test
stats. bartlett (A, B, C)
BartlettResult(statistic=9.039674395, pvalue=0.010890796567)
Значение p ( 0,01089 ) из теста Бартлетта меньше, чем α = 0,05, что означает, что мы можем отвергнуть нулевую гипотезу о том, что каждая группа имеет одинаковую дисперсию.
Таким образом, предположение о равных дисперсиях нарушается, и мы можем приступить к выполнению дисперсионного анализа Уэлча.
Шаг 3. Выполните дисперсионный анализ Уэлча.
Чтобы выполнить дисперсионный анализ Уэлча в Python, мы можем использовать функцию welch_anova() из пакета Pingoin.
Во-первых, нам нужно установить Pingoin:
pip install Pingouin
Затем мы можем использовать следующий код для выполнения дисперсионного анализа Уэлча:
import pingouin as pg
import pandas as pd
import numpy as np
#create DataFrame
df = pd.DataFrame({'score': [64, 66, 68, 75, 78, 94, 98, 79, 71, 80,
91, 92, 93, 90, 97, 94, 82, 88, 95, 96,
79, 78, 88, 94, 92, 85, 83, 85, 82, 81],
'group ': np.repeat(['a', 'b', 'c'], repeats = 10 )})
#perform Welch's ANOVA
pg. welch_anova (dv='score', between='group', data=df)
Source ddof1 ddof2 F p-unc np2
0 group 2 16.651295 9.717185 0.001598 0.399286
Общее значение p ( 0,001598 ) из таблицы ANOVA меньше, чем α = 0,05, что означает, что мы можем отклонить нулевую гипотезу о том, что экзаменационные баллы равны между тремя методами обучения.
Затем мы можем выполнить апостериорный тест Games-Howell, чтобы точно определить, какие групповые средние значения отличаются:
pg. pairwise_gameshowell (dv='score', between='group', data=df)
A B mean(A) mean(B) diff se T df pval
0 a b 77.3 91.8 -14.5 3.843754 -3.772354 11.6767 0.0072
1 a c 77.3 84.7 -7.4 3.952777 -1.872102 12.7528 0.1864
2 b c 91.8 84.7 7.1 2.179959 3.256942 17.4419 0.0119
Из p-значений видно, что средняя разница между группами a и b значительно отличается, а средняя разница между группами b и c значительно отличается.
Дополнительные ресурсы
Как выполнить односторонний ANOVA в Python
Как выполнить двухсторонний ANOVA в Python
Как выполнить дисперсионный анализ с повторными измерениями в Python