Làm thế nào để chúng ta tạo ra một khoảng tin cậy cho tham số của phép thử hoán vị?


9

Các thử nghiệm hoán vị là các thử nghiệm có ý nghĩa dựa trên các mẫu hoán vị được rút ngẫu nhiên từ dữ liệu gốc. Các mẫu thay thế được vẽ mà không cần thay thế, ngược lại với các mẫu bootstrap, được vẽ bằng thay thế. Đây là một ví dụ tôi đã làm trong R của một bài kiểm tra hoán vị đơn giản. (Ý kiến ​​của bạn được chào đón)

Xét nghiệm hoán vị có lợi thế lớn. Họ không yêu cầu hình dạng dân số cụ thể như tính bình thường. Họ áp dụng cho một loạt các số liệu thống kê, không chỉ cho các số liệu thống kê có phân phối đơn giản theo giả thuyết null. Họ có thể đưa ra các giá trị p rất chính xác, bất kể hình dạng và kích thước của dân số (nếu sử dụng đủ hoán vị).

Tôi cũng đã đọc rằng thường rất hữu ích khi đưa ra khoảng tin cậy cùng với một bài kiểm tra, được tạo ra bằng cách sử dụng phương pháp thay đổi kích thước bootstrap thay vì lấy mẫu hoán vị.

Bạn có thể giải thích (hoặc chỉ đưa ra mã R) cách xây dựng khoảng tin cậy (nghĩa là cho sự khác biệt giữa phương tiện của hai mẫu trong ví dụ trên)?

BIÊN TẬP

Sau vài lần googling tôi tìm thấy cách đọc thú vị này .

Câu trả lời:


7

Bạn có thể sử dụng phương pháp thay đổi hoán vị. Nó thực sự phụ thuộc vào một số yếu tố. Nếu hoán vị của bạn là một con số tương đối thấp thì ước tính khoảng tin cậy của bạn không quá lớn với hoán vị. Hoán vị của bạn là trong một phần của một khu vực màu xám và có lẽ là tốt.

Sự khác biệt duy nhất so với mã trước của bạn là bạn sẽ tạo mẫu ngẫu nhiên thay vì hoán vị. Và, bạn sẽ tạo ra nhiều hơn trong số họ, giả sử 1000 ví dụ. Nhận điểm số khác biệt cho 1000 lần lặp lại thử nghiệm của bạn. Lấy điểm cắt cho giữa 950 (95%). Đó là khoảng tin cậy của bạn. Nó rơi trực tiếp từ bootstrap.

Bạn đã thực hiện hầu hết điều này trong ví dụ của bạn. Dif.treat là 462 mặt hàng dài. Do đó, bạn cần cắt giảm 2,5% dưới và 2,5% trên (khoảng 11 mục ở mỗi đầu).

Sử dụng mã của bạn từ trước ...

y <- sort(dif.treat)
ci.lo <- y[11]
ci.hi <- y[462-11]

Nói chung, tôi nói rằng 462 hơi thấp nhưng bạn sẽ tìm thấy một bootstrap tới 10.000 xuất hiện với điểm số hơi khác nhau (có thể gần với giá trị trung bình hơn).

Tôi nghĩ tôi cũng sẽ thêm một số mã đơn giản yêu cầu thư viện khởi động (dựa trên mã trước của bạn).

diff <- function(x,i) mean(x[i[6:11]]) - mean(x[i[1:5]])
b <- boot(total, diff, R = 1000)
boot.ci(b)

Cảm ơn bạn. Có thể tạo ra các mẫu bằng cách sử dụng samplereplace=TRUE? Có bất kỳ lý do để sử dụng một gói như thế bootnào?
George Dontas

Thông thường, nó được thực hiện với sự thay thế, vì vậy bạn muốn đặt nó thành TRUE. Về lý do tại sao ... gói được tối ưu hóa để nó chạy nhanh hơn .... không bao giờ hẹn giờ. Đó có thể là một vấn đề nếu bạn đặt R lớn. Và, như bạn có thể thấy, mã rất hay và súc tích. Nó cũng có rất nhiều tính năng bạn sẽ không dễ dàng tự lăn.
Giăng

boot.ci trả về khoảng tin cậy. Có bất kỳ chức năng (boot) nào cung cấp cho p.value không? (như tỷ lệ của số lượng chênh lệch ít nhất cao bằng số lượng quan sát được, trên tổng số mẫu được tạo)
George Dontas

ok, tôi đã tìm được cách để có được nó:sum(b$t>=b$t0)/b$R
George Dontas

@ gd047: hãy tính rằng đây là giá trị p một phía mà bạn đang tính toán.
Joris Meys

4

Vì thử nghiệm hoán vị là một thử nghiệm chính xác , mang lại cho bạn giá trị p chính xác. Bootstrapping một bài kiểm tra hoán vị không có ý nghĩa.

