Как выполнить двухсторонний ANOVA в Python


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

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

В этом руководстве объясняется, как провести двусторонний ANOVA в Python.

Пример: двухфакторный дисперсионный анализ в Python

Ботаник хочет знать, влияет ли на рост растений воздействие солнечного света и частота полива. Она сажает 30 семян и позволяет им расти в течение двух месяцев при различных условиях солнечного света и частоты полива. Через два месяца она записывает высоту каждого растения в дюймах.

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

Шаг 1: Введите данные.

Во-первых, мы создадим DataFrame pandas, который содержит следующие три переменные:

  • вода: как часто поливалось каждое растение: ежедневно или еженедельно
  • солнце: сколько солнечного света получило каждое растение: низкое, среднее или высокое
  • высота: высота каждого растения (в дюймах) через два месяца
import numpy as np
import pandas as pd

#create data
df = pd.DataFrame({'water': np.repeat(['daily', 'weekly'], 15),
 'sun': np.tile(np.repeat(['low', 'med', 'high'], 5), 2),
 'height': [6, 6, 6, 5, 6, 5, 5, 6, 4, 5,
 6, 6, 7, 8, 7, 3, 4, 4, 4, 5,
 4, 4, 4, 4, 4, 5, 6, 6, 7, 8]})

#view first ten rows of data 
df[:10]

 water sun height
0 daily low 6
1 daily low 6
2 daily low 6
3 daily low 5
4 daily low 6
5 daily med 5
6 daily med 5
7 daily med 6
8 daily med 4
9 daily med 5

Шаг 2: Выполните двусторонний ANOVA.

Далее мы выполним двусторонний ANOVA, используя функцию anova_lm() из библиотеки statsmodels:

import statsmodels.api as sm
from statsmodels.formula.api import ols

#perform two-way ANOVA
model = ols('height ~ C(water) + C(sun) + C(water):C(sun)', data=df).fit()
sm.stats.anova_lm(model, typ=2)

 sum_sq df F PR(>F)
C(water) 8.533333 1.0 16.0000 0.000527
C(sun) 24.866667 2.0 23.3125 0.000002
C(water):C(sun) 2.466667 2.0 2.3125 0.120667
Residual 12.800000 24.0 NaN NaN

Шаг 3: Интерпретируйте результаты.

Мы можем видеть следующие p-значения для каждого из факторов в таблице:

  • вода: p-значение = 0,000527
  • солнце: p-значение = 0,0000002
  • вода * солнце: p-значение = 0,120667

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

А поскольку p-значение для эффекта взаимодействия (0,120667) составляет не менее 0,05, это говорит нам об отсутствии значительного эффекта взаимодействия между воздействием солнечного света и частотой полива.

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

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в Python:

Как выполнить односторонний ANOVA в Python
Как выполнить трехсторонний ANOVA в Python