Dłoń z długopisem analizuje kolorowe wykresy słupkowe i liniowe
Źródło: Pexels | Autor: Lukas Blazek
4/5 - (1 vote)

Nawigacja po artykule:

Po co ci test Fishera? Diagnoza problemu i celu analizy

Małe próby, rzadkie zdarzenia i problem z testem chi‑kwadrat

Pierwsze pytanie, które warto sobie zadać: jakiej wielkości próbę analizujesz i jak wyglądają częstości w tabeli 2×2? Jeśli w tabeli kontyngencji 2×2 pojawiają się bardzo małe liczby, klasyczny test chi‑kwadrat zaczyna być zawodny. Typowy sygnał ostrzegawczy to:

  • co najmniej jedna komórka ma częstość 0 lub 1,
  • kilka komórek ma częstości mniejsze niż 5,
  • rozkład jest mocno asymetryczny (większość obserwacji w jednym wierszu lub kolumnie).

W takich sytuacjach test Fishera (dokładny test Fishera) jest bezpieczniejszym wyborem niż test chi‑kwadrat. Zamiast opierać się na przybliżeniu rozkładem chi‑kwadrat, test Fishera liczy dokładne prawdopodobieństwa obserwowanych układów w tabeli 2×2. Dzięki temu test niezależności dla małych prób jest wiarygodny, nawet gdy dane są „rzadkie” lub bardzo nierównomierne.

Kiedy test chi‑kwadrat jest ryzykowny?

Jak rozpoznać, że test chi‑kwadrat jest nieadekwatny? Zadaj sobie kilka prostych pytań diagnostycznych:

  • Czy moje dane są kategoryczne? – dwie zmienne jakościowe, zwykle dychotomiczne (tak/nie, sukces/porażka, leczenie/kontrola).
  • Czy estymowane częstości oczekiwane w komórkach są małe? – jeśli w kalkulacji pojawia się wiele wartości < 5, przybliżenie jest słabe.
  • Czy częściowo masz zera w komórkach? – obecność 0 to typowy sygnał, by przerzucić się na test Fishera.

Jeżeli odpowiadasz „tak” na przynajmniej jedno z tych pytań, test Fishera tabela 2×2 prawdopodobnie lepiej odda niepewność związaną z wynikiem niż chi‑kwadrat. W praktyce analitycznej, szczególnie gdy stawka jest wysoka (badania kliniczne, decyzje HR, testy A/B o dużych konsekwencjach budżetowych), lepiej wybrać test bardziej konserwatywny i dokładny.

Jakie decyzje opierasz na wyniku testu Fishera?

Zanim uruchomisz jakikolwiek exact Fisher test w R lub spróbujesz policzyć test Fishera w Excelu, zatrzymaj się na chwilę i odpowiedz na pytanie: jaki masz cel? Co konkretnie zmieni się w wyniku decyzji „odrzucić H0” lub „nie ma podstaw do odrzucenia H0”?

Kilka typowych scenariuszy:

  • Medycyna: porównujesz dwie terapie (nowa vs standardowa) względem odsetka wyleczeń. Na podstawie testu decydujesz, czy warto przejść do większego badania lub wprowadzić zmianę w protokole.
  • HR: oceniasz, czy nowy sposób rekrutacji zwiększa odsetek zatrudnionych z pożądanymi kompetencjami. W tabeli 2×2 masz: stara/nowa metoda × spełnia/nie spełnia kryteriów.
  • Marketing/analityka produktowa: testujesz kampanię A vs B, a interesuje cię odsetek kliknięć, rejestracji lub zakupów. Decyzja: który wariant wdrożyć szerzej?

Im bardziej kosztowna lub nieodwracalna decyzja, tym większy sens ma sięgnięcie po dokładny test Fishera, nawet jeśli próba nie jest bardzo mała. Zadaj sobie pytanie: czy mogę sobie pozwolić na ryzyko błędu wynikającego z przybliżenia?

Wykresy finansowe z lupą obok laptopa na biurku
Źródło: Pexels | Autor: Leeloo The First

Zmienna jakościowa, tabela 2×2 i hipotezy – ustaw scenę

Jak wygląda tabela kontyngencji 2×2?

Test Fishera opiera się na tabeli 2×2. Ta nazwa oznacza po prostu tabelę krzyżową dwóch zmiennych jakościowych, z których każda ma dwie kategorie. Klasyczny układ można zapisać tak:

Zmienna B: kategoria 1Zmienna B: kategoria 2
Zmienna A: kategoria 1ab
Zmienna A: kategoria 2cd

W tej tabeli:

  • a, b, c, d – to obserwowane liczebności (ile przypadków wpadło do danej komórki),
  • wiersze – zwykle reprezentują grupy (np. leczenie vs kontrola),
  • kolumny – zwykle reprezentują wynik (np. sukces vs brak sukcesu).

Zanim zaczniesz liczyć p-value, sprawdź, czy wiersze i kolumny są opisane jednoznacznie. Pomyłka na tym etapie natychmiast psuje interpretację wyników – test policzy się poprawnie, ale będziesz wnioskować o nie tym, co trzeba.

Przykłady praktyczne tabeli 2×2

Masz wątpliwość, czy twoje dane nadają się do testu Fishera tabela 2×2? Sprawdź, czy pasują do któregoś ze schematów:

  • Medycyna:
    • Wiersze: nowy lek / placebo,
    • Kolumny: wyleczenie / brak wyleczenia.
  • Marketing:
    • Wiersze: kampania A / kampania B,
    • Kolumny: kliknął / nie kliknął.
  • Szkolenia / HR:
    • Wiersze: brał udział w szkoleniu / nie brał udziału,
    • Kolumny: zdał egzamin / nie zdał.

