什么时候拒绝/接受一个假设才有意义?

机器算法验证 假设检验 统计学意义 p 值 可能性
2022-03-18 21:12:38

To P or not to P: on the evidence nature of P-values and their place in scientic inference中,Michael Lew 表明,至少对于 t 检验,可以解释单边 p 值和样本量作为给定似然函数的“地址”(我的术语)。我在下面重复了他的一些数字,稍作修改。左列显示了由于不同效应大小(均值/合并标准差之间的差异)和样本大小的理论而预期的 p 值分布。水平线标记了“切片”,我们从中得到右图所示的 p=0.50 和 p=0.025 的似然函数。

在此处输入图像描述

这些结果与蒙特卡罗模拟一致。对于这个图,我通过 t 检验比较了 n=10 的两组,在许多不同的效应大小下,将 10,000 个 p 值合并到每个效应大小的 0.01 区间。具体来说,有一组平均值 = 0,sd = 1,第二组平均值从 -4 变化到 4,sd = 1。 在此处输入图像描述

(上面的数字可以直接与上面链接的论文中的图 7/8 进行比较,并且非常相似,我发现热图比那篇论文中使用的“云”更能提供信息,并且还希望独立地复制他的结果。)

如果我们检查由 p 值“索引”的似然函数,拒绝/接受假设或忽略基于截止值(在任何地方使用的任意 0.05 或由成本确定的 p 值)大于 0.05 的结果的行为-benefit) 似乎是荒谬的。为什么我不应该从 n=100, p=0.5 的情况下得出“当前证据表明任何影响(如果存在)都很小”的结论?当前的做法是要么“接受”没有效果(假设检验),要么说“需要更多数据”(显着性检验)。我不明白为什么我应该做这两件事。

也许当一个理论预测了一个精确的点值时,拒绝一个假设可能是有道理的。但是,当假设的形式为“mean1=mean2 或 mean1!=mean2”时,我认为没有任何价值。在经常使用这些测试的条件下,随机化并不能保证所有混杂因素在各组之间都是平衡的,并且应该始终担心潜伏变量,因此据我所知,拒绝 mean1 完全等于 mean2 的假设没有科学价值。

是否有超出 t 检验的案例不适用此论点?我是否错过了拒绝先验概率低的假设为研究人员提供的有价值的东西?忽略任意截止值以上的结果似乎导致了广泛的发表偏倚。忽略结果对科学家有什么有用的作用?

Michael Lew 的 R 代码来计算 p 值分布

LikeFromStudentsTP<-function(n,x,Pobs,test.type, alt='one.sided'){
# test.type can be 'one.sample', 'two.sample' or 'paired'
# n is the sample size (per group for test.type = 'two.sample')
# Pobs is the observed P-value
# h is a small number used in the trivial differentiation
h<-10^-7
PowerDn<-power.t.test('n'=n, 'delta'=x, 'sd'=1,
'sig.level' = Pobs-h, 'type'= test.type, 'alternative'=alt)
PowerUp<-power.t.test('n'=n, 'delta'=deltaOnSigma, 'sd'=1,
'sig.level' = Pobs+h, 'type'= test.type, 'alternative'=alt)
PowerSlope<-(PowerUp$power-PowerDn$power)/(h*2)
L<-PowerSlope
}

图 1 的 R 代码

deltaOnSigma <- 0.01*c(-400:400)
type<-'two.sample'
alt='one.sided'
p.vals<-seq(0.001,.999,by=.001)


#dev.new()
par(mfrow=c(4,2))
for(n in c(3,5,10,100)){

  m<-matrix(nrow=length(deltaOnSigma), ncol=length(p.vals))
  cnt<-1
  for(P in p.vals){
    m[,cnt]<-LikeFromStudentsTP(n,deltaOnSigma,P,type, alt)
    cnt<-cnt+1
  }

  #remove very small values
  m[which(m/max(m,na.rm=T)<10^-5)]<-NA



  m2<-log(m)

  par(mar=c(4.1,5.1,2.1,2.1))
  image.plot(m2, axes=F,
             breaks=seq(min(m2, na.rm=T),max(m2, na.rm=T),length=1000), col=rainbow(999),
             xlab="Effect Size", ylab="P-value"
  )
  title(main=paste("n=",n))
  axis(side=1, at=seq(0,1,by=.25), labels=seq(-4,4,by=2))
  axis(side=2, at=seq(0,1,by=.05), labels=seq(0,1,by=.05))
  axis(side=4, at =.5, labels="Log-Likelihood", pos=.95, tick=F)
  abline(v=0.5, lwd=1)
  abline(h=.5, lwd=3, lty=1)
  abline(h=.025, lwd=3, lty=2)
  par(mar=c(5.1,4.1,4.1,2.1))


  plot(deltaOnSigma,m[,which(p.vals==.025)], type="l", lwd=3, lty=2,
       xlab="Effect Size", ylab="Likelihood", xlim=c(-4,4),
       main=paste("Likelihood functions for","n=",n)
  )
  lines(deltaOnSigma,m[,which(p.vals==.5)], lwd=3, lty=1)
  legend("topleft", legend=c("p=.5","p=.025"), lty=c(1,2),lwd=1, bty="n")
}

