当前位置: 首页 > news >正文

R语言学习--Day08--bootstrap原理及误区

今天我们来学习统计学中一个很有意思的方法:bootstrap

bootstrap(自助法)

bootstrap是一种重采样统计方法,其核心思想是:

  1. 从原始数据中有放回地随机抽取样本,形成新的"虚拟"样本(称为bootstrap样本);

  2. 在每个bootstrap样本上计算我们感兴趣的统计量;

  3. 重复这个过程很多次(通常1000次或更多);

  4. 用这些统计量的分布来估计原始统计量的抽样分布。

       操作听起来很简单,但我们要理解其背后的思想,这样才能知道什么时候用它以及,能带给我们什么帮助。

       一般来讲,bootstrap只运用在数据量较少的样本集上,大概在30,极端点的话,5也有可能。那么这就会抛出一个疑问:既然是为了了解数据的分布,为什么还要多次有放回的抽取呢?

       事实上,多次有放回的抽取,是为了避免数据中个别离散值对我们计算得到的统计指标的影响,因为是有放回的抽样,所以我们在多次的bootstrap抽样中,会出现同个数据点被多次采集的情况,相对应的,也就会削弱离散值的影响。

       当然,到这里,我们依然无法解释为什么要抽样去看这些分布,可能有的人会问:明明数据量都这么少了,为什么不选择直接画图呢,这样可以更清晰地观察到数据本身的特点。让我们把重点放在“数据本身”,这就是bootstrap的核心使用意义了。

       如果我们把关注的重点放在指标的可靠程度上,也就是置信度,那么我们也就不难理解bootstrap的操作步骤中,为什么要进行有放回的抽样,这是为了模拟我们在一个大样本中,抽样得到的样本集的置信区间,也就是模拟抽样这个过程的不确定性。举一个恰当点的例子说明就是,假如我是一名生态学家,我要在一片森林中布置五个样方用于测量生物量,实际上得到的数据,也就只有手头的五个指标的均值,而如果使用bootstrap对这五个指标进行计算,我们就可以估算出,在这篇森林中的不同位置设置5个样方,得到的均值会跟我们测算的均值差距有多大;如果用气温比喻,则是比如我们今天统计了气象站的数据得到了今天的平均气温是22℃,但全年的日平均气温的分布,会告诉我们22℃这个值是否属于异常值,是代表太热还是太冷。

        下面我们照例生成一组数据来演示如何使用bootstrap:

set.seed(123)
# 真实总体:混合分布(主体分布+离群值)
true_strength <- c(rweibull(80, shape=2, scale=50),  # 主体数据rweibull(20, shape=1, scale=120))  # 离群组分# 研究者实际获得的样本(n=15)
sample_strength <- sample(true_strength, 15)
print(sample_strength)par(mfrow=c(1,2))# 传统正态近似法
hist(sample_strength, main="原始数据分布", xlab="断裂强度", col="lightblue")
abline(v=median(sample_strength), col="red", lwd=2)# Bootstrap中位数分布
boot_medians <- replicate(1000, {new_sample <- sample(sample_strength, length(sample_strength), replace=TRUE)median(new_sample)
})
hist(boot_medians, main="Bootstrap中位数分布", xlab="中位数", col="lightgreen")
abline(v=median(sample_strength), col="red", lwd=2)# 基本Bootstrap
cat("原始中位数:", median(sample_strength), "\n")
cat("Bootstrap 95% CI:", quantile(boot_medians, c(0.025, 0.975)), "\n")# 使用boot包更精确计算
library(boot)
median_func <- function(data, indices) median(data[indices])
boot_results <- boot(sample_strength, statistic=median_func, R=1000)
boot.ci(boot_results, type="bca")  # 偏差校正加速区间

输出:

 [1]  32.482421  45.166161  30.290634  14.461087  16.031943  80.447642   1.818878  96.234774[9]  60.469666  69.219757  44.472626   9.705244 244.186035  56.860091  37.333281
原始中位数: 44.47263 
Bootstrap 95% CI: 30.29063 60.46967 
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 1000 bootstrap replicates
95%   (16.03, 56.86 )

从图中可以看到,如果只是观察数据本身的分布,只能知道一个中位数,而bootstrap的反馈结果则是真是样本的中位数可能低至16.03或高至56.8。

所以说,本质上,当我们不确定原始数据长什么样,是否存在离散值或者分布很奇怪的时候,就可以用bootstrap来确定一些统计指标,这有助于我们更好的认识数据,打破我们一开始对数据的认知局限。

相关文章:

  • Vanna.AI:用检索增强技术革新SQL查询生成
  • WSL 下面 Buildroot + QEMU 环境记录一下
  • PCB布局设计
  • 【mediasoup】MS_DEBUG_DEV 等日志形式转PLOG输出
  • 【数据集】中国多属性建筑数据集CMAB
  • springboot中各模块间实现bean之间互相调用(service以及自定义的bean)
  • C# 曲线编写总览
  • (17) 关于工具箱 QToolBox 的一个简单的范例使用,以了解其用法
  • 快速解决Linux 中yum镜像拉取失败问题
  • 从协议壁垒到无缝协同:Profibus转Profinet网关的智造赋能逻辑
  • Oracle基础知识(四)
  • 力扣HOT100之回溯:46. 全排列
  • 大数据治理:理论、实践与未来展望(一)
  • ROS云课三分钟-破壁篇GCompris-一小部分支持Edu应用列表-2025
  • 第一课如何学习课程
  • Dify源码学习
  • csp备考Day1|string和vector
  • 几个MySQL系统调优工具
  • 03-工具篇-SSH远程登录ubuntu系统
  • Kubernetes in action-机理
  • 网站建设网络推广加盟/外贸网站都有哪些
  • 直播间 网站建设/网络营销的营销策略
  • 企业管理控制系统/百度seo查询系统
  • 制作表白网站教程/seo推广方法集合
  • 微信网站开发 js框架/现在搜什么关键词能搜到网站
  • 域名怎么做网站内容/谷歌搜索引擎优化