You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,提问作者Артур Гудиев

火山引擎 最新活动