Dokumenty z analizą danych statystycznych, lupa, długopisy i okulary
Źródło: Pexels | Autor: Hanna Pad
Rate this post

Nawigacja po artykule:

Kiedy po Kruskal–Wallisie w ogóle potrzebny jest test post‑hoc?

Od ogólnego „czy są różnice?” do konkretnego „kto z kim się różni?”

Test Kruskala–Wallisa odpowiada na jedno bardzo ogólne pytanie: czy jakakolwiek z porównywanych grup różni się od pozostałych pod względem rozkładu badanej zmiennej (np. mediany). Gdy wynik jest istotny, wiadomo tylko tyle, że nie wszystkie grupy są „podobne”. Nie wiadomo natomiast:

  • które konkretnie grupy są różne,
  • czy różnicę „ciągnie” jedna skrajna grupa, czy cały zestaw kontrastów,
  • jak duże są różnice między poszczególnymi parami.

Tu właśnie pojawia się potrzeba testów post‑hoc: pozwalają przejść od globalnego wniosku do konkretnych porównań par grup. Test Dunna jest naturalnym partnerem dla Kruskala–Wallisa, tak jak testy post‑hoc (np. Tukeya) są partnerem dla ANOVA.

Typowe sytuacje badawcze z 3+ grupami

Testy post‑hoc po Kruskal–Wallisie przydają się wszędzie tam, gdzie są co najmniej trzy niezależne grupy i dane nie spełniają założeń pod ANOVA. Kilka realistycznych przykładów:

  • Medycyna: ocena natężenia bólu (skala porządkowa) w 4 grupach terapii. Kruskal–Wallis wykazuje różnice, ale lekarza interesuje: która terapia jest lepsza od której.
  • Psychologia: porównanie poziomu lęku (skala Likerta) u osób po trzech różnych typach interwencji. Globalny test mówi: „są różnice”, a pytanie brzmi: między jakimi interwencjami.
  • UX / badania użyteczności: ranking satysfakcji z 5 wersji interfejsu. Istotny wynik Kruskala–Wallisa wskazuje, że nie wszystkie warianty są równie przyjazne. Projektanta interesuje jednak, które wersje są istotnie gorsze/lepsze.
  • Edukacja: porównanie ocen samooceny uczniów (skala 1–5) z czterech typów szkół. Potrzebne są konkretne wnioski, np. „licea X różnią się od techników Y, ale nie od szkół branżowych”.

W każdej z tych sytuacji sam wynik testu Kruskala–Wallisa nie wystarcza do decyzji: „którą interwencję wybrać”, „który wariant wdrożyć” czy „gdzie kierować zasoby”. Tu swoją rolę odgrywa test Dunn post hoc z odpowiednią korektą p‑value.

Kryteria: kiedy test post‑hoc ma sens, a kiedy jest zbędny

Nie zawsze trzeba iść w post‑hoc. Istnieją proste kryteria, które pomagają zdecydować, czy w ogóle jest sens wykonywać test Dunna:

  • Liczba grup:
    • 2 grupy – test Kruskala–Wallisa i tak sprowadza się do porównania pary (odpowiednik Manna–Whitneya), więc post‑hoc nie jest potrzebny.
    • 3+ grupy – dopiero wtedy pojawia się sens stosowania porównań wielokrotnych i korekty p‑value.
  • Rodzaj zmiennej zależnej: skala porządkowa (Likert), z rangami, z silną skośnością lub dużą liczbą wartości odstających – typowe przypadki dla Kruskala–Wallisa i Dunna.
  • Cel analizy: jeśli celem jest jedynie stwierdzenie, czy „w populacji widać jakiekolwiek różnice”, czasami wystarczy sam test globalny z opisem rozkładów. Jeśli jednak potrzebny jest wybór konkretnej grupy/strategii – ustalenie par różniących się jest kluczowe.

Zdarzają się też sytuacje, w których test post‑hoc po istotnym Kruskal–Wallisie niewiele wniesie. Na przykład gdy rozkłady są niemal identyczne, a istotność wynika z ogromnej liczebności próby – wówczas rozsądniej jest skupić się na wielkościach efektu i interpretacji praktycznej niż na dokładnym wyliczaniu, która para ma p = 0,047 po korekcie.

Kiedy sam Kruskal–Wallis i opis danych wystarczy

Czasem test post‑hoc może być przerostem formy nad treścią. W praktyce analitycznej często wystarczające są:

  • istotny wynik Kruskal–Wallisa,
  • wykresy (np. pudełkowe) pokazujące rozkłady,
  • tabela median i przedziałów międzykwartylowych.

Taki minimalny pakiet bywa sensowny, gdy:

  • liczba grup jest bardzo duża, a szczegółowe pary nie są kluczowe (np. 10 szpitali w audycie ogólnym),
  • analiza ma charakter wstępny, a niekoniecznie decyzyjny,
  • najważniejszy jest opis trendu („wyniki rosną od grupy 1 do 4”), a nie formalne wyliczenie każdej różniącej się pary.

W każdym innym przypadku, gdy potrzebna jest odpowiedź na pytanie „co z czym się różni?”, zestaw: Kruskal–Wallis + Dunn z korektą p‑value jest bezpiecznym, spójnym podejściem.

Abstrakcyjne wykresy danych ilustrujące analizę statystyczną
Źródło: Pexels | Autor: Negative Space