Jeśli twoje dane można sprowadzić do takiego układu, analiza zależności zmiennych jakościowych przez test Fishera ma sens. Kolejny krok to jasne zdefiniowanie hipotez.

Formułowanie hipotez H0 i H1 dla testu Fishera

Każdy test statystyczny potrzebuje dwóch konkurujących hipotez: H0 (hipoteza zerowa) i H1 (hipoteza alternatywna). W kontekście testu Fishera najczęściej używane są dwie równoważne interpretacje:

  • Brak zależności vs istnienie zależności pomiędzy dwiema zmiennymi jakościowymi.
  • Brak różnicy vs różnica proporcji (np. odsetek kliknięć jest taki sam w kampanii A i B vs odsetki są różne).

Przykładowo, dla porównania skuteczności dwóch metod leczenia:

  • H0: P(wyleczenie | leczenie) = P(wyleczenie | kontrola).
  • H1 (dwustronna): P(wyleczenie | leczenie) ≠ P(wyleczenie | kontrola).

Lub jednostronnie:

  • H1 (jednostronna): P(wyleczenie | leczenie) > P(wyleczenie | kontrola).

Zanim uruchomisz test, zapytaj siebie: czy interesuje mnie jakakolwiek różnica, czy tylko wzrost? Jeśli scenariusz negatywny (np. gorsza skuteczność nowej metody) jest istotny decyzyjnie, potrzebujesz testu dwustronnego.

Jak zamienić pytanie biznesowe na hipotezę statystyczną

Weź własny przykład i przeprowadź krótkie mentalne ćwiczenie. Załóżmy, że pytasz: „Czy kampania B ma wyższy współczynnik kliknięć niż kampania A?”. Jak przełożyć to na hipotezy?

  • Zdefiniuj proporcje: pA – odsetek kliknięć w kampanii A, pB – odsetek kliknięć w kampanii B.
  • H0: pA = pB (brak różnicy).
  • H1: pB > pA (kampania B lepsza) – jednostronnie, albo H1: pB ≠ pA – dwustronnie.

Zadaj sobie pytanie: czy zaakceptujesz sytuację, że B jest gorsza od A, ale test „nie zauważy”, bo sprawdzasz tylko wzrost? Jeśli nie – trzymaj się dwustronnego testu Fishera. W raportach naukowych i korporacyjnych domyślny standard to p-value dla hipotezy dwustronnej.

Dlaczego test Fishera jest „dokładny”? Idea bez wzorów

Intuicja: rozkład hipergeometryczny i „wszystkie możliwe tabele”

Test Fishera opiera się na rozkładzie hipergeometrycznym. Brzmi groźnie, ale idea jest prosta: wyobraź sobie urnę z kulkami dwóch kolorów. Losujesz bez zwracania określoną liczbę kulek do grupy „leczenie” i „kontrola”. Pytanie brzmi: jakie jest prawdopodobieństwo, że wylosujesz dokładnie taki układ sukcesów i porażek, jaki obserwujesz w danych?

W teście Fishera zakłada się, że:

  • suma wierszy (liczba osób w poszczególnych grupach) jest ustalona,
  • suma kolumn (łączna liczba sukcesów i porażek) też jest ustalona.

Dla zadanych marginesów istnieje skończona liczba możliwych tabel 2×2, które pasują do tych sum. Dokładny test Fishera liczy prawdopodobieństwo każdej z tych tabel, tak jakby powstała z losowego podziału jednostek na grupy, przy założeniu braku zależności.

Przybliżenie chi‑kwadrat vs dokładny test Fishera

Test chi‑kwadrat używa przybliżenia: traktuje liczebności w komórkach jako zmienne losowe o rozkładzie zbliżonym do rozkładu chi‑kwadrat. Działa to dobrze dla dużych prób i sensownych częstości oczekiwanych. Problemy zaczynają się wtedy, gdy:

  • tabela 2×2 jest oparta na małej liczbie obserwacji,
  • jedna z kategorii jest bardzo rzadka,
  • częstości oczekiwane są bliskie zeru.

Wtedy różnice między p-value interpretacja z testu chi‑kwadrat i z exact Fisher test R mogą być znaczące. Test Fishera nie przybliża, tylko sumuje dokładne prawdopodobieństwa tabel takich jak obserwowana (lub bardziej ekstremalnych). Dlatego nosi nazwę „dokładny”.

Co oznaczają „ustalone sumy wierszy i kolumn”?

Sformułowanie „przy założonych sumach wierszy i kolumn” oznacza, że:

  • liczebność każdej grupy (np. liczba pacjentów w grupie leczenia i kontroli) jest traktowana jako stała,
  • łączna liczba sukcesów i porażek też jest ustalona.

Przykład myślowy: masz 40 osób, w tym 10 z sukcesem i 30 bez sukcesu. Do grupy leczenia trafiło 20 osób, do kontroli 20 osób. Teraz pytanie – jeśli przypisywanie do grupy było całkowicie losowe (brak zależności), jakie są szanse, że dokładnie taki układ sukcesów i porażek trafi do poszczególnych grup? To właśnie liczy test Fishera.

Kiedy różnice między testem Fishera a chi‑kwadrat są istotne?

