如何模拟 I 类错误和 II 类错误

机器算法验证 假设检验
2022-04-20 07:21:32

假设 ,我想基于 n 个观察 ) 和 II( ) 类型误差的总和(下限) 。(问:我是否以明确定义的方式提出问题?)H0:F0H1:F1αβ

为简单起见,我正在考虑测试 and for(问:是否应该是或者只是?)。对于此设置,最小值出现在截止处。所以也许我们可以使用这个值与测试统计数据()进行比较?H0:μ=0H1:μ=2F0N(0,1)F1N(2,1)H1μ=2μ>0α+βμ=1X¯

那么,如何模拟I型()和II型()错误呢?(我知道这个和的理论值是的右尾与截止点分开的面积。)αβF1F0

我应该模拟说点,50 来自,50 来自(这就是为什么我选择而不是,因为我不能模拟后者,对吧?)。并计算错误分类率是多少,即之和。这个想法对吗?我在问一个定义明确的问题吗?n=100H0H1H1μ=2μ>0αβ

2个回答

首先,编写假设检验的常规方法是:,这取决于研究的兴趣。
H0:μ=0H1:μ0H1:μ>0H1:μ<0

让我们定义I 类错误:当它为TRUE
时拒绝原假设的概率

II 型错误:
当它是False时不拒绝零假设的概率。

让我们测试 I 类错误:

为了观察测试的 I 类错误,我们需要从遵循零假设的相同分布生成/模拟数据。请注意以下 R 代码:

n=10000 # testing 10,000 times
t1err=0
for (i in 1:n){
   x=rnorm(100, 0, 1)
   if (((t.test(x, mu=0))$p.value)<=0.05) (t1err=t1err+1) 
}
cat("Type I error rate in percentage is", (t1err/n)*100,"%")

它应该给你大约 5% 的错误作为 I 类错误。

让我们观察 II 类错误:
为了测试 II 类错误,我们必须从另一个分布生成/模拟数据,而不是跟随零假设。请注意以下 R 代码:

n=10000 # testing 10,000 times
t2err=0
for (i in 1:n){
   x=rnorm(100, 2, 1)
   if (((t.test(x, mu=0))$p.value)>0.05) (t2err=t2err+1) 
}
cat("Type II error rate in percentage is", (t2err/n)*100,"%")

您将看到 0.0%。因为方差真的很低。如果将方差增加到 5,您将看到大约 2% 的错误为 II 型错误。

只是为了复制这篇关于同一想法的不同迭代的帖子——在这种情况下,一个不道德的研究人员可以多快地产生具有显着 p 值的一次性伪科学,我登陆了这个页面,并从接受的答案中学习(+ 1)。

事实证明,平均值是20正如预测的那样;中位数是14; 和模式只是1.这与下面直方图上的右偏态分布一致。

这是 R 中的代码,以及平均值、中位数和众数的结果,这听起来就像您在后续评论中所要求的:

set.seed(3141592)
firsthackingop <- 0  # Empty vec to collect number of studies before hitting the jackpot.
for(i in 1:1e5){     # The whole search for a sig p value will be done 100,000 times.
hackingwait <- 1     # The counting vector for every p-searching Safari.
  repeat{
  x=rnorm(100, 0, 1) # 100 draws from a norm dist as in @overwhelmed's answer.
  if(t.test(x, mu=0)$p.value > 0.05){hackingwait=hackingwait+1}else{break}
}
firsthackingop[i] <- hackingwait
}
mean(firsthackingop)
# [1] 20.17556
median(firsthackingop)
# [1] 14
Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
Mode(firsthackingop)
[1] 1
hist(firsthackingop, freq = T, main = "No. t-tests before Type I Error",
          xlim=c(0,100), col = rgb(.2,.2,.8,.5), border = F,
          cex.axis=.75, cex.main=.9, xlab="", ylab="")

这是直方图:

在此处输入图像描述


有趣的是,这只是几何分布p=0.05定义为获得一次成功所需的伯努利试验次数 X 的概率分布,其平均值为1p=10.05=20;并以一种模式1.R中的数据生成是v = rgeom(1e5,0.05) + 1,这里是情节:

在此处输入图像描述

> Mode(v)
[1] 1
> mean(v)
[1] 20.12817
> median(v)
[1] 14