【统计方法】Bootstrap, 缺失值机制与处理,kappa指标,类别不均衡:采样方法介绍

什么是 Bootstrap?(统计学意义)

Bootstrap 是一种自助采样法(resampling),用于估计统计量的分布,特别是在理论推导困难或者样本量有限的情况下。
它的核心思想是:通过对已有样本进行重复抽样,来近似总体的抽样分布。

最早由 Bradley Efron 在1979年提出。


为什么需要 Bootstrap?

在统计推断中,我们经常关心:

  • 我的样本均值的标准误是多少?
  • 我的回归系数的置信区间是多少?
  • 我的机器学习模型的性能评估结果有多稳定?

传统的方法(比如中心极限定理)需要很多理论假设,比如数据独立同分布(i.i.d)、服从正态分布等等。
但是当样本小、分布复杂、理论不可用时,我们可以通过Bootstrap直接在数据上做推断。


Bootstrap 的基本流程

假设你有一个样本数据集 X={x1,x2,…,xn,步骤如下:

  1. 从原始数据中“有放回”地随机抽取 n 个数据点,形成一个新的样本集(称为 Bootstrap 样本)
    • 注意是“有放回”的,即抽过的数据可以再被抽到。
  2. 在这个 Bootstrap 样本上,计算你关心的统计量(比如均值、回归系数、中位数等)。
  3. 重复步骤1-2多次(比如1000次、10000次),每次都记录下统计量。
  4. 根据这些重复计算得到的统计量的分布,来估计标准误、置信区间,甚至进行假设检验。

简单例子

比如你有数据:

X={2,4,5,7,9}

你想知道均值的标准误。
Bootstrap过程可能是:

  1. 第一次抽样:{4, 4, 5, 9, 2} → 均值 = 4.8
  2. 第二次抽样:{5, 5, 7, 7, 9} → 均值 = 6.6
  3. 第三次抽样:{2, 2, 5, 7, 9} → 均值 = 5.0
    … 重复1000次,得到1000个均值。
    这些均值的标准差就是均值估计的标准误

抽样变异性与估计量的方差

主要概念

当我们估计一个总体参数时,结果依赖于我们抽取的样本
如果我们换一个不同的样本,那么得到的估计结果通常也会不同。

这种现象被称为抽样变异性(Sampling Variability)


估计量的方差(Variance of an Estimator)

为了描述抽样变异性的程度,我们引入了估计量的方差这个概念。

  • 如果一个估计量的方差很小,说明无论抽取哪一个样本,估计结果都很接近
  • 如果方差很大,说明不同样本之间,估计结果波动很大

因此,估计量的方差衡量了估计结果在不同样本之间的稳定性


理想的估计量应具备的两个特性

在实际统计分析中,我们希望估计量具有以下两个重要性质:

  1. 无偏性(Unbiasedness)
    估计值在平均意义上要接近真实的总体参数,即:

    E(θ^)=θE(\hat{\theta}) = \thetaE(θ^)=θ

    ——长期来看,估计量的期望等于真实值。

  2. 低方差(Low Variance)
    不同样本下估计结果的波动要小,保证估计稳定可靠。

只有同时满足无偏性低方差,我们才能认为一个估计量是“好”的估计量。


如何估计估计量的方差?

要估计一个估计量的方差,理论上需要反复从总体中抽取样本,并在每个样本上重新计算估计值
通过观察这些估计值的变化范围,我们可以得到估计量的方差。

由于实际中往往无法无限次抽样(只有一个样本),我们通常采用一些近似方法,比如:

  • Bootstrap重采样(自助法)
  • 交叉验证(Cross-Validation)

这些方法帮助我们在有限数据条件下,近似估计出估计量的方差。

举例说明:如何估计变异性(标准误)

背景

假设我们对某个参数 α进行了重复抽样,共获得了 1000 个估计值,记作:

α 1 , α 2 , … , α 1 000 α ^ 1 , α ^ 2 , … , α ^ 1000 α^1,α^2,…,α^1000\hat{\alpha}_1, \hat{\alpha}_2, \dots, \hat{\alpha}_{1000} α1,α2,,α1000α^1,α^2,,α^1000

这些是我们从1000个不同样本中,通过某种方法(例如最小方差加权)得到的 α的估计值。

步骤一:计算平均估计值

我们先计算这些估计值的平均:

α ^ ˉ = 1 1000 ∑ k = 1 1000 α ^ k = 0.6662595 \bar{\hat{\alpha}} = \frac{1}{1000} \sum_{k=1}^{1000} \hat{\alpha}_k = 0.6662595 α^ˉ=10001k=11000α^k=0.6662595

这个平均值非常接近我们已知的真实值 α=0.6666667,说明这个估计方法是基本无偏的

步骤二:估计标准误(Standard Error)

我们关心的是:如果我们从总体中随机抽一个样本,那么估计值 α ^ \hat{\alpha} α^ 可能会偏离真实值多少?

这个问题可以通过计算所有估计值的标准差来回答:

S E ( α ^ ) = 1 1000 − 1 ∑ k = 1 1000 ( α ^ k − α ^ ˉ ) 2 = 0.0760217 SE(\hat{\alpha}) = \sqrt{ \frac{1}{1000 - 1} \sum_{k=1}^{1000} (\hat{\alpha}_k - \bar{\hat{\alpha}})^2 } = 0.0760217 SE(α^)=100011k=11000(α^kα^ˉ)2 =0.0760217

这个值(0.0760)就是我们对 α ^ \hat{\alpha} α^ 的标准误的估计,反映了估计的不确定性

现实中的应用:Bootstrap 方法的意义与结果比较

我们面临的现实限制

在理论上,如果我们想估计某个统计量的方差(比如均值、回归系数的波动),最理想的做法是:

从总体中重复抽样,每次都计算一次估计量,然后分析这些结果的分布。

但在现实中,这是几乎不可能做到的,因为:

  • 我们通常只有一个数据集
  • 总体是不可见的,我们无法真正从总体中无限制地抽样。
Bootstrap 的解决思路

Bootstrap(自助法) 就是为了解决这个问题而提出的:

它通过在已有样本中有放回地抽样,模拟“重复抽样”的过程。

关键点

  • 每次 Bootstrap 抽样都从原始数据集中“有放回地抽取”与原样本同样大小的样本;
  • 某些观测值可能在同一个 Bootstrap 样本中出现多次,而有些可能根本没被抽到;
  • 每一次抽样都可以看作是从“总体”中抽取的一个替代版本;
  • 我们对每一个 Bootstrap 样本都重新计算统计量,进而评估其分布、方差、置信区间等。
Bootstrap 重采样算法小结
  • 初始样本大小为 n;
  • 每次从中“有放回”抽取 n 个样本,组成一个新的 Bootstrap 样本;
  • 重复这个过程很多次(如1000次);
  • 在每个样本上计算感兴趣的统计量(均值、方差、回归系数等);
  • 对这些结果进行汇总、求平均、估计标准误、构建置信区间等。
Bootstrap 与理论总体结果的比较
特点真正的总体抽样Bootstrap 重采样
来源总体(不可得)原始样本
可行性理论理想,但现实中不可行现实中可行且操作简单
是否需要知道总体分布
模拟抽样变异性是(近似)
是否“创造新数据”否(只重组已有数据)

结论

Bootstrap 是一种在只有一个数据集的情况下,用来近似估计抽样不确定性的强大工具。它不能完全等价于从总体中重复抽样,但在大多数情况下非常接近,且适用于广泛的统计问题。

缺失数据(Missing Data)处理

面对缺失的态度

著名统计学家 Gertrude Mary Cox 曾说:

“处理缺失数据最好的办法,就是一开始就不要让数据缺失。”

虽然如此,实际应用中难免遇到缺失。因此,掌握检测和应对缺失的方法至关重要。

使用 R 语言探索缺失数据

airquality 数据集为例,常见检查方法如下:

library(naniar)
glimpse(airquality)   # 查看数据框结构
any_na(airquality)    # 检查数据集中是否存在缺失值
head(is.na(airquality$Solar.R))  # 查看Solar.R列前几行是否缺失

输出显示:

  • airquality 存在缺失值;
  • 而经典数据集 iris 没有缺失:
any_na(iris)
# 输出: [1] FALSE

这种快速检查,有助于在数据清洗阶段及时发现问题。


缺失机制(Missing Data Mechanisms):理解数据为何缺失

在实际数据分析中,我们经常遇到**缺失值(Missing Data)*的问题。想要合理处理缺失数据,首先必须了解数据*缺失的原因,也就是所谓的“缺失机制”(Missingness Mechanism)。

缺失的原因可以大致分为三类,每类对结果的影响不同,对应的处理方法也不同:


1. 完全随机缺失(MCAR:Missing Completely at Random)

定义

数据的缺失与任何观测变量或未观测变量都无关,完全是随机发生的
换句话说,缺失的概率与数据的内容没有任何关联。

示例
TestSpecial Consideration
65FALSE
NATRUE
80FALSE
70FALSE
NAFALSE

在这个例子中,Test 项中某些值缺失,但缺失与是否有 “Special Consideration” 没有任何明显关联,也没有与其它变量关联,因此认为是“完全随机缺失”。

处理建议
  • 可以使用插补法(imputation)填补缺失值;
  • 也可以直接删除含缺失的观测值,因为这不会引入偏差(Bias);
  • 注意:虽然删除不会造成偏差,但会减少样本量,从而降低统计推断的能力和模型的预测力。

2. 随机缺失(MAR:Missing at Random)

定义

缺失发生的概率与其他已观测到的变量有关,但与缺失本身的值无关

也就是说,我们可以通过已知信息来解释缺失的原因

示例
TestSpecial ConsiderationHealth
65FALSEGood
NATRUEPoor
80FALSEGood
70FALSEGood
NAFALSEPoor

可以发现,缺失值往往出现在 Health 为 “Poor” 的行上。也就是说,缺失与 Health 有关,但缺失的数据(如 Test 的真实分数)本身没有直接影响缺失概率。

处理建议
  • 强烈建议使用插补方法(如多重插补、多变量回归插补等);
  • 这种机制下,简单删除可能会导致偏差;
  • 利用观测到的变量进行模型化,是可靠的解决思路。

3. 非随机缺失(MNAR:Missing Not at Random)

定义

缺失与未观测变量或缺失本身的值有关

也就是说,缺失是系统性的,缺失值本身的大小会影响它是否缺失

示例
TestSpecial ConsiderationHealth
65FALSEGood
NATRUENA
80FALSEGood
70FALSEGood
NAFALSENA

在这个例子中,TestHealth 同时缺失,说明这些缺失值可能正是因为数据太“敏感”或太“差”而未被记录。这类缺失不容易从已有变量中预测出来

处理建议
  • 无法通过插补简单解决;
  • 需要对“缺失机制”本身进行建模(例如选择模型、潜变量模型等);
  • 通常需要结合领域知识、调查设计信息等辅助信息;
  • 是三种机制中最棘手、最复杂的一种。

实战建议:处理缺失数据的更多实用技巧

在数据分析的实际过程中,处理缺失值不仅仅是套用插补方法或简单删除,以下是一些更实际、更有用的建议,帮助你在不同情况下做出更好的决策。


建议一:可视化缺失模式

强烈建议你在处理缺失数据前,先进行可视化分析

  • 观察缺失值是否集中在特定变量或特定时间段;
  • 是否出现在某一类群体、类别、或变量组合中。

R中可以使用 naniar 包或 VIM 包快速绘制缺失图。例如:

library(naniar)
vis_miss(data)

通过图形,我们往往能判断出缺失机制是 MCAR、MAR,还是 MNAR。


建议二:警惕高比例缺失的变量

  • 如果一个变量有很高比例的缺失(如超过50%),需要谨慎使用;
  • 不是说必须删除,而是要评估它是否还具有分析价值;
  • 如果插补方法在这个变量上效果好,那它依然可以保留;
  • 若变量本身对预测无贡献、缺失又严重,建议剔除。

建议三:有些算法本身能处理缺失

并不是所有模型都需要我们在建模前填补缺失:

  • 决策树(如 CART, Random Forest) 通常可以自然处理缺失;
  • 某些基于分裂点的方法会自动选择可用变量进行划分;
  • 这意味着:对于树类模型,有时不需要插补,甚至保留缺失值反而保留了信息。

建议四:将缺失情况作为信息变量使用

有些时候,缺失本身就蕴含信息,比如:

  • 没有填写收入的人,可能是收入过低或过高;
  • 医疗记录缺失可能说明病情特别严重或轻微;

在这类情况下,可以创建一个**哑变量(dummy variable)**来表示“是否缺失”:

data$income_missing <- is.na(data$income)

然后将这个变量作为模型的一个输入,捕捉“缺失的影响”。


建议五:常用 R 插补包推荐

以下是几个常用的、成熟的 R 包,帮助你处理缺失值:

1. impute (来自 Bioconductor)
  • 主要用于生物芯片数据;
  • 提供 KNN 插补 方法;
  • 适用于高维度基因表达矩阵。
2. mice (Multivariate Imputation by Chained Equations)
  • 提供多重插补(Multiple Imputation)
  • 支持不同变量类型的建模(线性、逻辑回归等);
  • 非常通用、灵活,广泛应用于社会科学、医学研究等。
library(mice)
imp <- mice(data, m = 5, method = "pmm")
completed_data <- complete(imp, 1)
3. missForest
  • 基于随机森林的插补方法;
  • 不依赖于变量分布假设;
  • 可同时处理连续型和分类变量
  • 插补效果通常非常强大(将在树模型模块进一步学习)。
library(missForest)
imputed <- missForest(data)
imputed_data <- imputed$ximp
4. Amelia II
  • 也是用于多重插补
  • 高效处理时间序列与横截面数据;
  • 支持平行计算;
  • 适合经济学、政治科学等场景。

分类问题中的性能评估指标

在分类模型(如逻辑回归、决策树、KNN等)中,准确评估模型性能非常重要。常用指标包括 F1 分数(F1-score)和 Cohen’s Kappa 系数。

F1 分数

F1 分数是精确率(Precision)和召回率(Recall)的调和平均数,公式为:

F 1 = 2 × Precision × Recall Precision + Recall F1 = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} F1=2×Precision+RecallPrecision×Recall

