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
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.
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
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óryWynik 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.334Bibliografia 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()).
- 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
Randomizacja w praktyce
Bloki o losowej długości, warstwy, minimalizacja Pococka–Simona i ukrycie przydziału – lista przydziału w R, symulacja i wzór opisu CONSORT.
Czytaj →PoradnikSTROBE, CONSORT i TRIPOD – która lista
Jak dobrać listę raportowania do schematu badania, wypełnić ją z numerami stron i obsłużyć punkty „nie dotyczy” – z tabelą i schematem wyboru.
Czytaj →PoradnikBadania kliniczne i pomiar przed i po – przewodnik
Osiem etapów badania z interwencją: schemat, etyka, błąd pomiaru, liczebność, ITT, ANCOVA, RCI i MCID oraz CONSORT – z linkami do każdego etapu.
Czytaj →Potrzebujesz wsparcia w analizie danych?
Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.
Wyceń analizęOferta dla studentówBibliografia i dalsza literatura naukowa (APA 7)
- 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
- 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
- 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}}