층화 무작위배정을 실제로 하는 방법
본 포스팅에서는 임상시험에서 층화 무작위배정 을 실제로 어떻게 하는지에 대해 알아보겠습니다.층화 무작위배정 은 공변량에 대해 층화하여 무작위 배정을 하는 방법입니다. 층화 무작위배정 을 하는 이유는 1) 해당 공변량 대해 Randomization 되어있도록 해서 bias 를 줄이고자 하는 것입니다. 이는 treatment/control group 간에 공변량의 분포가 다른 경우, bias 가 생기기 때문입니다. 하지만 공변량에 대해 treatment/control group 이 randomization 되어있다면, 해당 이론적으로는 공변량에 대해서는 분포가 다를 수 없어 이로 인한 bias 가 생기지 않게 됩니다. 2) 또한 공변량을 보정하면 공변량의 effect 를 제외하여 treatment effect size 의 참값을 더욱 잘 추정할 수 있습니다. 이를 통해 검정력을 증가시킬 수 있습니다.
다음과 같은 상황을 예로 들어 봅시다.
1. 총 4개의 기관이 임상 시험에 참여
2. 기관당 임상시험 참여자는 20명
3. 나이를 공변량으로 잡고 Block size 는 6,6,6,2 로 설정한다.
구체적으로 기관 별로 아래와 같은
- 20~30세 : 6명
- 30~40세 : 6명
- 40~50세 : 6명
- 50~60세 : 2명
4. treatment/control group 의 배정 비율은 1:1 이다.
즉, Block size가 6이면 treatment 3명, control 3명을 무작위 배정한다.
전략
1. 기관별로 층화 -> 똑같은 코드를 4번 돌리는 것으로 구현
2. 나이를 사이즈 6,6,6,2 로 층화 무작위 배정 -> for 문으로 구현
3. 블록별 무작위 배정을 위해 블록 별로 0~1사이의 난수를 발생하고 (이중 for 문으로 구현 ), 이 값을 기준으로 sorting 해서 중위수를 기준으로 두 그룹으로 나눈 후, A, B 약을 배정한다.
blockrand <- function(R, N, blocksize){ result <- data.frame(block=numeric(N), item=numeric(N), drug=character(N), rand=numeric(N), random_no=character(N), stringsAsFactors=FALSE) index <- 1 for (i in c(1:ceiling(N/blocksize))){ if (i == (ceiling(N/blocksize))){ blocksize <- N - (i-1)*blocksize # 2 } for (j in c(1:blocksize)){ result[index, 'block'] <- i result[index, 'item'] <- j if (j <= blocksize/2){ result[index, 'drug'] <- 'A' } else { result[index, 'drug'] <- 'B' } result[index, 'rand'] <- runif(1) index = index + 1 } } result <- result[order(result$block, result$rand), ] result$random_no <- c(paste0(R,'-R', as.character(c(1:(ceiling(N/blocksize)*blocksize))))) return (result) } inst1 <- blockrand('01', 20, 6) inst2 <- blockrand('02', 20, 6) inst3 <- blockrand('03', 20, 6) inst4 <- blockrand('04', 20, 6)
이를 위하여 blockrand 라는 함수를 만듭니다. 이 함수는 기관명 R, 기관별 대상자 수 N, 블록 사이즈 blocksize 를 parameter 로 받아 결과 테이블을 dataframe 형식으로 생성하여 반환하는 함수입니다.
결과 예시
block item drug rand random_no
3 1 3 A 0.03323463 01-R1
5 1 5 B 0.23377875 01-R2
1 1 1 A 0.58872123 01-R3
4 1 4 B 0.64914300 01-R4
2 1 2 A 0.86294140 01-R5
6 1 6 B 0.86923215 01-R6
8 2 2 A 0.01529889 01-R7
9 2 3 A 0.11754757 01-R8
11 2 5 B 0.13073496 01-R9
10 2 4 B 0.46934007 01-R10
7 2 1 A 0.56171635 01-R11
12 2 6 B 0.61339224 01-R12
14 3 2 A 0.11352796 01-R13
13 3 1 A 0.62667742 01-R14
15 3 3 A 0.82257959 01-R15
18 3 6 B 0.85910418 01-R16
17 3 5 B 0.87995944 01-R17
16 3 4 B 0.92778095 01-R18
20 4 2 B 0.70824728 01-R19
19 4 1 A 0.76212643 01-R20
'Data science > Statistics' 카테고리의 다른 글
시계열분석 - Auto correlation coefficients (0) | 2022.01.24 |
---|---|
시계열분석 - Week stationarity/Stochastic process/Autocovariance function (0) | 2022.01.24 |
다중 비교 (Multiple comparison) 문제와 보정 방법 (0) | 2019.12.15 |
변수 종류별 시각화 및 검정 방법 (0) | 2019.11.03 |
통계적 검정의 종류와 신뢰구간과 가설검정의 관계 (0) | 2019.10.26 |