Как выполнить двухсторонний 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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.