5  Model permutacyjny Fishera-Pitmana - alternatywa dla klasycznego wnioskowania w modelu populacyjnym Neymana-Pearsona

If it were asserted that the subject would never be wrong in her judgments we should again have an exact hypothesis, and it is easy to see that this hypothesis could be disproved by a single failure, but could never be proved by any finite amount of

“[…] hipoteza mogłaby zostać obalona przez jeden jedyny przypadek niepowodzenia, lecz nigdy nie mogłaby zostać potwierdzona przez żadną skończoną liczbę eksperymentów.”

Ronald A. Fisher (Fisher, 1935, s. 16)

Testy permutacyjne są stosunkowo rzadko stosowane w badaniach ekonomicznych. Trudno zrozumieć taką sytuację, ponieważ mają one wiele zalet w stosunku do klasycznych testów parametrycznych i nieparametrycznych. Testy parametryczne wymagają spełnienia założeń dotyczących postaci analizowanego rozkładu – najczęściej jest to rozkład normalny. W praktyce badań ekonomicznych często trudno jest o spełnienie tego wymogu. Eden & Yates (1933) analizowali zastosowanie testu z Fishera na rzeczywistych danych o rozkładzie skośnym wskazując na ograniczenia tego testu. Miało to istotne znaczenie dla praktyki eksperymentów rolniczych i statystyki stosowanej. Jednak rozkłady skośne występują nie tylko w danych przyrodniczych, ale także często w różnych dyscyplinach naukowych, w szczególności w zagadnieniach dotyczących ekonomii i finansów. Klasyczne testy nieparametryczne charakteryzują się zwykle mniejszą mocą, a w związku z tym do skutecznego wnioskowania wymagane są próby o większej liczebności. Testy permutacyjne, które także zaliczane są do metod nieparametrycznych, oparte są na modelu Fishera-Pitmana, który znacznie różni się od modelu Neymana-Pearsona wykorzystywanego w klasycznym wnioskowaniu statystycznym. Testy permutacyjne są wolne od większości założeń towarzyszących zastosowaniom testów parametrycznych.

Testy permutacyjne znajdują szerokie zastosowanie w analizie statystycznej, szczególnie w sytuacjach, gdy nie są spełnione założenia klasycznych metod parametrycznych lub gdy badacz dysponuje próbami o małych liczebnościach. Metody te pozwalają na precyzyjną weryfikację istotności różnic w strukturach populacji bez konieczności odwoływania się do rozkładów asymptotycznych, co czyni je kluczowym narzędziem przy ograniczonych zbiorach danych (Kończak & Kosińska, 2023). Szczególnie przydatne są w nalizach wyników eksperymentów losowych [zlotos2019]. Są one efektywnie wykorzystywane w analizie danych jakościowych, umożliwiając testowanie złożonych hipotez kierunkowych (Bonnini & Borghesi, 2025; Kończak, 2012; Polko & Kończak, 2016) oraz przeprowadzanie testów dla danych w wielowymiarowych tablicach wielodzielczych (Kończak & Chmielińska, 2013; Kończak & Kosińska, 2025). Ponadto podejście to sprawdza się w badaniu istnienia i siły współzależności między zmiennymi, oferując odporną alternatywę dla tradycyjnych testów asocjacji (Kończak, 2020a). Metody permutacyjne mogą być z powodzeniem stosowane w analizie danych pochodzących z eksperymentów ekonomicznych (Złotoś, 2025).

W badaniach ekonomicznych i społecznych metody te są cenione za możliwość kompleksowego porównywania populacji wielowymiarowych (Polko-Zając, 2021) oraz weryfikację jednorodności danych, co jest istotne dla zapewnienia jakości wnioskowania (Polko & Kończak, 2016). Testy permutacyjne wykazują dużą użyteczność przy porównywaniu parametrów położenia w grupach o niejednorodnych wariancjach (Mielke & Berry, 1994), a także pozwalają na testowanie równoważności (equivalence) przy wykorzystaniu procedur typu intersection-union (Arboretti i in., 2018). Ich elastyczność widoczna jest w praktycznych zastosowaniach socjoekonomicznych, takich jak ocena wpływu pandemii na aktywność w wydarzeniach kulturalnych, gdzie służą do analizy zmian w strukturach odpowiedzi respondentów (Kosińska, 2023).

W rozdziale przedstawiono kluczowe różnice pomiędzy modelami wnioskowania populacyjnym (Neymana-Pearsona) i permutacyjnym (Fishera-Pitmana). Szczególną uwagę zwrócono na bardzo rzadko stosowany, zwłaszcza w naukach ekonomicznych, model permutacyjny. Przedstawiono zasady wnioskowania w tym modelu, wybrane pakiety programu R pozwalające na weryfikację hipotez w modelu permutacyjnym oraz sposoby wizualizacji wyników takiego wnioskowania.

5.1 Dwa modele wnioskowania statystycznego

Model populacyjny Neymana-Pearsona

Model wnioskowania statystycznego został zaproponowany przez Jerzego Neymana i Egona Pearsona (Neyman & Pearson, 1933). Wnioskowanie w tym modelu opiera się na lemacie Neymana-Pearsona, który stanowi matematyczną podstawę konstrukcji testów statystycznych dla prostych hipotez. Lemat ten wskazuje, że dla zadanego poziomu istotności \(\alpha\) (poziomu błędu I rodzaju) test oparty na ilorazie wiarygodności (likelihood ratio) jest testem o największej mocy spośród wszystkich testów tego samego poziomu istotności.

W modelu populacyjnym określa się hipotezy \(H_0\) (hipoteza zerowa) i \(H_1\) (hipoteza alternatywna). W tym modelu przyjmuje się, że próba została pobrana losowo z określonej populacji o zadanym rozkładzie. Rozróżnia się dwa typy błędów - I rodzaju (odrzucenie hipotezy \(H_0\), gdy jest ona prawdziwa) i II rodzaju (brak decyzji o odrzuceniu hipotezy \(H_0\), gdy jest ona fałszywa).

Model permutacyjny Fishera-Pitmana

Model wnioskowania statystycznego został wprowadzony przez Ronalda Aylmera Fishera (Fisher, 1925) i sformalizowany przez Edwina Jamesa George Pitmana (Pitman, 1937a, 1937b). Nieco wcześniej model permutacyjny, który jest podstawą wnioskowania permutacyjnego, został zastosowany do analizy wyników doświadczeń polowych przez Jerzego Spławę-Neymana (Spława-Neyman, 1923). Model opiera się na wykorzystaniu permutacji etykiet obserwacji. Nie wymaga założenia dotyczącego postaci (typu) rozkładu, może być stosowany także dla prób nielosowych.