Jeśli liczebności w komórkach są duże (wszystkie >= 5, a często nawet >= 10), p‑value z testu Fishera i chi‑kwadrat zwykle są do siebie zbliżone. Różnice pojawiają się, gdy:

  • choć jedna komórka ma wartość 0, 1 lub 2,
  • tablica jest bardzo „nierówna” (np. prawie wszystkie sukcesy w jednej grupie),
  • próba jest mała, a efekt – potencjalnie duży.

Masz już w głowie konkretny przypadek? Jeśli twoja tabela 2×2 jest skrajnie asymetryczna, zadaj sobie pytanie: czy akceptujesz przybliżenie, czy potrzebujesz dokładności? W zastosowaniach klinicznych i wszędzie tam, gdzie wymagana jest duża staranność metodologiczna, test Fishera będzie pierwszym wyborem.

Dokumenty z analizą danych statystycznych, lupa i okulary na biurku
Źródło: Pexels | Autor: Hanna Pad

Warunki stosowania testu Fishera i wybór jednostronny vs dwustronny

Kiedy stosować test Fishera zamiast chi‑kwadrat

Krótkie pytanie kontrolne: jak duża jest twoja tabela i jakie są minimalne częstości? Jeśli pracujesz na tabeli 2×2 i obserwujesz małe liczby, warto postawić na test Fishera. Klasyczne zalecenia mówią, że:

  • jeśli co najmniej jedna komórka ma oczekiwaną częstość mniejszą niż 5 – chi‑kwadrat jest ryzykowny,
  • jeśli są komórki z częstością 0 – test Fishera jest zdecydowanie preferowany,
  • w badaniach pilotażowych, fazie wstępnej, przy mocno ograniczonej próbie – stosuj test Fishera jako domyślny.

Jak odczytywać p-value z testu Fishera w praktyce

Przypomnij sobie własną tabelę 2×2. Masz już policzone p-value. Co teraz – odrzucasz H0 czy nie? Zacznij od prostego pytania: jaki poziom istotności (α) przyjąłeś przed analizą?

  • Najczęściej α = 0,05 (5%).
  • W badaniach wysokiego ryzyka (kliniczne, regulacyjne) – czasem α = 0,01 lub niżej.

Interpretacja jest mechaniczna, ale konsekwencje już nie:

  • Jeśli p-value ≤ α – masz podstawy, by odrzucić H0. Czyli: dane są mało zgodne ze scenariuszem „brak różnicy / brak zależności”.
  • Jeśli p-value > αnie odrzucasz H0. Czyli: dane nie dają silnych argumentów przeciwko „brakowi różnicy”.

I tu pojawia się kluczowe pytanie interpretacyjne: czy brak istotności oznacza, że efektu nie ma? Nie. Oznacza to tylko tyle, że na podstawie tej próby nie wykrywasz efektu na przyjętym poziomie istotności. Być może efekt jest, ale masz za mało danych albo szum jest zbyt duży.

Dla decyzji biznesowych lub klinicznych zadaj sobie pytanie pomocnicze: jak duży efekt uznasz za praktycznie sensowny? p-value nie mówi nic o wielkości efektu, tylko o sile dowodu przeciwko H0. Dlatego p-value warto łączyć z miarą wielkości efektu (np. ilorazem szans) i przedziałem ufności.

p-value dwustronne vs jednostronne: co faktycznie raportować

Masz już policzone p-value dwustronne i kusi cię, żeby „poprawić” je jednostronnym, bo wychodzi niższe? Zanim to zrobisz, odpowiedz na dwa pytania:

  • Czy hipoteza jednostronna była zadeklarowana przed analizą?
  • Czy wynik w „nieoczekiwanym” kierunku też miałby dla ciebie znaczenie?

Jeśli analizujesz kampanię marketingową i odrzuciłeś scenariusz „B może być gorsza niż A” jako nieistotny decyzyjnie, a do tego masz solidne uzasadnienie merytoryczne – jednostronny test można obronić. Jeśli jednak sam nie wiesz, czy wolałbyś wiedzieć, że B jest gorsza, jednostronny wariant jest intelektualnie nieuczciwy.

Bezpieczne praktyczne zasady są proste:

  • Domyślnie licz i raportuj p-value dwustronne.
  • Jeśli używasz testu jednostronnego – wyraźnie to zaznacz w opisie metody.
  • Nie zmieniaj jednostronnego/dwustronnego po zobaczeniu danych – to klasyczny błąd analityczny.

Od p-value do decyzji: przykład z kampanią marketingową

Wyobraź sobie, że porównałeś kampanie A i B. Po zliczeniu kliknięć budujesz tabelę 2×2 i uruchamiasz test Fishera (dwustronny). Otrzymujesz p-value = 0,03.

Co to znaczy praktycznie?

  • Jeśli α = 0,05 – odrzucasz H0. Masz statystycznie istotną różnicę w CTR między A i B.
  • Pytanie kontrolne: czy różnica w CTR jest również biznesowo istotna? Jeśli CTR rośnie z 2,0% do 2,1%, statystycznie może to wyglądać ciekawie, ale finansowo – już niekoniecznie.

Dlatego sama istotność statystyczna nie wystarcza. Do raportu dodaj:

  • oszacowanie różnicy w proporcjach lub ilorazu szans,
  • przedział ufności dla tej miary,
  • interpretację w języku biznesowym (np. dodatkowe przychody, koszt pozyskania leada).

Iloraz szans (odds ratio) w tabeli 2×2

