Двухфакторный дисперсионный анализ используется для определения того, существует ли статистически значимая разница между средними значениями трех или более независимых групп, разделенных на два фактора.
Цель двустороннего 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