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

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来确定一些统计指标,这有助于我们更好的认识数据,打破我们一开始对数据的认知局限。

http://www.xdnf.cn/news/8700.html

相关文章:

  • Ollama01-安装教程
  • 【MySQL】07.表内容的操作
  • Android 16系统源码_自由窗口(一)触发自由窗口模式
  • Gateway全局过滤器:接口耗时统计与黑白名单配置
  • R语言科研编程-柱状图
  • STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)
  • 黑马点评双拦截器和Threadlocal实现原理
  • 行列式的线性性质(仅限于单一行的加法拆分)
  • 电机控制储备知识学习(五) 三项直流无刷电机(BLDC)学习(四)
  • 思科硬件笔试面试题型解析
  • 7:OpenCV—图像形态学处理
  • 深度学习实战:从图像分类到文本生成的完整案例解析
  • DAY 35 模型可视化与推理
  • 力扣面试150题--求根节点到叶节点数字之和
  • 如何屏蔽mac电脑更新提醒,禁止系统更新(最新有效方法)
  • 5060显卡驱动PyCUDA开发环境搭建
  • 25. 日志装饰器的开发
  • 使用 Go 语言实现完整且轻量级高性能的 MQTT Broker
  • Vue3 Composition API: 企业级应用最佳实践方案
  • SDL2常用函数:SDL_Texture 数据结构及使用介绍
  • 微信小程序数据接收
  • 数据结构---二叉树
  • 基于python的机器学习(九)—— 评估算法(二)
  • OpenLayers 开发环境搭建
  • 初识 RocketMQ 知识总结:基础概念、架构解析、核心特性与应用场景
  • 解决“uv 无法识别为命令”问题:Windows 下 Python 工具安装后的路径配置方法
  • 国际前沿知识系列五:时间序列建模方法在头部撞击运动学测量数据降噪中的应用
  • Spring Cloud Gateway 微服务网关实战指南
  • python操作MySQL数据库
  • 再论自然数全加和-4