Rozdział 19 Analiza wariancji (ANOVA)
19.1 Jednoczynnikowa analiza wariancji – test
Jednoczynnikową analizę wariancji można uznać za test, w którym testujemy równość średnich w dwóch lub większej liczbie populacji. Jest to więc rozszerzenie testu t dla dwóch średnich (16), w tej wersji, w której zakładamy równe wariancje.
- Hipoteza zerowa w analizie wariancji mówi, że średnie we wszystkich porównywanych populacjach (\(r\) populacji) są równe:
\[ H_0: \mu_1 = \mu_2 = ... = \mu_r \]
Hipoteza alternatywna stwierdza, że nie wszystkie średnie są równe.
Statystyka testowa ma rozkład F. Koncepcyjnie można powiedzieć, że statystyka testowa przedstawia stosunek zróżnicowania między średnimi w grupach do zróżnicowania wewnątrz grup (precyzyjny wzór zostanie przedstawiony poniżej).
\[ F = \frac{\text{Zróżnicowanie między grupami}}{\text{Zróżnicowanie wewnątrz grup}} \]
- Obszar krytyczny
Obszar krytyczny w teście jest prawostronny. Podobnie jak w teście chi-kwadrat, o hipotezie alternatywnej można powiedzieć, że jest „wielostronna”.
- Założenia.
ANOVA wymaga następujących założeń:
próby są losowe i niezależne,
w każdej z populacji obserwowana zmienna ma (w przybliżeniu) rozkład normalny,
średnie w każdej populacji mogą być różne (równe, jeżeli \(H_0\) jest prawdziwa), ale wariancje w każdej z grup są takie same (\(\sigma_1^2 = \sigma_2^2 = ... = \sigma_r^2\)).
W praktyce dość często przyjmuje się, że analizę wariancji z testem F możemy przeprowadzić, jeżeli dane nie są ekstremalnie asymetryczne (brak bardzo odstających wartości) i zaobserwowane odchylenia standardowe nie różnią się znacznie (np. maksymalne < 2 * minimalne) oraz gdy próby są odpowiednio duże.
Jeżeli mamy podejrzenia, że założenia, nawet w przybliżeniu, nie są spełnione, możemy zastosować test nieparametryczny Kruskala-Wallisa opisany w rozdziale 20.
19.2 Statystyka testowa F – wzór
Wyznaczenie statystyki testowej opiera się na spostrzeżeniu, że całkowita zmienność (wyznaczona jako suma kwadratów odchyleń od ogólnej średniej) może zostać rozbita na zmienność wewnątrz grup (suma kwadratów odchyleń od grupowych średnich) i zmienność między grupami (suma kwadratów odchyleń średnich grupowych od ogólnej):
\[ SSTotal = SSTR + SSE \]
19.2.1 Zmienność między grupami
Zmienność między grupami (międzygrupową sumę kwadratów) będziemy oznaczać skrótem SSTR (SS – to sum of squares, czyli suma kwadratów, TR – treatment, czyli określenie poszczególnych grup11). Inne oznaczenia zmienności między grupami to SST, SS Groups, \(SS_{między}\) itp.
Wzór:
\[ SSTR = \sum_{i=1}^r n_i (\bar{x}_i-\bar{x})^2 \tag{19.1} \]
gdzie \(r\) to liczba grup, \(n_i\) to liczebność \(i\)-tej grupy, \(\bar{x}_i\) to średnia w \(i\)-tej grupie, zaś \(\bar{x}\) to średnia całkowita.
Średnia zmienność międzygrupowa (MSTR, mean sum of squares due to treatment) to SSTR podzielona przez \(r-1\) (\(r\) to liczba grup):
\[ MSTR = \frac{SSTR}{r-1} \tag{19.2} \]
19.2.2 Zmienność wewnątrz grup
Zmienność wewnątrz grup mierzymy za pomocą sumy kwadratów „błędów” (SSE – ang. sum of squares of errors):
\[ SSE = \sum_{j=1}^{n_1}(x_{1j}-\bar{x}_1)^2 + \sum_{j=1}^{n_2}(x_{2j}-\bar{x}_2)^2+ \dots + \sum_{j=1}^{n_r}(x_{rj}-\bar{x}_r)^2 \tag{19.3} \]
gdzie \(n_1\), \(n_2\), ... to liczebności poszczególnych grup \(x_{1j}\), \(x_{2j}\) to poszczególne obserwacje w grupie \(j\), a \(\bar{x}_1\), \(\bar{x}_2\) to zaobserwowane średnie w grupach.
Średnia suma kwadratów błędów (MSE, czasem nazywana wariancją błędu) to:
\[ MSE = \frac{SSE}{n-r} \tag{19.4} \]
Można zauważyć, że:
\[ SSE = ({n_1}-1)s_1^2 +({n_2}-1)s_2^2 + ... ({n_r}-1)s_r^2 \tag{19.5} \]
Czyli MSE to wariancja zbiorcza (jak teście dwóch średnich: 16.3).
19.3 Tabela wyników ANOVA
Tabela, w której przedstawiane są wyniki analizy wariancji ma najczęściej następujący format:
Źródło zmienności | Suma kwadratów (SS) | Stopnie swobody (df) | Średnia suma kwadratów (MS) | F |
---|---|---|---|---|
Między grupami | SSTR | r-1 | MSTR | F = MSTR/MSE |
Wewnątrz grup | SSE | n-r | MSE | |
Całość | SSTotal | n-1 |
19.4 Wielkość efektu
Wielkość efektu w ramach analizy wariancji mierzymy najczęściej za pomocą współczynnika \(\eta^2\) (eta-kwadrat). Można interpretować ten współczynnik jako „udział wyjaśnionej wariancji”, tzn. udział całkowitej wariancji badanej zmiennej ilościowej wyjaśnionej przez zmienność międzygrupową.
\[ \eta^2 = \frac{SSTR}{SSTotal} \tag{19.7} \]
Alternatywną opcją jest współczynnik \(\omega^2\) (omega-kwadrat), który jest uznawany za lepszy (mniej obciążony) estymator udziału wyjaśnionej wariancji w populacji:
\[ \omega^2 = \frac{SSTR-(r-1)\cdot MSE}{SSTotal+MSE} \tag{19.8} \]
Niekiedy jako miara wielkości efektu stosowana jest miara \(f\) Cohena:
\[ f = \sqrt{\frac{\eta^2}{1-\eta^2}} \tag{19.9} \]
Od dziedziny i konkretnego problemu zależy to, przy jakich wielkościach tych miar uznamy zaobserwowany efekt za silny. W przypadku braku innego punktu odniesienia, można kierunkowo w przypadku \(\eta^2\) i \(\omega^2\) przyjąć: 0,01 – efekt mały, 0,06 – efekt umiarkowany, 0,14 – efekt duży, zaś w przypadku \(f\): 0,10 – efekt mały, 0,25 – efekt umiarkowany, 0,40 – efekt duży.
19.5 Procedura post hoc
Jeżeli w ramach analizy wariancji odrzucimy hipotezę zerową o równości średnich we wszystkich populacjach, możemy chcieć sprawdzić, które pary średnich różnią się istotnie między sobą. Do tego służą tzw. testy post hoc. Popularnym testem tego typu jest tzw. test HSD (honestly significant difference) Tukeya. W teście post hoc porównuje się średnie parami i identyfikuje te pary, dla których różnica między średnimi w próbie jest statystycznie istotna.
19.6 Test Levene'a i test Browna-Forsythe'a
ANOVA (analiza wariancji) używana jest do porównywania średnich. Możemy jednak zastosować analizę wariancji do porównywania wariancji.
Test Levene'a jednorodności wariancji to test stosowany, gdy chcemy sprawdzić, czy zróżnicowanie w porównywanych populacjach jest takie samo („jednorodne”). H0 w tym teście stwierdza, że wariancje są jednorodne, zaś HA mówi, że przynajmniej jedna wariancja różni się od pozostałych.
Z punktu widzenia obliczeniowego test Levene'a polega na tym, że
dla każdej obserwacji obliczamy wartość bezwzględną odchylenia od grupowej średniej (lub mediany), a następnie
na tak przekształconych obserwacjach przeprowadzamy zwykły test ANOVA, czyli analizę wariancji (ze statystyką testową F).
Jeżeli dla każdej obserwacji obliczamy wartość bezwzględną odchylenia od grupowej średniej, test nazywamy testem Levene'a, natomiast gdy używamy odchyleń od grupowej mediany, test nazywany jest testem Levene'a z medianą lub testem Browna-Forsythe'a. Test Browna-Forsythe'a jest zwykle rekomendowany jako bardziej odporny i mające lepsze właściwości w praktycznych zastosowaniach.
19.8 Linki
Jednoczynnikowa ANOVA dla prób niezależnych (Pogotowie statystyczne): https://pogotowiestatystyczne.pl/aploud/2023/04/2023-06-Jednoczynnikowa-ANOVA-dla-prob-niezaleznych.pdf
Jednoczynnikowa ANOVA – aplikacja webowa: https://istats.shinyapps.io/ANOVA/
19.9 Szablony
ANOVA — arkusz Google
ANOVA — szablon w Excelu
Kalkulator rozkładu F — arkusz Google
Kalkulator rozkładu F — szablon w Excelu
# Przykładowe dane
group <- as.factor(c(rep("A",7), rep("B",7), rep("C",7), rep("D",7)))
result <- c(51, 87, 50, 48, 79, 61, 53, 82, 91, 92, 80, 52, 79, 73,
79, 84, 74, 98, 63, 83, 85, 85, 80, 65, 71, 67, 51, 80)
data<-data.frame(group, result)
#Aby obejrzeć dane, można uruchomić: View(data)
#Aby zapisać dane do pliku tekstowego, można uruchomić: write.csv2(data, "data.csv")
#Aby wczytać dane z pliku tekstowego, można uruchomić: read.csv2("data.csv")
# Tabela z podsumowaniem
library(dplyr)
data %>%
group_by(group) %>%
summarize(n=n(), suma = sum(result), srednia = mean(result), odch_st=sd(result), mediana = median(result)) %>%
data.frame() -> summary_table
# Tabela ANOVA
model<-aov(result~group, data=data)
anova_summary<-summary(model)
# Test Levene'a (Browna-Forsythe'a)
levene_result<-car::leveneTest(result~group, data=data)
# Procedura Tukeya
tukey_result<-TukeyHSD(x=model, conf.level=0.95)
print(list(`Podsumowanie` = summary_table, `Tabela ANOVA` = anova_summary, `Test Levene'a` = levene_result,
`HSD Tukeya` = tukey_result))
## $Podsumowanie
## group n suma srednia odch_st mediana
## 1 A 7 429 61,28571 15,56400 53
## 2 B 7 549 78,42857 13,45185 80
## 3 C 7 566 80,85714 10,76148 83
## 4 D 7 499 71,28571 11,61485 71
##
## $`Tabela ANOVA`
## Df Sum Sq Mean Sq F value Pr(>F)
## group 3 1620 539,8 3,204 0,0412 *
## Residuals 24 4043 168,5
## ---
## Signif. codes: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1 ' ' 1
##
## $`Test Levene'a`
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 0,1898 0,9023
## 24
##
## $`HSD Tukeya`
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = result ~ group, data = data)
##
## $group
## diff lwr upr p adj
## B-A 17,142857 -1,996412 36,282127 0,0905494
## C-A 19,571429 0,432159 38,710698 0,0437429
## D-A 10,000000 -9,139270 29,139270 0,4870470
## C-B 2,428571 -16,710698 21,567841 0,9849136
## D-B -7,142857 -26,282127 11,996412 0,7340659
## D-C -9,571429 -28,710698 9,567841 0,5237024
import pandas as pd
import numpy as np
from scipy import stats
import statsmodels.api as sm
from statsmodels.formula.api import ols
from statsmodels.stats.multicomp import pairwise_tukeyhsd
from statsmodels.stats.anova import anova_lm
# Ramka danych
group = ['A']*7 + ['B']*7 + ['C']*7 + ['D']*7
result = [51, 87, 50, 48, 79, 61, 53,
82, 91, 92, 80, 52, 79, 73,
79, 84, 74, 98, 63, 83, 85,
85, 80, 65, 71, 67, 51, 80]
data = pd.DataFrame({'group': group, 'result': result})
# Tabela z podsumowaniem danych
summary_table = data.groupby('group')['result'].agg(['count', 'sum', 'mean', 'std', 'median']).reset_index()
summary_table.columns = ['group', 'n', 'suma', 'srednia', 'odch_st', 'mediana']
# ANOVA
model = ols('result ~ group', data=data).fit()
anova_summary = anova_lm(model, typ=2)
# Test Levene'a (Browna-Forsythe'a)
levene_result = stats.levene(data['result'][data['group'] == 'A'],
data['result'][data['group'] == 'B'],
data['result'][data['group'] == 'C'],
data['result'][data['group'] == 'D'])
# Procedura HSD Tukeya
tukey_result = pairwise_tukeyhsd(endog=data['result'], groups=data['group'], alpha=0.05)
print('Podsumowanie:\n\n', summary_table, '\n\nTabela ANOVA:\n\n', anova_summary, '\n\nTest Levene\'a:\n\n', levene_result,
'\n\nHSD Tukeya:\n\n', tukey_result)
## Podsumowanie:
##
## group n suma srednia odch_st mediana
## 0 A 7 429 61.285714 15.564000 53.0
## 1 B 7 549 78.428571 13.451854 80.0
## 2 C 7 566 80.857143 10.761483 83.0
## 3 D 7 499 71.285714 11.614851 71.0
##
## Tabela ANOVA:
##
## sum_sq df F PR(>F)
## group 1619.535714 3.0 3.204282 0.041204
## Residual 4043.428571 24.0 NaN NaN
##
## Test Levene'a:
##
## LeveneResult(statistic=0.18975139523084725, pvalue=0.9023335775328473)
##
## HSD Tukeya:
##
## Multiple Comparison of Means - Tukey HSD, FWER=0.05
## =====================================================
## group1 group2 meandiff p-adj lower upper reject
## -----------------------------------------------------
## A B 17.1429 0.0905 -1.9964 36.2821 False
## A C 19.5714 0.0437 0.4322 38.7107 True
## A D 10.0 0.487 -9.1393 29.1393 False
## B C 2.4286 0.9849 -16.7107 21.5678 False
## B D -7.1429 0.7341 -26.2821 11.9964 False
## C D -9.5714 0.5237 -28.7107 9.5678 False
## -----------------------------------------------------
19.10 Zadania
Zadanie 19.1 (McClave and Sincich 2012) Psycholog oceniał trzy metody zapamiętywania imion w kontrolowanych warunkach. Próbę 139 studentów podzielono losowo na trzy grupy; każda grupa w inny sposób uczyła się wzajemnie swoich imion. Grupa 1 wykorzystała „prostą grę”, w której pierwsza osoba podaje imię, druga podaje swoje imię oraz imię pierwszej osoby, trzecia podaje swoje imię i imiona dwóch pierwszych itd. Grupa 2 zastosowała „grę złożoną”, będącą modyfikacją prostej gry, w której uczniowie podają nie tylko swoje imiona, ale także ulubione zajęcia (np. sportowe). Grupa 3 stosowała „przedstawianie się parami”: każdy student musi przedstawić drugią osobę z pary. Rok później wszystkim badanym wysłano zdjęcia grupy i poproszono o podanie imion osób ze zdjęcia. Badacze zmierzyli odsetek imion zapamiętanych przez każdego respondenta. Przeprowadź analizę wariancji, aby ustalić, czy średni odsetek zapamiętanych imion różni się w przypadku trzech metod zapamiętywania. Użyj a = 0,05.
Prosta gra: 24, 43, 38, 65, 35, 15, 44, 44, 18, 27, 0, 38, 50, 31, 7, 46, 33, 31, 0, 29, 0, 0, 52, 0, 29, 42, 39, 26, 51, 0, 42, 20, 37, 51, 0, 30, 43, 30, 99, 39, 35, 19, 24, 34, 3, 60, 0, 29, 40, 40
Gra złożona: 39, 71, 9, 86, 26, 45, 0, 38, 5, 53, 29, 0, 62, 0, 1, 35, 10, 6, 33, 48, 9, 26, 83, 33, 12, 5, 0, 0, 25, 36, 39, 1, 37, 2, 13, 26, 7, 35, 3, 8, 55, 50
Pary: 5, 21, 22, 3, 32, 29, 32, 0, 4, 41, 0, 27, 5, 9, 66, 54, 1, 15, 0, 26, 1, 30, 2, 13, 0, 2, 17, 14, 5, 29, 0, 45, 35, 7, 11, 4, 9, 23, 4, 0, 8, 2, 18, 0, 5, 21, 14
Zadanie 19.2 (Agresti, Franklin, and Klingenberg 2016) Linia lotnicza zarządza infolinią, przez którą klienci dokonują rezerwacji. Czasem, kiedy liczba osób obsługujących infolinię jest zbyt mała w stosunku do zainteresowania klientów, niektórzy dzwoniący są przełączani w tryb oczekiwania na połączenie. Linia lotnicza przeprowadziła eksperyment, aby ustalić, czy to, co klient słyszy w tle podczas oczekiwania na połączenie, ma wpływ na jego gotowość do cierpliwego czekania. W ramach eksperymentu linia lotnicza losowo przełączała jedno na tysiąc połączeń w tryb oczekiwania. W tym trybie niektórzy dzwoniący słyszeli w tle reklamy aktualnych promocji, inni słyszeli muzykę funkcjonalną (nazywaną „muzyką windową” lub „muzak”), jeszcze inni w słuchawce usłyszeli muzykę klasyczną. Dla każdego dzwoniącego biorącego (mimowolny) udział w eksperymencie zarejestrowano czas do momentu przerwania przez niego połączenia:
Reklamy: 5; 1; 11; 2; 8
Muzak: 0; 1; 4; 6; 3
Muzyka klasyczna: 13; 9; 8; 15; 7
Za pomocą testu ANOVA sprawdź, czy istnieje zależność między tym, co dzwoniący na infolinię słyszy w tle, a czasem cierpliwego oczekiwania na połączenie.
Zadanie 19.3 Dr B dojeżdżał przeprowadził eksperyment polegający na tym, że dojeżdzał do pracy (wykłady i laboratoria ze statystyki matematycznej na Politechnice Gdańskiej) na jednym z trzech losowo wybranych rowerów, mierząc czas przejazdu.
W ramach dwuczynnikowej analizy wariancji (z interakcją lub bez) sprawdź, czy poszczególne czynniki (kierunek: z PG / na PG i rower) mogły mieć wpływ na czas podróży. Czy występuje interakcja pomiędzy rowerem a kierunkiem przejazdu? Jakie założenia należało poczynić?
Literatura
Stosowane na określenie grup w analize wariancji słowo „treatment” wywodzi się z terminologii medycznej / projektowania eksperymentów, gdzie poszczególne grupy poddane są różnym czynnikom / rodzajom leczenia / rodzajom postępowania (ang. treatments)↩︎