Výukový program R ANOVA: Jednosměrný a dvousměrný (s příklady)
Co je ANOVA?
Analýza rozptylu (ANOVA) je statistická technika, běžně používaná ke studiu rozdílů mezi dvěma nebo více skupinovými průměry. Test ANOVA je zaměřen na různé zdroje variací v typické proměnné. ANOVA v R poskytuje především důkaz o existenci střední rovnosti mezi skupinami. Tato statistická metoda je rozšířením t-testu. Používá se v situaci, kdy proměnná faktoru má více než jednu skupinu.
Jednosměrná ANOVA
Existuje mnoho situací, kdy potřebujete porovnat průměr mezi více skupinami. Marketingové oddělení chce například vědět, zda mají tři týmy stejný prodejní výkon.
- Tým: Faktor 3 úrovní: A, B a C
- Prodej: Měřítkem výkonu
Test ANOVA může zjistit, zda mají tyto tři skupiny podobné výkony.
Chcete-li objasnit, zda data pocházejí ze stejné populace, můžete provést a jednosměrná analýza rozptylu (jednosměrná ANOVA dále). Tento test, stejně jako jakýkoli jiný statistický test, poskytuje důkaz, zda lze hypotézu H0 přijmout nebo zamítnout.
Hypotéza v jednocestném testu ANOVA
- H0: Průměry mezi skupinami jsou stejné
- H3: Alespoň průměr jedné skupiny je jiný
Jinými slovy, hypotéza H0 implikuje, že neexistuje dostatek důkazů, které by prokázaly, že průměr skupiny (faktoru) je odlišný od jiné.
Tento test je podobný t-testu, ačkoliv test ANOVA se doporučuje v situaci s více než 2 skupinami. Kromě toho t-test a ANOVA poskytují podobné výsledky.
Předpoklady
Předpokládáme, že každý faktor je náhodně vybrán, nezávislý a pochází z normálně distribuované populace s neznámými, ale stejnými rozptyly.
Interpretujte test ANOVA
F-statistika se používá k testování, zda data pocházejí z významně odlišných populací, tj. různých průměrů vzorků.
Chcete-li vypočítat F-statistiku, musíte vydělit meziskupinová variabilita přes variabilita v rámci skupiny.
Jedno meziskupina variabilita odráží rozdíly mezi skupinami uvnitř celé populace. Podívejte se na dva níže uvedené grafy, abyste pochopili koncept rozptylu mezi skupinami.
Levý graf ukazuje velmi malé rozdíly mezi těmito třemi skupinami a je velmi pravděpodobné, že tyto tři průměry mají tendenci k celkový průměr (tj. průměr pro tři skupiny).
Pravý graf zobrazuje tři rozdělení daleko od sebe a žádné z nich se nepřekrývá. Je velká šance, že rozdíl mezi celkovým průměrem a průměrem skupin bude velký.
Jedno v rámci skupiny variabilita zohledňuje rozdíl mezi skupinami. Variace vychází z jednotlivých pozorování; některé body mohou být úplně jiné, než znamená skupina. The v rámci skupiny variabilita zachycuje tento efekt a odkazuje na výběrovou chybu.
Chcete-li vizuálně porozumět konceptu variability v rámci skupiny, podívejte se na níže uvedený graf.
Levá část zobrazuje rozložení tří různých skupin. Zvýšili jste rozptyl každého vzorku a je jasné, že individuální rozptyl je velký. F-test se sníží, což znamená, že máte tendenci přijmout nulovou hypotézu
Pravá část ukazuje úplně stejné vzorky (stejný průměr), ale s nižší variabilitou. Vede ke zvýšení F-testu a směřuje ve prospěch alternativní hypotézy.
K vytvoření F-statistiky můžete použít obě měření. Je velmi intuitivní pochopit F-statistiku. Pokud se čitatel zvýší, znamená to, že variabilita mezi skupinami je vysoká a je pravděpodobné, že skupiny ve vzorku pocházejí ze zcela odlišných distribucí.
Jinými slovy, nízká F-statistika indikuje malý nebo žádný významný rozdíl mezi průměrem skupiny.
Příklad Jednosměrný test ANOVA
K implementaci jednosměrného testu ANOVA použijete sadu dat jedu. Soubor dat obsahuje 48 řádků a 3 proměnné:
- Čas: Doba přežití zvířete
- jed: Typ použitého jedu: úroveň faktoru: 1,2 a 3
- léčba: Typ použité léčby: úroveň faktoru: 1,2 a 3
Než začnete počítat test ANOVA, musíte připravit data následovně:
- Krok 1: Importujte data
- Krok 2: Odstraňte nepotřebnou proměnnou
- Krok 3: Převeďte variabilní jed na uspořádanou úroveň
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)
Výstup:
## 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ším cílem je otestovat následující předpoklad:
- H0: Mezi skupinami není žádný rozdíl v průměrné době přežití
- H3: Průměrná doba přežití se alespoň u jedné skupiny liší.
Jinými slovy, chcete vědět, zda existuje statistický rozdíl mezi průměrem doby přežití podle typu jedu podaného morčeti.
Budete postupovat následovně:
- Krok 1: Zkontrolujte formát proměnné jed
- Krok 2: Vytiskněte souhrnnou statistiku: počet, průměr a standardní odchylku
- Krok 3: Nakreslete krabicový graf
- Krok 4: Vypočítejte jednosměrný test ANOVA
- Krok 5: Spusťte párový t-test
Krok 1) Úroveň jedu můžete zkontrolovat pomocí následujícího kódu. Měli byste vidět tři hodnoty znaků, protože je převedete ve faktoru se slovesem mutovat.
levels(df$poison)
Výstup:
## [1] "1" "2" "3"
Krok 2) Vypočítáte průměr a směrodatnou odchylku.
df % > % group_by(poison) % > % summarise( count_poison = n(), mean_time = mean(time, na.rm = TRUE), sd_time = sd(time, na.rm = TRUE) )
Výstup:
## # 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) Ve třetím kroku můžete graficky zkontrolovat, zda existuje rozdíl mezi distribucí. Všimněte si, že zahrnete roztřesenou teč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()
Výstup:
Krok 4) Jednosměrný test ANOVA můžete spustit příkazem aov. Základní syntaxe testu ANOVA je:
aov(formula, data) Arguments: - formula: The equation you want to estimate - data: The dataset used
Syntaxe vzorce je:
y ~ X1+ X2+...+Xn # X1 + X2 +... refers to the independent variables y ~ . # use all the remaining variables as independent variables
Můžete odpovědět na naši otázku: Existuje nějaký rozdíl v době přežití mezi morčetem, když zná typ podaného jedu?
Všimněte si, že se doporučuje uložit model a použít funkci Summary(), abyste získali lepší tisk výsledků.
anova_one_way <- aov(time~poison, data = df) summary(anova_one_way)
Vysvětlení kódu
- aov(čas ~ jed, data = df): Spusťte test ANOVA s následujícím vzorcem
- Summary(anova_one_way): Vytiskne shrnutí testu
Výstup:
## 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
Hodnota p je nižší než obvyklá prahová hodnota 0.05. S jistotou můžete říci, že mezi skupinami je statistický rozdíl označený „*“.
Párové srovnání
Jednosměrný test ANOVA neinformuje, která skupina má jiný průměr. Místo toho můžete provést Tukey test pomocí funkce TukeyHSD().
TukeyHSD(anova_one_way)
Výstup:
Obousměrná ANOVA
Dvoucestný test ANOVA přidá do vzorce další skupinovou proměnnou. Je identický s jednosměrným testem ANOVA, i když se vzorec mírně mění:
y=x1+x2
s je kvantitativní proměnná a a jsou kategorické proměnné.
Hypotéza ve dvoucestném testu ANOVA
- H0: Průměry jsou stejné pro obě proměnné (tj. proměnná faktoru)
- H3: Průměry jsou pro obě proměnné různé
Do našeho modelu přidáte proměnnou léčbě. Tato proměnná označuje léčbu morčatům. Zajímá vás, zda existuje statistická závislost mezi jedem a léčbou podanou morčeti.
Náš kód upravíme přidáním treat s další nezávislou proměnnou.
anova_two_way <- aov(time~poison + treat, data = df) summary(anova_two_way)
Výstup:
## 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 ## ---
Můžete dojít k závěru, že jed i lék se statisticky liší od 0. Můžete zamítnout hypotézu NULL a potvrdit, že změna léčby nebo jedu ovlivňuje dobu přežití.
Shrnutí
Test můžeme shrnout do tabulky níže:
test | Kód | Hypotéza | P-hodnota |
---|---|---|---|
Jednosměrná ANOVA |
aov(y ~ X, data = df) |
H3: Průměr se liší alespoň pro jednu skupinu | 0.05 |
Párově |
TukeyHSD(ANOVA summary) |
0.05 | |
Obousměrná ANOVA |
aov(y ~ X1 + X2, data = df) |
H3: Průměr se liší pro obě skupiny | 0.05 |