Test Fishera odpowiada na pytanie „czy istnieje zależność?”, ale nie mówi od razu, jak silna jest ta zależność. Tutaj przydaje się iloraz szans (odds ratio, OR). Dla tabeli:

           Sukces    Brak sukcesu
Grupa 1      a            b
Grupa 2      c            d

iloraz szans definiujemy jako:

OR = (a / b) / (c / d) = (a·d) / (b·c)

Jak to czytać?

  • OR = 1 – brak różnicy w szansach sukcesu między grupami.
  • OR > 1 – szansa sukcesu w grupie 1 jest większa niż w grupie 2.
  • OR < 1 – szansa sukcesu w grupie 1 jest mniejsza niż w grupie 2.

Zadaj sobie pytanie: czy twoja interpretacja ma być intuicyjna dla odbiorcy? Jeśli tak, czasem lepiej zamienić OR na sformułowania typu „szansa sukcesu jest około 3 razy większa” niż prezentować gołym symbolem.

Przedział ufności dla ilorazu szans

Samo OR bez przedziału ufności bywa mylące, zwłaszcza przy małych próbach. Możesz mieć OR = 4, ale z bardzo szerokim przedziałem (np. od 0,8 do 25), co świadczy o dużej niepewności oszacowania.

W praktyce postępuj etapami:

  1. Policz OR z tabeli 2×2.
  2. Wyznacz 95% przedział ufności dla OR (Excel lub R zrobią to za ciebie).
  3. Sprawdź, czy przedział zawiera 1:
    • jeśli 1 leży wewnątrz przedziału – brak podstaw, by mówić o istotnej różnicy (na poziomie 5%),
    • jeśli cały przedział jest > 1 – efekt jest dodatni i statystycznie istotny,
    • jeśli cały przedział jest < 1 – efekt jest ujemny i statystycznie istotny.

Zauważ, że wnioski z przedziału ufności są spójne z p-value testu Fishera (przy standardowym poziomie α). Jeśli w jednym miejscu widzisz sprzeczność – sprawdź, czy użyto tego samego poziomu istotności i czy porównujesz wyniki dla tej samej hipotezy (jedno- vs dwustronnej).

Analityk przy laptopie z wykresami w nowoczesnym biurze
Źródło: Pexels | Autor: RDNE Stock project

Test Fishera w Excelu: krok po kroku

Przygotowanie danych w arkuszu

Na początek upewnij się, że tabela 2×2 jest zbudowana klarownie i spójnie. Zadaj sobie dwa pytania:

  • Co traktuję jako wiersze (grupy, warianty, leczenie vs kontrola)?
  • Co traktuję jako kolumny (sukces vs porażka, kliknął vs nie kliknął)?

Dobrą praktyką jest jawne podpisanie wierszy i kolumn. Przykład:

SukcesBrak sukcesu
Grupa 1 (leczenie)105
Grupa 2 (kontrola)411

Załóżmy, że liczby 10, 5, 4, 11 znajdują się w komórkach B2:C3:

  • B2 – a (Grupa 1, sukces)
  • C2 – b (Grupa 1, brak sukcesu)
  • B3 – c (Grupa 2, sukces)
  • C3 – d (Grupa 2, brak sukcesu)

Funkcja F.TEST a test Fishera – częsty błąd

Jeżeli korzystasz z Excela po polsku, łatwo popełnić błąd: funkcja F.TEST / TEST.F (lub polski odpowiednik) nie jest testem Fishera dla tabel 2×2. To test porównujący wariancje dwóch prób, nie proporcje.

Test Fishera dla tabel 2×2 w Excelu nie jest dostępny jako pojedyncza funkcja arkuszowa. Masz trzy główne opcje:

  • dodatek Analysis ToolPak / Dodatek Analiza,
  • gotowe szablony (np. arkusze z zaimplementowanymi obliczeniami),
  • wywołanie zewnętrznego narzędzia (np. R, Python) i wklejenie wyników.

Test Fishera przez Dodatek Analiza (Analysis ToolPak)

Jeśli pracujesz na wersji Excela z włączonym dodatkiem statystycznym, możesz skorzystać z wbudowanego narzędzia Test chi‑kwadrat dla tabeli kontyngencji. Samodzielnego przycisku „Fisher” zwykle nie ma, natomiast:

  • niektóre implementacje dodatków (zewnętrznych) dodają funkcję „Fisher exact test”,
  • alternatywą jest wykorzystanie gotowych makr VBA, które liczą test Fishera.

Jeżeli działasz w typowym środowisku korporacyjnym i nie możesz instalować makr ani dodatków, zadaj sobie pytanie: czy akceptujesz przybliżenie chi‑kwadrat, czy przenosisz analizę do R? Jeśli masz małe liczebności, bezpieczniej będzie przejść do R, nawet jeśli wymaga to wyjścia poza Excela.

Obliczenie testu Fishera w Excelu przez Power Query lub łącze do R

Coraz częściej w firmach pojawia się hybrydowe podejście: dane trzymasz i przygotowujesz w Excelu, a obliczenia statystyczne wykonujesz w zewnętrznym silniku (np. R). Prosta ścieżka wygląda tak:

  1. Przygotuj w Excelu tabelę 2×2 w stabilnej lokalizacji (np. nazwany zakres „Tabela_2x2”).
  2. Wyeksportuj ją jako plik CSV lub udostępnij przez Power Query.
  3. W R wczytaj ten plik i uruchom fisher.test().
  4. Wynik (p-value, OR, przedział ufności) skopiuj z powrotem do Excela.

