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.

  • 📐 Alapvető statisztikák: Az F-arány a csoportok közötti variabilitást osztja el a csoporton belüli variabilitáséval, tehát a nagyobb értékek az egyenlő átlagok ellen szólnak.
  • 🧪 Egyirányú szintaxis: Az aov(time~poison, data = df), majd a summary() függvény visszaadja a szabadsági fokokat, az F értéket és a p-értéket.
  • Feltételezés-ellenőrzések: A p-érték elfogadása előtt teszteljük a reziduálisok függetlenségét és normalitását a shapiro.test() függvénnyel, valamint az egyenlő varianciát a leveneTest() függvénnyel.
  • ???? Utóelemzés: A TukeyHSD() függvény minden csoportpárt összehasonlít, miközben a családonkénti hibaszázalékot a megadott szinten tartja.
  • 🧮 Kétirányú kiterjesztés: Az aov(time~poison + treat, data = df) egy második faktort ad hozzá, a poison:treat pedig az interakciós tagot.
  • 📊 Olvasási eredmények: A 0.05 alatti p-érték elutasítja az egyenlő átlagok nullhipotézisét, de soha nem azonosítja, hogy melyik csoport különbözik.

ANOVA R-ben Egyirányú Kétirányú

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.

Értelmezze az ANOVA tesztet

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.

Értelmezze az ANOVA tesztet

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:

Példa egyirányú ANOVA tesztre

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:

Páronkénti összehasonlítás

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

GYIK

Az F-érték a csoportok közötti és a csoporton belüli variancia aránya. Az 1-hez közeli értékek azt jelzik, hogy a csoportok átlagai hasonlóak. A nagy értékek azt jelzik, hogy a csoportokat különböző átlagú populációkból vették ki.

Használd a oneway.test() függvényt var.equal = FALSE értékkel, ha a varianciák egyenlőtlenek, és a kruskal.test() függvényt, ha a reziduálisok egyértelműen nem normálisak. Egy ferde válasz log()-vel történő átalakítása gyakran visszaállítja mind a normalitás, mind az egyenlő varianciát.

Minden t-próba 5 százalékos álpozitív kockázattal jár. Három párosított próba körülbelül 14 százalékra emeli a családon belüli hibaszázalékot. Az ANOVA egyetlen összesített tesztet 5 százalékon tart, és a Tukey HSD korrigálja a párosított összehasonlításokat.

Az ANOVA egy szabványos jellemzőkiválasztási szűrő: a kategorikus prediktorokat aszerint rangsorolja, hogy mennyire erősen különböztetik meg egy numerikus célpontot. A mesterséges intelligencia csapatok a modellváltozatok keresztvalidációs rétegek közötti összehasonlítására is használják.

Igen. A mesterséges intelligencia asszisztensek el tudják magyarázni a szabadsági fokokat, le tudják fordítani a p-értékeket közérthető nyelvre, és jelezni tudják a feltételezések megsértését a diagnosztikai diagramokon. Mindig erősítse meg a leolvasott értéket a saját leveneTest() és shapiro.test() eredményeivel.

Foglald össze ezt a bejegyzést a következőképpen: