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-статистиката, трябва да разделите междугрупова променливост през вътрешногрупова променливост.

- между-група променливостта отразява разликите между групите в цялото население. Погледнете двете графики по-долу, за да разберете концепцията за вариация между групите.

Лявата графика показва много малка вариация между трите групи и е много вероятно трите средни стойности да клонят към общо средно (т.е. средно за трите групи).

Дясната графика изобразява три разпределения, отдалечени едно от друго и нито едно от тях не се припокрива. Има голяма вероятност разликата между общата средна стойност и средната стойност на групите да бъде голяма.

Интерпретирайте ANOVA тест

- в групата променливостта отчита разликата между групите. Вариацията идва от индивидуалните наблюдения; някои точки може да са напълно различни от групата. The в групата променливостта улавя този ефект и се отнася до грешката на извадката.

За да разберете визуално концепцията за вътрешногрупова променливост, погледнете графиката по-долу.

В лявата част е изобразено разпределението на три различни групи. Увеличихте разпространението на всяка извадка и е ясно, че индивидуалната дисперсия е голяма. 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: Проверете формата на променливата 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()

Изход:

Пример за еднопосочен 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 тест не информира коя група има различна средна стойност. Вместо това можете да извършите тест на 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 и да потвърдите, че промяната на лечението или отровата оказва влияние върху времето на оцеляване.

Oбобщение

Можем да обобщим теста в таблицата по-долу:

тест код хипотеза P-стойност
Еднопосочна ANOVA
aov(y ~ X, data = df)
H3: Средната стойност е различна за поне една група 0.05
По двойки
TukeyHSD(ANOVA summary)
0.05
Двупосочна ANOVA
aov(y ~ X1 + X2, data = df)
H3: Средната стойност е различна за двете групи 0.05