Zadaj sobie pytanie organizacyjne: czy częściej zmieniasz dane, czy definicję analizy? Jeśli dane zmieniają się często, opłaca się zautomatyzować ten przepływ (np. skrypt R, który uruchamiasz jednym kliknięciem). Jeśli to jednorazowa analiza – ręczne przerzucenie tabeli jest w pełni wystarczające.

Test Fishera w R: fisher.test krok po kroku

Przygotowanie tabeli 2×2 w R

R ma wbudowaną funkcję fisher.test(), która obsługuje zarówno tabelę 2×2, jak i większe tabele kontyngencji. Najpierw musisz zdefiniować tabelę. Najprostszy wariant to macierz:


# Dane: wiersze = leczenie, kontrola
# kolumny = sukces, brak_sukcesu
tabela <- matrix(c(10, 5,
                   4, 11),
                 nrow = 2,
                 byrow = TRUE)

colnames(tabela) <- c("Sukces", "Brak_sukcesu")
rownames(tabela) <- c("Leczenie", "Kontrola")

tabela

Upewnij się, że wartości w matrix(c(...)) są wpisane w tej kolejności, jaką zakładasz interpretacyjnie. Zadaj sobie krótkie pytanie kontrolne: czy wiersze i kolumny w R odpowiadają temu, co miałeś w Excelu? Jeśli nie – zamień ich kolejność lub etykiety.

Podstawowe wywołanie fisher.test()

Najprostsze wywołanie ogranicza się do jednego polecenia:


wynik <- fisher.test(tabela)
wynik

Na ekranie zobaczysz m.in.:

  • p-value – domyślnie dla testu dwustronnego,
  • alternative hypothesis – opis, czy test jest two‑sided, less, czy greater,
  • odds ratio – oszacowanie ilorazu szans,
  • 95% confidence interval – przedział ufności dla OR.

Zwróć uwagę na kolejność kategorii. Jeśli zmienisz kolejność wierszy lub kolumn, OR oraz sformułowanie „greater/less” zmienią znaczenie. Dla przejrzystości zawsze trzymaj się tej samej konwencji w projekcie (np. „nowa metoda” jako pierwszy wiersz, „sukces” jako pierwsza kolumna).

Test jednostronny w R: parametr alternative

Jeśli przed analizą zdecydowałeś się na jednostronną hipotezę, możesz to wskazać parametrem alternative. Masz trzy możliwości:

  • "two.sided" – test dwustronny (domyślnie),
  • "greater" – test jednostronny „większe niż”,
  • "less" – test jednostronny „mniejsze niż”.

Przykład:

Jednostronny test Fishera: kiedy „greater”, a kiedy „less”?

Zanim ustawisz alternative, zadaj sobie jedno pytanie: czy naprawdę interesuje cię tylko jeden kierunek efektu? Jeśli tak, jednostronny test ma sens. Jeśli nie – trzymaj się dwustronnego.

Dla tabeli z leczeniem i kontrolą możesz zapisać:


fisher.test(tabela, alternative = "greater")

To odpowiada hipotezie:

  • H0: szansa sukcesu w grupie leczenia ≤ szansa sukcesu w grupie kontrolnej,
  • H1: szansa sukcesu w grupie leczenia > szansa sukcesu w grupie kontrolnej.

Analogicznie, jeśli spodziewasz się, że leczenie obniża szansę sukcesu (np. skutki uboczne przeważają nad korzyściami):


fisher.test(tabela, alternative = "less")

Praktyczna podpowiedź: zdefiniuj hipotezę słownie zanim dotkniesz klawiatury. Zapisz na kartce „leczenie poprawia wynik” albo „nowy design zmniejsza liczbę rezygnacji” i dopiero wtedy wybierz greater lub less.

Kontrola poziomu ufności: argument conf.level

Domyślnie fisher.test() podaje 95% przedział ufności dla ilorazu szans. Jeżeli twoja organizacja używa innego poziomu (np. 90% w badaniach eksploracyjnych), możesz to zmienić:


fisher.test(tabela, conf.level = 0.90)

Zadaj sobie pytanie: czy zmieniasz poziom ufności, bo chcesz dopasować się do norm branżowych, czy po to, by „złapać istotność”? W tym drugim przypadku lepiej zatrzymać się i ponownie przemyśleć projekt badania.

Wyciąganie konkretnych elementów wyniku fisher.test()

Jeśli chcesz dalej przetwarzać wyniki (np. tworzyć raport automatyczny), przyda się dostęp do poszczególnych pól obiektu wynik. Przykład:


wynik <- fisher.test(tabela)

p_wartosc  <- wynik$p.value
iloraz_szans <- wynik$estimate          # OR
przedzial    <- wynik$conf.int          # wektor: dolna, górna granica

p_wartosc
iloraz_szans
przedzial

Możesz od razu sformatować wynik, np. do raportu w Excelu lub PowerPoint:


sprintf("OR = %.2f (%.2f–%.2f), p = %.3f",
        iloraz_szans,
        przedzial[1], przedzial[2],
        p_wartosc)

Zadaj sobie pytanie: co chcesz raportować automatycznie, a co interpretować ręcznie? Najczęściej automatyzujesz liczby, a interpretację (np. „istotnie wyższa konwersja”) dopisujesz sam.

Większe liczebności a wybór między testem Fishera i chi‑kwadrat