Szybkie przypomnienie: co sprawdza Kruskal–Wallis i jakie ma ograniczenia

Intuicja: rangi zamiast surowych wartości

Kruskal–Wallis jest nieparametryczną alternatywą dla jednoczynnikowej ANOVA. Kluczowy trik polega na tym, że zamienia surowe wartości na rangi. Cały zestaw obserwacji z wszystkich grup jest sortowany od najmniejszej do największej, a każdej obserwacji przypisuje się rangę (1, 2, 3, …). Następnie test sprawdza, czy średnie rangi w poszczególnych grupach różnią się bardziej, niż można by oczekiwać przez przypadek.

Jeśli rozkład wartości w każdej grupie wygląda podobnie (mają zbliżony kształt), a różnią się głównie położeniem (mediana), to test Kruskala–Wallisa jest w praktyce testem różnic median. Formalnie jednak mówi o różnicy rozkładów, nie wyłącznie median.

Hipotezy: co jest „równe”, a co się „rozjeżdża”

Hipotezy testu Kruskala–Wallisa można ująć w sposób praktyczny:

  • H0 (hipoteza zerowa): rozkłady (a przy założeniu podobnych kształtów – mediany) we wszystkich porównywanych grupach są takie same.
  • H1 (hipoteza alternatywna): przynajmniej jedna grupa różni się od pozostałych (co najmniej jedna para grup ma inne rozkłady/medianę).

Istotny wynik (p < α) mówi jedynie, że „coś jest nie tak z równością rozkładów”. Dlatego test Kruskala–Wallisa jest określany jako test globalny – bada wspólne założenie równości wszystkich grup jednocześnie, nie wnika w to, gdzie dokładnie jest różnica.

Założenia Kruskala–Wallisa i ich konsekwencje

Choć test Kruskala–Wallisa jest nazywany „nieparametrycznym”, nie oznacza to „bez żadnych założeń”. Najważniejsze są:

  • Niezależność obserwacji: wartości w jednej grupie nie mogą wpływać na wartości w innej. To wyklucza np. pomiary powtarzane na tych samych osobach (tam lepsze są testy Friedmana + odpowiednie post‑hoc).
  • Skala co najmniej porządkowa: dane muszą dać się uporządkować; typowe przykłady to skale Likerta, rankingi, a także zmienne ilościowe z silną skośnością.
  • Podobny kształt rozkładów między grupami: jeśli rozkłady bardzo różnią się kształtem (np. jedna grupa jest mocno skośna, inna prawie symetryczna), interpretacja jako „różnice w medianie” jest wątpliwa, choć formalnie test nadal bada „równość rozkładów”.

Te same założenia przejmie potem test Dunn post hoc, bo korzysta z tych samych rang i założeń niezależności, co Kruskal–Wallis.

Ograniczenie: brak informacji „między którymi grupami”

Największym ograniczeniem Kruskala–Wallisa jest to, że nie mówi nic o strukturze różnic. Dla czterech grup A, B, C, D, przy istotnym wyniku globalnym możliwe są scenariusze:

  • tylko A różni się od pozostałych (A vs B, A vs C, A vs D),
  • A i B są podobne, C i D podobne, ale pary między blokami różnią się,
  • grupy tworzą „schodki”: A < B < C < D, a różnice są między sąsiadami,
  • złożone, nieregularne kombinacje różnic.

Test globalny tego nie rozstrzyga. Bez post‑hoc można łatwo paść ofiarą własnych założeń („na pewno ta nowa terapia jest lepsza od starej”), gdy tymczasem różnice są w innym miejscu. Test Dunn post hoc z korektą p‑value wypełnia tę lukę, dając systematyczną odpowiedź, a nie intuicyjne zgadywanie na podstawie wykresu.

Logika testów post‑hoc po Kruskal–Wallisie – o co w tym naprawdę chodzi

Od pytania globalnego do serii pytań o pary grup

Gdy Kruskal–Wallis daje wynik istotny, naturalny krok to rozbicie pytania:

„Czy wszystkie rozkłady są równe?”

na serię wąskich pytań typu:

„Czy grupa A różni się od grupy B?”, „Czy A różni się od C?”, „Czy B różni się od D?” itd.

W analizie statystycznej taka seria szczegółowych pytań nazywana jest porównaniami wielokrotnymi. Każde porównanie to osobny test (np. Dunn), a zestaw wszystkich wykonanych porównań tworzy tzw. rodzinę testów (family of tests). Kluczowy problem polega na tym, że im więcej pytań (testów) zadajesz, tym większa szansa, że któreś p‑value wypadnie „istotnie” tylko przez przypadek.

Dlaczego nie robić wielu testów Manna–Whitneya „na piechotę” bez korekty

Częsta praktyka początkujących: po istotnym Kruskal–Wallisie biorą każdą parę grup i robią osobny test U Manna–Whitneya, stosując wciąż tę samą granicę istotności (np. 0,05) dla każdego testu. Formalnie każdy z tych testów ma 5% szans na błąd I rodzaju (fałszywy alarm), ale problem jest w skali całej rodziny:

  • Jeśli porównujesz 3 grupy, masz 3 pary (A–B, A–C, B–C).
  • Przy 4 grupach – już 6 par, przy 5 grupach – 10 par, itd. (dokładnie: k(k–1)/2).