Model permutacyjny wnioskowania statystycznego charakteryzuje się wieloma zaletami w stosunku do klasycznego modelu populacyjnego Neymana-Pearsona. Jest bardziej elastyczny i może być stosowany w sytuacjach, gdzie klasyczne modele parametryczne są nieodpowiednie. Wnioskowanie w modelu permutacyjnym opiera się wyłącznie na pobranych danych (Berry i in., 2014; Kończak, 2016), nie zakłada się postaci rozkładu badanej zmiennej. Pozwala w szczególności na przeprowadzenie wnioskowania statystycznego nawet w sytuacjach, gdy Kończak (2020b):

  • nie jest znana postać rozkładu analizowanych zmiennych,

  • pobrano próby o niewielkich liczebnościach,

  • próby nie są losowe.

Choć losowość próby nie jest wymagana do przeprowadzenia testów permutacyjnych, to jednak jej brak uniemożliwia uogólnienie wyników na całą populację. Uzyskane wyniki mogą być odniesione wyłącznie do analizowanych zbiorów danych.

Ogólne zasady wnioskowania w modelu permutacyjnym przedstawiają m.in. Berry i in. (2021), Good (2006b), Good (2013) oraz Bonnini i in. (2014).

W naukach ekonomicznych bardzo często trudno utrzymać założenie o normalności badanych zmiennych. Przykłady zastosowań w naukach ekonomicznych przedstawiają m.in. Moore (2011), Złotoś (2020) i Kosińska (2025) .

Zastosowania testów permutacyjnych dla danych wielowymiarowych i złożonych przedstawiają m.in. Pesarin (2001), Pesarin & Salmaso (2010) i Polko-Zając (2021).

W dalszej części tego rozdziału omówione zostaną zasady stosowania testów permutacyjnych i wskazane odpowiednie narzędzia.

5.2 Wybrane pakiety środowiska R wspomagające wnioskowanie permutacyjne

W środowisku R jest wiele pakietów pozwalających na przeprowadzenie wnioskowania statystycznego w modelu permutacyjnym. Dla przeprowadzenia testów permutacyjnych niezbędne jest załadowanie odpowiednich pakietów. Realizuje to poniższy kod.

library(wPerm)
library(coin)
library(perm)
library(resample)
library(exactRankTests)
library(mosaic)
library(infer)

library(ggplot2)
library(dplyr)
library(tidyverse)

W poniższych analizach uwaga zostanie skoncentrowana na funkcjach pakietu wPerm. Pozostałe pakiety zostaną w sposób zwięzły przedstawione w dalszej części.

5.2.1 Pakiet wPerm

Pakiet wPerm (Weiss, 2015) w środowisku R pozwala na przeprowadzanie ważonych testów permutacyjnych. Testy te są szczególnie przydatne w analizie danych pochodzących z badań społecznych, w których często stosuje się złożone schematy doboru próby, a każda jednostka otrzymuje określoną wagę odzwierciedlającą jej reprezentatywność w populacji. Uwzględnienie wag w procedurze testowania pozwala na uzyskanie wyników o większej zgodności z rzeczywistą strukturą populacji, co pozwala na zmniejszenie błędów wnioskowania statystycznego. Pakiet wPerm zapewnia także standardową wizualizację wyników testowania permutacyjnego.

Test dla dwóch prób niezależnych

Test dla wartości oczekiwanych oraz median w dwóch populacjach zostanie przedstawiony na przykładzie danych generowanych z rozkładów normalnych o różnych wartościach oczekiwanych. Hipotezy można zapisać następująco:

  • dla wartości oczekiwanych

\(H_0: \mu_X = \mu_Y\)

\(H_1: \mu_X \ne \mu_Y\)

  • dla median

\(H_0: Me_X = Me_Y\)

\(H_1: Me_X \ne Me_Y\)

set.seed(123)
dane <- data.frame(
  x = c(rchisq(10, df=1), rchisq(10, df = 5)),
  grupa = rep(c("kontrola", "eksperyment"), each = 10))
perm.ind.loc(dane$x, dane$grupa, mean)
perm.ind.loc(dane$x, dane$grupa, median)
# 
# 
#  RESULTS OF PERMUTATION INDEPENDENT TWO-SAMPLE LOCATION TEST
#  BASED ON 9999 REPLICATIONS 
# 
#     SUMMARY Variable       Pop.1    Pop.2 n.1 n.2 Statistic Observed
#  STATISTICS        x eksperyment kontrola  10  10 diff.mean 2.005029
# 
#  HYPOTHESIS      Null Alternative P.value
#        TEST identical     shifted  0.0102
Rysunek 5.1. Wyniki testu permutacyjnego dla równości wartosci oczekiwanych dla prób niezależnych. Histogram rozkładu permutacyjnego
# 
# 
#  RESULTS OF PERMUTATION INDEPENDENT TWO-SAMPLE LOCATION TEST
#  BASED ON 9999 REPLICATIONS 
# 
#     SUMMARY Variable       Pop.1    Pop.2 n.1 n.2   Statistic Observed
#  STATISTICS        x eksperyment kontrola  10  10 diff.median 2.910802
# 
#  HYPOTHESIS      Null Alternative P.value
#        TEST identical     shifted   0.004
Rysunek 5.2. Wyniki testu permutacyjnego dla równości median dla prób niezależnych. Histogram rozkładu permutacyjnego

W powyższym kodzie wykorzystano funkcję perm.ind.loc z pakietu wPerm, która realizuje test permutacyjny, sprawdzając istotność różnic między grupami odpowiednio dla średniej (mean) i mediany (median). Wyniki tych testów pozwalają ocenić, czy zaobserwowane różnice pomiędzy grupami są statystycznie istotne. Nie jest wymagane założenie normalności badanych zmiennych, co sprawia, że jest to skuteczne narzędzie w analizie różnic międzygrupowych. Dla uzyskania wyłącznie \(p\)-wartości można wykonać komendy:

perm.ind.loc(dane$x, dane$grupa, mean)$p.value
# [1] 0.0098
perm.ind.loc(dane$x, dane$grupa, median)$p.value
# [1] 0.0022

Na rys. 5.1 i rys. 5.2 przedstawiono wizualizację wyników testu permutacyjnego dla porównania odpowiednio: wartości pzreciętnych i median. Na wykresach zaznaczone zostały wartości statystyki testowej. Wyniki zamieszczone pod wykresami w obu przypadkach prowadzą do odrzucenia hipotezy \(H_0\).

Test dla dwóch prób zależnych

Niekiedy przeprowadzane jest porównanie charakterystyk (np. wartości oczekiwanych) w dwóch grupach dla prób sparowanych. Jest tak np. wówczas, gdy dla tej samej jednostki obserwacji dokonywane są dwa pomiary.