Przy dużych próbach test Fishera bywa wolniejszy obliczeniowo, a przybliżenie testem chi‑kwadrat jest bardzo dobre. W R wybór jest prosty:

  • dla małych i średnich prób – fisher.test(),
  • dla dużych prób – chisq.test(), zwykle z poprawką Yatesa wyłączoną lub włączoną zależnie od preferencji.

Porównanie na tej samej tabeli:


chisq.test(tabela, correct = FALSE)  # bez poprawki Yatesa
chisq.test(tabela, correct = TRUE)   # z poprawką Yatesa
fisher.test(tabela)

Sprawdź, jak mocno różnią się wartości p. Następnie zadaj sobie pytanie: czy zysk w prostocie obliczeń jest wart ewentualnej utraty dokładności? Dla kilkudziesięciu obserwacji w każdej komórce – zwykle tak. Dla kilku – już nie.

Większe tabele w fisher.test(): więcej niż 2×2

Test Fishera działa także dla większych tabel (np. 2×3, 3×3), ale jego interpretacja przestaje się opierać na prostym OR. Przykład tabeli 2×3 (np. dwie grupy i trzy możliwe wyniki):


tabela2 <- matrix(c(5, 7, 3,
                    2, 4, 9),
                  nrow = 2,
                  byrow = TRUE)

fisher.test(tabela2)

W takim przypadku wynik p‑value odnosi się do ogólnej zależności między wierszami i kolumnami, a nie do pojedynczego porównania dwóch kategorii. Gdy widzisz istotny wynik, dopytaj: które dokładnie kategorie ciągną ten efekt? Odpowiedzią są często analizy post‑hoc (oddzielne testy dla wybranych porównań, ewentualnie z korektą na wielokrotne testowanie).

Porządkowanie kategorii: jak nie odwrócić interpretacji

Iloraz szans w fisher.test() definiowany jest jako stosunek szans wiersza 1 do szans wiersza 2 (w tabeli 2×2). Jeśli zamienisz wiersze miejscami, OR odwróci się (przejdzie w 1/OR).

Aby uniknąć chaosu interpretacyjnego:

  • zawsze ustawiaj wiersz 1 jako „nowy wariant” (leczenie, nowy layout, grupa eksperymentalna),
  • wiersz 2 niech będzie „stary wariant” (kontrola, status quo),
  • pierwsza kolumna: „sukces” (zdarzenie pozytywne), druga: „brak sukcesu” lub „porażka”.

Zadaj sobie kontrolne pytanie: jeśli OR > 1, czy intuicyjnie oznacza to „nowy lepszy od starego”? Jeśli nie, odwróć kolejność wierszy lub kolumn tak, by symbolika OR była spójna z intuicją.

R a Excel: spójność wyników między narzędziami

Czasem tę samą tabelę analizujesz w Excelu (np. dodatkiem) i w R. Niekiedy zauważysz drobne różnice w p‑value lub przedziale ufności OR. Skąd się biorą?

  • inne ustawienie hipotezy jednostronnej/dwustronnej,
  • różna definicja OR (która grupa jest „pierwsza”),
  • nieco inny algorytm obliczeń (różne biblioteki numeryczne).

Dobrą praktyką jest wykonanie krótkiego „testu zgodności”: skopiuj jedną małą tabelę do R i Excela, policz test Fishera w obu narzędziach, a potem jawnie opisz, która grupa jest traktowana jako „pierwsza” i jakie ustawiono opcje (dwustronny vs jednostronny). Dzięki temu unikniesz dyskusji typu „u mnie p = 0,031, a u ciebie 0,029 – kto ma rację?”.

Automatyzacja wielu tabel 2×2 w R

Jeżeli analizujesz więcej niż jedną tabelę – np. osobno dla różnych segmentów klientów, krajów albo wersji produktu – ręczne wywoływanie fisher.test() szybko robi się uciążliwe. Pojawia się pytanie: liczysz wszystko ręcznie, czy budujesz małą funkcję pomocniczą?

Prosty schemat automatyzacji wygląda tak:

  1. Trzymaj dane w ramce danych (np. segment, grupa, sukces, liczebnosc).
  2. Dla każdego segmentu zbuduj tabelę 2×2.
  3. Dla każdej tabeli uruchom fisher.test() i zapisz wyniki.

Przykład z użyciem pakietu dplyr:


library(dplyr)
library(tidyr)

# Przykladowa struktura danych (schemat)
# segment, grupa (Leczenie/Kontrola), wynik (Sukces/Brak),
# n (liczebnosc)
dane |>
  group_by(segment) |>
  group_modify((df, key) {
    tab <- xtabs(n ~ grupa + wynik, data = df)
    test <- fisher.test(tab)

    tibble(
      p_value = test$p.value,
      OR      = unname(test$estimate),
      CI_low  = test$conf.int[1],
      CI_high = test$conf.int[2]
    )
  })

Dzięki temu jednym poleceniem otrzymujesz tabelę wyników dla wielu segmentów. Kolejne pytanie, które powinieneś sobie zadać: czy korygujesz p‑value za wielokrotne testowanie? Jeśli testów jest dużo, bez korekty łatwo o fałszywe „istotne” wyniki.

Interpretacja p‑value testu Fishera w różnych kontekstach

Sam p‑value mówi tylko, na ile obserwowana lub bardziej ekstremalna tabela byłaby prawdopodobna, gdyby nie było różnicy między grupami. To nie jest prawdopodobieństwo, że hipoteza zerowa jest prawdziwa.

