Słownik metodologiczny · Projekt badania

Randomizacja blokowa – jak działają bloki permutowane?

Randomizacja blokowa układa listę przydziałów z krótkich bloków, w których każde ramię ma tyle samo miejsc. Pokazujemy, jak działa, jak dobrać długość bloku, przykład w R, opis do pracy i ryzyko odgadywania przydziałów.

Strona główna / Słownik / Randomizacja blokowa
W skrócie: Randomizacja blokowa to losowy przydział z listy złożonej z bloków (np. po 4 osoby), w których każde ramię ma tyle samo miejsc w losowej kolejności. Liczebności grup różnią się w trakcie rekrutacji najwyżej o połowę długości bloku, ale przy stałej, znanej długości bloku część przydziałów da się odgadnąć.

Co to jest randomizacja blokowa?

Randomizacja blokowa (ang. block randomization, permuted blocks) to odmiana randomizacji, w której listę przydziałów składa się z krótkich bloków. W każdym bloku każde ramię ma tyle samo miejsc, a ich kolejność jest losowa. Przy dwóch ramionach i bloku długości 4 możliwych jest sześć układów, np. AABB, ABAB albo BAAB. Altman i Bland (1999) zwracają uwagę, że liczebności grup nie mogą się wtedy różnić o więcej niż połowę długości bloku – w żadnym momencie rekrutacji.

Długość bloku i przewidywalność

Randomizacja prosta, jak rzut monetą, w małej próbie łatwo daje nierówne grupy. Bloki pomagają, gdy próba jest mała, rekrutacja długa albo badanie może zostać przerwane wcześniej. Są też podstawą randomizacji warstwowej. Ceną jest przewidywalność: kto zna długość bloku i wcześniejsze przydziały, odgadnie część kolejnych. Schulz i Grimes (2002) zalecają więc losowo zmieniać długość bloków i używać dłuższych bloków, zwłaszcza w badaniu bez zaślepienia. Efird (2011) pokazuje, jak losowa długość bloków ogranicza błąd selekcji.

Przykład

Dla 40 osób wylosowano w R listę z bloków po 4 (początek: AABB BAAB ABBA). Różnica liczebności A − B w trakcie rekrutacji nie przekroczyła 2, a przy blokach losowej długości (4, 6 lub 8) – 3. Randomizacja prosta tych samych 40 miejsc dała 23 : 17, a po drodze różnica sięgnęła 9 osób. W symulacji 10 000 list osoba, która zna wcześniejsze przydziały i obstawia ramię z mniejszą liczbą osób, trafiała w 50.1% przy randomizacji prostej, w 70.8% przy blokach po 4 i w 67.7% przy blokach losowej długości. Przy stałych blokach po 4 i znanych granicach bloków 33.4% przydziałów było pewnych.

Jak opisać w pracy

Uczestników przydzielono losowo (1 : 1) do grupy eksperymentalnej albo kontrolnej za pomocą randomizacji blokowej z blokami losowej długości (4, 6 lub 8). Sekwencję wygenerowała w R osoba niezaangażowana w rekrutację; długość bloków nie była znana badaczom włączającym uczestników.

Na co uważać

  • Stała, znana długość bloku. W badaniu otwartym ułatwia zgadywanie, a losowa długość zmniejsza ten problem tylko częściowo.
  • Bloki to nie ukrycie przydziału. Jeśli osoba rekrutująca widzi listę, żadne bloki nie ochronią przed błędem selekcji – zob. ukrycie przydziału.
  • Bardzo długie bloki słabiej pilnują równowagi liczebności (Altman i Bland, 1999).

Pełne listy przydziału z blokami i warstwami pokazuje wpis Randomizacja w praktyce, a co podać w raporcie – Wytyczne raportowania STROBE, CONSORT i TRIPOD.

Przykład reprodukowalny

Randomizacja blokowa w R

Kod tworzy listy z bloków stałej i losowej długości, porównuje je z randomizacją prostą i symuluje, jak często osoba znająca wcześniejsze przydziały odgadnie kolejny.

Bloki po 4, bloki losowej długości i randomizacja prosta

Dane wejściowe: 40 miejsc na liście, dwa ramiona (A, B); symulacja 10 000 list (set.seed(4090)).

Co odczytać: zakres różnicy A − B w trakcie rekrutacji, podział przy randomizacji prostej, odsetek trafionych przydziałów i odsetek przydziałów pewnych przy stałych blokach.

R
# Randomizacja blokowa: 40 osób, dwa ramiona (A, B), bloki stałe po 4 i bloki losowej długości (4, 6, 8)
set.seed(4090)
bloki <- function(n, dlugosci) {                     # lista przydziałów z bloków permutowanych
  wynik <- character(0)
  while (length(wynik) < n) {
    k <- if (length(dlugosci) == 1) dlugosci else sample(dlugosci, 1)
    wynik <- c(wynik, sample(rep(c("A", "B"), k / 2)))
  }
  wynik[1:n]
}
stale <- bloki(40, 4)
losowe <- bloki(40, c(4, 6, 8))
prosta <- sample(c("A", "B"), 40, replace = TRUE)
paste(stale[1:12], collapse = "")                    # trzy pierwsze bloki po 4
roznica <- function(g) cumsum(ifelse(g == "A", 1, -1))   # A − B po każdej kolejnej osobie
rbind(stale = range(roznica(stale)), losowe = range(roznica(losowe)), prosta = range(roznica(prosta)))
table(prosta)

