重采样方法的完整指南

重采样方法的完整指南

重采样是一种统计技术,用于从初始数据产生更多数据样本,从中可以推断出有关总体或生成初始数据的过程的信息。当需要从给定数据估计总体参数或可用数据点较少时,这些方法在数据分析中被广泛使用。重采样方法通常使用自助法、杰克刀法和排列检验等技术来估计标准误差、置信区间和P值。分析和解释数据是数据科学家最重要的职责之一。然而,提供的数据并不总是足够代表性,这可能导致错误的推断。在这些情况下,可以使用重采样技术从现有数据中创建新样本,以更精确地估计参数或测试假设。本文将为重采样策略(自助法和排列检验)提供全面的概述,包括它们的种类、优点和缺点。

自助法

自助法是一种重采样技术,其中重复使用带替换的数据集来提供用于计算感兴趣统计量的新样本,然后利用这种方法来估计各种统计模型和估计量的标准误差、置信区间和P值。在自助法中,对于每个新样本,获取感兴趣的统计量,然后利用这些统计量的分布来推导统计量的总体变异性。

优势

  • 自助法是一种非参数方法,因为它不依赖于总体分布的假设。

  • 它是一种对数据分析非常有价值的方法,因为它对异常值和数据的非正态性具有抗干扰能力。

  • 许多其他统计量(如均值、中位数、相关系数和回归系数)的变异性可以使用这种方法来估计。

  • 它作为一种强大的假设检验和置信区间计算工具,因为它可以给出对统计量不确定性的精确估计。

缺点

  • 自助法可能需要计算量巨大,尤其是如果数据集很大或感兴趣的统计量需要复杂计算。

  • 在样本大小有限或整体总体偏斜的情况下,可能引入偏差。

  • 由于它基于数据点相互独立的思想,对于依赖性数据(如时间序列数据)可能不合适。

示例

本示例将使用scikit-learn中的鸢尾花数据集。

import numpy as np
from sklearn.datasets import load_iris

# load iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# bootstrap function
def bootstrap(data, n_bootstraps, statistic):
   """Generate new samples by bootstrapping the data and calculate the statistic."""

   # initialize array to store statistic
   boot_statistic = np.zeros(n_bootstraps)

   # generate new samples by bootstrapping the data
   for i in range(n_bootstraps):
       bootstrap_sample = np.random.choice(data, size=len(data), replace=True)
       boot_statistic[i] = statistic(bootstrap_sample)

   return boot_statistic

# calculate mean sepal length by bootstrapping
mean_sepal_length = np.mean(X[:, 0])
boot_means = bootstrap(X[:, 0], n_bootstraps=1000, statistic=np.mean)
lower, upper = np.percentile(boot_means, [2.5, 97.5])
print(f"Mean Sepal Length: {mean_sepal_length:.2f}")
print(f"95% Confidence Interval: ({lower:.2f}, {upper:.2f})")

输出

Mean Sepal Length: 5.84
95% Confidence Interval: (5.72, 5.99)

鸢尾花数据集被初始加载到代码示例中,然后从特征矩阵X中提取萼片长度值。接下来定义了一个bootstrap函数,它接受三个参数:数据、bootstrap次数和统计函数。通过对数据进行自助采样,函数会创建新的样本,并计算每个自助样本提供的统计量。

然后,我们计算原始数据集的萼片长度平均值,使用bootstrap函数生成1000个新样本,然后计算每个样本的萼片长度平均值。接下来使用percentile函数获取平均萼片长度的95%置信区间。

置换检验

在重采样方面,置换检验是一种可靠且适应性强的方法,可用于多种统计检验。置换检验通过随机置换初始数据集中一个或多个变量的值来创建新样本,而不是像自助法那样使用有放回抽样。因此,它们对于评估涉及两个或多个组之间的差异的假设或确定两个测量之间差异的重要性特别有帮助。置换检验可以应用于各种数据类型,与潜在总体分布的假设无关。

优点

  • 置换检验不对置换检验中所使用的总体分布做任何假设。它们是灵活的工具,可以适用于多种数据类型和实验布局。

  • 通过从原始数据集中生成新样本,置换检验可以提供准确的不确定性和显著性估计。它们更可靠,因为它们不依赖于传统检验那样的样本大小或总体分布的假设。

  • 置换检验可以用于进行各种统计检验,包括t检验、方差分析和相关性分析。

  • 在样本大小有限或数据呈非正态分布的情况下,置换检验通常比传统检验更成功。

缺点

  • 当样本大小或置换次数较大时,置换检验可能需要较多的计算资源。

  • 对于一些类型的数据或实验设计,尤其是包含异常值或缺失值的数据,置换检验可能不适用。

  • 将置换检验解释给非专业人士可能会有一定挑战,因为它比标准检验更难理解。

示例

当然!以下是使用scipy模块展示如何在Python中进行置换检验的示例。我们将使用“鸢尾花”数据集,该数据集包含三种不同类型鸢尾花的萼片长度、萼片宽度、花瓣长度和花瓣宽度的测量值。

import numpy as np
from scipy.stats import ttest_ind

# Load the iris dataset
from sklearn.datasets import load_iris
iris = load_iris()
setosa_petal_length = iris.data[:50, 2]  # Select the petal length of the first species
versicolor_petal_length = iris.data[50:100, 2]  # Select the petal length of the second species

# Calculate the observed difference in means between the two groups
obs_diff = np.mean(setosa_petal_length) - np.mean(versicolor_petal_length)

# Permutation test
n_permutations = 10000
diffs = []
for i in range(n_permutations):

   # Randomly permute the data
   permuted_data = np.random.permutation(np.concatenate([setosa_petal_length, versicolor_petal_length]))

   # Split the permuted data into two groups
   permuted_setosa = permuted_data[:50]
   permuted_versicolor = permuted_data[50:]

   # Calculate the difference in means between the two groups
   permuted_diff = np.mean(permuted_setosa) - np.mean(permuted_versicolor)
   diffs.append(permuted_diff)

# Calculate the p-value as the proportion of permuted differences greater than or equal to the observed difference
p_value = np.sum(np.array(diffs) >= obs_diff) / n_permutations
print('Observed difference in means:', obs_diff)
print('p-value:', p_value)

输出

Observed difference in means: -2.7979999999999996
p-value: 1.0

在这个例子中,我们将应用置换检验来研究以下断言:鸢尾花的种类setosa和versicolor之间的花瓣长度没有差异。在计算两组之间的观察均值差异后,数据被随机置换,并确定每个置换的均值差异。P值被计算为在这种方法的10,000次重复中,大于或等于观察到的差异的置换差异的比例。如果P值低于预定的显著性水平,那么零假设将被忽略,并且决定这两个物种之间在花瓣长度方面存在显著差异(例如,0.05)。

结论

总而言之,为了有效地估计不确定性并评估统计检验的显著性,重采样技术是数据科学家工具箱中至关重要的组成部分。重采样技术使数据科学家能够对潜在的总体分布得出结论,而无需做出关于其特征或形式的任何假设。这是至关重要的,因为常规的统计检验在应用于小样本或有偏样本时可能不准确。使用重采样技术,还可以评估机器学习模型的稳定性,并预测其在新鲜、未经测试的数据上的性能。通过使用引导法、交叉验证和置换检验等重采样技术,数据科学家可以确保其发现是可靠的、可信的和可重复的。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程