Tại sao khoảng thời gian bootstrap của tôi có phạm vi bảo hiểm khủng khiếp?


29

Tôi muốn thực hiện một cuộc biểu tình trong lớp, trong đó tôi so sánh một khoảng thời gian t với khoảng thời gian bootstrap và tính xác suất bao phủ của cả hai. Tôi muốn dữ liệu đến từ một phân phối sai lệch vì vậy tôi đã chọn tạo dữ liệu như exp(rnorm(10, 0, 2)) + 1một mẫu có kích thước 10 từ một logic bất thường thay đổi. Tôi đã viết một kịch bản để vẽ 1000 mẫu và, cho mỗi mẫu, tính toán cả khoảng thời gian 95% t và khoảng cách phần trăm bootstrap 95% dựa trên 1000 lần lặp.

Khi tôi chạy tập lệnh, cả hai phương thức đều cho các khoảng rất giống nhau và cả hai đều có xác suất bao phủ là 50-60%. Tôi đã rất ngạc nhiên vì tôi nghĩ khoảng thời gian bootstrap sẽ tốt hơn.

Câu hỏi của tôi là, tôi có

  • mắc lỗi trong mã?
  • mắc lỗi trong tính toán các khoảng?
  • đã phạm sai lầm bằng cách hy vọng khoảng thời gian bootstrap có thuộc tính bảo hiểm tốt hơn?

Ngoài ra, có cách nào để xây dựng một CI đáng tin cậy hơn trong tình huống này không?

 tCI.total <- 0
 bootCI.total <- 0
 m <- 10 # sample size
 true.mean <- exp(2) + 1

for (i in 1:1000){
 samp <- exp(rnorm(m,0,2)) + 1
 tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)

 boot.means <- rep(0,1000)
 for (j in 1:1000) boot.means[j] <- mean(sample(samp,m,replace=T))
 bootCI <- sort(boot.means)[c(0.025*length(boot.means), 0.975*length(boot.means))]

 if (true.mean > min(tCI) & true.mean < max(tCI)) tCI.total <- tCI.total + 1
 if (true.mean > min(bootCI) & true.mean < max(bootCI)) bootCI.total <- bootCI.total + 1 
}
tCI.total/1000     # estimate of t interval coverage probability
bootCI.total/1000  # estimate of bootstrap interval coverage probability

3
Mọi người thường quên một cách sử dụng bootstrap khác: để xác định và sửa lỗi sai lệch . Tôi nghi ngờ rằng nếu bạn bao gồm một sự điều chỉnh sai lệch trong bootstrapping của bạn, bạn có thể có được hiệu suất tốt hơn nhiều so với CI.
whuber

@whuber: điểm hay, +1. Theo như tôi nhớ, Phương pháp Bootstrap và Ứng dụng của họ của Davison & Hinkley đưa ra một giới thiệu hay và dễ tiếp cận để điều chỉnh sai lệch và các cải tiến khác trên bootstrap.
S. Kolassa - Tái lập Monica

1
Rất đáng để thử các biến thể bootstrap khác, đặc biệt là bootstrap cơ bản.
Frank Harrell

3
n=10

Câu trả lời:


16

Chẩn đoán và biện pháp khắc phục Bootstrap của Canto, Davison, Hinkley & Ventura (2006) dường như là một điểm khởi đầu hợp lý. Họ thảo luận về nhiều cách mà bootstrap có thể bị phá vỡ và - quan trọng hơn ở đây - đưa ra chẩn đoán và biện pháp khắc phục có thể:

  1. Ngoại lệ
  2. Mô hình lấy mẫu không chính xác
  3. Không xoay vòng
  4. Sự không nhất quán của phương thức bootstrap

Tôi không thấy vấn đề với 1, 2 và 4 trong tình huống này. Hãy xem 3. Như @Ben Ogorek lưu ý (mặc dù tôi đồng ý với @Glen_b rằng cuộc thảo luận về tính quy tắc có thể là cá trích đỏ), tính hợp lệ của bootstrap phụ thuộc vào tính chính xác của thống kê mà chúng tôi quan tâm.

Phần 4 trong Canty et al. đề xuất việc lấy mẫu lại trong phạm vi các mẫu để có được số đo độ lệch và phương sai cho ước tính tham số trong mỗi mẫu thử lại bootstrap . Đây là mã để sao chép các công thức từ p. 15 bài viết:

library(boot)
m <- 10 # sample size
n.boot <- 1000
inner.boot <- 1000

set.seed(1)
samp.mean <- bias <- vars <- rep(NA,n.boot)
for ( ii in 1:n.boot ) {
    samp <- exp(rnorm(m,0,2)) + 1
    samp.mean[ii] <- mean(samp)
    foo <- boot(samp,statistic=function(xx,index)mean(xx[index]),R=inner.boot)
    bias[ii] <- mean(foo$t[,1])-foo$t0
    vars[ii] <- var(foo$t[,1])
}

opar <- par(mfrow=c(1,2))
    plot(samp.mean,bias,xlab="Sample means",ylab="Bias",
        main="Bias against sample means",pch=19,log="x")
    abline(h=0)
    plot(samp.mean,vars,xlab="Sample means",ylab="Variance",
        main="Variance against sample means",pch=19,log="xy")