Bên cạnh đó, việc xác định khoảng tin cậy xung quanh thống kê kiểm tra cũng không có ý nghĩa gì, vì nó được tính dựa trên mẫu của bạn chứ không phải ước tính. Bạn xác định khoảng tin cậy xung quanh các ước tính như phương tiện và lượt thích, nhưng không phải xung quanh số liệu thống kê kiểm tra.

Kiểm tra hoán vị không nên được sử dụng trên các bộ dữ liệu quá lớn, bạn không thể tính toán tất cả các hoán vị có thể nữa. Nếu đó là trường hợp, sử dụng một thủ tục bootstrap để xác định mức giới hạn cho thống kê kiểm tra bạn sử dụng. Nhưng một lần nữa, điều này ít liên quan đến khoảng tin cậy 95%.

Một ví dụ: Tôi sử dụng ở đây thống kê T cổ điển, nhưng sử dụng một cách tiếp cận đơn giản để bootstrapping để tính toán phân bố theo kinh nghiệm của thống kê của tôi. Dựa vào đó, tôi tính giá trị p theo kinh nghiệm:

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic
t.dist <- apply(
      replicate(1000,sample(c(x,y),11,replace=F)),2,
      function(i){t.test(i[1:5],i[6:11])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value

Hãy xem xét rằng thử nghiệm 2 mặt này chỉ hoạt động cho các phân phối đối xứng. Phân phối không đối xứng thường chỉ được thử nghiệm một phía.

BIÊN TẬP :

OK, tôi đã hiểu nhầm câu hỏi. Nếu bạn muốn tính khoảng tin cậy dựa trên ước tính chênh lệch, bạn có thể sử dụng mã được đề cập ở đây để bootstrapping trong mỗi mẫu. Xin lưu ý bạn, đây là một ước tính sai lệch: nói chung điều này mang lại cho một CI quá nhỏ. Cũng xem ví dụ đưa ra ở đó như một lý do tại sao bạn phải sử dụng một cách tiếp cận khác cho khoảng tin cậy và giá trị p.


1
Bạn có thể đưa ra lời giải thích tại sao các phép thử hoán vị không nên được sử dụng trên các bộ dữ liệu mà bạn không thể tính toán tất cả các hoán vị có thể?
Andy W

@Andy W: Đầu tiên xác định "kiểm tra hoán vị". Đối với tôi, kiểm tra hoán vị là kiểm tra chính xác, sử dụng mọi hoán vị có thể. Điều đó là không thể trên các tập dữ liệu lớn hơn. "Các thử nghiệm hoán vị gần đúng" trên thực tế là phương pháp mô phỏng Monte Carlo xung quanh, và nên được áp dụng theo cách đó. Bên cạnh đó, định lý giới hạn trung tâm đảm bảo trong hầu hết các trường hợp rằng các giả định liên quan đến phân phối số liệu thống kê kiểm tra được đáp ứng khi sử dụng các bộ dữ liệu lớn. Trong thử nghiệm phức tạp, việc sử dụng các thử nghiệm hoán vị trên các bộ dữ liệu lớn làm cho thời gian tính toán không thể chịu đựng được mà không thêm bất kỳ giá trị quan trọng nào. my2cents
Joris Meys

Tôi đã không nói bất cứ điều gì như bootstrapping một bài kiểm tra hoán vị. Tôi đi vào câu hỏi này sau khi đọc đoạn cuối của [PHẦN 14,5 | Tóm tắt], trong pdf được liên kết.
George Dontas

@ gd047 Sau đó tôi đã đọc sai câu hỏi của bạn. Nhưng bạn nên thực sự giữ khoảng tin cậy và giá trị tách biệt nghiêm ngặt. Khoảng tin cậy được ước tính dựa trên bootstrapping trong mỗi mẫu (mặc dù nó bị sai lệch bởi định nghĩa), thử nghiệm hoán vị được thực hiện bằng hoán vị trên bộ dữ liệu hoàn chỉnh. Đó là hai điều hoàn toàn khác nhau.
Joris Meys

@Kevin: Mã đã rất đúng. Đọc lại mã: tham chiếu x[6:11]đến đối số xcủa hàm ẩn danh trong ứng dụng. Có thể nhầm lẫn, nhưng chỉnh sửa của bạn đã cho kết quả rất sai. Hãy bình luận về những gì bạn nghĩ nó nên có trước khi chỉnh sửa mã. Tiết kiệm cho tôi một rollback. Để tránh nhầm lẫn hơn nữa, tôi đã đổi nó xthànhi
Joris Meys

0

Từ mã Joris Meys trong Câu trả lời nhưng với sửa đổi để cho phép nó được áp dụng trong nhiều trường hợp hơn:

Tôi đã cố chỉnh sửa cái khác nhưng tôi không có thời gian để hoàn thành và vì một số lý do tôi không thể nhận xét (có thể vì đây là một câu hỏi cũ).

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic

t.dist <- apply(
          replicate(1000,sample(c(x,y),length(c(x,y)),replace=F)), 2,
          function(i){t.test(i[1:length(x)],i[length(x)+1:length(c(x,y))])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value
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.