Wanneer moet je aov() versus anova() gebruiken in r
De functies aov() en anova() in R lijken op elkaar, maar we gebruiken ze feitelijk in twee verschillende scenario’s.
We gebruiken aov() wanneer we een ANOVA-model willen passen en de resultaten willen weergeven in een ANOVA-samenvattingstabel.
We gebruiken anova() wanneer we de pasvorm van geneste regressiemodellen willen vergelijken om te bepalen of een regressiemodel met een bepaalde set coëfficiënten een significant betere pasvorm oplevert dan een model met slechts een subset coëfficiënten.
De volgende voorbeelden laten zien hoe u elke functie in de praktijk kunt gebruiken.
Voorbeeld 1: Hoe aov() te gebruiken in R
Laten we zeggen dat we een one-way ANOVA willen uitvoeren om te bepalen of drie verschillende trainingsprogramma’s een verschillende impact hebben op gewichtsverlies.
We werven 90 mensen om deel te nemen aan een experiment waarbij we willekeurig 30 mensen toewijzen om een maand lang Programma A, Programma B of Programma C te volgen.
De volgende code laat zien hoe u de functie aov() in R gebruikt om deze eenrichtings-ANOVA uit te voeren:
#make this example reproducible set. seeds (0) #create data frame df <- data. frame (program = rep(c("A", "B", "C"), each= 30 ), weight_loss = c(runif(30, 0, 3), runif(30, 0, 5), runif(30, 1, 7))) #fit one-way anova using aov() fit <- aov(weight_loss ~ program, data=df) #view results summary(fit) Df Sum Sq Mean Sq F value Pr(>F) program 2 98.93 49.46 30.83 7.55e-11 *** Residuals 87 139.57 1.60 --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Uit de modelresultaten kunnen we zien dat de p-waarde van het programma (0,0000000000755) kleiner is dan 0,05, wat betekent dat er een statistisch significant verschil is in het gemiddelde gewichtsverlies tussen de drie programma’s.
Voorbeeld 2: Hoe anova() te gebruiken in R
Stel dat we het aantal gestudeerde uren willen gebruiken om examenscores voor studenten van een bepaalde hogeschool te voorspellen. We kunnen besluiten de volgende twee regressiemodellen aan te passen:
Volledig model: score = β 0 + B 1 (uren) + B 2 (uren) 2
Verlaagd model: score = β 0 + B 1 (uren)
De volgende code laat zien hoe u de functie anova() in R kunt gebruiken om een ‚gebrek aan pasvorm‘-test uit te voeren om te bepalen of het volledige model een aanzienlijk betere pasvorm biedt dan het gereduceerde model:
#make this example reproducible
set. seeds (1)
#create dataset
df <- data.frame(hours = runif(50, 5, 15), score=50)
df$score = df$score + df$hours^3/150 + df$hours*runif(50, 1, 2)
#view head of data
head(df)
hours score
1 7.655087 64.30191
2 8.721239 70.65430
3 10.728534 73.66114
4 14.082078 86.14630
5 7.016819 59.81595
6 13.983897 83.60510
#fit full model
full <- lm(score ~ poly(hours,2), data=df)
#fit reduced model
reduced <- lm(score ~ hours, data=df)
#perform lack of fit test using anova()
anova(full, reduced)
Analysis of Variance Table
Model 1: score ~ poly(hours, 2)
Model 2: score ~ hours
Res.Df RSS Df Sum of Sq F Pr(>F)
1 47 368.48
2 48 451.22 -1 -82.744 10.554 0.002144 **
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Omdat de p-waarde in de outputtabel (0,002144) kleiner is dan 0,05, kunnen we de nulhypothese van de test verwerpen en concluderen dat het volledige model een statistisch significant betere fit biedt dan het gereduceerde model.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in R kunt uitvoeren:
Eenrichtings-ANOVA uitvoeren in R
Hoe tweeweg-ANOVA uit te voeren in R
Hoe herhaalde metingen ANOVA in R uit te voeren