Prawdopodobieństwo, że przynajmniej jeden test da fałszywie istotny wynik rośnie gwałtownie z liczbą porównań. To zjawisko to inflacja błędu I rodzaju. Robienie wielu testów Manna–Whitneya bez korekty p‑value jest więc kuszące, ale niebezpieczne: łatwo wskazać „różnice”, których w populacji po prostu nie ma.

Ryzyko fałszywych alarmów przy mnożeniu porównań

Błąd I rodzaju (false positive) to sytuacja, w której odrzucasz hipotezę zerową, mimo że w rzeczywistości jest prawdziwa. Przy jednym teście na poziomie α = 0,05 ryzyko to wynosi 5%. Przy dziesięciu niezależnych testach ryzyko, że co najmniej jeden będzie „istotny” tylko przez przypadek, wynosi już znacznie więcej niż 5%.

To właśnie z tego powodu mówi się o kontroli poziomu istotności dla całej rodziny testów (ang. family-wise error rate, FWER). Celem testów post‑hoc z korektą p‑value nie jest utrudnianie życia badaczowi, tylko ograniczenie liczby fałszywych wniosków. Jeśli zestaw wyników ma być wiarygodny i powtarzalny, trzeba panować nad rosnącym ryzykiem błędu.

Czym jest „poziom istotności dla rodziny testów”

Family-wise error rate (FWER) to prawdopodobieństwo, że w całej rodzinie porównań (np. wszystkich parach między 5 grupami) pojawi się choć jeden fałszywie istotny wynik. Chcąc zachować ogólne α = 0,05, stosuje się korekty p‑value lub modyfikuje poziom istotności dla pojedynczych testów.

Korekty typu Bonferroni czy Holm nie zmieniają idei testu Dunna, jedynie zaostrzają kryteria, by szansa na fałszywy alarm w całej rodzinie nie przekraczała założonego poziomu. Z praktycznego punktu widzenia oznacza to, że:

  • surowe p‑value (p.raw) są przeliczane na skorygowane p‑value (p.adj),
  • decyzję o „istotności” podejmujesz na podstawie p.adj, a nie p.raw,
  • im więcej porównań, tym skorygowane p‑value będą z reguły wyższe (mniej testów „przechodzi”).

Test Dunna jako naturalny „partner” Kruskala–Wallisa

Zamiast robić serię niezależnych testów Manna–Whitneya, wygodniej (i spójniej metodologicznie) jest użyć testu Dunna. Opiera się on na tych samych rangach, które wcześniej wykorzystał Kruskal–Wallis, a jego konstrukcja jest od początku zaprojektowana do porównań wielokrotnych między grupami.

Intuicja jest podobna: jeśli dwie grupy mają bardzo różne rozkłady (a przy podobnych kształtach – różne mediany), to ich średnie rangi też będą się wyraźnie różniły. Test Dunna mierzy, jak duża jest ta różnica w jednostkach błędu standardowego, a następnie przekłada ją na statystykę z rozkładu zbliżonego do normalnego, z której liczone jest p‑value.

Z praktycznego punktu widzenia wygląda to tak: dla każdej pary grup otrzymujesz statystykę Z (albo bardzo podobną), odpowiadające jej p‑value, a potem – po korekcie – informację, które pary pozostają istotne przy zadanym poziomie α dla całej rodziny testów.

Smartfon z kolorowymi wykresami na tle papierowych grafik analitycznych
Źródło: Pexels | Autor: RDNE Stock project

Test Dunna krok po kroku – intuicja i podstawowe wzory bez ciężkiej matematyki

Od rang globalnych do średnich rang w grupach

Punktem wyjścia jest ten sam zbiór rang, który posłużył do Kruskala–Wallisa. Kroki są następujące:

  1. Wszystkie obserwacje ze wszystkich grup są sortowane wspólnie i otrzymują rangi.
  2. Dla każdej grupy oblicza się średnią rangę, np. (bar{R}_A), (bar{R}_B), (bar{R}_C)…
  3. Test Kruskala–Wallisa sprawdza, czy te średnie rangi łącznie różnią się bardziej, niż wskazywałby przypadek.
  4. Test Dunna skupia się już na pojedynczej parze średnich rang: np. (bar{R}_A) vs (bar{R}_B).

Jeśli średnie rangi dwóch grup są sobie bardzo bliskie, różnice między nimi traktujemy jako fluktuacje losowe. Gdy rozjeżdżają się mocno, rośnie szansa, że mamy do czynienia z realną różnicą w populacji.

Różnica średnich rang jako punkt wyjścia

Najważniejsza jest różnica średnich rang dla danej pary grup, np.:

(|bar{R}_A – bar{R}_B|)

Sama surowa różnica jeszcze niewiele mówi, bo zależy od liczby obserwacji w grupach i liczby wszystkich obserwacji. Trzeba ją więc przeskalować przez błąd standardowy tej różnicy. Otrzymujemy wtedy coś bardzo podobnego do „liczby odchyleń standardowych”, które dzielą jedną grupę od drugiej.

Statystyka Z w teście Dunna – bez „ciężkich” dowodów

Statystyka testu Dunna dla dwóch grup, powiedzmy A i B, ma postać:

( Z_{AB} = dfrac{bar{R}_A – bar{R}_B}{SE(bar{R}_A – bar{R}_B)} )