par(opar)

chẩn đoán bootstrap

Lưu ý quy mô nhật ký - không có nhật ký, điều này thậm chí còn trắng trợn hơn. Chúng ta thấy độc đáo làm thế nào phương sai của ước tính trung bình bootstrap tăng lên với giá trị trung bình của mẫu bootstrap. Điều này với tôi có vẻ như đủ của một khẩu súng hút thuốc để đổ lỗi cho sự không chuyên nghiệp là thủ phạm cho phạm vi bảo hiểm khoảng tin cậy thấp.

Tuy nhiên, tôi sẽ vui vẻ thú nhận rằng người ta có thể theo dõi theo nhiều cách. Chẳng hạn, chúng ta có thể xem xét liệu khoảng tin cậy từ một bản sao bootstrap cụ thể có bao gồm giá trị trung bình thực hay không phụ thuộc vào giá trị trung bình của bản sao cụ thể.

Đối với các biện pháp khắc phục, Canty et al. thảo luận về các phép biến đổi và logarit xuất hiện ở đây (ví dụ: bootstrap và xây dựng các khoảng tin cậy không phải vì trung bình, mà là trung bình của dữ liệu đã ghi), nhưng tôi thực sự không thể làm cho nó hoạt động.

Canty et al. tiếp tục thảo luận về cách người ta có thể giảm cả số lượng bootstraps bên trong và tiếng ồn còn lại bằng cách lấy mẫu và làm mịn quan trọng cũng như thêm các dải tin cậy vào các ô trục.

Đây có thể là một dự án luận án thú vị cho một sinh viên thông minh. Tôi đánh giá cao bất kỳ gợi ý nào về nơi tôi đã sai, cũng như với bất kỳ tài liệu nào khác. Và tôi sẽ tự do thêm diagnosticthẻ vào câu hỏi này.


13

μ^μ
μ^t
mμ^μσ^

Sau đó, tôi nghĩ thêm một chút về toàn bộ thiết lập. Chỉ với 10 quan sát và phân phối cực kỳ sai lệch, về cơ bản, không phải là không thể ước tính được tính toán không trung bình, chứ đừng nói đến việc xây dựng các khoảng tin cậy với độ bao phủ phù hợp?

e2+1=8.39P(X2)=0.84XN(0,4)0.840.8410=0.178. Vì vậy, trong ít hơn 18% các trường hợp, quan sát lớn nhất nhỏ hơn giá trị trung bình. Để có được phạm vi bảo hiểm lớn hơn 0,82, chúng ta cần xây dựng khoảng tin cậy cho giá trị trung bình vượt ra ngoài quan sát lớn nhất. Tôi có một thời gian khó tưởng tượng làm thế nào một công trình như vậy có thể được thực hiện (và hợp lý) mà không có giả định trước rằng phân phối là vô cùng sai lệch. Nhưng tôi hoan nghênh bất kỳ đề nghị.


Tôi đồng ý với bạn. Tôi thực sự muốn nghĩ về nó từ quan điểm của một người đã có một mẫu từ bản phân phối này. Làm thế nào tôi biết rằng không an toàn khi sử dụng bootstrap trong trường hợp này? Suy nghĩ duy nhất tôi có thể nghĩ là tôi có thể đã ghi nhật ký trước khi thực hiện phân tích, nhưng một trong những người trả lời khác nói rằng điều này không thực sự có ích.
Flounderer

1
Bạn sẽ không biết liệu nó an toàn hay không an toàn từ 10 điểm dữ liệu. Nếu bạn nghi ngờ độ nghiêng hoặc đuôi nặng, giải pháp có thể là tập trung vào một tham số khác với giá trị trung bình. Ví dụ, trung bình log hoặc trung vị. Điều này sẽ không cung cấp cho bạn ước tính (hoặc khoảng tin cậy cho) trung bình trừ khi bạn đưa ra các giả định bổ sung, nhưng có thể là một ý tưởng tốt hơn hoàn toàn để tập trung vào một tham số ít nhạy cảm hơn với các đuôi của phân phối.
NRH

6

Các tính toán đã đúng, tôi đã kiểm tra chéo với gói khởi động nổi tiếng . Ngoài ra, tôi đã thêm khoảng BCa (bởi Efron), phiên bản sửa lỗi thiên vị của khoảng bootstrap phần trăm:

for (i in 1:1000) {
  samp <- exp(rnorm(m, 0, 2)) + 1

  boot.out <- boot(samp, function(d, i) sum(d[i]) / m, R=999)
  ci <- boot.ci(boot.out, 0.95, type="all")

  ##tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)
  tCI <- ci$normal[2:3]
      percCI <- ci$perc[4:5]
  bcaCI <- ci$bca[4:5]
      boottCI <- ci$student[4:5]

  if (true.mean > min(tCI) && true.mean < max(tCI)) tCI.total <- tCI.total + 1
  if (true.mean > min(percCI) && true.mean < max(percCI)) percCI.total <- percCI.total + 1 
  if (true.mean > min(bcaCI) && true.mean < max(bcaCI)) bcaCI.total <- bcaCI.total + 1
}

tCI.total/1000     # estimate of t interval coverage probability
0.53
percCI.total/1000  # estimate of percentile interval coverage probability
0.55
bcaCI.total/1000  # estimate of BCa interval coverage probability
0.61

Tôi giả sử các khoảng sẽ tốt hơn nhiều nếu cỡ mẫu ban đầu lớn hơn 10, giả sử 20 hoặc 50.

Hơn nữa, phương pháp bootstrap-t thường dẫn đến kết quả tốt hơn cho các thống kê sai lệch. Tuy nhiên, nó cần một vòng lặp lồng nhau và do đó thời gian tính toán gấp 20 lần.

Đối với thử nghiệm giả thuyết, điều rất quan trọng là che phủ 1 mặt là tốt. Vì vậy, chỉ nhìn vào các tấm che 2 mặt thường có thể gây hiểu nhầm.


1
n<100

5

Tôi đã nhầm lẫn về điều này quá, và tôi đã dành rất nhiều thời gian cho các khoảng thời gian tự tin Bootstrap giấy năm 1996 DiCiccio và Efron , mà không có nhiều để hiển thị cho nó.

Nó thực sự khiến tôi nghĩ ít về bootstrap như một phương pháp có mục đích chung. Tôi đã từng nghĩ về nó như một thứ gì đó sẽ kéo bạn ra khỏi một mứt khi bạn thực sự bị mắc kẹt. Nhưng tôi đã học được bí mật nhỏ bẩn thỉu của nó: khoảng tin cậy của bootstrap đều dựa trên tính quy tắc theo cách này hay cách khác. Cho phép tôi giải thích.

xN(μ,σ2)
σ
z=xμσN(0,1)
μPr(1.96xμσ1.96)=0.95

Khi bạn nghĩ về những gì biện minh cho phần trăm phân phối bình thường có liên quan đến khoảng tin cậy, thì nó hoàn toàn dựa trên số lượng quan trọng thuận tiện này. Đối với phân phối tùy ý, không có mối liên hệ lý thuyết nào giữa phần trăm phân phối lấy mẫu và khoảng tin cậy và lấy tỷ lệ thô của phân phối lấy mẫu bootstrap không cắt được.

Vì vậy, các khoảng BCa (hiệu chỉnh sai lệch) của Efron sử dụng các phép biến đổi để đạt được tính chuẩn gần đúng và các phương thức bootstrap-t dựa trên các thống kê t kết quả là xấp xỉ pivotal. Bây giờ bootstrap có thể ước tính địa ngục trong giây lát và bạn luôn có thể giả định tính quy tắc và sử dụng tiêu chuẩn +/- 2 * SE. Nhưng xem xét tất cả các công việc đã đi vào phi tham số với bootstrap, nó có vẻ không công bằng lắm phải không?


2
Có thể tôi đã bỏ lỡ điều gì đó, nhưng thực tế là bootstrapping có liên quan đến số lượng pivotal hoặc gần pivotal không có nghĩa là bất kỳ mối liên hệ nào với tính quy tắc. Số lượng Pivotal có thể có tất cả các cách phân phối trong các trường hợp cụ thể. Tôi cũng không thấy câu in nghiêng trong đoạn cuối thứ hai của bạn như thế nào.
Glen_b -Reinstate Monica

1
Làm thế nào để khẳng định liên quan đến tính quy phạm?
Glen_b -Reinstate Monica

1
Vì mọi phân phối liên tục có một chuyển đổi chính xác thành quy tắc ( luôn luôn là tiêu chuẩn bình thường), có vẻ như bạn chỉ loại trừ tất cả các phân phối liên tục như được bắt nguồn từ một xấp xỉ bình thường. Φ - 1 [ F ( X ) ]FΦ1[F(X)]
Glen_b -Reinstate Monica

2
Việc xác định không phải là chuyện nhỏ nếu chúng ta chưa biết điều đó; điểm đơn giản là những biến đổi như vậy rõ ràng tồn tại. Efron đang cố gắng để có được khoảng thời gian tốt hơn; chỉ bởi vì anh ta trải qua biến đổi thành bình thường / thực hiện một khoảng thời gian / biến đổi trở lại không ngụ ý rằng anh ta giả định bất kỳ mối liên hệ đặc biệt nào với tính quy tắc. F
Glen_b -Reinstate Monica

2
Để thêm vào @Glen_b: việc chuyển đổi thành phân phối bình thường chỉ cần tồn tại để chứng minh phương thức đúng. Bạn không cần phải tìm nó để sử dụng phương pháp. Ngoài ra, nếu bạn không thích phân phối bình thường, bạn có thể viết lại toàn bộ bằng chứng với một số phân phối liên tục, đối xứng khác. Việc sử dụng các bản phân phối bình thường rất hữu ích về mặt kỹ thuật, nhưng không thực sự cần thiết, nó không nói gì về nguồn gốc của dữ liệu hoặc ý nghĩa của mẫu.
Peter

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.