赞
踩
目录
Bootstrap的原理在很多教材和博客上都有详细的解释,这里就不赘述了。在构造Bootstrap置信区间时我们有三种方法:正态近似法、枢轴量法、分位数法。
给定样本,假设统计量是参数的一个估计,Bootstrap抽样得到,用表示的Bootstrap复本,表示的下分位数。求的置信水平为置信区间:
正态近似法是这三种方法中最常用、最简单的。
以下面这个题目为例实现Bootstrap和三种方法的置信区间计算:
(计算机实验)用随机模拟比较不同的Bootstrap置信区间方法. 令n=50,并令为偏度. 抽取随机样本使得,令. 根据数据,为构造三种类型的95%的Bootstrap置信区间. 重复整个过程若干次,估计这三个区间的真实值.
三种方法的Bootstrap过程是一样的,仅在获得Bootstrap复本后的计算式不同。下面的代码可以直接运行,可以得到三个置信区间的输出。
T_F()这个函数实现了题目中偏度的计算。对于任何其他的估计函数,修改T_F()这个函数即可。
- import numpy as np
- from scipy.stats import norm
-
- y = np.random.normal(loc = 0.0, scale = 1.0, size = 50)
- x = np.exp(y)
-
- def T_F(data):
- mu = np.mean(data)
- sigma = np.std(data)
- temp = ((data - mu) / sigma) ** 3
- return (sum(temp) / len(temp))
-
- def bootstrap_replicate_1d(data, func):
- bs_sample=np.random.choice(data, len(data))
- return func(bs_sample)
-
- def bootstrap_res(data, func, size=1):
- bs_replicates = np.empty(size)
- for i in range(size):
- bs_replicates[i] = bootstrap_replicate_1d(data, func)
- return bs_replicates
-
- T_hat = T_F(x)
- B_hat = bootstrap_res(x, T_F, size = 10000)
- B_sort = sorted(B_hat) # 这一步其实是不必要的,但如果你想用其他方法求分位数可能会用到这一排序结果
- std = np.std(B_hat)
- alpha = 0.05
- z = norm.ppf(q = 1-alpha/2, loc = 0, scale = 1)
-
- print("Bootstrap normal interval: (", T_hat - z * std, ", ", T_hat + z * std, ")")
- print("Bootstrap pivotal interval: (", 2 * T_hat - np.percentile(B_sort, (1-alpha/2)*100), ", ", 2 * T_hat - np.percentile(B_sort, alpha/2*100), ")")
- print("Bootstrap percentile interval: (", np.percentile(B_sort, alpha/2*100), ", ", np.percentile(B_sort, (1-alpha/2)*100), ")")
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。