gdzie mianownik to błąd standardowy różnicy średnich rang, zależny od:

  • całkowitej liczby obserwacji (N),
  • liczebności porównywanych grup (n_A) i (n_B),
  • ewentualnych poprawek na remisy (tie correction), jeśli w danych występują identyczne wartości.

W praktyce większość pakietów statystycznych liczy to automatycznie. Jako użytkownik widzisz zwykle tylko Z albo statystykę testową i odpowiadające jej p‑value.

Statystyka Z jest porównywana do rozkładu normalnego (przy wystarczająco dużej próbie), co pozwala obliczyć prawdopodobieństwo zaobserwowania tak dużej różnicy rang (lub większej), gdyby w populacji faktycznie nie było różnicy między grupami.

H0 i H1 w teście Dunna

Interpretacja hipotez jest prosta i powtarzalna dla każdej pary grup:

  • H0: rozkłady (a przy podobnych kształtach – mediany) w dwóch porównywanych grupach są takie same.
  • H1: rozkłady/median y tych dwóch grup różnią się.

To lokalne, „parowe” hipotezy. W całym zestawie post‑hoc masz tyle hipotez, ile par grup. Dlatego bez korekty p‑value nie da się sensownie utrzymać kontroli nad globalnym ryzykiem błędu.

Co dokładnie zwracają testy Dunna w praktycznych implementacjach

W większości narzędzi (R, Python, pakiety w programach typu SPSS, jamovi) wyniki testu Dunna obejmują zwykle:

  • nazwy porównywanych grup (np. A - B),
  • różnicę średnich rang lub inne miary efektu,
  • statystykę testową (Z lub równoważną),
  • surowe p‑value (p lub p.raw),
  • skorygowane p‑value (np. p.adj), zależnie od wybranej metody korekty.

Decyzja o „istotnej różnicy” dla pary grup zapada na poziomie p.adj vs α, np. p.adj < 0,05. Surowe p‑value mogą być pomocne do wstępnego porządkowania porównań (które są „bliżej” istotności), ale do raportowania w kontekście wielu testów potrzebne są wartości skorygowane.

Korekty p‑value: Bonferroni, Holm, Holm–Bonferroni, Benjamini–Hochberg – co wybrać?

Dlaczego w ogóle jest kilka różnych korekt

Różne korekty p‑value odpowiadają w praktyce na to samo pytanie: jak agresywnie chcesz ograniczać fałszywe alarmy, akceptując że coś możesz „przeoczyć” (błąd II rodzaju)? Metody różnią się:

  • tym, czy kontrolują FWER (błąd na poziomie rodziny testów), czy FDR (odsetek fałszywych wśród wszystkich wykrytych),
  • „surowością” – na ile podnoszą p‑value i utrudniają uzyskanie istotności,
  • odpornością na dużą liczbę porównań.

Nie ma jednej jedynej słusznej metody. Wybór zależy zarówno od standardów w danej dziedzinie, jak i od tego, czy wolisz być bardziej konserwatywny (mniej fałszywych alarmów, ale więcej „przegapionych” efektów), czy bardziej liberalny (większa moc, ale wyższe ryzyko fałszywych odkryć).

Bonferroni – prosta, bardzo konserwatywna klasyka

Korekta Bonferroniego jest intuicyjna:

  • można myśleć o niej jak o podzieleniu poziomu istotności przez liczbę testów: (alpha_{text{pojedyncze}} = alpha_{text{rodzina}} / m), gdzie m – liczba porównań,
  • równoważnie: skorygowane p‑value liczy się jako (p_{text{adj}} = min(1, p cdot m)).

Zalety:

  • bardzo prosty mechanizm,
  • gwarantuje kontrolę FWER niezależnie od struktury zależności między testami,
  • dobrze wygląda w silnie regulowanych dziedzinach (np. badania kliniczne), gdzie liczy się minimalizacja fałszywych alarmów.

Wady:

  • bywa zbyt konserwatywny, zwłaszcza przy większej liczbie porównań – łatwo utracić moc testu,
  • przy kilkunastu–kilkudziesięciu porównaniach p.adj potrafi „wystrzelić” daleko ponad 0,05 nawet dla umiarkowanie małych p.raw.

Dobrze sprawdza się, gdy liczba porównań jest niewielka (np. 3–5) i kluczowa jest minimalizacja fałszywych wniosków.

Holm – stopniowo zaostrzane kryteria zamiast „jednego ucięcia”

Metoda Holma (często nazywana po prostu holm w oprogramowaniu) także kontroluje FWER, ale robi to sprytniej niż czysty Bonferroni. Działa krokowo:

  1. Sortujesz surowe p‑value od najmniejszego do największego: (p_{(1)} le p_{(2)} le … le p_{(m)}).
  2. Dla najniższego p-value korzystasz z najbardziej „łagodnego” progu: porównujesz je z (alpha / m).
  3. Dla kolejnego p‑value używasz progu (alpha / (m-1)), potem (alpha / (m-2)), itd.
  4. Po znalezieniu pierwszego p‑value, które nie jest istotne, wszystkie wyższe z automatu uznaje się za nieistotne.

Można też patrzeć na to jako na specyficzne przekształcenie p‑value do p.adj. Wynik końcowy jest zawsze co najmniej tak dobry (czyli mniej konserwatywny) niż Bonferroni, a FWER nadal pozostaje pod kontrolą.

