Bardzo prosty Niezbędnik Statystyczny Studenta Socjologii

Ściąga z wyboru testów i procedur w środowisku R

Author

dr Maciej Brosz

Published

May 19, 2026

Jak czytać oznaczenia poleceń

nazwa_pakietu::polecenie()

  • Jeśli nie jest podana nazwa pakietu, to znaczy, że polecenie pochodzi z pakietu base lub stats, 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 poleceniem library(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…
ImportantŻelazna zasada formatu danych przed analizą

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.

shapiro.test(dane$zmienna) # Klasyczne wywołanie dla jednej zmiennej

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)

WarningKluczowe przygotowanie danych
  1. Dane muszą być obowiązkowo w formacie Long.
  2. 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)