Jerome Cornfield는 다음과 같이 썼습니다.
피셔 혁명의 가장 훌륭한 결과 중 하나는 무작위 화라는 아이디어였으며, 다른 것에 거의 동의하지 않는 통계 학자들은 적어도 이것에 동의했습니다. 그러나 이러한 합의에도 불구하고 임상 및 다른 형태의 실험에서 무작위 배정 절차의 광범위한 사용에도 불구하고, 논리적 상태, 즉 그것이 수행하는 정확한 기능은 여전히 모호하다.
제롬 옥수수 밭 (1976). "임상 시험에 대한 최근 방법 론적 기여" . 미국 전염병학 저널 104 (4) : 408–421.
이 사이트와 다양한 문헌에서 나는 무작위 화의 힘에 대한 자신감있는 주장을 지속적으로 봅니다. " 혼동 변수의 문제를 제거 합니다 "와 같은 강력한 용어 가 일반적입니다. 예를 들어 여기를 참조 하십시오 . 그러나 실용적 / 윤리적 이유로 작은 샘플 (그룹당 3-10 개의 샘플)을 사용하여 여러 번 실험을 수행합니다. 이것은 동물과 세포 배양을 이용한 전임상 연구에서 매우 흔하며 연구자들은 일반적으로 결론을 뒷받침하는 p 값을보고합니다.
이것은 혼란스런 균형을 잡는 데 무작위 배정이 얼마나 좋은지 궁금해했습니다. 이 그림에서 나는 50/50 확률로 두 값을 취할 수있는 하나의 혼란과 치료 그룹과 대조군을 비교하는 상황을 모델링했다 (예 : type1 / type2, male / female). 다양한 작은 샘플 크기의 연구에 대한 "불균형 % (%)"(처리 및 대조 샘플 간의 유형 1 수의 차이를 샘플 크기로 나눈 값)의 분포를 보여줍니다. 빨간 선과 오른쪽 축은 ecdf를 보여줍니다.
작은 표본 크기에 대한 무작위 추출에서 다양한 균형 정도의 가능성 :
이 줄거리에서 두 가지가 분명합니다 (어딘가를 엉망으로 만들지 않는 한).
1) 샘플 크기가 증가하면 정확하게 균형 잡힌 샘플을 얻을 확률이 줄어 듭니다.
2) 샘플 크기가 클수록 매우 불균형 한 샘플을 얻을 확률이 줄어 듭니다.
3) 두 그룹 모두에 대해 n = 3 인 경우, 완전히 불균형 한 그룹 세트 (대조군의 모든 유형 1, 치료의 모든 유형 2)를 얻을 확률이 3 %입니다. N = 3은 분자 생물학 실험에서 일반적입니다 (예 : PCR로 mRNA 측정, 또는 웨스턴 블롯으로 단백질 측정)
n = 3 사례를 추가로 조사했을 때 이러한 조건에서 p 값의 이상한 동작을 관찰했습니다. 왼쪽은 type2 부분 군에 대해 서로 다른 평균 조건에서 t- 검정을 사용하여 계산 한 p 값의 전체 분포를 보여줍니다. type1의 평균은 0이고 두 그룹의 경우 sd = 1입니다. 오른쪽 패널은 공칭 "유의 컷오프"에 대한 해당 오 탐지율을 .05에서 .0001까지 보여줍니다.
t 테스트 (10000 몬테 카를로 실행)를 통해 비교할 때 두 개의 하위 그룹과 두 번째 하위 그룹의 다른 평균을 갖는 n = 3에 대한 p- 값 분포 :
두 그룹 모두 n = 4에 대한 결과는 다음과 같습니다.
두 그룹 모두 n = 5 인 경우 :
두 그룹 모두 n = 10 인 경우 :
위의 차트에서 볼 수 있듯이 표본 크기와 하위 그룹 간의 차이가 상호 작용하여 귀무 가설 하에서 다양한 p- 값 분포가 균일하지 않은 것으로 나타납니다.
그렇다면 표본 크기가 작은 무작위 배정 및 통제 된 실험에 p- 값이 신뢰할 수 없다는 결론을 내릴 수 있습니까?
첫 줄거리의 R 코드
require(gtools)
#pdf("sim.pdf")
par(mfrow=c(4,2))
for(n in c(3,4,5,6,7,8,9,10)){
#n<-3
p<-permutations(2, n, repeats.allowed=T)
#a<-p[-which(duplicated(rowSums(p))==T),]
#b<-p[-which(duplicated(rowSums(p))==T),]
a<-p
b<-p
cnts=matrix(nrow=nrow(a))
for(i in 1:nrow(a)){
cnts[i]<-length(which(a[i,]==1))
}
d=matrix(nrow=nrow(cnts)^2)
c<-1
for(j in 1:nrow(cnts)){
for(i in 1:nrow(cnts)){
d[c]<-cnts[j]-cnts[i]
c<-c+1
}
}
d<-100*abs(d)/n
perc<-round(100*length(which(d<=50))/length(d),2)
hist(d, freq=F, col="Grey", breaks=seq(0,100,by=1), xlab="% Unbalanced",
ylim=c(0,.4), main=c(paste("n=",n))
)
axis(side=4, at=seq(0,.4,by=.4*.25),labels=seq(0,1,,by=.25), pos=101)
segments(0,seq(0,.4,by=.1),100,seq(0,.4,by=.1))
lines(seq(1,100,by=1),.4*cumsum(hist(d, plot=F, breaks=seq(0,100,by=1))$density),
col="Red", lwd=2)
}
플롯 2-5에 대한 R 코드
for(samp.size in c(6,8,10,20)){
dev.new()
par(mfrow=c(4,2))
for(mean2 in c(2,3,10,100)){
p.out=matrix(nrow=10000)
for(i in 1:10000){
d=NULL
#samp.size<-20
for(n in 1:samp.size){
s<-rbinom(1,1,.5)
if(s==1){
d<-rbind(d,rnorm(1,0,1))
}else{
d<-rbind(d,rnorm(1,mean2,1))
}
}
p<-t.test(d[1:(samp.size/2)],d[(1+ samp.size/2):samp.size], var.equal=T)$p.value
p.out[i]<-p
}
hist(p.out, main=c(paste("Sample Size=",samp.size/2),
paste( "% <0.05 =", round(100*length(which(p.out<0.05))/length(p.out),2)),
paste("Mean2=",mean2)
), breaks=seq(0,1,by=.05), col="Grey", freq=F
)
out=NULL
alpha<-.05
while(alpha >.0001){
out<-rbind(out,cbind(alpha,length(which(p.out<alpha))/length(p.out)))
alpha<-alpha-.0001
}
par(mar=c(5.1,4.1,1.1,2.1))
plot(out, ylim=c(0,max(.05,out[,2])),
xlab="Nominal alpha", ylab="False Postive Rate"
)
par(mar=c(5.1,4.1,4.1,2.1))
}
}
#dev.off()