当前位置:   article > 正文

Bootstrap的三种置信区间:正态、枢轴量、分位数_bootstrap与basic bootstrap置信区间

bootstrap与basic bootstrap置信区间

目录

Bootstrap置信区间

· 正态置信区间

· 枢轴量置信区间

· 分位数置信区间

代码实现


Bootstrap置信区间

        Bootstrap的原理在很多教材和博客上都有详细的解释,这里就不赘述了。在构造Bootstrap置信区间时我们有三种方法:正态近似法、枢轴量法、分位数法。

        给定样本X_1,\cdots ,X_n,假设统计量T_n = g(X1,\cdots ,X_n)是参数\theta = T(F)的一个估计,Bootstrap抽样得到T_{n,1}^{\star}, \cdots ,T_{n,B}^{\star},用\hat{\theta}_{n,1}^{\star}, \cdots \hat{\theta}_{n,B}^{\star}表示\hat{\theta}_n的Bootstrap复本,\theta_{\alpha}^{\star}表示\hat{\theta}_{n,1}^{\star}, \cdots \hat{\theta}_{n,B}^{\star}的下\alpha分位数。求\theta的置信水平为1-\alpha置信区间:

· 正态置信区间

        正态近似法是这三种方法中最常用、最简单的。

(\hat{\theta} - z_{\frac{\alpha}{2}}\sqrt{v_{boot}}, \hat{\theta} + z_{\frac{\alpha}{2}}\sqrt{v_{boot}})

· 枢轴量置信区间

(2\hat{\theta} - \theta_{1-\tfrac{\alpha}{2}}^{\star}, 2\hat{\theta} - \theta_{\tfrac{\alpha}{2}}^{\star})

· 分位数置信区间

(\hat{\theta}_{\tfrac{\alpha}{2}}^{\star}, \hat{\theta}_{1-\tfrac{\alpha}{2}}^{\star})

代码实现

以下面这个题目为例实现Bootstrap和三种方法的置信区间计算:

(计算机实验)用随机模拟比较不同的Bootstrap置信区间方法. 令n=50,并令T(F) = \int \tfrac{(x-\mu)^3}{\sigma^3}dF(x)为偏度. 抽取随机样本使得Y_1, \cdots , Y_n\sim N(0,1),令X_i = e^{Y_i}, i=1,\cdots ,n. 根据数据X_1, \cdots ,X_n,为T(F)构造三种类型的95%的Bootstrap置信区间. 重复整个过程若干次,估计这三个区间的真实值.

        三种方法的Bootstrap过程是一样的,仅在获得Bootstrap复本后的计算式不同。下面的代码可以直接运行,可以得到三个置信区间的输出。

        T_F()这个函数实现了题目中偏度的计算。对于任何其他的估计函数,修改T_F()这个函数即可。

  1. import numpy as np
  2. from scipy.stats import norm
  3. y = np.random.normal(loc = 0.0, scale = 1.0, size = 50)
  4. x = np.exp(y)
  5. def T_F(data):
  6. mu = np.mean(data)
  7. sigma = np.std(data)
  8. temp = ((data - mu) / sigma) ** 3
  9. return (sum(temp) / len(temp))
  10. def bootstrap_replicate_1d(data, func):
  11. bs_sample=np.random.choice(data, len(data))
  12. return func(bs_sample)
  13. def bootstrap_res(data, func, size=1):
  14. bs_replicates = np.empty(size)
  15. for i in range(size):
  16. bs_replicates[i] = bootstrap_replicate_1d(data, func)
  17. return bs_replicates
  18. T_hat = T_F(x)
  19. B_hat = bootstrap_res(x, T_F, size = 10000)
  20. B_sort = sorted(B_hat) # 这一步其实是不必要的,但如果你想用其他方法求分位数可能会用到这一排序结果
  21. std = np.std(B_hat)
  22. alpha = 0.05
  23. z = norm.ppf(q = 1-alpha/2, loc = 0, scale = 1)
  24. print("Bootstrap normal interval: (", T_hat - z * std, ", ", T_hat + z * std, ")")
  25. 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), ")")
  26. print("Bootstrap percentile interval: (", np.percentile(B_sort, alpha/2*100), ", ", np.percentile(B_sort, (1-alpha/2)*100), ")")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/856931
推荐阅读
相关标签
  

闽ICP备14008679号