Wyniki oceny przed i po kursie dla tej samej grupy studentów (x - liczba punktów przed kursem, y - liczba punktów po kursie).

Porównano 10 studentów, a ich wyniki przedstawiono w poniższym kodzie. 7 poprawiło swoje wyniki, 2 uzyskało identyczne wyniki, a jeden nieznacznie obniżył wynik. Celem jest sprawdzenie, czy przeprowadzenie kursu poprawiło przeciętne wyniki studentów.

Hipotezy przyjmują następującą postać:

\(H_0: \mu_X = \mu_Y\)

\(H_1: \mu_X \ne \mu_Y\)

x <- c(65, 70, 72, 60, 75, 80, 68, 73, 62, 78)
y <- c(70, 70, 80, 60, 73, 85, 75, 74, 66, 80)

perm.paired.loc(x, y, mean, alternative='less')
# 
# 
#  RESULTS OF PERMUTATION PAIRED LOCATION TEST
#  BASED ON 9999 REPLICATIONS 
# 
#     SUMMARY Pop.1 Pop.2  n Statistic Observed
#  STATISTICS     x     y 10 diff.mean       -3
# 
#  HYPOTHESIS      Null  Alternative P.value
#        TEST identical shifted.left  0.0159
Rysunek 5.3. Wyniki testu permutacyjnego dla prób zależnych. Histogram rozkładu permutacyjnego

Powyższy kod prezentuje zastosowanie testu permutacyjnego dla prób zależnych (sparowanych), gdzie porównuje się dwie serie pomiarów uzyskane dla tych samych jednostek, np. w dwóch okresach czasowych. Funkcja perm.paired.loc umożliwia ocenę, czy średnia różnica pomiędzy parami obserwacji jest istotnie mniejsza od zera (alternative=‘less’). W omawianym przypadku test potwierdził. że przeciętne rezultaty po zakończeniu kursu są lepsze niż przed kursem \((p\)-wartość < \(\alpha)\). Wizualizacja wyników testu została przedstawiona na rys. 5.3.

Test permutacyjny dla prób zależnych jest szczególnie zalecany, gdy nie można założyć normalności rozkładu różnic lub gdy liczba obserwacji jest niewielka, a klasyczny test \(t\) dla prób zależnych mógłby prowadzić do błędnych wniosków.

Test niezależności chi-kwadrat

Test niezależności chi-kwadrat stosuje się do weryfikacji hipotezy o braku zależności między dwiema zmiennymi jakościowymi. W poniższym kodzie wykorzystano funkcję perm.ind.test realizująca permutacyjną wersję testu niezależności chi-kwadrat. Zastosowanie permutacyjnego testu niezależności nie wymaga spełnienia założenia o minimalnych licznościach oczekiwanych w komórkach minimum 5, jak to jest w klasycznym teście chi-kwadrat niezależności.

Zastosowanie testu zostanie przedstawione na przykładzie zbioru danych relig.and.ed z pakietu wPerm. Celem jest sprawdzenie, czy istnieje statystycznie istotny związek pomiędzy dwiema zmiennymi jakościowymi: poziomem religijności (RELIGIOUSITY) oraz poziomem wykształcenia (EDUCATION).

\(H_0:\) Poziom religijności i poziom wykształcenia są niezależne w badanej populacji.

Hipoteza ta oznacza, że rozkład religijności jest taki sam niezależnie od poziomu wykształcenia, i odwrotnie.

\(H_1:\) istnieje związek (zależność) między poziomem religijności a poziomem wykształcenia.

data("relig.and.ed")
tabela_relig_ed <- xtabs(COUNT ~ RELIGIOUSITY + EDUCATION, data = relig.and.ed)
tabela_relig_ed 
#                EDUCATION
# RELIGIOUSITY    Basic Secondary Advanced
#   Religious        77       149       78
#   Not religious    23        56       36
#   Atheist           8        24       29
#   Don't know        6        15        8
perm.ind.test(relig.and.ed, type = "flat", var.names = c("RELIGIOUSITY", "EDUCATION"), R = 9999)
# 
# 
#  RESULTS OF PERMUTATION INDEPENDENCE TEST
#  BASED ON 9999 REPLICATIONS 
# 
#     SUMMARY   Variable.1 Variable.2   n  Statistic Observed
#  STATISTICS RELIGIOUSITY  EDUCATION 509 chi.square 13.32231
# 
#  HYPOTHESIS          Null Alternative P.value
#        TEST nonassociated  associated  0.0363
Rysunek 5.4. Wizualizacja wyników testu permutacyjnego niezależności. Histogram rozkładu permutacyjnego

Powyższy wynik oznacza, że na podstawie tych danych można stwierdzić (por. rys. 5.4), że istnieje statystycznie istotny związek (asocjacja) między poziomem religijności a poziomem wykształcenia w badanej próbie (\(p\)-wartość < \(\alpha\)).

Zależności pomiędzy zmiennymi jakościowymi można zwizualizować odwołując się do wykresów mozaikowych (mosaic plot). Poniższy kod konstruuje wykres mozaikowy (rys. 6.38), który wizualizuje dane tabelaryczne dwu- lub wielowymiarowe (Friendly, 1994; Kończak, 2025).

plot(tabela_relig_ed , shade=TRUE)
Rysunek 5.5. Wizualizacja wyników testu permutacyjnego niezależności

Kolor prostokątów na wykresie inny niż biały wskazuje na występowanie statystycznie istotnych zależności pomiędzy zmiennymi. Niebieski prostokąt przedstawia liczbę osób o poziomie edukacji “Advanced” deklarujących się jako ateiści (“Atheist’). Osób tych jest więcej niż wskazują na to liczebności oczekiwane przy założeniu niezależności badanych zmiennych.

Test jednorodności chi-kwadrat

Zbiór self zawiera dane, w postaci tablicy kontyngencji, dotyczące samooceny niezależnych losowych próbek widzących i niewidomych nastolatków z Indii. Dla danych ze wskazanego zbioru zostanie przeprowadzony test jednorodności struktur. Zostanie zweryfikowana hipoteza głosząca, że samoocena w wyróżnionych grupach nastolatków ma tę samą strukturę.

Hipotezy mają następującą postać:

\(H_0:\) Samoocena w grupach nastolatków ma tę samą strukturę

\(H_1:\) Struktury samooceny w grupach nie są jednakowe.

Strukturę zbioru self można pokazać następująco:

data(self)
self
#   SIGHTEDNESS High Moderate Low
# 1     Sighted   13       73  14
# 2       Blind    3       40  17

Przeprowadzenie testu jednorodności struktur realizuje funkcja perm.hom.test.

