在给定分布中计算经验β值并与理论β值对比的技术实现问询
在给定分布中计算经验β值并与理论β值对比的技术实现问询
嗨,我看你需要完成的是在正态分布总体里计算经验β值(也就是第二类错误的概率),再和理论推导的β值做对比的任务。下面我把整个实现流程整理清楚,附上完整可运行的R代码,还有关键步骤的解释:
核心需求拆解
- 生成指定参数的正态分布总体
- 重复抽样并执行单样本t检验,通过收集p值计算经验β
- 借助功效分析工具计算理论β
- 对比两者的数值差异
完整实现代码
# 先检查并安装所需的pwr包 if (!require("pwr")) install.packages("pwr") # ---------------------- 参数设置 ---------------------- N <- 1000 # 总体规模 n <- 25 # 单次抽样的样本量 k <- 500 # 重复抽样的次数 a_teo <- 0.05# 显著性水平 # ---------------------- 创建总体 ---------------------- poblacion <- rnorm(N, mean = 10, sd = 10) # 生成均值10、标准差10的正态总体 m.pob <- mean(poblacion) # 计算总体均值 sd.pob <- sd(poblacion) # 计算总体标准差 # ---------------------- 模拟抽样与p值收集 ---------------------- p <- vector(length = k) # 初始化存储p值的向量 for (i in 1:k) { muestra <- poblacion[sample(1:N, n)] # 从总体中随机抽取n个样本 p[i] <- t.test(muestra, mu = 15)$p.value # 执行单样本t检验,提取p值 } # ---------------------- 计算经验β值 ---------------------- # 经验β是:原假设为假时,错误接受原假设的比例(即p值>显著性水平的次数占比) beta_emp <- length(p[p > a_teo]) / k # ---------------------- 计算理论β值 ---------------------- d <- (10 - 15) / sd.pob # 计算效应量Cohen's d # 用pwr包计算检验功效,理论β=1-功效(功效是正确拒绝原假设的概率) beta_teo <- 1 - pwr.t.test(n = n, d = d, sig.level = a_teo, type = "one.sample")$power # ---------------------- 输出对比结果 ---------------------- sprintf("beta_teo = %.3f -- beta_emp = %.3f -- 差异值 = %.3f", beta_teo, beta_emp, abs(beta_teo - beta_emp))
关键步骤说明
- 参数配置:你可以根据实际需求调整总体规模、样本量、抽样次数这些参数,显著性水平通常默认用0.05
- 总体生成:用
rnorm()构造符合要求的正态总体,后续所有抽样操作都基于这个固定总体 - 抽样与检验:循环执行抽样和t检验,这里我们检验的是“样本均值是否等于15”,但真实总体均值是10,所以原假设本身是错误的
- 经验β计算:当原假设为假时,如果p值大于显著性水平,就意味着我们错误地接受了原假设,这就是第二类错误,用这类情况的占比作为经验β
- 理论β计算:先通过Cohen's d量化效应大小,再用
pwr.t.test()得到检验功效,用1减去功效就得到理论上的第二类错误概率
备注:内容来源于stack exchange,提问作者BehSci
相关产品推荐
相关产品推荐

