小样本随机化是否可靠?

机器算法验证 小样本 随机分配
2022-03-15 08:18:31

杰罗姆·康菲尔德写道:

费舍尔革命最好的成果之一是随机化的想法,而在其他事情上几乎没有同意的统计学家至少同意这一点。但是,尽管达成了这一协议,并且尽管随机分配程序在临床和其他形式的实验中得到了广泛使用,但其逻辑状态,即它所执行的确切功能,仍然是模糊的。

麦田,杰罗姆 (1976)。“最近对临床试验的方法论贡献”美国流行病学杂志 104 (4): 408–421。

在整个网站和各种文献中,我始终看到关于随机化力量的自信主张。诸如“它消除了混杂变量的问题”之类的强术语很常见。例如,请参见此处。然而,出于实际/道德原因,很多时候实验都是用小样本(每组 3-10 个样本)进行的。这在使用动物和细胞培养物的临床前研究中非常常见,研究人员通常报告 p 值以支持他们的结论。

这让我想知道,随机化在平衡混淆方面有多好。对于这个图,我模拟了一个比较治疗组和对照组的情况,其中一个混淆可能以 50/50 的机会取两个值(例如 type1/type2,男性/女性)。它显示了各种小样本量研究的“不平衡百分比”(治疗和对照样本之间的类型 1 的差异除以样本量)的分布。红线和右侧轴显示 ecdf。

小样本随机化下不同程度平衡的概率: 在此处输入图像描述

从这个情节中有两件事很清楚(除非我在某个地方搞砸了)。

1) 获得完全平衡样本的概率随着样本量的增加而降低。

2) 获得非常不平衡的样本的概率随着样本量的增加而降低。

3) 在两组 n=3 的情况下,有 3% 的机会获得一组完全不平衡的组(对照组中的所有类型 1,治疗中的所有类型 2)。N=3 常见于分子生物学实验(例如用 PCR 测量 mRNA,或用蛋白质印迹测量蛋白质)

当我进一步检查 n=3 的情况时,我观察到 p 值在这些条件下的奇怪行为。左侧显示了在 type2 子组的不同均值条件下使用 t 检验计算的 p 值的总体分布。type1 的平均值为 0,两组的 sd=1。右侧面板显示了从 0.05 到 0.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()
2个回答

您正确地指出了随机化在处理非常小的样本的未知混杂变量方面的局限性。然而,问题不在于 P 值不可靠,而在于它们的含义随样本量以及方法的假设与总体的实际属性之间的关系而变化。

我对您的结果的看法是,P 值表现得非常好,直到子组均值的差异如此之大,以至于任何明智的实验者都会在进行实验之前知道存在问题。

可以在不参考对数据性质的正确理解的情况下完成和分析实验的想法是错误的。在分析小数据集之前,您必须对数据有足够的了解,才能自信地捍卫分析中隐含的假设。这些知识通常来自使用相同或相似系统的先前研究,这些研究可以是正式出版的作品或非正式的“初步”实验。

在生态学研究中,当样本量较小且存在一个或多个混杂变量的证据时,将处理非随机分配给实验单位(受试者)是标准做法。这种非随机分配将受试者“分散”在可能混杂变量的范围内,这正是随机分配应该做的事情。但是在小样本量下,随机化更有可能在这方面表现不佳(如上所示),因此依赖它可能是一个坏主意。

因为在大多数领域都大力提倡随机化(这是理所当然的),所以很容易忘记最终目标是减少偏见而不是坚持严格的随机化。然而,研究人员有责任有效地描述一组混杂变量,并以一种对实验结果视而不见并利用所有可用信息和背景的合理方式进行非随机分配。

有关摘要,请参见Hurlbert, Stuart H. 1984 的第 192-198 页。伪复制和现场实验的设计。生态专着 54(2) pp.187-211。