R ANOVA vodič: Jednosmjerni i dvosmjerni (s primjerima)

Što je ANOVA?

Analiza varijance (ANOVA) je statistička tehnika koja se obično koristi za proučavanje razlika između dvije ili više grupnih sredina. ANOVA test je usredotočen na različite izvore varijacije u tipičnoj varijabli. ANOVA u R prvenstveno pruža dokaz o postojanju srednje jednakosti između skupina. Ova statistička metoda je proširenje t-testa. Koristi se u situaciji kada faktorska varijabla ima više od jedne grupe.

Jednosmjerna ANOVA

Postoje mnoge situacije u kojima trebate usporediti srednju vrijednost između više skupina. Na primjer, odjel marketinga želi znati imaju li tri tima isti prodajni učinak.

  • Tim: faktor 3 razine: A, B i C
  • Prodaja: mjera uspješnosti

ANOVA test može pokazati imaju li tri skupine slične performanse.

Da biste razjasnili dolaze li podaci iz iste populacije, možete izvesti a jednosmjerna analiza varijance (u nastavku jednosmjerna ANOVA). Ovaj test, kao i svaki drugi statistički test, daje dokaz može li se H0 hipoteza prihvatiti ili odbaciti.

Hipoteza u jednosmjernom ANOVA testu

  • H0: Srednje vrijednosti između skupina su identične
  • H3: Barem je srednja vrijednost jedne skupine različita

Drugim riječima, hipoteza H0 implicira da nema dovoljno dokaza koji bi dokazali da se srednja vrijednost skupine (faktora) razlikuje od druge.

Ovaj test je sličan t-testu, iako se ANOVA test preporučuje u situaciji s više od 2 grupe. Osim toga, t-test i ANOVA daju slične rezultate.

Pretpostavke

Pretpostavljamo da je svaki faktor nasumično odabran, neovisan i da dolazi iz normalno raspoređene populacije s nepoznatim, ali jednakim varijancama.

Interpretirajte ANOVA test

F-statistika se koristi za testiranje jesu li podaci iz značajno različitih populacija, tj. različite srednje vrijednosti uzorka.

Da biste izračunali F-statistiku, trebate podijeliti varijabilnost između grupa nad varijabilnost unutar grupe.

The među-skupina varijabilnost odražava razlike između skupina unutar cijele populacije. Pogledajte dva grafikona u nastavku da biste razumjeli koncept varijance između grupa.

Lijevi grafikon pokazuje vrlo male varijacije između ove tri skupine i vrlo je vjerojatno da tri srednje vrijednosti teže ukupni srednja vrijednost (tj. srednja vrijednost za tri skupine).

Desni grafikon prikazuje tri međusobno udaljene distribucije i nijedna se ne preklapa. Postoji velika vjerojatnost da će razlika između ukupnog prosjeka i prosjeka grupa biti velika.

Interpretirajte ANOVA test

The unutar grupe varijabilnost uzima u obzir razlike među skupinama. Varijacije proizlaze iz individualnih opažanja; neke točke mogu biti potpuno drugačije od značenja grupe. The unutar grupe varijabilnost otkriva ovaj učinak i odnosi se na pogrešku uzorkovanja.

Kako biste vizualno razumjeli koncept varijabilnosti unutar grupe, pogledajte grafikon u nastavku.

Lijevi dio prikazuje distribuciju tri različite skupine. Povećali ste raspon svakog uzorka i jasno je da je individualna varijanca velika. F-test će se smanjiti, što znači da ste skloni prihvatiti nultu hipotezu

Desni dio prikazuje potpuno iste uzorke (identična srednja vrijednost), ali s manjom varijabilnošću. To dovodi do povećanja F-testa i ide u korist alternativne hipoteze.

Interpretirajte ANOVA test

Možete koristiti obje mjere za konstruiranje F-statistike. Vrlo je intuitivno razumjeti F-statistiku. Ako se brojnik povećava, to znači da je varijabilnost među grupama velika i da je vjerojatno da su grupe u uzorku izvučene iz potpuno različitih distribucija.

Drugim riječima, niska F-statistika ukazuje na malu ili nikakvu značajnu razliku između prosjeka grupe.

Primjer Jednosmjerni ANOVA test

Koristit ćete skup podataka o otrovu za provedbu jednosmjernog ANOVA testa. Skup podataka sadrži 48 redaka i 3 varijable:

  • Vrijeme: Vrijeme preživljavanja životinje
  • otrov: vrsta korištenog otrova: razina faktora: 1,2 i 3
  • liječiti: Vrsta korištenog tretmana: razina faktora: 1,2 i 3

