自主抽样法进行稳健估计——原理与 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=1∑BB−1(Xˉi−xˉ)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 实现的主要内容,如果未能解决你的问题,请参考以下文章
Trimmed 稳健均值估计与 中位数-中位数配对偏差法估计标准差——理论与 Python 实现