R语言中如何在函数内实现多次随机抽样以测试t检验置信区间精度?
问题核心原因
你当前的代码是提前生成好固定样本再传入函数,replicate迭代时只会复用同一份样本,自然不会生成新数据;同时精度计算的语句返回的是所有负值组成的向量,不是你需要的覆盖率数值。
解决方案
采用「抽样生成器函数」作为入参,解耦抽样逻辑和模拟逻辑,同时修正统计逻辑:
修正后代码
# 原t_ci逻辑无误,乘积为负代表真实值落在置信区间内 t_ci <- function(data, mju){ prod(t.test(data)$conf.int - mju) } prec_t <- function(sampler, N, mju){ # sampler为无参抽样函数,每次调用返回1份指定分布、指定样本量的随机样本 sim <- replicate(N, t_ci(sampler(), mju)) # 统计负值占比,即为置信区间实际覆盖率(精度) sum(sim < 0) / N }
使用示例
测试正态分布下的覆盖率
样本量为20,真实均值为0,模拟1000次:
n <- 20 # 定义正态分布抽样函数 norm_sampler <- function() rnorm(n, mean = 0, sd = 1) # 运行模拟 prec_t(sampler = norm_sampler, N = 1000, mju = 0)
测试其他分布下的覆盖率
例如测试自由度为3的t分布,仅需修改抽样函数即可:
t_sampler <- function() rt(n, df = 3) prec_t(sampler = t_sampler, N = 1000, mju = 0)
补充说明
- 该设计无需修改模拟函数内部代码即可适配任意自定义分布,包括均匀分布、偏态分布、混合分布等,只需传入对应的无参抽样函数即可。
- 样本量
n在定义抽样函数时指定即可,无需额外传入prec_t。 - 需要复现结果时,在调用
prec_t前运行set.seed(自定义种子数)固定随机种子即可。
内容的提问来源于stack exchange,提问作者ThiamineUser
相关产品推荐
相关产品推荐