perm.hom.test(self,"cont")
# 
# 
#  RESULTS OF PERMUTATION HOMOGENEITY TEST
#  BASED ON 9999 REPLICATIONS 
# 
#     SUMMARY   n  Statistic Observed
#  STATISTICS 160 chi.square 6.589323
# 
#  HYPOTHESIS        Null    Alternative P.value
#        TEST homogeneous nonhomogeneous  0.0364
Rysunek 5.6. Wizualizacja wyników testu chi-kwadrat jednorodności. Histogram rozkładu permutacyjnego

Wyniki testu wskazują, że przyjmując poziom istotności \(\alpha = 0,05\) należy odrzucić hipotezę \(H_0\) o jednorodności struktur (por. rys. 5.6), a więc można twierdzić, że struktury samooceny nastolatków w badanych grupach nie są jednakowe.

Test dla współczynnika korelacji

Testowanie współczynnika korelacji polega na weryfikacji, czy obserwowana zależność pomiędzy dwiema zmiennymi liczbowymi jest statystycznie istotna. Klasyczne testy istotności współczynnika korelacji, takie jak test \(t\) dla współczynnika Pearsona, zakładają m.in. normalność rozkładu badanych zmiennych i liniowość zależności. Gdy te założenia nie są spełnione lub próbka jest niewielka, alternatywą są testy permutacyjne, które nie wymagają tak restrykcyjnych założeń. Test permutacyjny polega na wielokrotnym losowym permutowaniu jednej z analizowanych zmiennych i wyznaczaniu rozkładu współczynnika korelacji Pearsona, Spearmana lub Kendalla przy założeniu słusznosci hipotezy zerowej o braku związku. Funkcja perm.relation w pakiecie wPerm umożliwia przeprowadzenie takiego testu zarówno dla klasycznego współczynnika Pearsona, jak i nieparametrycznych współczynników rangowych Spearmana i Kendalla, pozwalając na elastyczne dopasowanie testu do charakteru danych i postawionej hipotezy (np. alternatywa jednostronna: “greater”). Testy permutacyjne są szczególnie zalecane, gdy dane są obciążone wartościami odstającymi, nie mają rozkładu normalnego lub zależność nie jest liniowa, a także w sytuacjach, gdy liczebność próby jest mała i klasyczne testy mogą zawodzić.

Dla danych ze zbioru cars zweryfikowana zostanie hipoteza o niezależności zmiennych speed oraz dist, wobec hipotezy alternatywnej, że występuje zależność dodatnia. Hipotezy można zapisać:

\[H_0: \rho = 0\]

wobec hipotezy alternatywnej:

\[H_1: \rho > 0.\]

Poniższy kod przedstawia weryfikację hipotezy dla współczynnika korelacji liniowej Pearsona, rang Spermana oraz rang Kendalla.

attach(cars)
perm.relation(speed, dist, alternative = "greater")
# 
# 
#  RESULTS OF PERMUTATION RELATIONSHIP TEST
#  BASED ON 9999 REPLICATIONS 
# 
#     SUMMARY Variable.1 Variable.2  n   Statistic  Observed
#  STATISTICS      speed       dist 50 pearson.cor 0.8068949
# 
#  HYPOTHESIS        Null  Alternative   P.value
#        TEST no.relation pos.relation P < 0.001
perm.relation(speed, dist, "kendall", "greater")
# 
# 
#  RESULTS OF PERMUTATION RELATIONSHIP TEST
#  BASED ON 9999 REPLICATIONS 
# 
#     SUMMARY Variable.1 Variable.2  n   Statistic  Observed
#  STATISTICS      speed       dist 50 kendall.cor 0.6689901
# 
#  HYPOTHESIS        Null  Alternative   P.value
#        TEST no.relation pos.relation P < 0.001
perm.relation(speed, dist, "spearman", "greater")
# 
# 
#  RESULTS OF PERMUTATION RELATIONSHIP TEST
#  BASED ON 9999 REPLICATIONS 
# 
#     SUMMARY Variable.1 Variable.2  n    Statistic  Observed
#  STATISTICS      speed       dist 50 spearman.cor 0.8303568
# 
#  HYPOTHESIS        Null  Alternative   P.value
#        TEST no.relation pos.relation P < 0.001
Rysunek 5.7. Wizualizacja wyników testu dla współczynnika korelacji liniowej Pearsona. Histogram rozkładu permutacyjnego
Rysunek 5.8. Wizualizacja wyników testu dla współczynnika korelacji liniowej Pearsona. Histogram rozkładu permutacyjnego
Rysunek 5.9. Wizualizacja wyników testu dla współczynnika korelacji liniowej Pearsona. Histogram rozkładu permutacyjnego

Wyniki pozwalają ocenić, czy obserwowana korelacja jest istotnie większa od zera, bez konieczności spełniania restrykcyjnych założeń klasycznych testów parametrycznych.

Na rys. 5.7 - rys. 5.9 przedstawiono rozkłady empiryczne współczynników korelacji odpowiednio: liniowej Pearsona, rang Spearmana i rang Kendalla. We wszystkich tych przypadkach wartość współczynnika z pierwotnych danych znajduje się poza wyświetlanym zakresem na OX. We wszystkich trzech przypadkach należy odrzucić hipotezę \(H_0\) na rzecz hipotezy alternatywnej.

5.2.2 Pakiet coin

Pakiet coin (Hothorn i in., 2006) to narzędzie do przeprowadzania nieparametrycznych testów permutacyjnych. Został zaprojektowany w celu zapewnienia ujednoliconego podejścia do szerokiej gamy tych testów dla różnych typów danych.

Funkcja oneway_test() z pakietu coin służy do nieparametrycznego testowania różnic między kilkoma niezależnymi grupami (układ jednoczynnikowy), jako alternatywa dla klasycznego jednoczynnikowego ANOVA. Jest to pomocne narzędzie w analizie permutacyjnej, pozwalające na precyzyjne wnioskowanie bez konieczności odwoływania się do teoretycznych rozkładów.

Warunkowy rozkład zerowy statystyki testowej może być przybliżony przez jej rozkład asymptotyczny („asymptotic” - parametr domyślny) lub poprzez ponowne próbkowanie Monte Carlo („approximate”). Dla jednowymiarowych testów dla dwóch prób możliwe jest ustawienie parametru „exact” powodujące wyznaczenie dokładnego rozkładu.

Kolejne dwa przykłady kodu pozwalają na przeprowadzenie testów permutacyjnych dla porównania wartości oczekiwanych na podstawie:

  • dwóch prób,
  • trzech lub większej liczby prób.