其中:

  • Precision(精确率) = 真阳性数 / (真阳性数 + 假阳性数)
  • Recall(召回率) = 真阳性数 / (真阳性数 + 假阴性数)

F1 分数综合考虑了 Precision 和 Recall,在类别不平衡的情况下特别有用。

Kappa 系数(Cohen’s Kappa)

Kappa 系数衡量模型预测与随机预测的一致性,定义为:

κ = P o − P e 1 − P e \kappa = \frac{P_o - P_e}{1 - P_e} κ=1PePoPe

其中:

  • P o P_o Po 是观测一致率;
  • P e P_e Pe 是期望一致率(随机预测情况下)。

示例计算

假设分类模型结果如下:

  • 真实标签和预测标签一致的比例( P o P_o Po) = 0.75
  • 随机一致率( P e P_e Pe) = 0.51

那么:

κ = 0.75 − 0.51 1 − 0.51 = 0.24 0.49 ≈ 0.49 \kappa = \frac{0.75 - 0.51}{1 - 0.51} = \frac{0.24}{0.49} \approx 0.49 κ=10.510.750.51=0.490.240.49

Kappa 值解释:

  • κ=1:完美一致
  • κ=0:与随机一致无异
  • κ<0:比随机预测还差

混淆矩阵(Confusion Matrix)解读

