Jerome Cornfield escreveu:
Um dos melhores frutos da revolução dos Pescadores foi a idéia da randomização, e os estatísticos que concordam em poucas outras coisas concordaram pelo menos nisso. Mas, apesar desse acordo e apesar do amplo uso de procedimentos de alocação aleatória em clínicas e em outras formas de experimentação, seu status lógico, isto é, a função exata que ele executa, ainda é obscuro.
Cornfield, Jerome (1976). "Contribuições metodológicas recentes para ensaios clínicos" . American Journal of Epidemiology 104 (4): 408–421.
Em todo este site e em uma variedade de literatura, vejo consistentemente afirmações confiáveis sobre os poderes da randomização. Terminologia forte como " elimina a questão de variáveis confusas" é comum. Veja aqui , por exemplo. No entanto, muitas vezes os experimentos são realizados com amostras pequenas (3-10 amostras por grupo) por razões práticas / éticas. Isso é muito comum em pesquisas pré-clínicas usando animais e culturas de células e os pesquisadores geralmente relatam valores de p para apoiar suas conclusões.
Isso me fez pensar: quão boa é a randomização para equilibrar os conflitos. Para esse gráfico, modelei uma situação comparando os grupos de tratamento e controle com uma confusão que poderia assumir dois valores com chance de 50/50 (por exemplo, tipo 1 / tipo 2, homem / mulher). Ele mostra a distribuição de "% desequilibrado" (diferença no número de tipo 1 entre amostras de tratamento e controle divididas por tamanho da amostra) para estudos de uma variedade de tamanhos pequenos de amostra. As linhas vermelhas e os eixos do lado direito mostram o ecdf.
Probabilidade de vários graus de equilíbrio sob randomização para amostras pequenas:
Duas coisas estão claras nesta trama (a menos que eu errei em algum lugar).
1) A probabilidade de obter amostras exatamente equilibradas diminui à medida que o tamanho da amostra aumenta.
2) A probabilidade de obter uma amostra muito desequilibrada diminui à medida que o tamanho da amostra aumenta.
3) No caso de n = 3 para ambos os grupos, há uma chance de 3% de obter um conjunto de grupos completamente desequilibrado (todos do tipo 1 no controle, todos do tipo 2 no tratamento). N = 3 é comum em experimentos de biologia molecular (por exemplo, medir mRNA com PCR ou proteínas com western blot)
Quando examinei o caso n = 3, observei um comportamento estranho dos valores de p nessas condições. O lado esquerdo mostra a distribuição geral dos valores calculados usando testes t sob condições de diferentes médias para o subgrupo do tipo 2. A média para o tipo 1 foi 0 e sd = 1 para ambos os grupos. Os painéis da direita mostram as taxas de falso positivo correspondentes para os "pontos de corte significativos" de 0,05 a 0001.
Distribuição dos valores de p para n = 3 com dois subgrupos e médias diferentes do segundo subgrupo quando comparados pelo teste t (10000 corridas de monte carlo):
Aqui estão os resultados para n = 4 para ambos os grupos:
Para n = 5 para ambos os grupos:
Para n = 10 para ambos os grupos:
Como pode ser visto nos gráficos acima, parece haver uma interação entre o tamanho da amostra e a diferença entre subgrupos que resulta em uma variedade de distribuições de valor-p sob a hipótese nula que não é uniforme.
Então, podemos concluir que os valores de p não são confiáveis para experimentos adequadamente randomizados e controlados com pequeno tamanho de amostra?
Código R para o primeiro gráfico
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)
}
Código R para parcelas 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()