oneway_test(mpg~factor(am) , data = mtcars, alternative='less')
# 
#   Asymptotic Two-Sample Fisher-Pitman Permutation Test
# 
# data:  mpg by factor(am) (0, 1)
# Z = -3.3397, p-value = 0.0004193
# alternative hypothesis: true mu is less than 0

Wyniki testu wskazują, że należy odrzucić hipotezę \(H_0\), a więc można twierdzić, że przeciętna liczba mil przejechanych na galonie paliwa dla samochodów z automatyczną skrzynią biegów jest mniejsza niż dla samochodów z ręczną skrzynią biegów.

Dla porównania danych z trzech lub większej liczby prób można wykorzystać tę samą funkcję, jak przedstawiono poniżej.

oneway_test(mpg~factor(cyl) , data = mtcars)
# 
#   Asymptotic K-Sample Fisher-Pitman Permutation Test
# 
# data:  mpg by factor(cyl) (4, 6, 8)
# chi-squared = 22.706, df = 2, p-value = 1.173e-05

Wyniki testu wskazują, że należy odrzucić hipotezę \(H_0\), a więc można twierdzić, że przeciętna liczba mil przejechanych na galonie paliwa w trzech grupach wyróżnionych ze wzgledu na liczbę cylindrów nie jest jednakowa.

dane <- data.frame(
  x = c(1.32, 1.04, 1.45, 1.38, 1.91, 1.64, 0.73, 1.46, 1.15, 0.88, 0.90, 0.74, 0.91),
  grupa = factor(rep(c("A", "B"), c(8, 5))))
oneway_test(x~grupa , data = dane)
# 
#   Asymptotic Two-Sample Fisher-Pitman Permutation Test
# 
# data:  x by grupa (A, B)
# Z = 2.1555, p-value = 0.03112
# alternative hypothesis: true mu is not equal to 0
oneway_test(x~grupa , data = dane, distribution = "exact")
# 
#   Exact Two-Sample Fisher-Pitman Permutation Test
# 
# data:  x by grupa (A, B)
# Z = 2.1555, p-value = 0.02642
# alternative hypothesis: true mu is not equal to 0

5.2.3 Pakiet perm

Pakiet perm (Fay & Shaw, 2010) w R jest przeznaczony do przeprowadzania dokładnych (exact) lub asymptotycznych testów permutacyjnych. Jego głównym celem jest umożliwienie użytkownikowi wykonywania testów permutacyjnych dla dwóch prób, wielu prób oraz testów trendu, z szerokim wyborem metod wyznaczania \(p\)-wartości.

Dla porównania dwóch lub większej liczby prób niezależnych należy skorzystać odpowiednio z funkcji permTS oraz permKS. Poniższy kod przedstawia porównanie przeciętnej liczby mil przejechanej na galonie paliwa w samochodach z automatyczną i ręczna skrzynią biegów (dwie próby) oraz dla 4, 6 i 8 cylindów (3 próby):

permTS(mpg~am,data=mtcars,alternative="less",method="pclt")
# 
#   Permutation Test using Asymptotic Approximation
# 
# data:  mpg by am
# Z = -3.3397, p-value = 0.0004193
# alternative hypothesis: true mean am=0 - mean am=1 is less than 0
# sample estimates:
# mean am=0 - mean am=1 
#             -7.244939
permKS(mpg~cyl,data=mtcars,method="pclt")
# 
#   K-Sample Asymptotic Permutation Test
# 
# data:  mpg by cyl
# Chi Square = 22.706, df = 2, p-value = 1.173e-05

W obu przedstawionych przypadkach należy odrzucić hipotezę \(H_0\), na rzecz hipotezy alternatywnej, a więc w wyróżnionych grupach przeciętna liczba mil przejechanych na galonie paliwa nie jest jednakowa.

5.2.4 Pakiet resample

Pakiet resample (Hesterberg, 2022) jest przeznaczony m.in do przeprowadzenia testów bootstrapowych i permutacyjnych. Pakiet oferuje łatwą i czytelną składnię. Jest to narzędzie, które ułatwia szacowanie rozkładów próbkowania statystyk i testowanie hipotez bez sztywnych założeń o rozkładzie danych, co jest często wymagane w klasycznych testach parametrycznych.

Dla sprawdzenia, czy przeciętna liczba mil przejechanych na galonie paliwa dla samochodów z ręczną i automatyczną skrzynią biegów jest jednakowa, wobec hipotezy alternatywnej głoszącej, że liczba mil przejechanych na galonie paliwa samochodami wyposażonymi w automatyczną skrzynię biegów jest mniejsza niż w samochodach wyposażonych w ręczną skrzynię biegów. w pakiecie resample należy wykonać test:

x1=mtcars$mpg[mtcars$am==0]
x2=mtcars$mpg[mtcars$am==1]
permutationTest2(x1, data2 = x2, mean, alternative='less',R=999)
# Call:
# permutationTest2(data = x1, statistic = mean, data2 = x2, R = 999, 
#     alternative = "less")
# Replications: 999
# Two samples, sample sizes are 19 13
# 
# Summary Statistics for the difference between samples 1 and 2:
#              Observed       Mean Alternative PValue
# mean: x1-x2 -7.244939 0.02931474        less  0.001

Otrzymane wyniki prowadzą do odrzucenia hipotezy \(H_0\), a więc można twierdzić, że przeciętna liczba mil przejechanych na galonie paliwa dla samochodów z automatyczną skrzynią biegów jest mniejsza niż dla samochodów z ręczną skrzynią biegów.

5.2.5 Pakiet exactRankTests

Pakiet exactRankTests (Hothorn & Hornik, 2022) pozwala na obliczanie dokładnych rozkładów dla testów rangowych i permutacyjnych. Umożliwia uzyskanie precyzyjnych \(p\)-wartości, zwłaszcza w sytuacjach, gdy standardowe testy parametryczne nie mogą być zastosowane ze względu naruszenia założeń (np. braku normalności rozkładu danych). Dostępna w pakiecie funkcja perm.test pozwala na weryfikację hipotezy o równości wartości oczekiwanych dla danych niezależnych i sparowanych. W tym punkcie przedstawiono dwa takie przykłady.

Poniższy kod prowadzi do weryfikacji hipotezy o równości wartości oczekiwanych liczby mil przejechanych na galonie paliwa w samochodach z ręczną i automatyczną skrzynią biegów.

x=mtcars$mpg[mtcars$am==0]
y=mtcars$mpg[mtcars$am==1]
perm.test( y,x, conf.int=TRUE, exact=TRUE)
# 
#   2-sample Permutation Test (scores mapped into 1:(m+n) using rounded
#   scores)
# 
# data:  y and x
# T = 246, p-value = 0.0003442
# alternative hypothesis: true mu is not equal to 0
# 95 percent confidence interval:
#   4.80000 14.71429