Z praktyki: Holm jest bardzo rozsądnym „domyślnym” wyborem przy testach post‑hoc po Kruskal–Wallisie, gdy priorytetem jest FWER, ale użytkownik nie chce niepotrzebnie tracić mocy testów.

Holm–Bonferroni – skąd ta nazwa i czy to coś innego?

W literaturze i implementacjach często pojawia się nazwa Holm–Bonferroni. To ta sama metoda, którą powyżej nazwano po prostu Holmem. Określenie „Holm–Bonferroni” podkreśla, że jest to step‑down refinement klasycznego Bonferroniego – poprawia jego konserwatywność zachowując główne zalety.

Jeśli w funkcji w R widzisz opcje method = "holm" i method = "bonferroni", to "holm" jest wersją krokową, a "bonferroni" – prostym mnożeniem p przez liczbę testów.

Benjamini–Hochberg (BH) – gdy bardziej liczy się FDR niż FWER

Metoda Benjamini–Hochberga jest projektowana pod inny cel: kontrolę odsetka fałszywych odkryć (FDR, false discovery rate), czyli proporcji nieprawdziwych H1 wśród wszystkich odrzuconych H0. Innymi słowy, dopuszcza, że wśród wskazanych jako istotne porównań pojawi się pewien odsetek fałszywych alarmów, ale stara się utrzymać go na akceptowalnym poziomie.

Algorytm, znów w skrócie:

  1. Sortujesz p‑value rosnąco: (p_{(1)} le p_{(2)} le … le p_{(m)}).
  2. Dla każdego p‑value wyznaczasz „próg BH”: (frac{i}{m} cdot q), gdzie i – pozycja w szeregu, q – zadany poziom FDR (np. 0,05).
  3. Znajdujesz największe i, dla którego (p_{(i)} le frac{i}{m} cdot q), i uznajesz wszystkie niższe p‑value za istotne.

BH jest mniej konserwatywny niż metody kontrolujące FWER (Bonferroni, Holm), dzięki czemu zachowuje wyższą moc przy dużej liczbie testów. W zamian globalna gwarancja „żaden fałszywy alarm w rodzinie” zostaje zastąpiona gwarancją „średni odsetek fałszywych alarmów wśród pozytywów nie przekroczy q”.

BH jest popularny w sytuacjach, gdzie porównań jest bardzo dużo (np. badania genów, wiele wyników kwestionariuszy), a lekkie „zanieczyszczenie” listy istotnych wyników fałszywymi alarmami jest akceptowalne, o ile zyskujemy większą czułość.

Kiedy którą korektę wybrać przy teście Dunna

Jeśli liczba porównań jest niewielka (np. 3–6), a wyniki mają znaczenie decyzyjne (klinika, edukacja, decyzje biznesowe), rozsądne są:

  • Holm (Holm–Bonferroni) jako dobry balans między ochroną przed fałszywymi alarmami a mocą testu,
  • Bonferroni, gdy chcesz naprawdę „żelaznych” wniosków, kosztem większego ryzyka, że część prawdziwych różnic nie wyjdzie istotna.

Gdy porównań jest dużo (kilkanaście, kilkadziesiąt), a analizę traktujesz bardziej eksploracyjnie niż konfirmacyjnie, można rozważyć:

  • Benjamini–Hochberg (BH) – zwłaszcza jeśli celem jest wyłapanie jak największej liczby potencjalnie interesujących różnic, które i tak później będą weryfikowane niezależnie,
  • Holm jako kompromis, jeśli FWER nadal pozostaje ważny, ale nie chcesz ekstremalnej konserwatywności Bonferroniego.
Zbliżenie wykresu finansowego z danymi na ekranie komputera
Źródło: Pexels | Autor: Markus Winkler

Jak połączyć Kruskal–Wallis, test Dunna i korektę p‑value w jednym schemacie decyzyjnym

Uproszczony „workflow” krok po kroku

W praktyce wszystko sprowadza się do kilku jasno rozdzielonych etapów. Gdy rozdzielisz je w głowie (i w kodzie), cała procedura przestaje wyglądać jak „magia z pudełka”:

  1. Sprawdzenie, czy Kruskal–Wallis w ogóle jest potrzebny (czy są ≥ 3 grupy, zmienna porządkowa/ilościowa, brak założeń pod ANOVĘ).
  2. Uruchomienie testu Kruskala–Wallisa z jedną hipotezą globalną.
  3. Ocena wyniku globalnego:
    • jeśli p > α – formalnie brak podstaw do testów post‑hoc,
    • jeśli p ≤ α – przejście do testów parowych (Dunn lub inne podejście).
  4. Dobór metody post‑hoc: dla danych w rangach – zwykle Dunn; alternatywnie inne testy nieparametryczne parowe.
  5. Dobór korekty p‑value (Bonferroni / Holm / BH) spójnie z celem analizy.
  6. Interpretacja wyników parowych z użyciem p.adj i informacji o kierunku/rozmiarze efektu.

Najczęstszy błąd to robienie kroku 4 i 5 „z automatu”, bez przemyślenia, i późniejsze zdziwienie, że „nic nie wychodzi” albo przeciwnie – „wszystko jest istotne”.

Co jeśli Kruskal–Wallis nie jest istotny?

