Учебное пособие по R ANOVA: односторонний и двусторонний (с примерами)

Что такое АНОВА?

Дисперсионный анализ (ANOVA) — это статистический метод, обычно используемый для изучения различий между двумя или более групповыми средними значениями. Тест ANOVA сосредоточен на различных источниках вариаций типичной переменной. ANOVA в R в первую очередь свидетельствует о существовании равенства средних между группами. Этот статистический метод является расширением t-теста. Он используется в ситуации, когда факторная переменная имеет более одной группы.

Односторонний ANOVA

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

  • Команда: коэффициент 3-го уровня: A, B и C.
  • Продажа: показатель эффективности

Тест ANOVA может определить, имеют ли три группы схожие показатели.

Чтобы уточнить, получены ли данные из одной и той же совокупности, вы можете выполнить односторонний дисперсионный анализ (односторонний дисперсионный анализ далее). Этот тест, как и любой другой статистический тест, показывает, можно ли принять или отвергнуть гипотезу H0.

Гипотеза в однофакторном тесте ANOVA

  • H0: средние значения между группами идентичны.
  • H3: По крайней мере, среднее значение одной группы отличается

Другими словами, гипотеза H0 подразумевает, что недостаточно доказательств того, что средние значения группы (фактора) отличаются от других.

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

Предположения

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

Интерпретация теста ANOVA

F-статистика используется для проверки того, взяты ли данные из значительно разных групп населения, т. е. из разных выборочных средних значений.

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

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

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

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

Интерпретация теста ANOVA

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

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

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

В правой части показаны точно такие же выборки (идентичное среднее), но с меньшей вариабельностью. Это приводит к повышению F-теста и склоняет в пользу альтернативной гипотезы.

Интерпретация теста ANOVA

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

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

Пример одностороннего теста ANOVA

Вы будете использовать набор подозрительных данных для реализации одностороннего теста ANOVA. Набор данных содержит 48 строк и 3 переменные:

  • Время: Время выживания животного
  • яд: Тип используемого яда: уровень фактора: 1,2 и 3.
  • лечить: Тип использованного лечения: уровень фактора: 1,2 и 3

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

  • Шаг 1. Импортируйте данные
  • Шаг 2. Удалите ненужную переменную.
  • Шаг 3. Преобразуйте переменную яд в упорядоченный уровень.
library(dplyr)
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/poisons.csv"
df <- read.csv(PATH) %>%
select(-X) %>% 
mutate(poison = factor(poison, ordered = TRUE))
glimpse(df)

Вывод:

## Observations: 48
## Variables: 3
## $ time   <dbl> 0.31, 0.45, 0.46, 0.43, 0.36, 0.29, 0.40, 0.23, 0.22, 0...
## $ poison <ord> 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2...
## $ treat  <fctr> A, A, A, A, A, A, A, A, A, A, A, A, B, B, B, B, B, B, ...		

Наша цель — проверить следующее предположение:

  • H0: Нет никакой разницы в среднем времени выживания между группами.
  • H3: Среднее время выживания различно как минимум для одной группы.

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

Вы будете действовать следующим образом:

  • Шаг 1. Проверьте формат переменной яд.
  • Шаг 2. Распечатайте сводную статистику: количество, среднее значение и стандартное отклонение.
  • Шаг 3. Постройте коробчатую диаграмму
  • Шаг 4. Вычислите однофакторный тест ANOVA.
  • Шаг 5. Запустите парный t-тест.

Шаг 1) Вы можете проверить уровень яда с помощью следующего кода. Вы должны увидеть три символьных значения, поскольку вы конвертируете их в коэффициент с помощью команды mutate.

levels(df$poison)

Вывод:

## [1] "1" "2" "3"

Шаг 2) Вы вычисляете среднее и стандартное отклонение.

df % > %
	group_by(poison) % > %
	summarise(
		count_poison = n(),
		mean_time = mean(time, na.rm = TRUE),
		sd_time = sd(time, na.rm = TRUE)
	)

Вывод:

## 
# A tibble: 3 x 4
##   poison count_poison mean_time    sd_time
##    <ord>        <int>     <dbl>      <dbl>
## 1      1           16  0.617500 0.20942779
## 2      2           16  0.544375 0.28936641
## 3      3           16  0.276250 0.06227627

Шаг 3) На третьем этапе вы можете графически проверить, есть ли разница между распределениями. Обратите внимание, что вы включаете дрожащую точку.

ggplot(df, aes(x = poison, y = time, fill = poison)) +
    geom_boxplot() +
    geom_jitter(shape = 15,
        color = "steelblue",
        position = position_jitter(0.21)) +
    theme_classic()

Вывод:

Пример одностороннего теста ANOVA

Шаг 4) Вы можете запустить односторонний тест ANOVA с помощью команды aov. Основной синтаксис теста ANOVA:

aov(formula, data)
Arguments:			
- formula: The equation you want to estimate
- data: The dataset used	

Синтаксис формулы:

y ~ X1+ X2+...+Xn # X1 +  X2 +... refers to the independent variables
y ~ . # use all the remaining variables as independent variables

Вы можете ответить на наш вопрос: Есть ли разница во времени выживания морских свинок, зная тип введенного яда.

Обратите внимание: рекомендуется сохранить модель и использовать функцию summary(), чтобы лучше распечатать результаты.

anova_one_way <- aov(time~poison, data = df)
summary(anova_one_way)

Код Пояснение

  • aov(время ~ яд, данные = df): Запустите тест ANOVA по следующей формуле
  • summary(anova_one_way): Распечатать сводку теста.

Вывод:

##             Df Sum Sq Mean Sq F value   Pr(>F)
## poison       2  1.033  0.5165   11.79 7.66e-05 ***
## Residuals   45  1.972  0.0438                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Значение p ниже обычного порога 0.05. Вы с уверенностью можете сказать, что между группами, отмеченными знаком «*», существует статистическая разница.

Попарное сравнение

Односторонний тест ANOVA не сообщает, какая группа имеет другое среднее значение. Вместо этого вы можете выполнить тест Тьюки с помощью функции TukeyHSD().

TukeyHSD(anova_one_way)

Вывод:

Попарное сравнение

Двухсторонний ANOVA

Двусторонний тест ANOVA добавляет в формулу еще одну групповую переменную. Он идентичен однофакторному тесту ANOVA, но формула немного меняется:

у=х1+х2

with — количественная переменная, а и — категориальные переменные.

Гипотеза в двустороннем тесте ANOVA

  • H0: средние значения равны для обеих переменных (т. е. факторной переменной).
  • H3: средние значения для обеих переменных разные.

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

Мы корректируем наш код, добавляя обработку с другой независимой переменной.

anova_two_way <- aov(time~poison + treat, data = df)
summary(anova_two_way)

Вывод:

##             Df Sum Sq Mean Sq F value  Pr(>F)    
## poison       2 1.0330  0.5165   20.64 5.7e-07 ***
## treat        3 0.9212  0.3071   12.27 6.7e-06 ***
## Residuals   42 1.0509  0.0250                    
## ---

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

Резюме

Мы можем суммировать тест в таблице ниже:

Тест Code Гипотеза Р-значение
Односторонний дисперсионный анализ
aov(y ~ X, data = df)
H3: Среднее значение отличается как минимум для одной группы 0.05
парный
TukeyHSD(ANOVA summary)
0.05
Двухсторонний дисперсионный анализ
aov(y ~ X1 + X2, data = df)
H3: Среднее значение разное для обеих групп 0.05