Prije nego počnete izračunavati ANOVA test, morate pripremiti podatke na sljedeći način:

  • Korak 1: Uvezite podatke
  • Korak 2: Uklonite nepotrebnu varijablu
  • Korak 3: Pretvorite varijablu otrov u naručenu razinu
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)

Izlaz:

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

Naš cilj je testirati sljedeću pretpostavku:

  • H0: Nema razlike u prosjeku vremena preživljavanja između skupina
  • H3: Prosjek vremena preživljavanja je različit za barem jednu skupinu.

Drugim riječima, želite znati postoji li statistička razlika između srednje vrijednosti vremena preživljavanja prema vrsti otrova koji je dan zamorcu.

Postupit ćete na sljedeći način:

  • Korak 1: Provjerite format varijable poison
  • Korak 2: Ispišite sumarnu statistiku: broj, srednju vrijednost i standardnu ​​devijaciju
  • Korak 3: Iscrtajte okvirni dijagram
  • Korak 4: Izračunajte jednosmjerni ANOVA test
  • Korak 5: Izvedite parni t-test

Korak 1) Možete provjeriti razinu otrova pomoću sljedećeg koda. Trebali biste vidjeti tri vrijednosti znakova jer ih pretvarate u faktor pomoću glagola mutirati.

levels(df$poison)

Izlaz:

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

Korak 2) Vi izračunavate srednju vrijednost i standardnu ​​devijaciju.

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

Izlaz:

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

Korak 3) U trećem koraku možete grafički provjeriti postoji li razlika između distribucije. Imajte na umu da ste uključili potresnu točku.

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

Izlaz:

Primjer jednosmjernog ANOVA testa

Korak 4) Možete pokrenuti jednosmjerni ANOVA test s naredbom aov. Osnovna sintaksa za ANOVA test je:

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

Sintaksa formule je:

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

Možete odgovoriti na naše pitanje: Postoji li razlika u vremenu preživljavanja između zamoraca, znajući vrstu otrova koji je dat.

Imajte na umu da se savjetuje pohraniti model i koristiti funkciju summary() za bolji ispis rezultata.

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

Objašnjenje koda

  • aov(vrijeme ~ otrov, podaci = df): Pokrenite ANOVA test sa sljedećom formulom
  • summary(anova_one_way): Ispis sažetka testa

Izlaz:

##             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-vrijednost niža je od uobičajenog praga od 0.05. Uvjereni ste da možete reći da postoji statistička razlika između grupa, označena "*".

Usporedba u paru

Jednosmjerni ANOVA test ne daje informacije koja skupina ima različitu srednju vrijednost. Umjesto toga, možete izvesti Tukey test s funkcijom TukeyHSD().

TukeyHSD(anova_one_way)

Izlaz:

Usporedba u paru

Dvosmjerna ANOVA

Dvosmjerni ANOVA test dodaje još jednu grupnu varijablu u formulu. Identičan je jednosmjernom ANOVA testu, iako se formula malo mijenja:

y=x1+x2

s je kvantitativna varijabla i i su kategoričke varijable.

Hipoteza u dvosmjernom ANOVA testu

  • H0: Srednje vrijednosti su jednake za obje varijable (tj. faktorsku varijablu)
  • H3: Srednje vrijednosti su različite za obje varijable

Našem modelu dodajete varijablu tretiranja. Ova varijabla pokazuje tretman koji se daje zamorcu. Zanima vas postoji li statistička ovisnost između otrova i tretmana koji je dat zamorcu.

Naš kod prilagođavamo dodavanjem tretmana drugoj nezavisnoj varijabli.

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

Izlaz:

##             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žete zaključiti da se i otrov i lijek statistički razlikuju od 0. Možete odbaciti NULL hipotezu i potvrditi da promjena tretmana ili otrova utječe na vrijeme preživljavanja.

rezime

Test možemo sažeti u tablici u nastavku:

test Kodirati hipoteza P-vrijednosti
Jednosmjerna ANOVA
aov(y ~ X, data = df)
H3: Prosjek je različit za barem jednu grupu 0.05
U paru
TukeyHSD(ANOVA summary)
0.05
Dvosmjerna ANOVA
aov(y ~ X1 + X2, data = df)
H3: Prosjek je različit za obje skupine 0.05