Klasyczne podejście mówi jasno: nie przechodzisz do testów post‑hoc, bo globalny test nie wskazał ogólnej różnicy. To podejście jest szczególnie sensowne, jeśli:

  • badanie ma charakter konfirmacyjny,
  • hipoteza dotyczyła „jakiejkolwiek różnicy” między grupami,
  • nie chcesz otwierać dodatkowego „frontu” wielu porównań bez solidnego powodu.

W bardziej eksploracyjnych analizach część osób mimo wszystko zagląda w testy parowe, ale wtedy trzeba to uczciwie zaznaczyć w opisie (np. jako analizę dodatkową, generującą hipotezy). Taka ścieżka powinna iść w parze z wyraźnie konserwatywną korektą i ostrożnym językiem wniosków.

Jak łączyć globalne i lokalne wnioski

Logiczny „łańcuch” wnioskowania wygląda typowo tak:

  1. Poziom globalny (Kruskal–Wallis):
    • H0: wszystkie rozkłady (mediany) są takie same,
    • H1: co najmniej dwie grupy różnią się.
  2. Poziom lokalny (Dunn):
    • H0 dla każdej pary: rozkłady/median y tych dwóch grup są takie same,
    • H1: rozkłady/median y tych dwóch grup różnią się.

W raporcie warto zachować tę dwupoziomową strukturę. Najpierw: „Kruskal–Wallis wykazał istotne różnice między grupami (χ², df, p)”. Dopiero potem: „Test Dunna z korektą Holm/Bonferroni/BH wskazał, że…”. Bez tego czytelnik nie wie, czy lokalne różnice pojawiły się po solidnym „sicie” globalnym, czy są wynikiem masy pojedynczych testów.

Jak dobrać korektę p‑value do schematu decyzyjnego

Przy Kruskal–Wallisie i Dunnie słupek decyzyjny można ułożyć mniej więcej tak:

  • Priorytet: minimalizacja fałszywych alarmów, mało porównań (np. ≤ 6):
    • globalnie: Kruskal–Wallis na α = 0,05,
    • lokalnie: Dunn + korekta Holm, ewentualnie Bonferroni.
  • Priorytet: sensowna moc przy średniej liczbie porównań (10–20):
    • globalnie: Kruskal–Wallis,
    • lokalnie: Dunn + Holm jako „złoty środek”.
  • Priorytet: eksploracja, bardzo wiele porównań:
    • globalnie: czasem Kruskal–Wallis bywa pomijany, gdy celem jest skan wielu par; jeśli się go stosuje, traktuje się go bardziej jako filtr,
    • lokalnie: Dunn lub inny test rangowy + Benjamini–Hochberg (kontrola FDR).

Jeżeli pojawia się obawa „a co jeśli recenzent oczekuje innej korekty?”, można w prosty sposób pokazać równolegle wyniki dla dwóch metod (np. Holm i BH) i podkreślić, że główne wnioski pozostają stabilne.

Jak czytać niespójne wyniki między metodami korekty

Czasem ta sama para grup:

  • jest istotna przy BH (p.adj < 0,05),
  • ale nie jest istotna przy Holm (p.adj > 0,05).

To nie znaczy, że „coś jest nie tak” z testem. Oznacza to tylko tyle, że bardziej liberalne kryterium (FDR) dopuszcza ten efekt jako potencjalnie ważny, podczas gdy ostrzejsze kryterium FWER już nie.

Dobrym sposobem na opanowanie takiej sytuacji jest:

  • przypisanie różnic istotnych tylko przy BH do kategorii „sygnały wymagające dalszej weryfikacji”,
  • opisywanie wniosków tak, by nie mieszać kategorii („silny dowód” vs „wstępny sygnał”).

W praktyce użyteczne bywa także spojrzenie na efekt wielkości (np. różnicę median, rangi, eta‑kwadrat na rangach). Niewielki, ledwo‑istotny efekt przy BH, który znika przy Holm, bywa mniej przejmujący niż duży, konsekwentny efekt, który balansuje na granicy istotności.

Praktyka w R: dunnTest, rstatix, FSA – ustawienia, które naprawdę mają znaczenie

dunnTest z pakietu FSA – klasyka w jednym wywołaniu

Funkcja dunnTest() z pakietu FSA jest częstym pierwszym wyborem, bo łączy w sobie:

  • implementację testu Dunna,
  • wbudowane korekty p‑value,
  • prosty interfejs: formuła + dane.

Minimalny przykład użycia może wyglądać tak:


library(FSA)

dunn_res <- dunnTest(
  x ~ group,
  data = df,
  method = "holm"   # albo "bonferroni", "bh", "none"
)

dunn_res

Kilka elementów, na które zwykle warto zwrócić uwagę:

  • argument method – wybór korekty p‑value; jeśli chcesz później użyć innej, możesz też pobrać surowe p i poprawić je funkcją p.adjust(),
  • kolejność grup – wpływa na kolejność wierszy w wynikach, co bywa istotne przy interpretacji (np. porównania do grupy kontrolnej),
  • kolumna z p‑value – zwykle występują dwie: P.unadj i P.adj; do wnioskowania używa się tej drugiej.

rstatix: pipe‑friendly i dopasowane do tidyverse