下面是一个典型的二分类混淆矩阵例子:

Reference PositiveReference Negative
Predicted Positive00
Predicted Negative298

该模型的各项统计指标如下:

  • 准确率(Accuracy) = 0.98
  • 95%置信区间 = (0.9296, 0.9976)
  • Kappa = 0(表明模型无有效信息) P e = 0.02 ∗ 0 + 0.98 ∗ 1 P_e = 0.02*0 + 0.98*1 Pe=0.020+0.981 k = 0.98 − 0.98 / 1 − 0.98 k = 0.98-0.98/1-0.98 k=0.980.98/10.98
  • 敏感度(Sensitivity) = 0
  • 特异度(Specificity) = 1
  • 阳性预测值(Pos Pred Value) = NaN
  • 阴性预测值(Neg Pred Value) = 0.98

可以看出,虽然整体准确率高,但由于没有正确预测任何正例(positive),模型在检测少数类别时表现极差。因此,仅靠准确率是不够的,必须结合其他指标如F1、Kappa等一起考量。

类别不平衡处理(Class Imbalance Handling):采样方法与实战建议

在分类问题中,类别不平衡(如 99:1、95:5 的标签比例)是一种常见且严重影响模型表现的问题。此时,准确率容易“欺骗”我们,而模型可能对少数类几乎完全无预测能力。

