自主抽样法进行稳健估计——原理与 Python 实现

Posted zhuo木鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自主抽样法进行稳健估计——原理与 Python 实现相关的知识,希望对你有一定的参考价值。

自主抽样法进行稳健估计

设数据集为 x 1 , x 2 , ⋯   , x n x_1, x_2, \\cdots, x_n x1,x2,,xn,n 为样本容量

所谓自主抽样,是指从原始数据集中,有放回地随机抽取 n 个数据,从而构成一个新的数据集。

步骤原理

重复进行自主抽样法 B 次,从而得出 B 个数据集 X i , i ∈ { 1 , 2 , ⋯   , B } X_i, i\\in\\{1,2,\\cdots, B\\} Xi,i{1,2,,B},并计算 X ˉ i \\bar{X}_i Xˉi,从而计算稳健均值为:
x ˉ = X ˉ i ˉ \\bar{x} = \\bar{\\bar{X}_i} xˉ=Xˉiˉ
计算稳健标准差为:
s ˉ = p × ∑ i = 1 B ( X ˉ i − x ˉ ) 2 B − 1 \\bar{s} = \\sqrt{p} \\times \\sqrt{ \\sum_{i=1}^{B} \\frac{(\\bar{X}_i - \\bar{x})^2} {B-1} } sˉ=p ×i=1BB1(Xˉixˉ)2

Python 实现

import numpy as np
import pandas as pd

def boostrap_sampling(x, B=1000):
    '''
    

    Parameters
    ----------
    x : Series
        实验室结果.
    B : int, optional
        自助抽样法的抽样次数. The default is 1000.

    Returns
    -------
    mean : float
        自助抽样法对均值的估计.
    std : float
        自助采样法对标准差的估计 uncertainty * np.sqrt(p)
    uncertainty : float
        自主抽样法对不确定度的估计.

    '''
    if isinstance(x, pd.Series) or isinstance(x, pd.DataFrame):
        x = x.astype('float').values
    if isinstance(x, list):
        x = np.array(x)
    # 样本数量
    p = len(x)
    average_list = []
    for i in range(B):
        idx = np.random.choice(p, size=p, replace=True)
        samples = x[idx]
        average = np.mean(samples)
        average_list.append(average)
    
    uncertainty = np.std(average_list, ddof=1)
    mean = np.mean(average_list)
    std = np.sqrt(p)*uncertainty
    
    return mean, std, uncertainty

以上是关于自主抽样法进行稳健估计——原理与 Python 实现的主要内容,如果未能解决你的问题,请参考以下文章

简单稳健估计法——原理与 Python 实现

简单稳健估计法——原理与 Python 实现

Trimmed 稳健均值估计与 中位数-中位数配对偏差法估计标准差——理论与 Python 实现

Trimmed 稳健均值估计与 中位数-中位数配对偏差法估计标准差——理论与 Python 实现

稳健性估计—— M 估计

稳健性估计—— M 估计