Jeśli pracujesz z dplyr i ggplot2, wygodniejsza może być funkcja dunn_test() z pakietu rstatix. Pozwala płynnie przejść od przygotowania danych do testów i wizualizacji.


library(rstatix)
library(dplyr)

# Załóżmy, że df ma kolumny: value (zmienna zależna), group (czynnik)
dunn_tbl <- df %>%
  dunn_test(value ~ group, p.adjust.method = "holm")

dunn_tbl

W wyniku dostajesz ramkę danych zawierającą m.in.:

  • group1, group2 – porównywane grupy,
  • statistic – wartość Z (lub pokrewna),
  • p – p.raw,
  • p.adj – p po wybranej korekcie,
  • p.adj.signif – wygodny, „gwiazdkowy” kod istotności.

Dość naturalnie łączy się to z kolejnymi krokami, np. dodaniem efektu wielkości czy wykresu boxplot z oznaczeniami istotnych różnic.

FSA vs rstatix – na co zwrócić uwagę przy wyborze

Oba podejścia korzystają z tej samej logiki statystycznej, ale różnią się ergonomią:

  • FSA::dunnTest():
    • prostsze, „samodzielne” narzędzie,
    • łatwo zrozumieć osobom mniej obytnym w tidyverse,
    • od razu wyświetla czytelną tabelę wyników.
  • rstatix::dunn_test():
    • lepiej integruje się z %>% i innymi funkcjami rstatix (np. kruskal_test()),
    • wygodny format wyjścia do dalszej obróbki i wizualizacji,
    • wiele dodatkowych helperów (np. add_xy_position() do anotacji wykresów).

Jeśli pojawia się obawa „który pakiet jest bardziej poprawny statystycznie?”, można odetchnąć – przy typowych ustawieniach różnice sprowadzają się głównie do formy prezentacji, nie do fundamentów testu.

Ręczne korygowanie p‑value funkcją p.adjust()

Gdy narzędzie testu Dunna nie daje takiej korekty, jakiej potrzebujesz, albo chcesz sprawdzić kilka metod równolegle, pomocny jest standard p.adjust() z base R. Przykładowo, jeśli masz wektor surowych p‑value z dowolnego testu:


p_raw <- c(0.001, 0.02, 0.07, 0.15)

p_bonf <- p.adjust(p_raw, method = "bonferroni")
p_holm <- p.adjust(p_raw, method = "holm")
p_bh   <- p.adjust(p_raw, method = "BH")

Te same metody ("bonferroni", "holm", "BH") stosuje się do wyników testu Dunna, niezależnie od tego, czy pochodzi on z FSA, rstatix, czy innego pakietu. Wystarczy wyciągnąć kolumnę z surowym p i przepuścić ją przez p.adjust(), dodając wynik jako nową kolumnę.

Łączenie Kruskal–Wallisa i Dunna w jednym „pipe”

Często wygodnie jest trzymać cały schemat w jednym bloku kodu, szczególnie gdy dane dzielone są na podgrupy (np. osobno dla płci czy roczników). Przykład z użyciem rstatix:


library(dplyr)
library(rstatix)

# Analiza osobno dla każdej płci
results <- df %>%
  group_by(sex) %>%
  do({
    # krok 1: Kruskal–Wallis
    kw <- kruskal_test(., value ~ group)
    
    if (kw$p >= 0.05) {
      # brak dalszych testów, ale zwracamy informację o KW
      tibble(
        group1 = NA_character_,
        group2 = NA_character_,
        p = NA_real_,
        p.adj = NA_real_,
        note = "KW not significant"
      )
    } else {
      # krok 2: test Dunna
      dunn_test(., value ~ group, p.adjust.method = "holm") %>%
        mutate(note = "KW significant")
    }
  })

Takie podejście pozwala zautomatyzować całą procedurę dla wielu podgrup, minimalizując ryzyko ręcznych pomyłek (np. omyłkowej zmiany metody korekty dla jednego podzestawu danych).

Typowe pułapki w R przy Dunnie i korektach

