Jerome Cornfield ha scritto:
Uno dei migliori frutti della rivoluzione dei Pescatori fu l'idea della randomizzazione, e gli statistici che concordano su poche altre cose hanno almeno concordato su questo. Ma nonostante questo accordo e nonostante l'uso diffuso di procedure di allocazione randomizzate in cliniche e in altre forme di sperimentazione, il suo stato logico, cioè l'esatta funzione che svolge, è ancora oscuro.
Cornfield, Jerome (1976). "Recenti contributi metodologici a studi clinici" . American Journal of Epidemiology 104 (4): 408–421.
In questo sito e in una varietà di pubblicazioni vedo costantemente affermazioni fiduciose sui poteri della randomizzazione. Una terminologia forte come " elimina il problema delle variabili confondenti" è comune. Vedi qui , per esempio. Tuttavia, molte volte vengono eseguiti esperimenti con piccoli campioni (3-10 campioni per gruppo) per motivi pratici / etici. Questo è molto comune nella ricerca preclinica che utilizza animali e colture cellulari e i ricercatori riportano comunemente valori p a sostegno delle loro conclusioni.
Questo mi ha fatto riflettere su quanto sia buona la randomizzazione nel bilanciare i disordini. Per questo diagramma ho modellato una situazione confrontando i gruppi di trattamento e controllo con un confusione che potrebbe assumere due valori con probabilità 50/50 (ad es. Tipo1 / tipo2, maschio / femmina). Mostra la distribuzione di "% sbilanciato" (differenza in # di tipo1 tra i campioni di trattamento e di controllo divisi per dimensione del campione) per studi su una varietà di piccole dimensioni del campione. Le linee rosse e gli assi sul lato destro mostrano l'ecdf.
Probabilità di vari gradi di equilibrio sotto randomizzazione per campioni di piccole dimensioni:
Due cose sono chiare da questa trama (a meno che non abbia fatto un casino da qualche parte).
1) La probabilità di ottenere campioni esattamente bilanciati diminuisce all'aumentare della dimensione del campione.
2) La probabilità di ottenere un campione molto sbilanciato diminuisce all'aumentare della dimensione del campione.
3) Nel caso di n = 3 per entrambi i gruppi, esiste una probabilità del 3% di ottenere un gruppo di gruppi completamente sbilanciato (tutti di tipo 1 nel controllo, tutti di tipo 2 nel trattamento). N = 3 è comune per gli esperimenti di biologia molecolare (ad esempio misurare l'mRNA con PCR o le proteine con western blot)
Quando ho esaminato ulteriormente il caso n = 3, ho osservato uno strano comportamento dei valori di p in queste condizioni. La parte sinistra mostra la distribuzione complessiva dei valori calcolati usando i test t in condizioni di mezzi diversi per il sottogruppo di tipo 2. La media per type1 era 0 e sd = 1 per entrambi i gruppi. I pannelli a destra mostrano i corrispondenti tassi di falsi positivi per i "tagli di significatività" nominali da 0,05 a 0001.
Distribuzione dei valori di p per n = 3 con due sottogruppi e diverse medie del secondo sottogruppo rispetto al test t (10000 corse Monte Carlo):
Ecco i risultati per n = 4 per entrambi i gruppi:
Per n = 5 per entrambi i gruppi:
Per n = 10 per entrambi i gruppi:
Come si può vedere dai grafici sopra, sembra esserci un'interazione tra la dimensione del campione e la differenza tra i sottogruppi che si traduce in una varietà di distribuzioni di valore p secondo l'ipotesi nulla che non sono uniformi.
Quindi possiamo concludere che i valori di p non sono affidabili per esperimenti opportunamente randomizzati e controllati con campioni di piccole dimensioni?
Codice R per la prima trama
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)
}
Codice R per grafici 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()