W praktyce warto połączyć p‑value z kontekstem:

  • czy efekt jest duży (OR, różnica w proporcjach),
  • czy efekt jest stabilny (wąski przedział ufności),
  • czy efekt jest istotny biznesowo/klinicznie, a nie tylko statystycznie.

Jeżeli p‑value jest blisko progu α (np. 0,048 przy 0,05), zadaj sobie pytanie: co się stanie, jeżeli powtórzysz badanie? Często odpowiedź brzmi: wyniki mogą się wahać wokół progu istotności, więc lepiej interpretować całość z pewną rezerwą i patrzeć na wielkość efektu.

Test Fishera a małe próby: co zrobić, gdy liczby są ekstremalnie małe?

Przy bardzo małych próbach (np. po kilka obserwacji) test Fishera jest poprawny formalnie, lecz jego moc (zdolność do wykrycia rzeczywistego efektu) może być niewielka. Otrzymujesz często szerokie przedziały ufności i p‑value daleko od progu istotności.

W takiej sytuacji zapytaj siebie:

  • czy kluczowe jest wykrycie małego efektu, czy tylko dużego?
  • czy możesz zebrać więcej danych?
  • czy konsekwencje błędu są poważne? (np. w medycynie vs w kampanii marketingowej).

Czasem odpowiedzią nie jest „inny test”, tylko inny projekt badania lub ostrożniejsze wnioski („brak danych, by potwierdzić efekt”, a nie „efektu nie ma”).

Podejście Bayesowskie jako alternatywa dla testu Fishera

Jeśli często łapiesz się na pytaniu „jakie jest prawdopodobieństwo, że leczenie jest skuteczniejsze?”, to myślisz kategoriami bayesowskimi. Test Fishera na to nie odpowie wprost, ale prosta analiza bayesowska już tak.

Dla dwóch proporcji można zastosować model beta‑binomialny. Schematycznie:

  1. Przyjmujesz rozkład prior dla każdej grupy, np. Beta(1, 1) (jednostajny).
  2. Po uwzględnieniu danych otrzymujesz rozkład posterior, np. Beta(a+1, b+1).
  3. Obliczasz prawdopodobieństwo, że pleczenie > pkontrola.

W R można to oszacować symulacyjnie:


set.seed(123)

# Dane: a, b, c, d jak wcześniej
a <- 10; b <- 5
c <- 4;  d <- 11

n_samp <- 100000

p_leczenie <- rbeta(n_samp, a + 1, b + 1)
p_kontrola <- rbeta(n_samp, c + 1, d + 1)

mean(p_leczenie > p_kontrola)

Otrzymana wartość to przybliżone prawdopodobieństwo, że proporcja sukcesów w grupie leczenia jest większa niż w kontroli, przy przyjętym priorze. Zadaj sobie pytanie: czy taki sposób myślenia lepiej odpowiada na twoje potrzeby decyzyjne niż klasyczny p‑value? Jeśli tak, test Fishera może być punktem odniesienia, ale niekoniecznie głównym narzędziem.

Najczęściej zadawane pytania (FAQ)

Kiedy użyć testu Fishera zamiast testu chi-kwadrat w tabeli 2×2?

Spójrz najpierw na swoją tabelę: czy masz bardzo małe liczby w komórkach lub nawet zera? Jeśli przynajmniej jedna komórka ma 0–1 obserwację, kilka komórek ma wartości poniżej 5 albo rozkład jest mocno „jednostronny” (prawie wszystko w jednym wierszu lub kolumnie), test chi-kwadrat staje się zawodny. Wtedy lepszym wyborem jest dokładny test Fishera.

Zadaj sobie pytanie: „czy mogę sobie pozwolić na przybliżenie?”. Jeśli próba jest mała, dane są rzadkie, a na podstawie wyniku podejmujesz ważną decyzję (np. kliniczną, HR-ową, biznesową), bezpieczniej jest oprzeć się na teście Fishera niż na przybliżeniu chi-kwadrat.

Do jakich danych nadaje się test Fishera? Czy zawsze musi być tabela 2×2?

Klasyczny test Fishera dotyczy tabeli 2×2, czyli dwóch zmiennych jakościowych z dwiema kategoriami każda (np. leczenie/kontrola × wyleczenie/brak wyleczenia, kampania A/B × kliknął/nie kliknął). Dlatego najpierw zapytaj siebie: „czy moje dane da się sensownie sprowadzić do dwóch kategorii na krzyż?”. Jeśli tak, ścieżka do testu Fishera jest otwarta.

Dla większych tabel (np. 2×3, 3×3) istnieją uogólnienia testu Fishera, ale są bardziej wymagające obliczeniowo i rzadziej dostępne w prostych narzędziach, takich jak Excel. W wielu praktycznych zastosowaniach, jeśli masz więcej kategorii, rozważa się albo test chi-kwadrat, albo odpowiednie łączenie kategorii do postaci 2×2 (ale tylko gdy ma to sens merytoryczny).

Jak interpretować p-value z testu Fishera w praktyce?

p-value z testu Fishera mówi, jak „ekstremalny” jest zaobserwowany układ w tabeli 2×2, jeśli założymy, że w rzeczywistości nie ma zależności między zmiennymi (H0 jest prawdziwa). Im mniejsze p-value, tym mniej wiarygodny scenariusz „brak różnicy / brak zależności”. Kluczowe pytanie brzmi: „jakie przyjąłeś alfa?” – najczęściej 0,05.

