ANOVA R-ben: Egyutas és kétutas teszt példákkal
⚡ Okos összefoglaló
Az R-ben található ANOVA három vagy több csoport átlagát hasonlítja össze úgy, hogy a teljes variációt csoportok közötti és csoporton belüli komponensekre bontja. Ez a bemutató egyutas és kétutas teszteket futtat a méreganyagok adathalmazán, ellenőrzi a feltételezéseket, és Tukey HSD segítségével izolálja az eltérő párokat.

Mi az ANOVA?
Varianciaelemzés Az ANOVA (anorexia analízis) egy statisztikai technika, amelyet két vagy több csoport átlagának összehasonlítására használnak. A teszt úgy működik, hogy egy mérés teljes variációját felosztja a csoporttagság által magyarázott részre és a véletlenszerű zajként megmaradt részre. Az R-ben lévő ANOVA tehát azt mutatja meg, hogy legalább egy csoportátlag eltér-e a többitől, nem pedig azt, hogy melyik. Ez a becslés közvetlen kiterjesztése. t-teszt olyan helyzetekben, amikor a faktorváltozónak több mint két szintje van.
Egy teszt futtatása előtt hasznos tudni, hogy az ANOVA család melyik tagja illik a tervhez.
Az ANOVA tesztek típusai R-ben
Az „ANOVA” inkább tesztek családja, mint egyetlen eljárás. A megfelelő tag kiválasztása attól függ, hogy hány tényező van, és hogyan gyűjtötték az adatokat.
| Tesztelés | Mikor kell használni | R hívás |
|---|---|---|
| Egyirányú ANOVA | Egy tényező három vagy több szinttel | aov(y ~ x, adat = df) |
| Kétirányú ANOVA | Két független tényező | aov(y ~ x1 + x2, adat = df) |
| Kétirányú interakcióval | Az egyik tényező hatása a másiktól függ | aov(y ~ x1 * x2, adat = df) |
| Ismételt mérések ANOVA | Ugyanazokat az alanyokat többször is mérték | aov(y ~ x + Hiba(tárgy/x)) |
| ANCOVA | Egy folytonos kovariánsra van szükség, amelyet kontrollálni kell | aov(y ~ x + kovariáns, adat = DF) |
| MANOVA | Két vagy több válaszváltozó egyszerre | manova(cbind(y1, y2) ~ x) |
Ez az oktatóanyag az első hármat tárgyalja. A fennmaradó változatok ugyanazt az aov() felületet használják, így ha egyszer beolvastál egy kimeneti táblát, akkor az összeset is el tudod olvasni.
ANOVA vs. T-teszt R-ben: Főbb különbségek
Mindkét teszt átlagokat hasonlít össze, ezért érdemes pontosan meghatározni, hogy az egyik hol helyettesíti a másikat.
| Kritériumai | T-teszt | ANOVA |
|---|---|---|
| Csoportok száma | Pontosan kettő | Két vagy több |
| Teszt statisztika | t | F, egyenlő t négyzetével, ha két csoport van |
| Eredmény | Megnevezi a különbség irányát | Csak arról számolnak be, hogy van különbség |
| Utánkövetés szükséges | Egyik sem | Utóvizsgálat, például Tukey HSD |
| R függvény | t.teszt() | aov() |
Három csoport esetén fennáll a kísértés, hogy három különálló t-próbát futtassunk. Álljunk ellene. Mindegyik teszthez tartozik egy 5 százalékos hibaszázalék, így három összehasonlítás a téves pozitív eredmény esélyét nagyjából 14 százalékra növeli. Az ANOVA ugyanazt a kérdést egyetlen teszttel válaszolja meg, majd a Tukey HSD a páronkénti részleteket a hibaszázalékot kontroll alatt tartva kezeli. A kétcsoportos esethez lásd a ... t-próba oktatóanyag.
Egyirányú ANOVA
Sok olyan helyzet van, amikor több csoport átlagát kell összehasonlítani. Például a marketing osztály tudni akarja, hogy három csapatnak ugyanaz az értékesítési teljesítménye.
- Csapat: 3 szintű faktor: A, B és C
- Kiárusítás: A teljesítmény mértéke
Az ANOVA teszt meg tudja állapítani, hogy a három csoport hasonló teljesítményt nyújt-e.
Annak tisztázására, hogy az adatok ugyanabból a sokaságból származnak-e, végrehajthat a egyirányú varianciaanalízis (a továbbiakban egyutas ANOVA). Mint bármely más statisztikai teszt, ez is bizonyítékot szolgáltat arra vonatkozóan, hogy a H0 hipotézis elvethető-e. Megjegyzendő, hogy a H0 elvetésének elmulasztása nem ugyanaz, mint annak igazolása.
Hipotézis egyutas ANOVA tesztben
- H0: A csoportok közötti átlagok azonosak
- H1: Legalább egy csoport átlaga különbözik
Más szóval, ha nem utasítjuk el a H0-t, akkor nincs elegendő bizonyíték arra a következtetésre, hogy bármelyik csoportátlag eltér a többitől.
Ez a próba hasonló a t-próbához, de az ANOVA a helyes választás, ha kettőnél több csoport van. Pontosan két csoport esetén a két próba ekvivalens, és az F-statisztika egyenlő a t-statisztika négyzetével.
Feltételezések
Az egyutas ANOVA három feltételen alapul: a megfigyelések véletlenszerűen kerülnek kiválasztásra és függetlenek egymástól, az egyes csoportokon belüli reziduumok megközelítőleg normális eloszlásúak, és a variancia minden csoportban azonos (varianciahomogenitás). Az alábbi, a feltételezések ellenőrzéséről szóló rész bemutatja, hogyan tesztelhetjük mindegyiket R-ben.
Értelmezze az ANOVA tesztet
Az F-statisztikát annak tesztelésére használják, hogy az adatok jelentősen eltérő populációkból származnak-e, azaz eltérő mintaátlagok.
Az F-statisztika kiszámításához el kell osztani a csoportok közötti változékonyság felett csoporton belüli változékonyság.
Az csoport között A változékonyság azt tükrözi, hogy az egyes csoportok átlaga milyen messze van az összesített átlagtól. Hasonlítsa össze az alábbi két grafikont, hogy megértse az összefüggést.
A bal oldali grafikon nagyon kevés eltérést mutat a három csoport között, tehát mindhárom csoport átlaga közel van a átfogó átlagos.
A jobb oldali grafikon három, egymástól távol eső eloszlást ábrázol átfedés nélkül, így az összesített átlag és az egyes csoportok átlaga közötti különbség nagy.
Az csoporton belüli A variabilitás azt méri, hogy az egyes megfigyelések mennyire térnek el a saját csoportjuk átlagától. Egyes pontok messze vannak a csoportátlaguktól, és a csoporton belüli tag pontosan ezt a szórást ragadja meg, ami a mintavételi hiba.
A csoporton belüli változékonyság fogalmának vizuális megértéséhez tekintse meg az alábbi grafikont.
A bal oldali rész három különböző csoport eloszlását ábrázolja. Növeltük az egyes minták szórását, és egyértelmű, hogy az egyéni variancia nagy. Az F-statisztika csökken, így nem vethetjük el a nullhipotézist.
A jobb oldali rész azonos átlagú, de sokkal alacsonyabb szórású mintákat mutat. Ez növeli az F-statisztikát, és az alternatív hipotézis mellett szól.
Mindkét mértéket használhatja az F-statisztika elkészítéséhez. Nagyon intuitív az F-statisztika megértése. Ha a számláló növekszik, az azt jelenti, hogy nagy a csoportok közötti variabilitás, és valószínű, hogy a mintában szereplő csoportok teljesen eltérő eloszlásokból származnak.
Más szóval, az alacsony F-statisztika a csoportok átlagai között csekély vagy semmilyen érdemi különbséget nem jelez.
Példa Egyirányú ANOVA teszt
A méregadatkészletet fogja használni az egyirányú ANOVA-teszt megvalósításához. Az adatkészlet 48 sort és 3 változót tartalmaz:
- Idő: Az állat túlélési ideje
- méreg: Felhasznált méreg típusa: faktorszint: 1,2 és 3
- kezelés: Az alkalmazott kezelés típusa: faktorszint: 1,2, 3 és XNUMX
Mielőtt elkezdené az ANOVA-teszt kiszámítását, a következők szerint kell elkészítenie az adatokat:
- 1. lépés: Importálja az adatokat
- 2. lépés: Távolítsa el a szükségtelen változókat
- 3. lépés: Konvertálja a változó mérget rendezett szintre
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)
output:
## 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, ...
Célunk a következő feltételezés tesztelése:
- H0: Nincs különbség a túlélési idő átlagában a csoportok között
- H1: A túlélési idő átlaga legalább egy csoportnál eltérő.
Más szóval, azt szeretné tudni, hogy van-e statisztikai különbség a túlélési idő átlaga között a tengerimalacnak adott méreg típusa szerint.
A következőképpen jár el:
- 1. lépés: Ellenőrizze a méreg változó formátumát
- 2. lépés: Nyomtassa ki az összefoglaló statisztikát: szám, átlag és szórás
- 3. lépés: Rajzoljon fel egy dobozos ábrát
- 4. lépés: Számítsa ki az egyirányú ANOVA-tesztet
- 5. lépés: Páros összehasonlítás futtatása Tukey HSD-vel
Step 1) Ellenőrizd a méreg szintjét az alábbi kóddal. Három karakterértéknek kell látszania, mivel a mutate ige rendezett faktorrá alakította az oszlopot.
levels(df$poison)
output:
## [1] "1" "2" "3"
Step 2) Kiszámolja az átlagot és a szórást.
df %>% group_by(poison) %>% summarise( count_poison = n(), mean_time = mean(time, na.rm = TRUE), sd_time = sd(time, na.rm = TRUE) )
output:
## # 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
Step 3) A harmadik lépésben grafikusan ellenőrizheti, hogy van-e különbség a disztribúció között. Ne feledje, hogy tartalmazza a vibráló pontot.
ggplot(df, aes(x = poison, y = time, fill = poison)) + geom_boxplot() + geom_jitter(shape = 15, color = "steelblue", position = position_jitter(0.21)) + theme_classic()
output:
Step 4) Az egyirányú ANOVA tesztet az aov paranccsal futtathatja. Az ANOVA teszt alapvető szintaxisa a következő:
aov(formula, data)
Arguments:
- formula: The equation you want to estimate
- data: The dataset used
A képlet szintaxisa a következő:
y ~ X1+ X2+...+Xn # X1 + X2 +... refers to the independent variables y ~ . # use all the remaining variables as independent variables
Most már megválaszolhatja a kérdést: van-e bármilyen különbség a tengerimalacok túlélési ideje között, figyelembe véve a beadott méreg típusát?
Tárold a modellt egy objektumban, és add át a summary() függvénynek az eredmények olvasható kinyomtatásához.
anova_one_way <- aov(time~poison, data = df) summary(anova_one_way)
Code Magyarázat
- aov(idő ~ méreg, adat = df): Futtassa le az ANOVA tesztet a következő képlettel
- summary(anova_one_way): Nyomtassa ki a teszt összefoglalóját
output:
## 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
A p-érték 7.66e-05, ami messze a szokásos 0.05-ös küszöbérték alatt van, és a három csillag a legerősebb szignifikanciakódot jelöli. Elutasíthatjuk a H0-t, és arra a következtetésre juthatunk, hogy legalább egy méregcsoportnak eltérő az átlagos túlélési ideje.
Hogyan ellenőrizhetjük az ANOVA feltételezéseit R-ben?
Egy ANOVA p-érték csak akkor megbízható, ha a korábban felsorolt három feltétel teljesül. Mindegyik közvetlenül ellenőrizhető R-ben, és mindegyik lefut az illesztett modellobjektumon.
1. A megfigyelések függetlensége. Ez a vizsgálat felépítésének, nem az adatoknak a tulajdonsága, így semmilyen teszt nem tudja megmenteni. Minden tengerimalacot egyszer kell megmérni, és véletlenszerűen kell a csoportjába sorolni. Ha ugyanaz az alany több sorban is szerepel, akkor ismételt mérések modelljére van szükség.
2. A reziduálisok normalitása. Az ANOVA feltételezi, hogy a reziduálisok, nem pedig a nyers adatok, közelítőleg normálisak. Vizsgálja meg a QQ diagramot, és erősítse meg a Shapiro-Wilk teszttel:
par(mfrow = c(2, 2)) plot(anova_one_way) # four diagnostic plots shapiro.test(residuals(anova_one_way))
A Normál QQ diagram átlóját követő pontok normális reziduálisokat jelölnek. A 0.05 feletti Shapiro-Wilk p-érték azt jelenti, hogy a normalitás nem vethető el.
3. A variancia homogenitása. Minden csoportnak hasonló szórást kell mutatnia. A reziduálisok vs. illesztett diagramnak inkább lapos sávnak, mint tölcsérnek kell kinéznie. Erősítse meg ezt Levene-teszttel, amely robusztusabb a nemnormalitással szemben, mint a Bartlett-teszt:
library(car)
leveneTest(time ~ poison, data = df)
bartlett.test(time ~ poison, data = df)
A 0.05 feletti p-érték egyenlő varianciákat támogat.
Mi a teendő, ha egy feltételezés nem sikerül? Ha a varianciák egyenlőtlenek, futtassuk a oneway.test(time ~ poison, data = df, var.equal = FALSE) függvényt, azaz a Welch-korrekciót. Ha a reziduálisok egyértelműen nem normálisak és a minta kicsi, váltsunk a Kruskal-Wallis rangtesztre, kruskal.test(time ~ poison, data = df). Nagy, kiegyensúlyozott minták esetén az ANOVA meglehetősen robusztus és mérsékelt eltéréseket mutat a normalitástól, így a határeseti Shapiro-Wilk eredmény ritkán végzetes.
Páronkénti összehasonlítás
Egy szignifikáns F-próba megmutatja, hogy a csoportátlagok nem egyenlőek, de azt nem, hogy melyik pár különbözik. A Tukey Őszinte Szignifikáns Különbség teszt erre a kérdésre úgy ad választ, hogy minden párt összehasonlít, miközben kontrollálja a családonkénti hibaarányt.
TukeyHSD(anova_one_way)
output:
Olvassa be a kimenetet soronként páronként. diff az oszlop a két csoportátlag közötti különbséget tartalmazza, lwr és a engedély korlátozta az adott különbség 95 százalékos konfidenciaintervallumát, és p melléknév a többszörös összehasonlításokra korrigált p-érték. Egy pár szignifikánsan különbözik, ha az intervallumuk kizárja a nullát, ami egyenértékű azzal, hogy a p adj értéke 0.05 alatt van. Ebben az adathalmazban a 3. mérget tartalmazó összehasonlítások a szignifikánsak, ami összhangban van a dobozdiagrammal: a 3. csoport átlagos túlélési ideje egyértelműen alacsonyabb, mint az 1. és 2. csoporté, míg az 1. és 2. csoport statisztikailag nem különböztethető meg egymástól.
Kétirányú ANOVA
A kétutas ANOVA egy második faktort ad a képlethez. Pontosan úgy működik, mint az egyutas teszt, csak a képlet változik:
y ~ x1 + x2
Itt y a kvantitatív válaszváltozó, míg x1 és x2 egyaránt kategorikus faktorok.
Hipotézis kétutas ANOVA tesztben
- H0: A csoportátlagok mindkét faktorváltozó esetében egyenlőek
- H1: Legalább egy csoportátlag eltér a két faktor közül legalább az egyik esetében
Hozzáadjuk a „kezelés” változót a modellhez. Ez a változó rögzíti a tengerimalacnak adott kezelést. Az alábbi additív képlet azt vizsgálja, hogy az egyes tényezők önmagukban is befolyásolják-e a túlélési időt, miután figyelembe vettük a többit.
Módosítsd a kódot a treat hozzáadásával az első független változó mellé.
anova_two_way <- aov(time~poison + treat, data = df) summary(anova_two_way)
output:
## 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 ## ---
Mindkét p-érték (5.7e-07 a méreg és 6.7e-06 a kezelés esetében) jóval 0.05 alatt van, így mindkét tényező esetében elvetjük a H0-t, és arra a következtetésre jutunk, hogy akár a méreg, akár a kezelés megváltoztatása befolyásolja a túlélési időt.
Interakciós kifejezés hozzáadása
A fenti additív modell feltételezi, hogy a méreg hatása azonos, függetlenül a kezeléstől. A feltételezés teszteléséhez cseréljük ki a pluszjelet csillagra, amely mindkét főhatásra és azok kölcsönhatására illik:
anova_interaction <- aov(time~poison * treat, data = df) summary(anova_interaction)
Ha a méreg:kezelés sor nem szignifikáns, akkor az additív modell a jobb választás, mivel kevesebb szabadsági fokot használ fel.
ANOVA R-ben: Gyorsteszt-referencia
Az alábbi táblázat felsorolja a fent használt teszteket, az azokat futtató R hívást és az általuk kiértékelt hipotézist:
| Tesztelés | Code | Hipotézis | P-értéket |
|---|---|---|---|
| Egyirányú ANOVA |
aov(y ~ X, data = df)
|
H1: Az átlag legalább egy csoportnál eltérő | 0.05 |
| Páronként |
TukeyHSD(ANOVA summary) |
0.05 | |
| Kétirányú ANOVA |
aov(y ~ X1 + X2, data = df)
|
H1: Legalább egy csoportátlag eltér bármelyik faktor esetében | 0.05 |




