You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:39:03