Jeśli p ≤ 0,05, mówisz: „mam statystyczne podstawy, by odrzucić H0” i uznać, że istnieje związek lub różnica proporcji. Jeśli p > 0,05, stwierdzasz jedynie „brak podstaw do odrzucenia H0” – co nie znaczy, że zmienne są na pewno niezależne, tylko że w tych danych nie masz na to wystarczających dowodów. Warto od razu powiązać to z decyzją: co zmienisz, jeśli p będzie niskie, a co, jeśli wysokie?

Czym dokładny test Fishera różni się od testu chi-kwadrat z punktu widzenia praktyka?

Test chi-kwadrat opiera się na przybliżeniu – zakłada odpowiednio duże liczebności w komórkach i używa rozkładu chi-kwadrat. Dzięki temu jest szybki i wygodny, ale traci wiarygodność przy małych próbach lub rzadkich zdarzeniach. Dokładny test Fishera liczy natomiast rzeczywiste prawdopodobieństwa wszystkich możliwych tabel 2×2 przy ustalonych sumach wierszy i kolumn.

Praktycznie: gdy liczebności są duże i zbalansowane, wyniki obu testów będą zbliżone. Gdy masz mało danych, kilka zer i wyraźną asymetrię – Fisher „trzyma poziom błędu” lepiej niż chi-kwadrat. Zadaj sobie pytanie: „czy zależy mi bardziej na szybkości, czy na możliwie dokładnym oszacowaniu ryzyka błędu?”. To pomaga wybrać test.

Kiedy stosować test Fishera jednostronny, a kiedy dwustronny?

Zacznij od pytania biznesowego lub badawczego: „interesuje mnie jakakolwiek różnica czy konkretny kierunek (tylko wzrost, tylko poprawa)?”. Jeśli istotny jest każdy odchył (nowa procedura może być zarówno lepsza, jak i gorsza), używasz testu dwustronnego – to standard w raportach naukowych i korporacyjnych.

Test jednostronny stosuje się tylko wtedy, gdy negatywny scenariusz naprawdę nie ma znaczenia decyzyjnego i mógłbyś go „zignorować” (np. testujesz rozwiązanie, które z definicji nie może pogorszyć sytuacji, a jedynie poprawić). Zadaj sobie uczciwie pytanie: „czy zaakceptuję sytuację, że nowa metoda jest gorsza, ale mój test jej na to ‘nie łapie’, bo patrzę tylko na wzrost?”. Jeśli odpowiedź brzmi „nie”, trzymaj się wariantu dwustronnego.

Czy test Fishera można łatwo wykonać w Excelu i w R?

W R jest to bardzo proste: budujesz tabelę 2×2 (np. jako matrix lub table), a następnie wywołujesz funkcję fisher.test(). Od razu dostajesz p-value (domyślnie dla testu dwustronnego) oraz przedział ufności dla ilorazu szans. Pytanie pomocnicze: „czy umiesz już przygotować poprawną tabelę krzyżową w R?” – to zwykle jedyny techniczny próg wejścia.

W Excelu nie ma wbudowanej, prostej funkcji „FISHER TEST” dla tabeli 2×2, więc masz kilka opcji: użyć dodatków statystycznych (np. pakietów zewnętrznych), skorzystać z gotowych arkuszy-szablonów albo policzyć test w specjalistycznym oprogramowaniu (np. R, Python, pakiety statystyczne) i tylko zaimportować wynik do Excela. Zastanów się: szybciej będzie „kombinować” w Excelu czy nauczyć się prostego wywołania w R?

Jak poprawnie sformułować hipotezy do testu Fishera w badaniu A/B lub klinicznym?

Na start doprecyzuj, jakie proporcje porównujesz. W badaniu A/B mogą to być odsetki kliknięć w kampanii A i B, w badaniu klinicznym – odsetki wyleczeń w grupie leczenie i kontrola. Nazwij je sobie np. pA i pB, a potem ustaw hipotezy:

  • H0: pA = pB (brak różnicy / brak zależności),
  • H1 dwustronna: pA ≠ pB lub jednostronna: pB > pA (jeśli interesuje cię tylko poprawa).

Zadaj kluczowe pytanie: „co uznam za sukces, a co za porażkę?”. Gdy masz to jasne, wiesz, jak nazwać kolumny w tabeli (np. sukces/porażka) i która grupa jest „referencyjna”. To pozwala później poprawnie zinterpretować kierunek efektu, a nie tylko samą istotność p-value.

1 KOMENTARZ

  1. Bardzo przydatny artykuł! Bardzo podoba mi się sposób, w jaki autor szczegółowo wyjaśnia, jak przeprowadzić test Fishera zarówno w Excelu, jak i programie R. Dzięki temu nawet osoby początkujące w analizie danych mogą z łatwością zastosować tę metodę. Zdecydowanie doceniam również klarowną interpretację wyników testu Fishera oraz sposób przedstawienia danych w tabeli 2×2. Jednakże brakuje mi nieco więcej przykładów praktycznych, które mogłyby lepiej zilustrować sposób użycia testu w realnych badaniach. Możliwe byłoby również dodanie krótkiego porównania z innymi testami statystycznymi, aby czytelnik mógł lepiej zrozumieć, kiedy warto zastosować test Fishera. Mimo tych drobnych uwag, artykuł jest świetnym wprowadzeniem do tematu i na pewno skorzystam z tych wskazówek w swoich analizach danych.

Komentarze są aktywne tylko po zalogowaniu.