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


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

В следующем примере показано, как выполнить трехсторонний ANOVA в R.

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

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

Исследователь подозревает, что пол и дивизион (дивизион I или II) также могут влиять на высоту прыжка, поэтому он собирает данные и по этим факторам.

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

Используйте следующие шаги, чтобы выполнить этот трехсторонний ANOVA в R:

Шаг 1: Создайте данные

Во-первых, давайте создадим фрейм данных для хранения данных:

#create dataset
df <- data.frame(program=rep(c(1, 2), each= 20 ),
 gender=rep(c('M', 'F'), each= 10 , times= 2 ),
 division=rep(c(1, 2), each= 5 , times= 4 ),
 height=c(7, 7, 8, 8, 7, 6, 6, 5, 6, 5,
 5, 5, 4, 5, 4, 3, 3, 4, 3, 3,
 6, 6, 5, 4, 5, 4, 5, 4, 4, 3,
 2, 2, 1, 4, 4, 2, 1, 1, 2, 1)) 

#view first six rows of dataset
head(df)

 program gender division height
1 1 M 1 7
2 1 M 1 7
3 1 M 1 8
4 1 M 1 8
5 1 M 1 7
6 1 M 2 6

Шаг 2. Просмотр описательной статистики

Перед выполнением трехфакторного дисперсионного анализа мы можем использовать dplyr , чтобы быстро суммировать среднее увеличение высоты прыжка, сгруппированное по тренировочной программе, полу и дивизиону:

library(dplyr)

#calculate mean jumping height increase grouped by program, gender, and division
df %>%
 group_by(program, gender, division) %>%
 summarize(mean_height = mean(height))

# A tibble: 8 x 4
# Groups: program, gender [4]
 program gender division mean_height

1 1 F 1 4.6
2 1 F 2 3.2
3 1 M 1 7.4
4 1 M 2 5.6
5 2 F 1 2.6
6 2 F 2 1.4
7 2 M 1 5.2
8 2 M 2 4

Вот как интерпретировать вывод:

  • Среднее увеличение высоты прыжка среди женщин первого дивизиона, использовавших тренировочную программу 1, составило 4,6 дюйма .
  • Среднее увеличение высоты прыжка среди женщин II дивизиона, использовавших тренировочную программу 1, составило 3,2 дюйма .
  • Среднее увеличение высоты прыжка среди мужчин дивизиона I, использовавших тренировочную программу 1, составило 7,4 дюйма .

И так далее.

Шаг 3. Выполните трехсторонний дисперсионный анализ.

Затем мы можем использовать функцию aov() для выполнения трехфакторного дисперсионного анализа:

#perform three-way ANOVA
model <- aov(height ~ program \* gender \* division, data=df)

#view summary of three-way ANOVA
summary(model)

 Df Sum Sq Mean Sq F value Pr(>F) 
program 1 36.1 36.10 65.636 2.98e-09 \*\*\*
gender 1 67.6 67.60 122.909 1.71e-12 \*\*\*
division 1 19.6 19.60 35.636 1.19e-06 \*\*\*
program:gender 1 0.0 0.00 0.000 1.000 
program:division 1 0.4 0.40 0.727 0.400 
gender:division 1 0.1 0.10 0.182 0.673 
program:gender:division 1 0.1 0.10 0.182 0.673 
Residuals 32 17.6 0.55 
---
Signif. codes: 0 '\*\*\*' 0.001 '\*\*' 0.01 '\*' 0.05 '.' 0.1 ' ' 1

Столбец Pr(>F) показывает p-значение для каждого отдельного фактора и взаимодействия между факторами.

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

Мы также можем видеть, что каждый из трех факторов — программа, пол и подразделение — были статистически значимыми.

Теперь мы можем снова использовать dplyr, чтобы найти среднее увеличение высоты прыжка для программы, пола и дивизиона отдельно:

library(dplyr)

#find mean jumping increase by program
df %>%
 group_by(program) %>%
 summarize(mean_height = mean(height))

# A tibble: 2 x 2
 program mean_height

1 1 5.2
2 2 3.3

#find mean jumping increase by gender
df %>%
 group_by(gender) %>%
 summarize(mean_height = mean(height))

# A tibble: 2 x 2
 gender mean_height

1 F 2.95
2 M 5.55

#find mean jumping increase by division
df %>%
group_by(division) %>%
summarize(mean_height = mean(height))

# A tibble: 2 x 2
 division mean_height

1 1 4.95
2 2 3.55

Из вывода мы можем наблюдать следующее:

  • Среднее увеличение высоты прыжка среди людей, которые использовали тренировочную программу 1 ( 5,2 дюйма ), было выше, чем среднее увеличение среди людей, которые использовали тренировочную программу 2 (3,3 дюйма ).
  • Среднее увеличение высоты прыжка у мужчин ( 5,55 дюйма ) было выше, чем у женщин (2,95 дюйма ).
  • Среднее увеличение высоты прыжка среди игроков 1-го дивизиона ( 4,95 дюйма ) было выше, чем среднее увеличение среди игроков 2-го дивизиона (3,55 дюйма ).

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

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

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

В следующих руководствах объясняется, как подогнать другие модели ANOVA в R:

Как выполнить односторонний ANOVA в R
Как выполнить двухфакторный дисперсионный анализ в R

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