Raport z przedmiotu statystyka matematyczna
ANOVA 1-czynnikowa dla prób zależnych
Wprowadzenie
ANOVA z powtarzanymi środkami przyjmuje następujące założenia dotyczące danych:
Brak znaczących wartości odstających w jakiejkolwiek komórce projektu. Można to sprawdzić wizualizując dane za pomocą metody box plot oraz za pomocą funkcji
identify_outliers()\[pakiet rstatix\]Normalność: zmienna wynikowa (lub zależna) powinna być w przybliżeniu normalnie rozłożona w każdej komórce projektu. Może to być sprawdzone przy użyciu testu normalności Shapiro-Wilka
shapiro_test()\[rstatix\]) lub przez wizualną inspekcję przy użyciu QQ plotgggqqplot()\[pakiet ggpubr\]Założenie o sferyczności: wariancja różnic między grupami powinna być równa. Można to sprawdzić za pomocą testu sferyczności Mauchly’ego, który jest automatycznie podawany przy użyciu funkcji R
anova_test()\[pakiet rstatix\]
Zauważ, że jeśli powyższe założenia nie są spełnione istnieje nieparametryczna alternatywa (test Friedmana) dla jednokierunkowej ANOVY powtarzanych pomiarów!
Niestety, nie istnieją nieparametryczne alternatywy dla dwukierunkowej i trójkierunkowej ANOVY powtarzanych pomiarów! Tak więc, w sytuacji, gdy założenia nie są spełnione, można rozważyć przeprowadzenie dwukierunkowego/trzykierunkowego testu ANOVA dla danych przekształconych i nieprzekształconych, aby sprawdzić, czy istnieją jakieś znaczące różnice (np. za pomocą logarytmu).
Jeśli oba testy prowadzą do tych samych wniosków, można nie decydować się na przekształcenie zmiennej wynikowej i kontynuować dwu-/trzy-kierunkową ANOVA dla danych oryginalnych.
Możliwe jest również wykonanie odpornego testu ANOVA przy użyciu pakietu WRS2 w R.
RM Anova in R
Kluczowe funkcje:
anova_test()
[pakiet rstatix], wrapper wokółcar::Anova()` dla ułatwienia obliczeń ANOVA z powtarzanymi miarami. Kluczowe argumenty do wykonania ANOVA z powtarzanymi miarami:data: ramka danychdv: (numeryczna) badana zmienna zależnawid: identyfikator rekorduwithin: within-subjects czynnik, zmienna grupująca
get_anova_table()\[rstatix package\]. Wyodrębnia tabelę ANOVA z funkcjianova_test(). Zwraca ona tabelę ANOVA, która jest automatycznie skorygowana o ewentualne odchylenia od założenia o sferyczności. Domyślnie automatycznie stosowana jest korekta sferyczności Greenhouse’a-Geissera tylko do czynników wewnątrzprzedmiotowych naruszających założenie sferyczności (tzn. wartość p testu Mauchly’ego jest istotna, p <= 0.05).
Anova 1-czynnikowa dla prób zależnych
W zbiorze “selfesteem” zawarto wyniki samooceny 10 osób w trzech punktach czasowych podczas stosowania określonej diety w celu określenia, czy ich samoocena uległa poprawie.
data("selfesteem", package = "datarium")
head(selfesteem, 3)## # A tibble: 3 x 4
## id t1 t2 t3
## <int> <dbl> <dbl> <dbl>
## 1 1 4.01 5.18 7.11
## 2 2 2.56 6.91 6.31
## 3 3 3.24 4.44 9.78
Jednoczynnikowa ANOVA może być użyta do określenia, czy średnie wyniki samooceny różnią się znacząco pomiędzy trzema punktami czasowymi. Przekształćmy więc tę ramkę danych na długi format:
selfesteem <- selfesteem %>%
gather(key = "time", value = "score", t1, t2, t3) %>%
convert_as_factor(id, time)
head(selfesteem, 3)## # A tibble: 3 x 3
## id time score
## <fct> <fct> <dbl>
## 1 1 t1 4.01
## 2 2 t1 2.56
## 3 3 t1 3.24
Statystyki opisowe
W poniższej tabeli przedstawiono statystyki opisowe badanych próbek.
to <- selfesteem %>%
select(time,score)
raport <- list(
"Samoocena" =
list(
"Min" = ~ min(score),
"Max" = ~ max(score),
"Q1" = ~ quantile(score, 0.25),
"Mediana" = ~ round(median(score,0.5),2),
"Średnia" = ~ round(mean(score),2),
"Odchylenie std." = ~ round(sd(score),2),
"Skośność" = ~ round(skew(score),2),
"Kurtoza" = ~ round(kurtosi(score),2)
)
)
tabela<-summary_table(to, summaries=raport, by=c("time"))
kbl(tabela,align = "cc", digits=2, caption="Statystyki opisowe ocen samopoczucia w poszczególnych punktach czasowych diety", ) %>%
kable_classic(full_width=F) %>%
kable_styling(bootstrap_options=c("striped","hover"))| t1 (N = 10) | t2 (N = 10) | t3 (N = 10) | |
|---|---|---|---|
| Min | 2.05 | 3.91 | 6.31 |
| Max | 4.01 | 6.91 | 9.78 |
| Q1 | 2.91 | 4.41 | 6.70 |
| Mediana | 3.21 | 4.60 | 7.46 |
| Średnia | 3.14 | 4.93 | 7.64 |
| Odchylenie std. | 0.55 | 0.86 | 1.14 |
| Skośność | -0.45 | 1.01 | 0.40 |
| Kurtoza | -0.67 | 0.05 | -1.30 |
Na podstawie powyższej tabeli można zauważyć, iż wraz z upływem czasu stosowania diety następował wzrost wartości odnotowywanych statystyk opisowych. Zatem można domniemać, iż samoocena badanych ulegała poprawie.
Powyższe statystyki opisowe zwizualizowano na poniższych wykresach pudełkowych.
wykres1 <- ggboxplot(selfesteem , x = "time", y = "score",
color = "time", palette = c("darkred", "darksalmon", "deeppink4"),
order = c("t1", "t2", "t3"), xlab="Punkty czasowe diety",
ylab="Ocena samopoczucia", main= "Wizualizacja statystyk opisowych")
wykres2 <- ggplotly(wykres1)
wykres2Analizując powyższy rysunek można zauważyć, że wraz z upływem czasu następował wzrost poprawy samopoczucia. Jednakże, aby stwierdzić czy był to statystycznie istotny wzrost poprawy samopoczucia należy przeprowadzić test jednoczynnikowej ANOVY dla prób zależnych. Ponadto dla punktu czasowego t2 możemy zidentyfikować outlier.
Założenia
Przed wykonaniem testu ANOVA należy zweryfikować normalność rozkładu analizowanej zmiennej zależnej. W tym celu należy pogrupować dane wg zmiennej “time”, a następnie wykonać test Shapiro-Wilka na normalność rozkładu badanej zmiennej zależnej. W niniejszym teście:
H0: Próba pochodzi z populacji o rozkładzie normalnym.
H1: Próba nie pochodzi z populacji o rozkładzie normalnym..
selfesteem %>%
group_by(time) %>%
shapiro_test(score)## # A tibble: 3 x 4
## time variable statistic p
## <fct> <chr> <dbl> <dbl>
## 1 t1 score 0.967 0.859
## 2 t2 score 0.876 0.117
## 3 t3 score 0.923 0.380
Na podstawie powyższych wyników możemy zauważyć, że w każdej podgrupie poziom p >alfa zatem nie ma podstaw do odrzucenia H0. W związku z powyższym wszystkie analizowane powyżej próbki pochodzą z populacji o rozkładzie normalnym.
ANOVA
Ze względu na to, że założenie o normalności jest spełnione możemy wykonać jednoczynnikową parametryczną ANOVĘ dla prób zależnych. W niniejszym teście:
H0: Z czasem samopoczucie badanych nie uległo istotnie statystycznej poprawie. H1: Z czasem samopoczucie badanych uległo istotnie statystycznej poprawie.
wyniki <- anova_test(data=selfesteem, dv=score, wid=id, within=time)
get_anova_table(wyniki)## ANOVA Table (type III tests)
##
## Effect DFn DFd F p p<.05 ges
## 1 time 2 18 55.469 2.01e-08 * 0.829
Na podstawie powyższych wyników można zauważyć, że poziom p < alfa zatem należy odrzucić H0. W związku z powyższym stwierdzamy, że z czasem samopoczucie badanych uległo istotnie statystycznej poprawie.
Powyższy test można również wizualizować:
ggwithinstats(data=selfesteem,
y=score,
x=time,
type="p",
xlab="Punkty czasowe diety",
ylab="Ocena samopoczucia",
legend.title="Momenty czasowe czasowe",
caption="ANOVA jednoczynnikowa dla prób zależnych")W oparciu o powyższy rysunek można ponownie odrzucić H0 o braku istotnie statystycznej poprawy samopoczucia następującej wraz z upływem czasu.
Test post-hoc
Ze względu na to, iż odrzucono H0 w jednoczynnikowej ANOVIE należy wykonać test post-hoc, aby zidentyfikować między którymi punktami czasowymi podczas stosowania diety wystąpiły istotne statystycznie różnice w otrzymanych ocenach samopoczucia. W tym przypadku będzie to test prawdziwie istotnej różnicy HSD Tukeya. W prezentowanym teście:
H0: Między średnimi ocen samopoczucia w poszczególnych punktach czasowych diety nie występują statystycznie istotne różnice.
H1: Między średnimi ocen samopoczucia w poszczególnych punktach czasowych diety występują statystycznie istotne różnice.
model <- aov(score~time,data=selfesteem)
hsd<-TukeyHSD(model,which="time", ordered=TRUE)
print(hsd)## Tukey multiple comparisons of means
## 95% family-wise confidence level
## factor levels have been ordered
##
## Fit: aov(formula = score ~ time, data = selfesteem)
##
## $time
## diff lwr upr p adj
## t2-t1 1.79382 0.8114139 2.776226 0.0003104
## t3-t1 4.49622 3.5138136 5.478626 0.0000000
## t3-t2 2.70240 1.7199935 3.684806 0.0000007
Na podstawie powyższych wyników można zauważyć, że poziom p < alfa dla każdej z badanych par punktów czasowych diety. W związku z powyższym należy odrzucić H0. Zatem możemy uznać, że występują statystycznie istotne różnice w ocenach samopoczucia, które dokonano w poszczególnych punktach czasowych diety.
Wnioski i podsumowanie
W efekcie przeprowadzonego badania sformułowano następujące konkluzje:
1. Z czasem stosowania diety samopoczucie badanych uległo istotnie statystycznej poprawie.
2. Wzrost poprawy samopoczucia badanych był istotny statystycznie między wszystkimi punktami czasowymi stosowania diety.
Podsumowując, statystyka matematyczna to potężne i zarazem fascynujące narzędzie, które pozwala stwierdzić czy obserwowane w otaczającym świecie różnice rzeczywiście mają miejsce czy są one jedynie kwestią przypadku. Ponadto do sformułowania niniejszych konkluzji niepotrzebne jest zbadanie całej populacji - co w większości przypadków byłoby niemożliwe - lecz wystarczą jedynie próbki!
Autorka prezentowanego projektu wyraża wdzięczność za możliwość zrealizowania tak fascynującego przedmiotu z zastosowaniem profesjonalnego oprogramowania analitycznego jakim jest język R. Składa serdeczne podziękowania dr. inż. Karolowi Flisikowskiemu za przekazaną wiedzę i umiejętności, a także wsparcie merytoryczne na konsultacjach oraz życzy dalszych sukcesów w rozwijaniu przedmiotów analitycznych i nie tylko!