Należy odrzucić hipotezę \(H_0\) głoszącą, że przeciętna liczba mil przejechanych na galonie paliwa jest jednakowa dla samochodów z ręczną i automatyczną skrzynią biegów.

Poniższy kod pozwala na weryfikację podobnej hipotezy dla danych sparowanych.

x <- c(65, 70, 72, 60, 75, 80, 68, 73, 62, 78)
y <- c(70, 70, 80, 60, 73, 85, 75, 74, 66, 80)
perm.test(x, y, paired=TRUE, exact=TRUE) 
# 
#   1-sample Permutation Test
# 
# data:  x and y
# T = 2, p-value = 0.03125
# alternative hypothesis: true mu is not equal to 0

Ponieważ \(p\)-wartość \(< \alpha\), to należy odrzucić hipotezę \(H_0\) o równości wartości oczekiwanych, a więc można twierdzić, że wartości oczekiwane w badanych populacjach nie są jednakowe.

5.2.6 Pakiet mosaic

Pakiet mosaic to biblioteka języka R zaprojektowana do przeprowadzania analizy danych w sposób spójny, prosty i „formułowy” (Pruim i in., 2017). Jej ideą jest ujednolicenie interfejsu wielu operacji statystycznych (opis, wizualizacja danych, wnioskowanie statystyczne, symulacje) w jeden schemat oparty na notacji formułowej y ~ x.

W kodzie zrealizowany jest jednostronny test permutacyjny dla współczynnika korelacji liniowej Pearsona na danych ze zbioru cars, sprawdzając istotność zależności między prędkością a drogą hamowania. Jako statystyka testowa T przyjęty jest współczynnik korelacji liniowej. Na wstępie obliczana jest wartość z rzeczywistych danych (\(T_0\)), po czym generowany jest empiryczny rozkład zerowy poprzez 10 000-krotne losowe przetasowanie wartości zmiennej dist, co symulowało sytuację braku zależności między zmiennymi. Na tej podstawie wyznaczono p-wartość (ASL) jako frakcję permutacji dających wynik równy lub wyższy od obserwowanego. Wyniki zilustrowano histogramem rozkładu symulacyjnego, na którym czerwoną linią zaznaczono wartość statystyki obserwowanej, aby wizualnie ocenić jej nietypowość na tle rozkładu otrzymanego przy założeniu hipotezy \(H_0\) (rys. 5.10).

library(mosaic)
T0 <- cor(cars$speed, cars$dist)
T <- do(10000) * cor(cars$speed, shuffle(cars$dist))
ASL <- mean(T >= T0)
cat("n =", nrow(cars), "| r =", round(T0, 3), "| p =", ASL, "\n")
# n = 50 | r = 0.807 | p = 0
histogram(~ T, 
          xlim=c(-.9,0.9),
          xlab = "T",
          v = T0,
          col = "lightblue" ,
          par.settings = list(add.line = list(col = "red", lwd = 2)))
Rysunek 5.10. Wartość statystyki testowej T0 i symulacyjniy rozkład statystyki T przy założeniu hipotezy \(H_0\)

Uzyskany rezultat prowadzi do odrzucenia hipotezy \(H_0\). Można twierdzić, że występuje zależność pomiędzy prędkościa a odległością do zatrzymania samochodu.

5.2.7 Pakiet infer

Pakiet infer (Couch i in., 2021) umożliwia przeprowadzanie testów statystycznych opartych na permutacjach i resamplingu w ramach spójnego interfejsu. Pozwala na testowanie hipotez dotyczących związków między zmiennymi, różnic pomiędzy grupami czy dla wartości parametru populacji, bez konieczności przyjmowania silnych założeń teoretycznych. Pakiet ten szczególnie dobrze sprawdza się w sytuacjach, gdy użytkownik chce samodzielnie określić sposób losowania przy założeniu słuszności \(H_0\), co daje dużą kontrolę nad całym procesem wnioskowania statystycznego.

Poniżej przedstawiono realizację testu par w oparciu o pakiet infer. Na przykładzie umownych danych przeprowadzono test permutacyjny dla równości wartości oczekiwanych, a następnie wyznaczono rozkład bootstrapowy różnic i bootstrapowy przedział ufności dla różnicy.

library(infer)
library(ggplot2)
x1 <- c(65, 70, 72, 60, 75, 80, 68, 73, 62, 78)
x2 <- c(70, 70, 80, 60, 73, 85, 75, 74, 66, 80)
dane <- data.frame(
  id = 1:length(x1),
  g1 = x1,
  g2 = x2
) %>%
  pivot_longer(cols = -id, names_to = "grupa", values_to = "x")

wyniki <- dane %>%
  specify(x ~ grupa) %>%        # Definicja zmiennych
  hypothesize(null = "independence") %>%
  generate(reps = 1000, type = "permute") %>%
  calculate(stat = "diff in means", order = c("g1", "g2")) 

T0 <- dane %>%
  specify(x ~ grupa) %>%
  calculate(stat = "diff in means", order = c("g1", "g2"))
ASL <- get_p_value(wyniki, obs_stat = T0, direction = "both")

paste0("Obserwowana różnica średnich:", T0$stat)
# [1] "Obserwowana różnica średnich:-3"
paste0("ASL: ", ASL)
# [1] "ASL: 0.416"

Metody permutacje są wykorzystywane głównie do weryfikacji hipotez statystycznych, natomiast metody bootstrapowe do budowy przedziałów ufności dla parametrów populacji i oszacowania wariancji estymatorów.

Pakiet infer umożliwia także wyznaczanie przedziałów ufności. Dla konstrukcji przedziałów ufności wykorzystywana jest metoda bootstrap. Może to być zrealizowane następująco:

różnice <- x2 - x1
dane <- data.frame(diff = różnice)

boot_diffs <- dane %>%
  specify(response = diff) %>%
  generate(reps = 5000, type = "bootstrap") %>%
  calculate(stat = "mean")

ci <- boot_diffs %>%
  get_confidence_interval(level = 0.95, type = "percentile")

ggplot(boot_diffs, aes(x = stat)) +
  geom_histogram(binwidth = 0.2, fill = "blue", color = "white") +
  geom_vline(xintercept = ci$lower_ci, color = "red", linetype = "dashed") +
  geom_vline(xintercept = ci$upper_ci, color = "red", linetype = "dashed") +
  geom_vline(xintercept = mean(różnice), color = "black", linewidth = 1) +
  labs(title = "",subtitle = paste0("95% CI: [", round(ci$lower_ci, 2), ", ", round(ci$upper_ci, 2), "]"),x = "Średnia różnica", y = "Liczebność" ) +
  theme_minimal()
