Джером Корнфилд написал:
Одним из лучших плодов фишерианской революции была идея рандомизации, и статистики, согласившиеся с несколькими другими моментами, по крайней мере согласились с этим. Но, несмотря на это согласие и несмотря на широкое использование процедур рандомизированного распределения в клинических и других формах экспериментов, его логический статус, то есть точная функция, которую он выполняет, все еще остается неясным.
Нива, Джером (1976). «Недавние методологические вклады в клинические испытания» . Американский журнал эпидемиологии 104 (4): 408–421.
На этом сайте и во многих литературных источниках я постоянно вижу уверенные утверждения о возможностях рандомизации. Сильная терминология, такая как «она устраняет проблему смешанных переменных», является обычной практикой. Смотрите здесь , например. Тем не менее, много раз эксперименты проводятся с небольшими образцами (3-10 образцов на группу) по практическим / этическим причинам. Это очень распространено в доклинических исследованиях с использованием животных и клеточных культур, и исследователи обычно сообщают значения p в поддержку своих выводов.
Это заставило меня задуматься, насколько хороша рандомизация при балансировке путаницы. Для этого графика я смоделировал ситуацию, сравнивая группы лечения и контроля с одним конфузом, который мог принимать два значения с вероятностью 50/50 (например, тип 1 / тип 2, мужчина / женщина). Он показывает распределение «% несбалансированного» (разница в # типа 1 между обработанной и контрольной выборками, разделенная на размер выборки) для исследований множества небольших размеров выборки. Красные линии и правые боковые оси показывают ecdf.
Вероятность различных степеней баланса при рандомизации для малых размеров выборки:
Из этого сюжета ясно две вещи (если я где-то не напутал).
1) Вероятность получения точно сбалансированных выборок уменьшается с увеличением размера выборки.
2) Вероятность получения очень несбалансированной выборки уменьшается с увеличением размера выборки.
3) В случае n = 3 для обеих групп существует 3% -ная вероятность получения полностью несбалансированного набора групп (все типы 1 в контроле, все типы 2 в лечении). N = 3 обычно для экспериментов по молекулярной биологии (например, измерение мРНК с помощью ПЦР или белков с вестерн-блоттингом)
Когда я рассмотрел случай n = 3, я обнаружил странное поведение значений p в этих условиях. Левая сторона показывает общее распределение значений p, вычисленных с использованием t-тестов в условиях различных средних для подгруппы типа 2. Среднее значение для типа 1 было 0, а sd = 1 для обеих групп. Правые панели показывают соответствующие ложноположительные показатели для номинальных «предельных значений» от 0,05 до 0001.
Распределение значений p для n = 3 с двумя подгруппами и различными средними значениями второй подгруппы при сравнении с помощью t-теста (10000 пробегов в Монте-Карло):
Вот результаты для 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)
}
R код для участков 2-5
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()