解决类别不平衡的方法有很多,其中一种核心策略就是——修改训练数据本身的分布(采样)


方法一:下采样(Down-sampling)

原理

从多数类中随机删除一部分样本,使得它与少数类样本数量接近。

优点
  • 不会引入重复或伪造数据;
  • 简单高效,特别适用于极端不平衡的场景。
缺点
  • 丢弃了原始数据,可能损失有用信息;
  • 若数据量本身就不大,容易导致欠拟合。

方法二:上采样(Up-sampling)

原理

通过复制少数类样本(或人工生成新样本)来扩展其数量,使其接近多数类样本数。

类型
1. 随机上采样
  • 直接重复已有的少数类样本;
  • 实现简单,但会引入重复样本。
2. 合成上采样:SMOTE(Synthetic Minority Over-sampling Technique)
SMOTE 原理
  1. 对每个少数类样本,找出其 k 个最近邻
  2. 随机选一个邻居,在它与原样本之间插值,生成一个新样本
  3. 重复生成直到满足目标数量。
优点
  • 生成的新样本不是重复的,具有一定多样性;
  • 比单纯复制更能帮助模型学习边界。
缺点
  • 可能生成不合理或“虚假”的数据;
  • 必须在训练集上做,不能提前对整体数据做 SMOTE,否则会泄露测试集信息(Data Leakage)。

R 语言中的类别平衡采样工具

以下是 R 中常用的包和函数,可直接应用于类别平衡处理:

1. ROSE::ovun.sample()
  • 支持下采样、上采样,也支持混合(hybrid);
  • 用法简单,适用于二分类和平衡处理实验。
library(ROSE)
balanced_data <- ovun.sample(Class ~ ., data = mydata, method = "both", p = 0.5, seed = 1)$data
2. themis::step_smote()
  • 基于 SMOTE 的步骤函数,适用于 tidymodels 工作流
  • 可处理 二分类和多分类问题
  • 底层使用 KNN 算法合成新样本。
library(themis)
recipe(Class ~ ., data = train_data) %>%
  step_smote(Class)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值