Rysunek 5.11. Rozkład bootstrapowy średniej różnicy dla danych skojarzonych z zaznaczonym 95% przedziałem ufności

rys. 5.11 przedstawia bootstrapowy rozkład średniej różnicy dla danych skojarzonych. Na wykresie zaznaczono także przedział ufności dla różnicy średnich wyznaczony metodą bootstrapową oraz średnią różnicę z prób bootstrapowych.

Poniższy kod prowadzi do wyznaczenia przedziału ufności dla wartości oczekiwanej dla zmiennej mpg (zbiór mtcars).

boot_dist_mpg <- mtcars %>%
  specify(response = mpg) %>%
  generate(reps = 10000, type = "bootstrap") %>%
  calculate(stat = "mean")

# Wyznaczenie 95% przedziału ufności
ci_mpg <- boot_dist_mpg %>%
  get_confidence_interval(level = 0.95)
print(ci_mpg)
# # A tibble: 1 × 2
#   lower_ci upper_ci
#      <dbl>    <dbl>
# 1     18.1     22.2

Dla zwizualizowania wyniku można wykonać następujący kod:

p <- boot_dist_mpg %>%
  visualize() +
  shade_confidence_interval(endpoints = ci_mpg, fill = "lightblue", color = "red", lty=2, alpha = 0.5) 

p + labs(title = "", x = "Średnia mpg", y = "Liczba symulacji") +
  theme_minimal()
Rysunek 5.12. Rozkład bootstrapowy średniej mpg z zaznaczonym 95% przedziałem ufności
mtcars_df <- mtcars %>%
  mutate(am = factor(am, levels = c(0, 1), labels = c("Automatyczna", "Ręczna")))

mpg_diff_obs <- mtcars_df %>%
  specify(mpg ~ am) %>%
  calculate(stat = "diff in means", order = c("Ręczna", "Automatyczna"))

null_distribution_mpg <- mtcars_df %>%
  specify(mpg ~ am) %>%
  hypothesize(null = "independence") %>% 
  generate(reps = 10000, type = "permute") %>% 
  calculate(stat = "diff in means", order = c("Ręczna", "Automatyczna")) 

p_value_mpg_independent <- null_distribution_mpg %>%
  get_p_value(obs_stat = mpg_diff_obs, direction = "both")

# Przedział ufności dla różnicy średnich (metodą bootstrapu, nie permutacyjną)

conf_int_mpg <- mtcars_df %>%
  specify(mpg ~ am) %>%
  generate(reps = 10000, type = "bootstrap") %>%
  calculate(stat = "diff in means", order = c("Ręczna", "Automatyczna")) %>%
  get_confidence_interval(level = 0.95, point_estimate = mpg_diff_obs)

paste0("Obserwowana różnica średnich (Ręczna - Automatyczna)dla mpg:", mpg_diff_obs$stat)
# [1] "Obserwowana różnica średnich (Ręczna - Automatyczna)dla mpg:7.24493927125506"
paste0("Empiryczna p-wartość (dwustronna):", p_value_mpg_independent$p_value)
# [1] "Empiryczna p-wartość (dwustronna):2e-04"
paste0("95% przedział ufności dla różnicy średnich (bootstrap):", conf_int_mpg$lower_ci, "do", conf_int_mpg$upper_ci)
# [1] "95% przedział ufności dla różnicy średnich (bootstrap):3.63488214285714do10.9820252912759"

Pakiet infer umożliwia czytelną wizualizację przedziału ufności dla różnicy wartości przeciętnych. Rozkład jest szacowany symulacyjnie w oparciu o próbkowanie bootstrapowe.

Należy sprawdzić, czy istnieje różnica w liczbie mil przejechanych na galonie paliwa (mpg) między samochodami z automatyczną a ręczną skrzynią biegów.

# Przygotowanie danych
mtcars2 <- mtcars %>%
  mutate(am = factor(am, labels = c("automat", "manual")))

# Bootstrapowanie różnicy średnich
bootstrap_dist <- mtcars2 %>%
  specify(mpg ~ am) %>%
  generate(reps = 1000, type = "bootstrap") %>%
  calculate(stat = "diff in means", order = c("manual", "automat"))

# Wyznaczenie przedziału ufności
ci <- bootstrap_dist %>%
  get_confidence_interval(level = 0.95, type = "percentile")

ggplot(bootstrap_dist, aes(x = stat)) +
  geom_histogram(binwidth = 0.5, fill = "blue", color = "white") +
  geom_vline(xintercept = ci$lower_ci, color = "red", linetype = "dashed") +
  geom_vline(xintercept = ci$upper_ci, color = "red", linetype = "dashed") +
  labs(title = "", subtitle = paste0("95% CI: [", round(ci$lower_ci, 2), ", ", round(ci$upper_ci, 2), "]"), x = "Różnica średnich", y = "Liczność") +
  theme_minimal()
Rysunek 5.13. Rozkład bootstrapowy różnicy średnich mpg z zaznaczonym 95% przedziałem ufności

Przedział ufności o końcach 3,58 i 10,9 (rys. 5.13) prawdopodobieństwem 0,95 obejmuje nieznaną rzeczywistą średnią liczbę mil przejechanych na galonie paliwa.

