Jerome Cornfield napisał:
Jednym z najwspanialszych owoców rewolucji fisheryjskiej była idea randomizacji, a statystycy, którzy zgadzają się co do kilku innych rzeczy, przynajmniej się na to zgodzili. Ale pomimo tego porozumienia i pomimo powszechnego stosowania losowych procedur przydziału w badaniach klinicznych i innych formach eksperymentów, jego logiczny status, tj. Dokładna funkcja, jaką wykonuje, jest nadal niejasny.
Cornfield, Jerome (1976). „Najnowsze wkłady metodologiczne w badania kliniczne” . American Journal of Epidemiology 104 (4): 408–421.
W całej tej witrynie oraz w różnorodnej literaturze konsekwentnie widzę pewne twierdzenia na temat możliwości randomizacji. Częsta jest silna terminologia, taka jak „ eliminuje problem mylących zmiennych”. Zobacz tutaj , na przykład. Jednak wiele razy eksperymenty przeprowadzane są z małymi próbkami (3-10 próbek na grupę) ze względów praktycznych / etycznych. Jest to bardzo powszechne w badaniach przedklinicznych z wykorzystaniem zwierząt i kultur komórkowych, a naukowcy często zgłaszają wartości p na poparcie swoich wniosków.
Zastanawiam się, jak dobra jest randomizacja w zakresie równoważenia błędów. Dla tego wykresu zamodelowałem sytuację porównując grupy leczenia i kontrolne z jedną pomyłką, która mogłaby przyjąć dwie wartości z szansą 50/50 (np. Typ 1 / typ 2, mężczyzna / kobieta). Pokazuje rozkład „% niezrównoważonego” (Różnica w liczbie typu 1 między próbkami kontrolnymi i kontrolnymi podzielonymi przez wielkość próbki) dla badań różnych małych próbek. Czerwone linie i osie po prawej stronie pokazują plik ecdf.
Prawdopodobieństwo różnych stopni równowagi przy randomizacji dla małych wielkości próby:
Dwie rzeczy są jasne z tego wątku (chyba że gdzieś popełniłem błąd).
1) Prawdopodobieństwo uzyskania dokładnie wyważonych próbek maleje wraz ze wzrostem wielkości próbki.
2) Prawdopodobieństwo otrzymania bardzo niezrównoważonej próbki maleje wraz ze wzrostem wielkości próbki.
3) W przypadku n = 3 dla obu grup istnieje 3% szansy na uzyskanie całkowicie niezrównoważonego zestawu grup (wszystkie typu 1 w kontroli, wszystkie typu 2 w leczeniu). N = 3 jest powszechny w eksperymentach biologii molekularnej (np. Mierzy mRNA za pomocą PCR lub białek za pomocą western blot)
Kiedy dalej badałem przypadek n = 3, zaobserwowałem dziwne zachowanie wartości p w tych warunkach. Lewa strona pokazuje ogólny rozkład wartości pv obliczanych za pomocą testów t w warunkach różnych średnich dla podgrupy typu 2. Średnia dla typu 1 wynosiła 0, a sd = 1 dla obu grup. Prawe panele pokazują odpowiednie fałszywie dodatnie wskaźniki dla nominalnych „wartości odcięcia istotności” od 0,05 do 0001.
Rozkład wartości p dla n = 3 z dwiema podgrupami i różnymi średnimi drugiej podgrupy w porównaniu z testem t (10000 serii Monte Carlo):
Oto wyniki dla n = 4 dla obu grup:
Dla n = 5 dla obu grup:
Dla n = 10 dla obu grup:
Jak widać na powyższych wykresach, wydaje się, że istnieje interakcja między wielkością próby a różnicą między podgrupami, która powoduje różne rozkłady wartości p pod hipotezą zerową, które nie są jednolite.
Czy możemy zatem wyciągnąć wniosek, że wartości p nie są wiarygodne dla właściwie randomizowanych i kontrolowanych eksperymentów z małą wielkością próby?
Kod R dla pierwszego wykresu
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)
}
Kod R dla wykresów 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()