Samouczek R ANOVA: jednokierunkowa i dwukierunkowa (z przykładami)

Co to jest ANOVA?

Analiza wariancji (ANOVA) to technika statystyczna powszechnie stosowana do badania różnic między średnimi dwóch lub więcej grup. Test ANOVA koncentruje się na różnych źródłach zmienności typowej zmiennej. ANOVA w R przede wszystkim dostarcza dowodów na istnienie równości średnich między grupami. Ta metoda statystyczna jest rozszerzeniem testu t. Jest stosowana w sytuacji, gdy zmienna czynnikowa ma więcej niż jedną grupę.

ANOVA w jedną stronę

Istnieje wiele sytuacji, w których trzeba porównać średnią między wieloma grupami. Na przykład dział marketingu chce wiedzieć, czy trzy zespoły mają takie same wyniki sprzedaży.

  • Zespół: współczynnik 3 poziomów: A, B i C
  • Sprzedaż: Miara wydajności

Test ANOVA pozwala stwierdzić, czy wyniki wszystkich trzech grup są podobne.

Aby wyjaśnić, czy dane pochodzą z tej samej populacji, możesz wykonać a jednokierunkowa analiza wariancji (odtąd jednokierunkowa ANOVA). Ten test, podobnie jak inne testy statystyczne, dostarcza dowodów na to, czy hipotezę H0 można zaakceptować czy odrzucić.

Hipoteza w teście ANOVA jednokierunkowej

  • H0: Średnie pomiędzy grupami są identyczne
  • H3: Przynajmniej średnia w jednej grupie jest inna

Innymi słowy, hipoteza H0 implikuje, że nie ma wystarczających dowodów, aby udowodnić, że średnie grupy (czynniki) różnią się od pozostałych.

Ten test jest podobny do testu t, chociaż test ANOVA jest zalecany w sytuacji z więcej niż 2 grupami. Poza tym test t i ANOVA dają podobne wyniki.

Założenia

Zakładamy, że każdy czynnik jest próbkowany losowo, niezależny i pochodzi z populacji o rozkładzie normalnym z nieznanymi, ale równymi wariancjami.

Zinterpretuj test ANOVA

Statystyka F służy do sprawdzania, czy dane pochodzą z znacząco różnych populacji, tj. z różnych średnich próbek.

Aby obliczyć statystykę F, należy podzielić zmienność międzygrupowa ponad zmienność wewnątrzgrupowa.

międzygrupowe zmienność odzwierciedla różnice pomiędzy grupami w obrębie całej populacji. Spójrz na dwa poniższe wykresy, aby zrozumieć koncepcję wariancji międzygrupowej.

Wykres po lewej stronie pokazuje bardzo małe zróżnicowanie pomiędzy trzema grupami i jest bardzo prawdopodobne, że te trzy średnie zmierzają do ogólny średnia (tj. średnia dla trzech grup).

Prawy wykres przedstawia trzy rozkłady znacznie od siebie oddalone i żaden z nich nie pokrywa się. Istnieje duże prawdopodobieństwo, że różnica między średnią całkowitą a średnią grupową będzie duża.

Zinterpretuj test ANOVA

w grupie zmienność uwzględnia różnicę między grupami. Różnice wynikają z indywidualnych obserwacji; niektóre punkty mogą być całkowicie odmienne od średnich grupowych. The w grupie zmienność podkreśla ten efekt i odnosi się do błędu próbkowania.

Aby wizualnie zrozumieć koncepcję zmienności wewnątrzgrupowej, spójrz na poniższy wykres.

Lewa część przedstawia rozkład trzech różnych grup. Zwiększyłeś rozrzut każdej próbki i jasne jest, że wariancja indywidualna jest duża. Test F zmniejszy się, co oznacza, że ​​masz tendencję do akceptowania hipotezy zerowej

Prawa część przedstawia dokładnie te same próbki (identyczna średnia), ale z mniejszą zmiennością. Prowadzi to do wzrostu testu F i skłania do przyjęcia hipotezy alternatywnej.

Zinterpretuj test ANOVA

Obie miary można wykorzystać do skonstruowania statystyki F. Zrozumienie statystyki F jest bardzo intuicyjne. Jeśli licznik rośnie, oznacza to, że zmienność międzygrupowa jest duża i jest prawdopodobne, że grupy w próbie pochodzą z zupełnie różnych rozkładów.

Innymi słowy, niska statystyka F wskazuje na niewielką lub żadną znaczącą różnicę między średnią grupy.

Przykład jednokierunkowego testu ANOVA

Użyjesz zestawu danych poison, aby zaimplementować jednokierunkowy test ANOVA. Zestaw danych zawiera 48 wierszy i 3 zmienne:

  • Czas: Czas przeżycia zwierzęcia
  • trucizna: Rodzaj użytej trucizny: poziom współczynnika: 1,2 i 3
  • leczyć: Rodzaj zastosowanego leczenia: poziom czynnika: 1,2 i 3