图 2 的 R 代码

p.vals<-seq(0,1,by=.01)
deltaOnSigma <- 0.01*c(-400:400)
n<-10
n2<-10
sd2<-1
num.sims<-10000
sp<-sqrt((9*1^2 +(n2-1)*sd2^2)/(n+n2-2))

p.out=matrix(nrow=num.sims*length(deltaOnSigma) ,ncol=2)
m<-matrix(0,nrow=length(deltaOnSigma),ncol=length(p.vals))
pb<-txtProgressBar(min = 0, max = length(deltaOnSigma) ,style = 3)
cnt<-1
cnt2<-1
for(i in deltaOnSigma ){

  for(j in 1:num.sims){

    m2<-i
    a<-rnorm(n,0,1)
    b<-rnorm(n,m2,sd2)
    p<-t.test(a,b, alternative="less")$p.value

    r<-end(which(deltaOnSigma<=m2/sp))[1]

    m[r,end(which(p.vals<p))[1]]<-m[r,end(which(p.vals<p))[1]]+1
    p.out[cnt,]<-cbind(m2/sp,p)
    cnt<-cnt+1

  }
  cnt2<-cnt2+1
  setTxtProgressBar(pb, cnt2)
}
close(pb)


m[which(m==0)]<-NA

m2<-log(m)


dev.new()
par(mfrow=c(2,1))
par(mar=c(4.1,5.1,2.1,2.1))
image.plot(m2, axes=F,
           breaks=seq(min(m2, na.rm=T),max(m2, na.rm=T),length=1000), col=rainbow(999),
           xlab="Effect Size", ylab="P-value"
)
title(main=paste("n=",n))
axis(side=1, at=seq(0,1,by=.25), labels=seq(-4,4,by=2))
axis(side=2, at=seq(0,1,by=.05), labels=seq(0,1,by=.05))
axis(side=4, at =.5, labels="Log-Count", pos=.95, tick=F)
abline(h=.5, lwd=3, lty=1)
abline(h=.025, lwd=3, lty=2)
abline(v=.5, lwd=2, lty=1)
par(mar=c(5.1,4.1,4.1,2.1))


hist(p.out[which(p.out[,2]>.024 & p.out[,2]<.026),1],
     xlim=c(-4,4), xlab="Effect Size", col=rgb(1,0,0,.5), 
     main=paste("Effect Sizes for","n=",n)
)
hist(p.out[which(p.out[,2]>(.499) & p.out[,2]<.501),1], add=T,
     xlim=c(-4,4),col=rgb(0,0,1,.5)
)

legend("topleft", legend=c("0.499<p<0.501","0.024<p<0.026"), 
       col=c("Blue","Red"), lwd=3, bty="n")
1个回答

我真的很喜欢你的彩虹版本的云,并且可能会“借用”它们用于我的论文的未来版本。谢谢!

您的问题对我来说并不完全清楚,因此我将对其进行解释。如果它们不是您所想的那样,我的答案将被误导!

  • 是否存在拒绝“mean1 等于 mean2”这样的假设在科学上有价值的情况?

频率论者会争辩说,具有明确定义的错误率的优势超过了他们的方法所带来的证据评估损失,但我认为这种情况并不常见。(而且我怀疑这些方法的支持者很少真正理解完全丧失对它们所需要的数据的证据考虑。)Fisher 坚持认为 Neyman-Pearson 测试方法在科学计划中没有位置,但他确实允许它们适用于“工业验收测试”的情况。大概这样的设置是拒绝点假设可能有用的情况。

大多数科学被更准确地建模为估计而不是接受程序。P 值和它们索引的似然函数(或者,使用您的术语,地址)为估计和基于该估计的推断提供了非常有用的信息。

(几个旧的 StackExchange 问题和答案是相关的:“假设检验”和“显着性检验”有什么区别?假设检验中 p 值的解释

  • 您是否错过了拒绝假设(低先验概率)的点?

我不知道您是否遗漏了很多东西,但是将先验概率添加到这种混合物中可能不是一个好主意!围绕与假设检验、显着性检验和证据评估相关的思想的许多争论都来自根深蒂固的立场。这样的论点不是很有帮助。(你可能已经注意到我在论文中非常小心地避免将贝叶斯主义带入我的讨论中,尽管当有合理的先验概率可供使用时我全心全意地接受它。首先我们需要修复 P 值提供证据,错误率不会产生.)

  • 科学家是否应该忽略未能达到“意义”的结果?

不,当然不是。在大多数情况下,使用任意截断来声明重要性或假设结果的重要性、可发布性、可重复性或真实性是一个坏主意。科学实验的结果应根据先前的理解、可用的先前概率、理论、相反和互补证据的权重、复制、适当的损失函数以及无数其他无形资产来解释。科学家不应该将推理的责任交给无意识的算法。然而,为了充分利用他们的实验结果中的证据,科学家们需要更好地理解统计分析能够和确实提供了什么。这就是您探索的论文的目的。与通常在论文中提出的内容相比,科学家们还需要更完整地说明他们获得的证据和他们理解的演变,并且他们应该提供 Abelson 所谓的原则性论据来支持他们的推论。依靠 P<0.05 与有原则的论点相反。