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

如何在R语言boot函数中指定Bootstrap抽样的样本量

问题描述

我有一个包含20000条观测的数据集,希望每次从中抽取700条观测进行Bootstrap抽样、计算均值,重复执行1000次。我可自行编码实现该逻辑,但想使用boot库以利用其出色的绘图和置信区间(CI)功能。目前不清楚如何在boot函数中指定抽样的样本量(即ind向量的长度),以下是我尝试的boot库代码和手动实现代码,请问如何通过boot函数实现需求?

尝试的boot库代码

df <- seq(1, 20000, 1)
meanfun <- function(data, ind) {
  return(mean(data[ind]))   
}

library(boot)
results <- boot(df, statistic=meanfun, R=10000)

手动实现代码

df <- seq(1, 20000, 1) # 含20000条观测的数据集
meanfun <- function(data) {
  return(mean(data))
} # 计算均值的函数

S <- numeric(1000) # 存储1000次抽样结果的向量
for (i in 1:1000) {
  one_sample <- sample(df, 700) # 抽取700条随机观测
  print(one_sample)
  one_result <- meanfun(one_sample) # 计算该样本的均值
  S[i] <- one_result # 存储结果
}
S
meanfun(S) # 计算1000次结果的平均值
解决方案

默认情况下,boot包的boot()函数会进行有放回的同规模抽样(即每次抽样样本量和原数据集一致),要实现固定抽取700条的Bootstrap,需要修改统计量函数,在函数内部手动完成抽样逻辑,而非直接使用传入的ind参数。

修改后的代码如下:

df <- seq(1, 20000, 1)
# 重写统计量函数:内部完成700条的随机抽样
meanfun <- function(data, dummy) {
  # 从原数据中随机抽取700条(有放回,符合Bootstrap要求)
  sample_data <- sample(data, size = 700, replace = TRUE)
  return(mean(sample_data))
}

library(boot)
# R指定为1000次重复,dummy为占位参数,满足boot函数的参数要求
results <- boot(df, statistic = meanfun, R = 1000)

关键说明

  • 原boot()函数的ind参数是用于同规模抽样的索引,我们不需要它,因此用占位参数(如dummy)替代
  • 在统计量函数内部用sample(data, size=700, replace=TRUE)实现每次抽取700条的有放回抽样,符合Bootstrap核心逻辑
  • 执行完成后,results对象可直接使用boot包的配套工具:
    • plot(results):绘制Bootstrap结果诊断图
    • boot.ci(results):计算不同类型的置信区间

内容的提问来源于stack exchange,提问作者Jenna Grimshaw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:50:24