Підручник R ANOVA: односторонній і двосторонній (з прикладами)
Що таке ANOVA?
Дисперсійний аналіз (ANOVA) — це статистичний метод, який зазвичай використовується для вивчення відмінностей між двома або більше груповими середніми. Тест ANOVA зосереджений на різних джерелах варіації типової змінної. ANOVA в R в першу чергу надає докази існування середньої рівності між групами. Цей статистичний метод є розширенням t-тесту. Він використовується в ситуації, коли факторна змінна має більше однієї групи.
Одностороння ANOVA
Є багато ситуацій, коли вам потрібно порівняти середнє між кількома групами. Наприклад, відділ маркетингу хоче знати, чи три команди мають однакову ефективність продажів.
- Команда: 3 коефіцієнти рівня: A, B і C
- Продаж: міра ефективності
Тест ANOVA може визначити, чи три групи мають однакові результати.
Щоб уточнити, чи надходять дані з однієї сукупності, ви можете виконати a односторонній дисперсійний аналіз (односторонній ANOVA далі). Цей тест, як і будь-який інший статистичний тест, дає докази того, чи можна прийняти або відхилити гіпотезу H0.
Гіпотеза в односторонньому тесті ANOVA
- H0: середні значення між групами ідентичні
- H3: Принаймні, середнє для однієї групи відрізняється
Іншими словами, гіпотеза H0 означає, що немає достатньо доказів, щоб підтвердити, що середнє значення групи (фактора) відрізняється від іншого.
Цей тест подібний до t-критерію, хоча тест ANOVA рекомендований у ситуації з більш ніж 2 групами. Крім того, t-тест і ANOVA дають подібні результати.
Припущення
Ми припускаємо, що кожен фактор є випадковою вибіркою, незалежний і походить від нормально розподіленої сукупності з невідомими, але рівними дисперсіями.
Інтерпретація тесту ANOVA
F-статистика використовується для перевірки того, чи отримані дані від суттєво різних популяцій, тобто різні вибіркові середні значення.
Щоб обчислити F-статистику, потрібно розділити міжгрупова мінливість за внутрішньогрупова мінливість.
Команда міжгруповий мінливість відображає відмінності між групами всередині всього населення. Подивіться на два графіки нижче, щоб зрозуміти концепцію міжгрупової дисперсії.
Лівий графік показує дуже незначну варіацію між трьома групами, і дуже ймовірно, що три середні мають тенденцію до загальний середнє (тобто середнє для трьох груп).
Правий графік показує три розподіли далеко один від одного, і жоден із них не перекривається. Є висока ймовірність, що різниця між загальним середнім і середнім значенням груп буде великою.
Команда всередині групи мінливість враховує різницю між групами. Варіація походить від індивідуальних спостережень; деякі пункти можуть бути зовсім іншими, ніж означає група. The всередині групи мінливість вловлює цей ефект і посилається на помилку вибірки.
Щоб наочно зрозуміти концепцію внутрішньогрупової мінливості, подивіться на графік нижче.
У лівій частині зображено розподіл трьох різних груп. Ви збільшили розкид кожної вибірки, і очевидно, що індивідуальна дисперсія велика. F-тест зменшиться, тобто ви схильні приймати нульову гіпотезу
Права частина показує точно такі ж зразки (ідентичне середнє), але з меншою мінливістю. Це призводить до збільшення F-критерію і схиляє на користь альтернативної гіпотези.
Ви можете використовувати обидва показники для побудови 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. Перевірте формат змінної poison
- Крок 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()
вихід:
Крок 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(time ~ poison, data = 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
Р-значення нижче за звичайне порогове значення 0.05. Ви можете впевнено сказати, що існує статистична різниця між групами, позначена «*».
Попарне порівняння
Односторонній ANOVA-тест не інформує, яка група має інше середнє значення. Замість цього ви можете виконати тест Tukey за допомогою функції TukeyHSD().
TukeyHSD(anova_one_way)
вихід:
Двостороння ANOVA
Двосторонній тест ANOVA додає до формули іншу групову змінну. Він ідентичний односторонньому тесту ANOVA, хоча формула дещо змінюється:
y=x1+x2
з є кількісною змінною, а і є категоріальними змінними.
Гіпотеза в двосторонньому тесті 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. Ви можете відхилити гіпотезу NULL і підтвердити, що зміна лікування або отрути впливає на час виживання.
Підсумки
Ми можемо підсумувати тест у таблиці нижче:
Тест | код | Гіпотеза | P-значення |
---|---|---|---|
Односторонній дисперсійний аналіз |
aov(y ~ X, data = df) |
H3: Середнє значення відрізняється принаймні для однієї групи | 0.05 |
Попарно |
TukeyHSD(ANOVA summary) |
0.05 | |
Двосторонній дисперсійний аналіз |
aov(y ~ X1 + X2, data = df) |
H3: Середній показник різний для обох груп | 0.05 |