W praktyce powtarzają się kilka drobnych problemów:

  • Nadmiarowe zaokrąglanie p‑value – jeśli w tabeli prezentujesz p.adj tylko z dwoma miejscami po przecinku, łatwo zatrzeć różnice między 0,051 i 0,049; lepiej przechowywać wartości z większą precyzją, a dopiero na etapie raportu ładnie je formatować.
  • Niewłaściwe użycie α – czasem ktoś „dostosowuje” poziom istotności ręcznie (np. α/ liczba testów), a jednocześnie używa skorygowanych p‑value; prowadzi to do podwójnej korekty.
  • Najczęściej zadawane pytania (FAQ)

    Kiedy po teście Kruskala–Wallisa muszę robić test Dunna post-hoc?

    Test Dunna ma sens wtedy, gdy:

    • masz co najmniej 3 niezależne grupy,
    • test Kruskala–Wallisa wyszedł istotny (p < α),
    • i naprawdę chcesz wiedzieć, które konkretne grupy się różnią.

    Jeśli porównujesz np. 4 typy terapii bólu i wynik globalny jest istotny, ale decyzja kliniczna zależy od tego, „która terapia jest lepsza od której”, to właśnie jest moment na test Dunna z korektą p-value.

    Gdy są tylko 2 grupy, post-hoc nie jest potrzebny – Kruskal–Wallis i tak sprowadza się wtedy do porównania jednej pary (jak test Manna–Whitneya).

    Czy mogę robić testy post-hoc, jeśli wynik Kruskala–Wallisa nie jest istotny?

    Jeśli Kruskal–Wallis nie jest istotny, standardowe podejście mówi: nie wykonuje się testów post-hoc. Brak istotności oznacza, że nie ma silnych dowodów na różnice między rozkładami grup w skali globalnej, więc „doszukiwanie się” znaczących par zwykle prowadzi do fałszywych alarmów.

    Wyjątek to analizy eksploracyjne, robione świadomie „na własne ryzyko”, z wyraźnym zastrzeżeniem w raporcie. W kontekście podejmowania decyzji (np. wybór interwencji, rekomendacje w raporcie dla klienta) bezpieczniej zatrzymać się na wniosku z testu globalnego.

    Jaka korekta p-value jest najlepsza po teście Dunna (Bonferroni, Holm, Benjamini–Hochberg)?

    Nie ma jednej „zawsze najlepszej” korekty, ale w praktyce sprawdza się prosty podział:

    • Bonferroni – bardzo konserwatywny, zmniejsza ryzyko fałszywie pozytywnych wyników, ale łatwo „zabija” słabsze, realne efekty; dobry, gdy liczba porównań jest mała.
    • Holm (Bonferroni–Holm) – zwykle lepszy kompromis; chroni przed błędem I rodzaju jak Bonferroni, ale ma większą moc. Często wybierany jako domyślna korekta do testu Dunna.
    • Benjamini–Hochberg (FDR) – łagodniejsza korekta, kontroluje odsetek fałszywych odkryć; przydatna, gdy masz dużo porównań i bardziej zależy Ci na „wyłapaniu” potencjalnych różnic niż na skrajnej ostrożności.

    Jeśli nie masz szczególnych wytycznych np. z protokołu badania, praktycznym wyborem do testu Dunna jest korekta Holma.

    Czy muszę zawsze robić post-hoc po istotnym teście Kruskala–Wallisa?

    Nie zawsze. Testy post-hoc są potrzebne wtedy, gdy odróżnienie konkretnych grup ma konsekwencje: wybór terapii, wariantu interfejsu, programu edukacyjnego. Jeśli istotne jest „co z czym się różni” – wtedy Kruskal–Wallis + Dunn to spójny zestaw.

    Bywają jednak sytuacje, gdy wystarczy:

    • istotny test Kruskala–Wallisa,
    • wykresy pudełkowe lub violin,
    • tabela median i przedziałów międzykwartylowych.
    • Gdy np. porównujesz 10 szpitali w audycie ogólnym i nie potrzebujesz listy każdej różniącej się pary, szczegółowe post-hoc może być tylko dodatkowymi komplikacjami bez realnego zysku poznawczego.

    Czym różni się test Dunna od zwykłych wielu testów Manna–Whitneya między parami?

    Intuicyjnie oba podejścia „porównują pary grup na rangach”, ale różnią się tym, jak obchodzą się z wielokrotnymi porównaniami. Test Dunna jest specjalnie skonstruowany jako post-hoc po Kruskalu–Wallisie:

    • korzysta z tych samych rang co test globalny,
    • ma zdefiniowany sposób obliczania wariancji różnic rang między grupami,
    • naturalnie łączy się z korektami p-value dla wszystkich par.

    Wielokrotne używanie testu Manna–Whitneya dla każdej pary bez odpowiedniej korekty drastycznie zwiększa ryzyko fałszywych wyników. Jeżeli ktoś i tak chce używać Manna–Whitneya, musi dodatkowo zadbać o korektę p-value dla wielu testów, czyli w praktyce odtwarza logikę Dunna.

    Czy do testu Dunna potrzebuję spełniać te same założenia co do Kruskala–Wallisa?

    Tak. Test Dunna opiera się na tych samych rangach co Kruskal–Wallis, więc dziedziczy jego kluczowe założenia:

    • niezależne obserwacje w każdej grupie,
    • skala co najmniej porządkowa (np. Likert, rankingi, silnie skośne dane ilościowe),
    • porównywalny kształt rozkładów w grupach, jeśli chcesz mówić o różnicach „median”, a nie tylko „rozkładów”.

    Jeśli masz dane z pomiarów powtarzanych u tych samych osób, lepszym wyborem jest test Friedmana plus odpowiednie post-hoc (np. parowe Wilcoxony z korektą), a nie Kruskal–Wallis i Dunn.

    Jak raportować wyniki: Kruskal–Wallis + Dunn z korektą p-value?

    Przyjazny odbiorcy raport zwykle zawiera:

    • wynik Kruskala–Wallisa: statystykę H, liczbę stopni swobody, p-value,
    • krótki opis, że wykonano test Dunna post-hoc z wybraną korektą p-value,
    • tabelę par porównań z: różnicą średnich rang lub innym wskaźnikiem, p skorygowanym, ewentualnie miarą efektu,
    • podstawowe statystyki opisowe dla grup (medianę, IQR) oraz wykres (np. boxplot).

    Przykładowy opis słowny może brzmieć: „Test Kruskala–Wallisa wykazał istotne różnice między grupami (H = …, df = …, p = …). Test Dunna z korektą Holma pokazał, że grupa A różni się istotnie od B i C, natomiast B i C nie różnią się między sobą (p skorygowane < 0,05).”