Zanim zaczniesz obliczać test ANOVA, musisz przygotować dane w następujący sposób:

  • Krok 1: Zaimportuj dane
  • Krok 2: Usuń niepotrzebną zmienną
  • Krok 3: Konwertuj zmienną truciznę na uporządkowany poziom
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)

Wyjście:

## 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, ...		

Naszym celem jest sprawdzenie następującego założenia:

  • H0: Nie ma różnicy w średnim czasie przeżycia pomiędzy grupami
  • H3: Średni czas przeżycia jest różny dla co najmniej jednej grupy.

Innymi słowy, chcesz wiedzieć, czy istnieje statystyczna różnica między średnim czasem przeżycia w zależności od rodzaju trucizny podanej śwince morskiej.

Będziesz postępować w następujący sposób:

  • Krok 1: Sprawdź format zmiennej trucizna
  • Krok 2: Wydrukuj statystykę podsumowującą: liczbę, średnią i odchylenie standardowe
  • Krok 3: Narysuj wykres pudełkowy
  • Krok 4: Oblicz jednokierunkowy test ANOVA
  • Krok 5: Uruchom test t dla par

Krok 1) Możesz sprawdzić poziom trucizny za pomocą następującego kodu. Powinieneś zobaczyć trzy wartości znakowe, ponieważ konwertujesz je na factor za pomocą czasownika mutate.

levels(df$poison)

Wyjście:

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

Krok 2) Obliczasz średnią i odchylenie standardowe.

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

Wyjście:

## 
# 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

Krok 3) W kroku trzecim możesz graficznie sprawdzić, czy istnieje różnica między rozkładami. Zwróć uwagę, że uwzględniłeś drgającą kropkę.

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

Wyjście:

Przykład testu ANOVA jednokierunkowego

Krok 4) Możesz uruchomić jednokierunkowy test ANOVA za pomocą polecenia aov. Podstawowa składnia testu ANOVA jest następująca:

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

Składnia formuły jest następująca:

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

Możesz odpowiedzieć na nasze pytanie: Czy jest jakaś różnica w czasie przeżycia świnek morskich, biorąc pod uwagę rodzaj podanej trucizny.

Należy pamiętać, że zaleca się przechowywanie modelu i użycie funkcji podsumowanie(), aby uzyskać lepszy wydruk wyników.

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

Objaśnienie kodu

  • aov(czas ~ trucizna, dane = df): Uruchom test ANOVA przy użyciu następującego wzoru
  • summary(anova_one_way): Wydrukuj podsumowanie testu

Wyjście:

##             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

Wartość p jest niższa niż zwykły próg wynoszący 0.05. Z pewnością możesz powiedzieć, że istnieje statystyczna różnica pomiędzy grupami, oznaczona „*”.

Porównanie parami

Jednokierunkowy test ANOVA nie informuje, która grupa ma inną średnią. Zamiast tego możesz wykonać test Tukeya za pomocą funkcji TukeyHSD().

TukeyHSD(anova_one_way)

Wyjście:

Porównanie parami

Dwukierunkowa ANOVA

Dwukierunkowy test ANOVA dodaje do formuły kolejną zmienną grupową. Jest on identyczny z jednokierunkowym testem ANOVA, choć formuła nieznacznie się zmienia:

y=x1+x2

gdzie jest zmienną ilościową, a i są zmiennymi kategorycznymi.

Hipoteza w dwukierunkowym teście ANOVA

  • H0: Średnie są równe dla obu zmiennych (tj. zmiennej czynnikowej)
  • H3: Średnie są różne dla obu zmiennych

Do naszego modelu dodajesz zmienną leczenia. Ta zmienna wskazuje sposób leczenia świnki morskiej. Interesuje Cię, czy istnieje statystyczna zależność pomiędzy trucizną a leczeniem zastosowanym u świnki morskiej.

Dostosowujemy nasz kod, dodając „treat” z inną zmienną niezależną.

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

Wyjście:

##             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                    
## ---

Można stwierdzić, że zarówno trucizna, jak i leczenie są statystycznie różne od 0. Można odrzucić hipotezę NULL i potwierdzić, że zmiana leczenia lub trucizny wpływa na czas przeżycia.

Podsumowanie

Podsumowanie testu można znaleźć w poniższej tabeli:

Testowanie Code Hipoteza Wartość P
Jednokierunkowa analiza wariancji
aov(y ~ X, data = df)
H3: Średnia jest różna dla co najmniej jednej grupy 0.05
Parami
TukeyHSD(ANOVA summary)
0.05
Dwukierunkowa analiza wariancji
aov(y ~ X1 + X2, data = df)
H3: Średnia jest różna w obu grupach 0.05

Podsumuj ten post następująco: