Bootstrap là một phương pháp dựa trên máy tính để chỉ định các phép đo độ chính xác [độ lệch, phương sai, khoảng tin cậy, lỗi dự đoán, v.v. ] để ước tính thống kê. Ý tưởng là sử dụng mẫu được quan sát để ước tính phân bố dân số. Sau đó, các mẫu có thể được rút ra từ dân số ước tính và bản thân phân phối lấy mẫu của bất kỳ loại công cụ ước tính nào cũng có thể được ước tính
Quy trình chung của bootstrap
Để sửa ký hiệu
- thống kê quan tâm. $s[x]$
- một mẫu quan sát ngẫu nhiên. \[x=[x_1, x_2,\dấu chấm,x_n]\]
- một mẫu bootstrap. \[x^*=[x^*_1, x^*_2,\dots,x^*_n]\]
- bản sao bootstrap. \[s[x^{*1}], s[x^{*2}], \dots, s[x^{*B}]\]
- ước tính bootstrap của lỗi tiêu chuẩn. \[\hat{se}_{boot}\]
Hình 1 là sơ đồ của quy trình bootstrap để ước tính sai số chuẩn của một thống kê $s[x]$
Tạo các mẫu bootstrap $B$ \[x^{*1}, x^{*2},\dots,x^{*B}\]. Mỗi mẫu bootstrap có các phần tử $n$, được tạo bằng cách lấy mẫu có thay thế từ tập dữ liệu gốc $x$. 2. Các bản sao Bootstrap \[s[x^{*1}], s[x^{*2}], \dots, s[x^{*B}]\] có được bằng cách tính giá trị của thống kê $s[ . Ví dụ: nếu $s[x]$ là trung bình/trung bình mẫu, thì \[s[x^*]\] là trung vị/trung bình của mẫu bootstrap
Cuối cùng, ước tính lỗi tiêu chuẩn bootstrap của $s[x]$ là độ lệch chuẩn của các bản sao bootstrap \[s[x^{*1}], s[x^{*2}], \dots, s[
ước tính tham số
Giả sử chúng ta phải đối mặt với một tình huống phân tích dữ liệu phổ biến. một mẫu ngẫu nhiên $x=[x_1, x_2, \dots, x_n]$ từ một phân bố xác suất chưa biết $F$ đã được quan sát và chúng tôi muốn ước tính một tham số quan tâm $\theta=t[F]$ trên cơ sở . Vì mục đích này, chúng tôi tính toán ước tính $\hat{\theta}=s[x]$ từ $x$. $\hat{\theta}$ chính xác đến mức nào?
Bootstrap không tham số
Để sửa các ký hiệu
- một mẫu ngẫu nhiên. $x=[x_1, x_2,\dots,x_n]$
- phân bố xác suất chưa biết của dân số. $F$
- phân phối thực nghiệm của một mẫu ngẫu nhiên $x$. $\hat{F}$
- mẫu bootstrap. \[\hat{F} \rightarrow [x^*_1, x^*_2,\dots,x^*_n]\]
- tham số quan tâm. $\theta=t[F]$
- ước tính của $\theta$. $\hat{\theta}=s[x]$
- bản sao bootstrap của \[\hat{\theta}. \hat{\theta}^*=s[x^*]\]
- ước tính bootstrap của $se_F[\hat{\theta}]$, sai số chuẩn của thống kê $\hat{\theta}$ được xác định bởi $se_{\hat{F}}[\hat{\theta}^
Trong bootstrap không tham số, một mẫu có cùng kích thước với dữ liệu được lấy từ dữ liệu có thay thế. Điều đó có nghĩa là nếu bạn đo 10 mẫu, bạn sẽ tạo một mẫu mới có kích thước 10 bằng cách sao chép một số mẫu mà bạn đã xem và bỏ qua những mẫu khác
Mọi thứ trong trường hợp này có thể tuân theo thuật toán bootstrap ở trên mà không cần sửa đổi khi chức năng quan tâm là tham số, ngoại trừ việc chúng tôi đặt \[\hat{\theta}^*=s[x^*]\]
Chọn các mẫu bootstrap độc lập $B$ \[x^{*1}, x^{*2},\dots,x^{*B}\], mỗi mẫu bao gồm n giá trị dữ liệu được rút ra với sự thay thế từ $x$
Đánh giá bản sao bootstrap tương ứng với từng mẫu bootstrap.
\[\hat{\theta}[b]=s[x^{*b}], b=1,2,\dots,B\]Ước tính sai số chuẩn $se_F[\hat{\theta}]$ theo độ lệch chuẩn mẫu của các bản sao $B$ \[\hat{se}_B=\{\sum_{b=1}^B[\hat{
Nhận xét
Tập dữ liệu bootstrap \[x^*=[x^*_1, x^*_2,\dots,x^*_n]\] bao gồm các thành viên của tập dữ liệu gốc \[x=[x_1, x_2,\dots . Do đó, chúng ta có thể có \[x^*_1 = x_7, x^*_2 = x3, x^*_3 = x_3, x^*_4 = x_{22}, \dots , x_n^* = x_7\]
- Ví dụ: nếu $s[x]$ là trung bình/trung bình mẫu, thì $s[x^*]$ là trung vị/trung bình của mẫu bootstrap
- Số lượng bản sao bootstrap $B$ để ước tính lỗi tiêu chuẩn thường nằm trong khoảng từ 25 đến 200
Bootstrap tham số
Để sửa các ký hiệu
- ước tính bootstrap tham số của lỗi tiêu chuẩn. $se_{\hat{F}_{par}}[\theta^*]$
- ước tính $F$ bắt nguồn từ mô hình tham số cho dữ liệu. $\hat{F}_{par}$
Phương pháp khởi động không theo tham số không đưa ra giả định nào về phân phối của các hệ số trong mô hình, trong khi phương pháp khởi động theo tham số giả định rằng dữ liệu đến từ một phân phối đã biết với các tham số chưa biết [ví dụ: dữ liệu có thể đến từ Poisson, nhị thức âm cho số đếm hoặc bình thường cho liên tục . ]. Điểm khác biệt duy nhất so với bootstrap không tham số là các mẫu được rút ra từ ước tính tham số của dân số chứ không phải ước tính phi tham số $\hat{F}$
Thay vì lấy mẫu có thay thế từ dữ liệu, chúng tôi lấy các mẫu $B$ có kích thước $n$ từ ước tính tham số của tổng thể $F_{par}$. \[\hat{F}_{par} \rightarrow[x^*_1, x^*_2,\dots,x^*_n]\]. Sau khi tạo các mẫu bootstrap, chúng tôi tiến hành chính xác như trong bước 2 và 3 của thuật toán bootstrap không tham số. đánh giá thống kê trên từng mẫu bootstrap, sau đó tính toán độ lệch chuẩn của các bản sao bootstrap $B$
Bootstrap trong Python
import numpy as np
import matplotlib.pyplot as plt
bootstrap không tham số
Để minh họa, chúng tôi lấy 30 mẫu bootstrap từ một quần thể cỡ 100
dân số
# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
# population mean
population.mean[]
50.54
# population standard deviation
population.std[]
29.278463074417004
mẫu ban đầu
# draw a sample of size 30 from population
sample = np.random.choice[population, size=30]
sample
________số 8
# our first sample mean
sample_mean = sample.mean[]
sample_mean
# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
0# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
1# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
2# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
3# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
4# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
5# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
6lấy mẫu bootstrap
# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
7# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
8# construct a population of size 100
np.random.seed[42]
population = np.random.randint[0,100 , size=100]
population
9array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
0array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
1array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
2array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
3array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
4array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
5Bootstrap tham số
Giả sử dữ liệu $x_1,. . . , x_{300}$ được rút ra từ phân phối $\exp [\lambda]$. Cũng giả sử rằng dữ liệu có nghĩa là $x = 2$. Ước tính $\lambda$ và đưa ra khoảng tin cậy bootstrap tham số 95% cho $\lambda$
array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
6array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
7array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
8array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
9# population mean
population.mean[]
0# population mean
population.mean[]
1# population mean
population.mean[]
2array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
4array[[51, 92, 14, 71, 60, 20, 82, 86, 74, 74, 87, 99, 23, 2, 21, 52, 1,
87, 29, 37, 1, 63, 59, 20, 32, 75, 57, 21, 88, 48, 90, 58, 41, 91,
59, 79, 14, 61, 61, 46, 61, 50, 54, 63, 2, 50, 6, 20, 72, 38, 17,
3, 88, 59, 13, 8, 89, 52, 1, 83, 91, 59, 70, 43, 7, 46, 34, 77,
80, 35, 49, 3, 1, 5, 53, 3, 53, 92, 62, 17, 89, 43, 33, 73, 61,
99, 13, 94, 47, 14, 71, 77, 86, 61, 39, 84, 79, 81, 52, 23]]
5mức độ tin cậy
# population mean
population.mean[]
5# population mean
population.mean[]
6Thẩm quyền giải quyết
Cuốn sách hữu ích nhất của Efron, với phần thảo luận toàn diện về Bootstrap để suy luận thống kê