Słownik metodologiczny · Testy statystyczne

Test permutacyjny – jak policzyć wartość p z przetasowań danych?

Test permutacyjny buduje rozkład statystyki przy hipotezie zerowej z samych danych, przez przetasowanie etykiet grup. Pokazujemy, jak poprawnie policzyć p z losowych permutacji, przykład różnicy median w R i gotowy opis do pracy.

Strona główna / Słownik / Test permutacyjny
W skrócie: Test permutacyjny wielokrotnie przetasowuje etykiety grup i sprawdza, jak często statystyka z przetasowanych danych jest co najmniej tak skrajna jak obserwowana. Przy losowych permutacjach licz p = (b + 1)/(B + 1) i podaj liczbę permutacji. Warunkiem jest wymienialność obserwacji przy hipotezie zerowej.

Co to jest test permutacyjny?

Test permutacyjny (ang. permutation test, też randomization test) to test istotności, w którym rozkład statystyki przy hipotezie zerowej powstaje z samych danych. Jeśli grupy się nie różnią, etykiety grup są przypadkowe, więc można je przetasować i policzyć statystykę od nowa. Ernst (2004) przypomina, że metoda sięga prac Fishera, a w wielu sytuacjach daje wnioskowanie dokładne, bez założeń o kształcie rozkładu. Ogólną logikę na różnicy średnich pokazuje hasło test statystyczny; tu chodzi o losowe permutacje i poprawne p.

Nie myl tej metody z bootstrapem: bootstrap losuje obserwacje ze zwracaniem i szacuje niepewność, a permutacja tasuje etykiety bez zwracania i testuje hipotezę zerową.

Jak go policzyć?

  1. Wybierz statystykę, np. różnicę median.
  2. Przetasuj etykiety grup, policz statystykę i powtórz to B razy.
  3. Policz b, czyli liczbę permutacji co najmniej tak skrajnych jak wynik obserwowany, i przyjmij p = (b + 1)/(B + 1).

Phipson i Smyth (2010) pokazali, że p liczone bez tej poprawki, jako b/B, bywa zaniżone mniej więcej o 1/B, co ma znaczenie przy wielu testach. Warunkiem testu jest wymienialność: przy prawdziwej hipotezie zerowej zamiana etykiet nie zmienia rozkładu danych. W eksperymencie z randomizacją wynika ona z planu.

Przykład

Porównujemy liczbę dni nieobecności w kwartale: 14 osób z grupy kontrolnej i 12 po treningu radzenia sobie ze stresem (dane symulowane). Rozkłady są skośne, więc statystyką jest różnica median: 2.0 − 9.5 = −7.5 dnia. W 9999 losowych permutacjach różnica co najmniej tak duża co do wartości bezwzględnej pojawiła się 142 razy, więc p = 143/10 000 = .014. Wszystkich podziałów 26 osób na grupy 14 i 12 jest 9 657 700. Dla porównania test Manna-Whitneya dał p = .024.

Jak opisać w pracy

Liczbę dni nieobecności porównano testem permutacyjnym dla różnicy median (9999 losowych permutacji etykiet grup, p = (b + 1)/(B + 1)). Osoby po treningu (Mdn = 2.0) miały mniej dni nieobecności niż osoby z grupy kontrolnej (Mdn = 9.5), różnica median = −7.5 dnia, p = .014.

Na co uważać

  • Nie zapisuj p = 0. Najmniejsza możliwa wartość to 1/(B + 1).
  • Podaj liczbę permutacji i ziarno losowania.
  • Tasuj zgodnie z planem. W pomiarach powtarzanych zamienia się wyniki w obrębie osoby, a nie między wszystkimi obserwacjami.
  • Różne wariancje grup naruszają wymienialność.

Metody dla małych prób opisuje wpis testy nieparametryczne krok po kroku.

Przykład reprodukowalny

Test permutacyjny w R

Kod liczy obserwowaną różnicę median, rozkład tej różnicy w 9999 losowych permutacjach etykiet grup i wartość p z poprawką (b + 1)/(B + 1).

Różnica median i permutacyjna wartość p

Dane wejściowe: liczba dni nieobecności w kwartale u 14 osób z grupy kontrolnej i 12 osób po treningu (dane symulowane, set.seed(2943)).

Co odczytać: mediany i ich różnicę, liczbę skrajnych permutacji b, wartość p oraz liczbę wszystkich możliwych podziałów.

R
set.seed(2943)
kontrola <- round(rexp(14, 1/9))     # dni nieobecności w kwartale (dane symulowane)
trening  <- round(rexp(12, 1/4.5))
obs <- median(trening) - median(kontrola)            # obserwowana różnica median
dni <- c(kontrola, trening); grupa <- rep(c("kontrola", "trening"), c(14, 12))
B <- 9999
perm <- replicate(B, {g <- sample(grupa)             # przetasowanie etykiet bez zwracania
  median(dni[g == "trening"]) - median(dni[g == "kontrola"])})
b <- sum(abs(perm) >= abs(obs))                      # permutacje co najmniej tak skrajne
c(mediana_kontrola = median(kontrola), mediana_trening = median(trening), roznica = obs)
c(b = b, p = (b + 1) / (B + 1))
choose(26, 12)                                       # liczba wszystkich podziałów
Wynik w R
mediana_kontrola  mediana_trening          roznica 
             9.5              2.0             -7.5 
       b        p 
142.0000   0.0143 
[1] 9657700

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (bez dodatkowych pakietów).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/

Najczęstsze pytania

Czym test permutacyjny różni się od bootstrapu?

Test permutacyjny tasuje etykiety grup bez zwracania i daje wartość p przy hipotezie zerowej. Bootstrap losuje obserwacje ze zwracaniem i szacuje błąd standardowy oraz przedział ufności statystyki.

Ile permutacji wystarczy w teście permutacyjnym?

Zwykle 9999 albo więcej. Przy małej liczbie wszystkich podziałów policz je wszystkie, czyli test dokładny. Przy wielu testach i bardzo małych p zwiększ liczbę permutacji.

Czy test permutacyjny może dać p = 0?

Nie powinien. Do liczby skrajnych permutacji i do liczby wszystkich permutacji dodaj po 1, bo obserwowany podział też jest jedną z permutacji. Najmniejsze możliwe p to wtedy 1/(B + 1).

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Ernst, M. D. (2004). Permutation methods: A basis for exact inference. Statistical Science, 19(4), 676–685. https://doi.org/10.1214/088342304000000396 ● Otwarty dostęp
  2. Phipson, B., & Smyth, G. K. (2010). Permutation p-values should never be zero: Calculating exact p-values when permutations are randomly drawn. Statistical Applications in Genetics and Molecular Biology, 9(1), Article 39. https://doi.org/10.2202/1544-6115.1585 ● Otwarty dostęp: pełny tekst

Cytowania BibTeX

@article{ernst2004permutation, author={Ernst, Michael D.}, title={{Permutation methods: A basis for exact inference}}, journal={Statistical Science}, year={2004}, volume={19}, number={4}, pages={676--685}, doi={10.1214/088342304000000396}}
@article{phipson2010permutation, author={Phipson, Belinda and Smyth, Gordon K.}, title={{Permutation p-values should never be zero: Calculating exact p-values when permutations are randomly drawn}}, journal={Statistical Applications in Genetics and Molecular Biology}, year={2010}, volume={9}, number={1}, eid={39}, doi={10.2202/1544-6115.1585}}
R