Tutorial R ANOVA: un singur sens și bidirecțional (cu exemple)

Ce este ANOVA?

Analiza variatiei (ANOVA) este o tehnică statistică, utilizată în mod obișnuit pentru a studia diferențele dintre două sau mai multe medii de grup. Testul ANOVA este centrat pe diferitele surse de variație a unei variabile tipice. ANOVA în R oferă în primul rând dovezi ale existenței egalității medii între grupuri. Această metodă statistică este o extensie a testului t. Este utilizat într-o situație în care variabila factor are mai multe grupuri.

ANOVA cu sens unic

Există multe situații în care trebuie să comparați media dintre mai multe grupuri. De exemplu, departamentul de marketing vrea să știe dacă trei echipe au aceeași performanță de vânzări.

  • Echipa: factor de nivel 3: A, B și C
  • Vânzare: o măsură a performanței

Testul ANOVA poate spune dacă cele trei grupuri au performanțe similare.

Pentru a clarifica dacă datele provin de la aceeași populație, puteți efectua a analiza unidirecțională a varianței (ANOVA unidirecțională în continuare). Acest test, ca orice alte teste statistice, oferă dovezi dacă ipoteza H0 poate fi acceptată sau respinsă.

Ipoteza în testul ANOVA unidirecțional

  • H0: Mijloacele dintre grupuri sunt identice
  • H3: Cel puțin, media unui grup este diferită

Cu alte cuvinte, ipoteza H0 implică că nu există suficiente dovezi pentru a demonstra că media grupului (factorului) este diferită de altul.

Acest test este similar cu testul t, deși testul ANOVA este recomandat în situația cu mai mult de 2 grupuri. Cu excepția faptului că, testul t și ANOVA oferă rezultate similare.

Presupuneri

Presupunem că fiecare factor este eșantionat aleatoriu, independent și provine dintr-o populație distribuită normal cu varianțe necunoscute, dar egale.

Interpretarea testului ANOVA

Statistica F este utilizată pentru a testa dacă datele provin din populații semnificativ diferite, adică medii diferite ale eșantionului.

Pentru a calcula statistica F, trebuie să împărțiți variabilitate între grupuri peste variabilitate în cadrul grupului.

între-grup variabilitatea reflectă diferențele dintre grupurile din cadrul întregii populații. Priviți cele două grafice de mai jos pentru a înțelege conceptul de varianță între grupuri.

Graficul din stânga arată o variație foarte mică între cele trei grupuri și este foarte probabil ca cele trei medii să țină la global medie (adică, medie pentru cele trei grupuri).

Graficul din dreapta prezintă trei distribuții departe una dintre ele și niciuna dintre ele nu se suprapune. Există șanse mari ca diferența dintre media totală și media grupurilor să fie mare.

Interpretarea testului ANOVA

în cadrul grupului variabilitatea ia în considerare diferența dintre grupuri. Variația provine din observațiile individuale; unele puncte ar putea fi total diferite decât înseamnă grupul. The în cadrul grupului variabilitatea preia acest efect și se referă la eroarea de eșantionare.

Pentru a înțelege vizual conceptul de variabilitate în cadrul grupului, priviți graficul de mai jos.

Partea din stânga prezintă distribuția a trei grupuri diferite. Ați crescut răspândirea fiecărui eșantion și este clar că varianța individuală este mare. Testul F va scădea, ceea ce înseamnă că aveți tendința de a accepta ipoteza nulă

Partea din dreapta arată exact aceleași eșantioane (medie identică), dar cu variabilitate mai mică. Conduce la o creștere a testului F și tinde în favoarea ipotezei alternative.

Interpretarea testului ANOVA

Puteți utiliza ambele măsuri pentru a construi statisticile F. Este foarte intuitiv să înțelegeți statistica F. Dacă numărătorul crește, înseamnă că variabilitatea între grupuri este mare și este probabil că grupurile din eșantion sunt extrase din distribuții complet diferite.

Cu alte cuvinte, o statistică F scăzută indică o diferență mică sau deloc semnificativă între media grupului.

Exemplu Test ANOVA unidirecțional

Veți folosi setul de date otrăvire pentru a implementa testul ANOVA unidirecțional. Setul de date conține 48 de rânduri și 3 variabile:

  • Timp: timpul de supraviețuire al animalului
  • otravă: Tip de otravă utilizată: nivel de factor: 1,2 și 3
  • trata: Tip de tratament utilizat: nivel de factor: 1,2 și 3

