Jak przeprowadzić ancova w r
W tym samouczku przedstawiono przykład wykonania ANCOVA w języku R.
Przykład: ANCOVA w R
Przeprowadzimy ANCOVA, aby sprawdzić, czy technika nauki ma wpływ na wyniki egzaminu, korzystając z następujących zmiennych:
- Badanie techniczne : Zmienna niezależna, którą chcemy analizować
- Obecna ocena ucznia : Współzmienna, którą chcemy wziąć pod uwagę
- Wynik przeglądu : zmienne odpowiedzi, które chcemy analizować
Poniższy zbiór danych zawiera informacje na temat 90 uczniów losowo podzielonych na trzy grupy po 30 osób.
Zbiór danych pokazuje technikę nauki zastosowaną przez każdego ucznia (A, B lub C) , jego obecną ocenę w klasie, kiedy zaczął stosować tę technikę nauki, oraz ocenę, jaką uzyskał na egzaminie po miesiącu stosowania tej techniki nauki w celu przygotowania na egzamin. egzamin:
#make this example reproducible set.seed(10) #create dataset data <- data.frame(technique = rep(c("A", "B", "C"), each = 30), current_grade = runif(90, 65, 95), exam = c(runif(30, 80, 95), runif(30, 70, 95), runif(30, 70, 90))) #view first six lines of dataset head(data) # technical current_grade exam #1 A 80.22435 87.32759 #2 A 74.20306 90.67114 #3 A 77.80723 88.87902 #4 A 85.79306 87.75735 #5 A 67.55408 85.72442 #6 A 71.76310 92.52167
Krok 1: Eksploruj dane
Przed dopasowaniem modelu ANCOVA musimy najpierw zbadać dane, aby lepiej je zrozumieć i sprawdzić, czy nie istnieją żadne skrajne wartości odstające, które mogłyby wypaczyć wyniki.
Najpierw możemy wyświetlić podsumowanie każdej zmiennej w zbiorze danych:
summary(data) # technical current_grade exam #A:30 Min. :65.43 Min. :71.17 # B:30 1st Qu.:71.79 1st Qu.:77.27 # C:30 Median:77.84 Median:84.69 # Mean:78.15 Mean:83.38 # 3rd Qu.:83.65 3rd Qu.:89.22 # Max. :93.84 Max. :94.76
Widzimy, że każda wartość techniki badawczej ( A, B i C) pojawia się w danych 30 razy.
Możemy także zobaczyć, jak rozkładały się obecne wyniki uczniów na początku badania. Minimalny wynik w klasie wyniósł 65,43, maksymalny 93,84, a średni 78,15.
Podobnie widzimy, że minimalny wynik uzyskany na egzaminie wyniósł 71,17, maksymalny 94,76, a średni 83,38.
Następnie możemy użyć pakietu dplyr , aby łatwo znaleźć średnią i odchylenie standardowe bieżących ocen i wyników egzaminów dla każdej techniki nauki:
#load dplyr library(dplyr) data %>% group_by (technical) %>% summarize (mean_grade = mean(current_grade), sd_grade = sd(current_grade), mean_exam = mean(exam), sd_exam = sd(exam)) # A tibble: 3 x 5 # technique mean_grade sd_grade mean_exam sd_exam #1 A 79.0 7.00 88.5 3.88 #2 B 78.5 8.33 81.8 7.62 #3 C 76.9 8.24 79.9 5.71
Widzimy, że średnie i odchylenia standardowe obecnych klas uczniów stosujących każdą technikę uczenia się są w przybliżeniu podobne.
Widzimy również, że średni wynik egzaminu jest znacznie wyższy w przypadku uczniów, którzy stosowali technikę uczenia się A w porównaniu z technikami B i C.
Możemy również wizualizować rozkład wyników egzaminu w oparciu o technikę badania za pomocą wykresów pudełkowych :
boxplot(exam ~ technique, data = data, main = "Exam Score by Studying Technique", xlab = "Studying Technique", ylab = "Exam Score", col = "steelblue", border = "black" )
Podobnie możemy również użyć wykresów skrzynkowych do wizualizacji rozkładu bieżących ocen w oparciu o technikę uczenia się:
boxplot(current_grade ~ technical, data = data, main = "Current Grade by Studying Technique", xlab = "Studying Technique", ylab = "Current Grade", col = "steelblue", border = "black" )
Krok 2: Sprawdź założenia modelu
Po przeprowadzeniu podstawowej eksploracji danych i zapoznaniu się z nimi musimy sprawdzić, czy spełnione są następujące założenia dla ANCOVA:
- Współzmienna i leczenie są niezależne – należy sprawdzić, czy współzmienna ( bieżąca ocena) i leczenie (technika badania) są od siebie niezależne, ponieważ dodanie składnika współzmiennej w modelu ma sens tylko wtedy, gdy współzmienna i leczenie działa niezależnie od zmiennej odpowiedzi ( badanie ).
- Homogeniczność wariancji – musimy sprawdzić, czy wariancje pomiędzy grupami są równe
Aby sprawdzić, czy zmienna towarzysząca i leczenie są niezależne, możemy wykonać analizę ANOVA, wykorzystując bieżący stopień jako zmienną odpowiedzi i technikę badania jako zmienną predykcyjną:
#fit anova model anova_model <- aov(current_grade ~ technique, data = data) #view summary of anova model summary(anova_model) # Df Sum Sq Mean Sq F value Pr(>F) #technical 2 74 37.21 0.599 0.552 #Residuals 87 5406 62.14
Wartość p jest większa niż 0,05, więc współzmienna ( bieżący stopień) i leczenie ( technika badania ) wydają się niezależne.
Następnie, aby sprawdzić, czy istnieje jednorodność wariancji pomiędzy grupami, możemy wykonać test Levene’a:
#load car library to conduct Levene's Test libary(car) #conduct Levene's Test leveneTest(technical exam, data = data) #Levene's Test for Homogeneity of Variance (center = median) # Df F value Pr(>F) #group 2 9.4324 0.0001961 *** #87
Wartość p testu wynosi 0,0001961, co wskazuje, że wariancje pomiędzy grupami nie są równe. Chociaż moglibyśmy podjąć próbę transformacji danych, aby rozwiązać ten problem, nie będziemy w tym momencie zbytnio martwić się różnicami wariancji.
Krok 3: Dostosuj model ANCOVA
Następnie dopasujemy model ANCOVA, wykorzystując wynik egzaminu jako zmienną odpowiedzi, technikę badania jako zmienną predykcyjną (lub „leczenie”) i aktualną ocenę jako współzmienną.
Będziemy używać funkcji Anova() w pakiecie, ponieważ w tym celu możemy określić, że chcemy użyć w modelu sumy kwadratów typu III, ponieważ suma kwadratów typu I zależy od kolejności, w jakiej Predyktory są wprowadzane do modelu:
#load car library library(car) #fit ANCOVA model ancova_model <- aov(exam ~ technique + current_grade, data = data) #view summary of model Anova(ancova_model, type="III") #Answer: exam # Sum Sq Df F value Pr(>F) #(Intercept) 7161.2 1 201.4621 < 2.2e-16 *** #technical 1242.9 2 17.4830 4.255e-07 *** #current_grade 12.3 1 0.3467 0.5576 #Residuals 3057.0 86
Widzimy, że wartość p dla techniki jest niezwykle niska, co wskazuje, że technika uczenia się ma statystycznie istotny wpływ na wyniki egzaminów, nawet po uwzględnieniu bieżącej oceny.
Krok 4: Testowanie post-hoc
Chociaż wyniki ANCOVA pokazały nam, że technika badania ma statystycznie istotny wpływ na wyniki egzaminów, musimy przeprowadzić badania post hoc , aby określić, które techniki badania różnią się od siebie.
Aby to zrobić, możemy użyć funkcji glht() z pakietu multcomp w R, aby wykonać test Tukeya dla wielokrotnych porównań:
#load the multcomp library library(multicomp) #fit the ANCOVA model ancova_model <- aov(exam ~ technique + current_grade, data = data) #define the post hoc comparisons to make postHocs <- glht(ancova_model, linfct = mcp(technique = "Tukey")) #view a summary of the post hoc comparisons summary(postHocs) #Multiple Comparisons of Means: Tukey Contrasts # #Fit: aov(formula = exam ~ technique + current_grade, data = data) # #Linear Assumptions: #Estimate Std. Error t value Pr(>|t|) #B - A == 0 -6.711 1.540 -4.358 0.000109 *** #C - A == 0 -8.736 1.549 -5.640 < 1e-04 *** #C - B == 0 -2.025 1.545 -1.311 0.393089 #view the confidence intervals associated with the multiple comparisons confint(postHocs) # Simultaneous Confidence Intervals # #Multiple Comparisons of Means: Tukey Contrasts # #Fit: aov(formula = exam ~ technique + current_grade, data = data) # #Quantile = 2.3845 #95% family-wise confidence level # #Linear Assumptions: # Estimate lwr upr #B - A == 0 -6.7112 -10.3832 -3.0392 #C - A == 0 -8.7364 -12.4302 -5.0426 #C - B == 0 -2.0252 -5.7091 1.6588
Z wyniku widać, że istnieje statystycznie istotna różnica (przy α = 0,05) w wynikach egzaminu pomiędzy badaniem techniki A i badaniem techniki B (wartość p: 0,000109) oraz pomiędzy techniką A i techniką C (wartość p: <1e-04).
Widzimy również, że nie ma statystycznie istotnej różnicy (przy α = 0,05) pomiędzy technikami B i C. Przedziały ufności między technikami również potwierdzają te ustalenia.
Można zatem stwierdzić, że stosowanie techniki uczenia się A prowadzi do statystycznie istotnie wyższej oceny ucznia w porównaniu z techniką B i C , nawet po uwzględnieniu aktualnej oceny studenta na zajęciach.