R中II型错误计算咨询:已知正态分布样本与I型错误计算方法
嗨,我来帮你搞定在R中计算第二类错误的问题!首先得明确,第二类错误(β)的核心是:当备择假设确实为真的时候,我们却没能拒绝原假设的概率。既然你已经会算I型错误(α),那咱们可以基于α先确定检验的拒绝域,再计算在备择假设下样本统计量落在接受域里的概率——这就是β了。下面分几种常见场景给你演示,代码都是可直接运行的,你可以根据自己的样本情况调整参数。
前提铺垫
先快速回顾:I型错误(α)是原假设为真时,错误拒绝它的概率。我们需要先通过α确定检验的临界值(也就是拒绝域和接受域的边界),这是计算β的基础。
场景1:单样本Z检验(已知总体方差)
如果你的样本来自已知方差的正态分布,原假设是$H_0: \mu=a_1$,备择假设是$H_1: \mu=a_2$,可以用Z分布来计算β。
步骤&代码示例
# 1. 设定所有参数 n <- 30 # 样本量 sigma <- 5 # 总体标准差 a1 <- 10 # 原假设的均值 a2 <- 12 # 备择假设的均值 alpha <- 0.05 # I型错误概率(α) # 2. 计算双侧Z检验的接受域边界(临界值) # 这里是基于原假设的抽样分布计算的 z_critical_upper <- qnorm(1 - alpha/2, mean = a1, sd = sigma/sqrt(n)) z_critical_lower <- qnorm(alpha/2, mean = a1, sd = sigma/sqrt(n)) # 3. 计算β:在备择假设为真时,样本均值落在接受域的概率 beta <- pnorm(z_critical_upper, mean = a2, sd = sigma/sqrt(n)) - pnorm(z_critical_lower, mean = a2, sd = sigma/sqrt(n)) # 输出结果 cat("第二类错误概率β:", round(beta, 4), "\n")
单侧检验调整
如果是单侧检验(比如$H_1: \mu > a_2$),只需要保留上侧临界值,β的计算变为:
z_critical <- qnorm(1 - alpha, mean = a1, sd = sigma/sqrt(n)) beta <- pnorm(z_critical, mean = a2, sd = sigma/sqrt(n))
场景2:两样本t检验(未知方差,方差齐性)
如果是两组正态样本,要比较均值差,原假设$H_0: \mu_1 - \mu_2 = a_1$,备择$H_1: \mu_1 - \mu_2 = a_2$,且未知总体方差(假设方差齐性),这时候用非中心t分布来计算β。
步骤&代码示例
# 1. 设定参数 n1 <- 25 # 第一组样本量 n2 <- 25 # 第二组样本量 s1 <- 4 # 第一组样本标准差 s2 <- 4 # 第二组样本标准差(假设方差齐性) a1 <- 0 # 原假设的均值差(比如两组均值相等) a2 <- 3 # 备择假设的均值差 alpha <- 0.05 # I型错误概率 # 2. 计算合并标准差、标准误和自由度 sp <- sqrt(((n1-1)*s1^2 + (n2-1)*s2^2)/(n1+n2-2)) # 合并标准差 se <- sp * sqrt(1/n1 + 1/n2) # 均值差的标准误 df <- n1 + n2 - 2 # 自由度 # 3. 计算双侧t检验的接受域临界值(基于原假设) t_critical_upper <- qt(1 - alpha/2, df = df) * se + a1 t_critical_lower <- qt(alpha/2, df = df) * se + a1 # 4. 计算非中心参数(ncp):刻画备择假设下的分布偏移 ncp <- (a2 - a1)/se # 5. 计算β:备择假设下,均值差落在接受域的概率 beta <- pt(t_critical_upper, df = df, ncp = ncp) - pt(t_critical_lower, df = df, ncp = ncp) # 输出结果 cat("第二类错误概率β:", round(beta, 4), "\n")
偷懒技巧:用R内置函数直接算
其实R有专门的功效分析函数power.t.test,功效=1-β,所以直接用这个函数算出功效后,β=1-功效就行,比手动计算方便多了!
两样本t检验示例
# 调用power.t.test函数 power_result <- power.t.test( n = 25, # 每组样本量 delta = 3, # 均值差(a2 - a1) sd = 4, # 总体标准差(用样本标准差近似也可) sig.level = 0.05,# I型错误概率α type = "two.sample", # 检验类型:单样本/两样本/配对 alternative = "two.sided" # 双侧/单侧检验 ) # 计算β beta <- 1 - power_result$power cat("第二类错误概率β:", round(beta, 4), "\n")
如果是单样本检验,只需要把type改成"one.sample"就行~
内容的提问来源于stack exchange,提问作者Артур Гудиев