Înainte de a începe să calculați testul ANOVA, trebuie să pregătiți datele după cum urmează:

  • Pasul 1: importați datele
  • Pasul 2: Eliminați variabilele inutile
  • Pasul 3: Convertiți otrava variabilă ca nivel comandat
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)

ieșire:

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

Obiectivul nostru este să testăm următoarea ipoteză:

  • H0: Nu există nicio diferență în media timpului de supraviețuire între grup
  • H3: Media timpului de supraviețuire este diferită pentru cel puțin un grup.

Cu alte cuvinte, vrei să știi dacă există o diferență statistică între media timpului de supraviețuire în funcție de tipul de otravă dat cobaiului.

Veți proceda după cum urmează:

  • Pasul 1: Verificați formatul otravii variabile
  • Pasul 2: Imprimați statistica rezumată: numărare, medie și abatere standard
  • Pasul 3: Trasează un diagramă cu casete
  • Pasul 4: Calculați testul ANOVA unidirecțional
  • Pasul 5: rulați un test t pe perechi

Pas 1) Puteți verifica nivelul otravii cu următorul cod. Ar trebui să vedeți trei valori de caracter, deoarece le convertiți în factor cu verbul mutare.

levels(df$poison)

ieșire:

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

Pas 2) Calculați media și abaterea standard.

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

ieșire:

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

Pas 3) În pasul trei, puteți verifica grafic dacă există o diferență între distribuție. Rețineți că includeți punctul agitat.

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

ieșire:

Exemplu de test ANOVA unidirecțional

Pas 4) Puteți rula testul ANOVA unidirecțional cu comanda aov. Sintaxa de bază pentru un test ANOVA este:

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

Sintaxa formulei este:

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

Puteți răspunde la întrebarea noastră: Există vreo diferență în timpul de supraviețuire între cobai, cunoscând tipul de otravă administrat.

Rețineți că, se recomandă să stocați modelul și să utilizați funcția summary() pentru a obține o imprimare mai bună a rezultatelor.

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

Explicarea codului

  • aov(time ~ poison, data = df): Rulați testul ANOVA cu următoarea formulă
  • summary(anova_one_way): Imprimați rezumatul testului

ieșire:

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

Valoarea p este mai mică decât pragul obișnuit de 0.05. Sunteți încrezător să spuneți că există o diferență statistică între grupuri, indicată de „*”.

Comparație în perechi

Testul ANOVA unidirecțional nu informează care grup are o medie diferită. În schimb, puteți efectua un test Tukey cu funcția TukeyHSD().

TukeyHSD(anova_one_way)

ieșire:

Comparație în perechi

ANOVA în două sensuri

Un test ANOVA în două sensuri adaugă o altă variabilă de grup la formulă. Este identic cu testul ANOVA unidirecțional, deși formula se modifică ușor:

y=x1+x2

cu este o variabilă cantitativă și și sunt variabile categoriale.

Ipoteza în testul ANOVA în două sensuri

  • H0: Mediile sunt egale pentru ambele variabile (adică, variabila factor)
  • H3: Mediile sunt diferite pentru ambele variabile

Adăugați o variabilă de tratare la modelul nostru. Această variabilă indică tratamentul dat cobaiului. Ești interesat să vezi dacă există o dependență statistică între otrava și tratamentul dat porcușului de Guineea.

Ne ajustam codul adăugând tratament cu cealaltă variabilă independentă.

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

ieșire:

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

Puteți trage concluzia că atât otrava cât și tratamentul sunt statistic diferite de 0. Puteți respinge ipoteza NULL și puteți confirma că schimbarea tratamentului sau a otravii are un impact asupra timpului de supraviețuire.

Rezumat

Putem rezuma testul în tabelul de mai jos:

Testare Cod Ipoteză P-valoare
ANOVA într-un singur sens
aov(y ~ X, data = df)
H3: Media este diferită pentru cel puțin un grup 0.05
Perechi
TukeyHSD(ANOVA summary)
0.05
ANOVA cu două sensuri
aov(y ~ X1 + X2, data = df)
H3: Media este diferită pentru ambele grupuri 0.05