Arboretti, R., Carrozzo, E., Pesarin, F., & Salmaso, L. (2018). Testing for equivalence: An intersection-union permutation solution. arXiv, arXiv:1802.01877. https://doi.org/10.48550/arXiv.1802.01877
Berry, K. J., Johnston, J. E., & Mielke, P. W. (2019). A Primer of Permutation Statistical Methods. Springer International Publishing.
Berry, K. J., Johnston, J. E., & Mielke, P. W. Jr. (2014). A Chronicle of Permutation Statistical Methods. Springer International Publishing.
Berry, K. J., Kvamme, K. L., Johnston, J. E., & Mielke, P. W. (2021). Permutation Statistical Methods with R. Springer International Publishing. https://doi.org/10.1007/978-3-030-74361-1
Bonnini, S., & Borghesi, M. (2025). Multivariate two-sample permutation test with directional alternative for categorical data. Statistics in Transition New Series, 26(3), 181–194. https://doi.org/10.59139/stattrans-2025-033
Bonnini, S., Corain, L., Marozzi, M., & Salmaso, L. (2014). Nonparametric Hypothesis Testing. Rank and Permutation Methods with Applications in R. John Wiley & Sons, Ltd.
Couch, S. P., Bray, A. P., Ismay, C., Chasnovski, E., Baumer, B. S., & Çetinkaya-Rundel, M. (2021). infer: An R package for tidyverse-friendly statistical inference. Journal of Open Source Software, 6(65), 3661. https://doi.org/10.21105/joss.03661
Eden, T., & Yates, F. (1933). On the Validity of Fisher’s z Test When Applied to an Actual Example of Non-Normal Data. The Journal of Agricultural Science, 23, 6–17.
Fay, M. P., & Shaw, P. A. (2010). Exact and Asymptotic Weighted Logrank Tests for Interval Censored Data: The interval R Package. Journal of Statistical Software, 36(2), 1–34. https://doi.org/10.18637/jss.v036.i02
Fisher, R. A. (1925). Statistical Methods for Research Workers. Oliver; Boyd.
Fisher, R. A. (1935). The Design of Experiments. Hafner Press.
Friendly, M. (1994). Mosaic Display for Multi-Way Contingency Tables. Journal of the American Statistical Association, 89(425), 190–200.
Good, P. I. (2006a). Permutation, parametric, and bootstrap tests of hypotheses. (T. 64). Springer Science+Business Media, Inc. http://link.springer.com/10.1007/s00184-006-0088-1
Good, P. I. (2006b). Resampling methods: A practical guide to data analysis (3rd wyd.). Birkhäuser.
Good, P. I. (2013). Introduction to Statistics Through Resampling Methods and R: Good/Introduction to Statistics Through Resampling Methods and R. John Wiley & Sons, Inc. https://doi.org/10.1002/9781118497593
Hesterberg, T. (2022). resample: Resampling Functions. https://doi.org/10.32614/CRAN.package.resample
Hothorn, T., & Hornik, K. (2022). exactRankTests: Exact Distributions for Rank and Permutation Tests. https://doi.org/10.32614/CRAN.package.exactRankTests
Hothorn, T., Hornik, K., Wiel, M. A. van de, & Zeileis, A. (2006). A Lego system for conditional inference. The American Statistician, 60(3), 257–263. https://doi.org/10.1198/000313006X118430
Kończak, G. (2012). On testing multi-directional hypotheses in categorical data analysis. 20th International Conference on Computational Statistics (COMPSTAT 2012). Conference proceedings, 427–436.
Kończak, G. (2016). Teoretyczne podstawy zastosowania testów permutacyjnych. Prace Komisji Naukowych, 39-40, 88–91.
Kończak, G. (2020a). Applications of Permutation Methods in the Analysis of Associations. Argumenta Oeconomica Cracoviensia, 1(22), Article 1(22). https://doi.org/10.15678/AOC.2020.2203
Kończak, G. (2020b). Nieklasyczne metody statystyczne w badaniach ekonomicznych. Wydawnictwo Uniwersytetu Ekonomicznego w Katowicach.
Kończak, G. (2025). On a new goodness-of-fit test for multivariate normality with fixed parameters based on the David-Hellwig test idea. Statistics in Transition New Series, 26(4), 151–166. https://doi.org/10.59139/stattrans-2025-044
Kończak, G., & Chmielińska, M. (2013). Zastosowanie metod symulacyjnych w analizie wielowymiarowych tablic wielodzielczych. Zeszyty Naukowe Studia Ekonomiczne, 133, 133.
Kończak, G., & Kosińska, M. (2023). O testowaniu istotności różnic w strukturach populacji na podstawie prób o małych liczebnościach. Zeszyty Naukowe Uniwersytetu Ekonomicznego w Krakowie, 3(1001), 145–160. https://doi.org/10.15678/ZNUEK.2023.1001.0308
Kończak, G., & Kosińska, M. (2025). Use of permutation methods in testing the independence of variables in multidimensional contingency tables. Wiadomości Statystyczne. The Polish Statistician, 70(5), 1–15.
Kosińska, M. (2023). Wpływ pandemii COVID-19 na aktywność w wydarzeniach kulturalnych. Studia Ekonomiczne. Gospodarka-Społeczeństwo-Środowiski, 2(12), 61–73.
Kosińska, M. (2025). Nierówności dochodowe w państwach Unii Europejskiej. Zeszyty Naukowe Akademii Górnośląskiej, 35(11), 113–121.
Mielke, P. W., & Berry, K. J. (1994). Permutation Tests for Common Locations among Samples with Unequal Variances. Journal of Educational and Behavioral Statistics, 19(3), 217. https://doi.org/10.2307/1165295
Moore, D. S. (2011). The Practice of Statistics for Business and Economics. W. H. Freeman; Company.
Neyman, J., & Pearson, E. S. (1933). On the Problem of the Most Efficient Tests of Statistical Hypotheses. Philosophical Transactions of the Royal Society of London. Series A, Containing Papers of a Mathematical or Physical Character, 231(694-706), 289–337.
Pesarin, F. (2001). Multivariate permutation tests: With applications in biostatistics. J. Wiley.
Pesarin, F., & Salmaso, L. (2010). Permutation Tests for Complex Data. A John Wiley; Sons, Ltd.
Pitman, E. J. G. (1937a). Significance Tests Which May be Applied to Samples From any Populations. Supplement to the Journal of the Royal Statistical Society, 4, 119–130.
Pitman, E. J. G. (1937b). Significance tests which may be applied to samples from any populations: II. The correlation coefficient test. Supplement to the Journal of the Royal Statistical Society, 4, 225–232.
Polko, D., & Kończak, G. (2016). On Using Permutation Tests in the Data Homogeneity Analysis. W Knowledge—Economy—Society. Selected challenges for statistics in contemporary management sciences (s. 79–87). Foundation of the Cracow University of Economics.
Polko-Zając, D. (2021). Metody porównywania populacji w badaniach ekonomicznych. Wydawnictwo Uniwersytetu Ekonomicznego.
Pruim, R., Kaplan, D. T., & Horton, N. J. (2017). The mosaic Package: Helping Students to ’Think with Data’ Using R. The R Journal, 9(1), 77–102. https://journal.r-project.org/archive/2017/RJ-2017-024/index.html
Spława-Neyman, J. (1923). Próba uzasadnienia zastosowań rachunku prawdopodobieństwa do doświadczeń polowych. Roczniki Nauk Rolniczych, 10, 1–51.
Weiss, N. A. (2015). wPerm: Permutation Tests. https://doi.org/10.32614/CRAN.package.wPerm
Złotoś, M. (2020). On the use of permutation tests in the significance testing of response surface function parameters. Argumenta Oeconomica Cracoviensia, 22, 21–29. https://doi.org/10.15678/AOC.2020.2202
Złotoś, M. (2025). Wybrane metody planowania eksperymentów w badaniach ekonomicznych. Wydawnictwo Uniwersytetu Ekonomicznego w Katowicach. https://doi.org/10.22367/uekat.9788378759607