# Przewidywalność: rekrutujący zna przydziały dotychczasowych osób i obstawia ramię,
# które ma dotąd mniej osób (przy remisie losuje); 10 000 list po 40 osób
zgadnij <- function(g) {
  trafienia <- logical(length(g))
  for (i in seq_along(g)) {
    d <- sum(g[seq_len(i - 1)] == "A") - sum(g[seq_len(i - 1)] == "B")
    typ <- if (d > 0) "B" else if (d < 0) "A" else sample(c("A", "B"), 1)
    trafienia[i] <- typ == g[i]
  }
  mean(trafienia)
}
sym <- replicate(10000, c(prosta = zgadnij(sample(c("A", "B"), 40, replace = TRUE)),
                          stale4 = zgadnij(bloki(40, 4)),
                          losowe468 = zgadnij(bloki(40, c(4, 6, 8)))))
round(rowMeans(sym), 3)                              # odsetek trafionych przydziałów

# Przy stałych blokach po 4 i znanych granicach bloków część przydziałów jest pewna:
# ostatni w bloku zawsze, trzeci – gdy dwa pierwsze były takie same
pewne <- replicate(10000, {
  g <- matrix(bloki(40, 4), nrow = 4)                # 10 bloków po 4 (kolumny)
  (10 + sum(g[1, ] == g[2, ])) / 40                  # czwarte miejsca + trzecie po AA lub BB
})
round(mean(pewne), 3)                                # odsetek przydziałów znanych z góry
Wynik w R
[1] "AABBBAABABBA"
       [,1] [,2]
stale    -2    2
losowe   -3    3
prosta   -1    9
prosta
 A  B 
23 17 
   prosta    stale4 losowe468 
    0.501     0.708     0.677 
[1] 0.334

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje pakietów base i stats). W pracy podaj wersję R, której faktycznie użyto (sessionInfo()).

  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

Jak długie powinny być bloki?

Długość bloku musi być wielokrotnością liczby ramion, przy dwóch ramionach zwykle 4 albo 6. Bardzo krótkie bloki łatwo odgadnąć, a bardzo długie słabiej pilnują równowagi (Altman i Bland, 1999). Najbezpieczniej losować długość bloków i nie ujawniać jej osobom rekrutującym.

Czy po randomizacji blokowej potrzebna jest specjalna analiza?

Zwykle nie – porównujesz grupy tak jak po randomizacji prostej. Jeśli jednak bloki tworzono osobno w warstwach, np. w ośrodkach, zmienne warstwujące warto uwzględnić w modelu, jak opisujemy w haśle o randomizacji warstwowej.

Jak wygenerować listę bloków w R?

Wystarczy base R: unlist(replicate(10, sample(rep(c("A", "B"), 2)), simplify = FALSE)) daje 10 bloków po 4. Ustaw set.seed(), zapisz listę do pliku i przekaż ją osobie, która nie rekrutuje uczestników.

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. Altman, D. G., & Bland, J. M. (1999). Statistics notes: How to randomise. BMJ, 319(7211), 703–704. https://doi.org/10.1136/bmj.319.7211.703 ● Otwarty dostęp
  2. Efird, J. (2011). Blocked randomization with randomly selected block sizes. International Journal of Environmental Research and Public Health, 8(1), 15–20. https://doi.org/10.3390/ijerph8010015 ● Otwarty dostęp
  3. Schulz, K. F., & Grimes, D. A. (2002). Generation of allocation sequences in randomised trials: Chance, not choice. The Lancet, 359(9305), 515–519. https://doi.org/10.1016/s0140-6736(02)07683-3

Cytowania BibTeX

@article{altman1999how, author={Altman, Douglas G. and Bland, J. Martin}, title={{Statistics notes: How to randomise}}, journal={BMJ}, year={1999}, volume={319}, number={7211}, pages={703--704}, doi={10.1136/bmj.319.7211.703}}
@article{efird2011blocked, author={Efird, Jimmy}, title={{Blocked randomization with randomly selected block sizes}}, journal={International Journal of Environmental Research and Public Health}, year={2011}, volume={8}, number={1}, pages={15--20}, doi={10.3390/ijerph8010015}}
@article{schulz2002generation, author={Schulz, Kenneth F. and Grimes, David A.}, title={{Generation of allocation sequences in randomised trials: Chance, not choice}}, journal={The Lancet}, year={2002}, volume={359}, number={9305}, pages={515--519}, doi={10.1016/s0140-6736(02)07683-3}}
R