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


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

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

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

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

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

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

Выполните следующие шаги, чтобы выполнить этот трехфакторный дисперсионный анализ в 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 дюйма .
  • Среднее увеличение высоты прыжка среди женщин второго дивизиона, использовавших тренировочную программу 1, составило 3,2 дюйма .
  • Среднее увеличение высоты прыжка среди мужчин первого дивизиона, использовавших тренировочную программу 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                     
---
Significant. 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
2M 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:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *