shapiro.test(dane$zmienna) # Klasyczne wywołanie dla jednej zmiennejBardzo prosty Niezbędnik Statystyczny Studenta Socjologii
Ściąga z wyboru testów i procedur w środowisku R
Jak czytać oznaczenia poleceń
nazwa_pakietu::polecenie()
- Jeśli nie jest podana nazwa pakietu, to znaczy, że polecenie pochodzi z pakietu
baselubstats, które są automatycznie załadowane po starcie R. - Poleceń można używać w formie
pakiet::polecenie(), ale jest to niewygodne przy częstym pisaniu. Wtedy lepiej załadować cały pakiet na początku skryptu poleceniemlibrary(nazwa_pakietu). - Rozwiązanie z jawnym wskazaniem pakietu (
pakiet::) sprawdza się najlepiej przy doraźnym, pojedynczym użyciu danego narzędzia. - Gdziekolwiek pojawia się odniesienie do nazwy zbioru danych
dane, to oznacza to Twój zbiór danych, Twoją bazę, na której pracujesz…
Zanim wybierzesz test, sprawdź, jak ułożone są Twoje dane: * Grupy niezależne: Dane mogą być w formacie szerokim (Wide) lub długim (Long). * Grupy zależne (pomiary powtarzane): Większość nowoczesnych testów i zaawansowanych wizualizacji wymaga formatu długiego (Long), gdzie każdy pomiar to osobny wiersz przypisany do identyfikatora obserwacji (ID). * Do przekształceń używamy potoku z funkcjami: gather() (zmiana formatu) %>% convert_as_factor() (zmiana typu zmiennych).
1. Sprawdzenie normalności rozkładu
Hipoteza zerowa w testach normalności: \[H_0: \text{Rozkład cechy w populacji jest zgodny z rozkładem normalnym}\]
Małe próby i podgrupy (np. \(N < 100\))
Do szybkiej oceny analitycznej małych grup stosujemy test Shapiro-Wilka.
Jeśli chcemy sprawdzić normalność w podgrupach (z użyciem potoku %>%)
dane %>%
dplyr::group_by(zmienna_grupujaca) %>%
rstatix::shapiro_test(zmienna_zalezna)Duże próby i podgrupy (setki i tysiące obserwacji)
Dla dużych prób testy formalne (jak Shapiro-Wilk) są nadwrażliwe i niemal zawsze odrzucają \(H_0\). Wtedy kluczowa jest diagnostyka wizualna za pomocą wykresów Q-Q (Quantile-Quantile).
# Podstawowe wykresy w base R, prosto, dla pojedynczej zmiennej.
qqnorm(dane$zmienna)
qqline(dane$zmienna, col = "red")
# Wizualizacja w podgrupach za pomocą ggplot2 (Złoty Standard w raportach)
library(ggplot2)
dane %>%
ggplot(aes(sample = zmienna_do_sprawdzenia)) +
stat_qq() +
stat_qq_line(color = "red") +
facet_wrap(~zmienna_niezalezna)Uwaga: Argument sample informuje R, że podajesz surową próbę empiryczną, na podstawie której system sam wyliczy kwantyle i porówna je z rozkładem teoretycznym. Tak ma być!
2. Testy dla grup niezależnych
Stosujemy, gdy porównujemy ze sobą zupełnie inne osoby (np. kobiety vs mężczyźni, mieszkańcy Gdańska vs mieszkańcy Gdyni). Zwykle w pojedynczych, niepowtarzanych badaniach.
Testy dla 2 grup
Poziom pomiaru zmiennej zależnej: nominalny
# Test Chi2 - badanie związku między dwiema zmiennymi kategorycznymi
chisq.test(table(dane$zmienna1, dane$zmienna2))
# Tabela krzyżowa w formacie HTML z automatycznym testem Chi2 pod spodem
sjPlot::sjt.xtab(dane$zmienna_w_wierszach, dane$zmienna_w_kolumnach)Poziom pomiaru zmiennej zależnej: porządkowy (lub ilościowy bez normalności)
# Test U Manna-Whitneya-Wilcoxona
# Stosujemy zapis formuły: zmienna_zależna ~ zmienna_niezależna
wilcox.test(zm_zalezna ~ zm_niezalezna, data = dane)
# Miara wielkości efektu (uzupełnienie analizy)
dane %>% rstatix::wilcox_effsize(zm_zalezna ~ zm_niezalezna)Poziom pomiaru zmiennej zależnej: ilościowy (spełnione założenie normalności)
# Test t-Studenta dla prób niezależnych
t.test(zm_zalezna ~ zm_niezalezna, data = dane)
# Miara wielkości efektu (jak silna jest różnica średnich)
dane %>% rstatix::cohens_d(zm_zalezna ~ zm_niezalezna)Testy dla > 2 grup (np. porównanie trzech typów wykształcenia)
Poziom pomiaru zmiennej zależnej: nominalny
# Logika pozostaje taka sama jak dla dwóch grup
chisq.test(table(dane$zmienna1, dane$zmienna2))
sjPlot::sjt.xtab(dane$zmienna_w_wierszach, dane$zmienna_w_kolumnach)Poziom pomiaru zmiennej zależnej: porządkowy (lub ilościowy bez normalności)
# Test Kruskala-Wallisa (nieparametryczny odpowiednik ANOVA)
kruskal.test(zm_zalezna ~ zm_niezalezna, data = dane)
# Testy post-hoc (porównania parami z korektą wielokrotnych porównań metodą Holma)
rstatix::dunn_test(dane, zm_zalezna ~ zm_niezalezna, p.adjust.method = "holm")Poziom pomiaru zmiennej zależnej: ilościowy (spełnione założenie normalności)
# Jednoczynnikowa analiza wariancji (ANOVA)
twoj_wynik <- aov(zm_zalezna ~ zm_niezalezna, data = dane)
summary(twoj_wynik)
# Testy post-hoc (wywoływane tylko wtedy, gdy ogólny wynik ANOVA jest istotny)
TukeyHSD(twoj_wynik)3. Testy dla grup zależnych (pomiary powtarzane)
Stosujemy, gdy badamy te same osoby w kilku punktach czasowych (np. badanie panelowe, eksperyment, testy przed i po ekspozycji na bodziec).
Testy dla 2 grup (np. Przed vs Po)
Poziom pomiaru zmiennej zależnej: nominalny (dychotomiczny 0/1)
# Test McNemara (analizuje wyłącznie pary niezgodne, czyli tzw. "zdrajców" opinii)
mcnemar.test(table(dane$pomiar_przed, dane$pomiar_po))lub w formie bardziej przejrzystej
tabelka <- table(dane$pomiar_przed, dane$pomiar_po)
mcnemar.test(tabelka)Poziom pomiaru zmiennej zależnej: porządkowy (lub ilościowy bez normalności)
# Test Wilcoxona dla par powiązanych
# Wariant A: dane w formacie szerokim (Wide)
wilcox.test(dane$pomiar_po, dane$pomiar_przed, paired = TRUE)
# Wariant B: dane w formacie długim (Long)
wilcox.test(wynik ~ czas, data = dane_long, paired = TRUE)Poziom pomiaru zmiennej zależnej: ilościowy (spełnione założenie normalności różnic)
# Test t-Studenta dla prób zależnych
# Wariant A: format szeroki (Wide)
t.test(dane$pomiar_po, dane$pomiar_przed, paired = TRUE)
# Wariant B: format długi (Long)
t.test(wynik ~ czas, data = dane_long, paired = TRUE)Testy dla > 2 grup (np. Fale badań 2022 vs 2024 vs 2026)
Poziom pomiaru zmiennej zależnej: nominalny (dychotomiczny 0/1)
# Test Q-Cochrana (wymaga bezwzględnie formatu typu Long)
# Wzór: wynik ~ zmienna_czasowa | identyfikator_obserwacji
rstatix::cochran_qtest(dane_long, wynik ~ etap | ID)Poziom pomiaru zmiennej zależnej: porządkowy (lub ilościowy bez normalności)
# Test Friedmana (odporny na wartości odstające rankingowy odpowiednik ANOVA)
rstatix::friedman_test(dane_long, wynik ~ etap | ID)
# Testy post-hoc (porównania par powiązanych z poprawką Holma)
rstatix::pairwise_wilcox_test(dane_long, wynik ~ etap, paired = TRUE, p.adjust.method = "holm")Poziom pomiaru zmiennej zależnej: ilościowy (spełnione założenie normalności i sferyczności)
- Dane muszą być obowiązkowo w formacie Long.
- Zmienne grupujące (etap/czas) oraz identyfikatory (ID) muszą być sformatowane jako czynniki (factor). W przeciwnym razie system potraktuje je jako liczby (np. lata dodane do siebie), co doprowadzi do błędnych obliczeń statystycznych.
# 1. Przygotowanie danych (format long i konwersja na factor)
library(tidyr) # tu generycznie jest ulokowane polecenie gather()
library(rstatix)
dane_long <- dane %>%
gather(key = "etap", value = "wynik", pomiar1, pomiar2, pomiar3) %>%
convert_as_factor(etap, ID)# 2. ANOVA z powtarzanymi pomiarami (Repeated Measures ANOVA)
# Nowoczesne i bezpieczne podejście z rstatix (samo sprawdza i koryguje brak sferyczności)
rezultat <- rstatix::anova_test(data = dane_long, dv = wynik, wid = ID, within = etap)
rstatix::get_anova_table(rezultat)