Hãy tìm hiểu xem đây có phải là một bài kiểm tra tốt hay không. Có nhiều thứ hơn thế so với việc tuyên bố nó xấu hoặc thể hiện trong một trường hợp rằng nó không hoạt động tốt. Hầu hết các bài kiểm tra hoạt động kém trong một số trường hợp, vì vậy chúng tôi thường phải đối mặt với việc xác định các trường hợp trong đó bất kỳ bài kiểm tra đề xuất nào có thể là một lựa chọn tốt.
Mô tả bài kiểm tra
Giống như bất kỳ bài kiểm tra giả thuyết nào, bài kiểm tra này bao gồm (a) một giả thuyết không và thay thế và (b) một thống kê kiểm tra (hệ số tương quan) nhằm phân biệt giữa các giả thuyết.
Giả thuyết khống là hai biến đến từ cùng một phân phối. Để được chính xác, chúng ta hãy đặt tên cho các biến và và giả sử chúng ta có quan sát trường hợp của X , được gọi là x i = ( x 1 , x 2 , ... , x n x ) , và n y các trường hợp của Y , được gọi là y i . Giả thuyết khống là tất cả các trường hợp của X và Y là độc lập và phân phối giống hệt nhau (iid).Y n xXYnxXxi=(x1,x2,…,xnx)nyYyiXY
Chúng ta hãy xem như giả thuyết thay thế rằng (a) tất cả các trường hợp của là iid theo một số phân phối cơ bản F X và (b) tất cả các trường hợp của Y là iid theo một số phân phối cơ bản F Y nhưng (c) F X khác với F Y . (Do đó, chúng tôi sẽ không tìm kiếm mối tương quan giữa x i , tương quan giữa y i , tương quan giữa x i và y j hoặc sự khác biệt về phân phối giữa x 's hoặc yXFXYFYFXFYxiyixiyjxyRiêng biệt: điều đó được cho là không hợp lý.)
Thống kê kiểm tra đề xuất giả định rằng (gọi giá trị chung này là n ) và tính hệ số tương quan của ( x [ i ] , y [ i ] ) (trong đó, như thường lệ, [ i ] chỉ định giá trị nhỏ nhất thứ i của dữ liệu). Gọi đây là t ( x , y ) .nx=nyn(x[i],y[i])[i]itht(x,y)
Kiểm tra hoán vị
Trong tình huống này - không có vấn đề gì thống kê được đề xuất - chúng tôi luôn có thể tiến hành một thử nghiệm hoán vị. Theo giả thuyết, khả năng của dữ liệu ( ( x 1 , x 2 , ... , x n ) , ( y 1 , y 2 , ... , y n ) ) là giống như khả năng của bất kỳ hoán vị của 2 n giá trị dữ liệu. Nói cách khác, việc gán một nửa dữ liệu cho X và nửa còn lại cho Yt((x1,x2,…,xn),(y1,y2,…,yn))2 nXYlà một sự trùng hợp ngẫu nhiên thuần túy. Đây là một đơn giản, hậu quả trực tiếp của các giả định iid và giả thuyết rằng .FX= FY
Do đó, phân phối lấy mẫu của , có điều kiện trên các quan sát x i và y i , là phân phối của tất cả các giá trị của t đạt được cho tất cả ( 2 n ) ! hoán vị của dữ liệu. Chúng tôi đang quan tâm đến việc này bởi vì đối với bất kỳ được dự định kích thước kiểm tra α , chẳng hạn như α = 0,05 (tương ứng với 95 % độ tin cậy), chúng tôi sẽ xây dựng một hai đứng về phía khu vực quan trọng từ sự phân bố lấy mẫu của t : nó bao gồm những khắc nghiệt nhấtt ( x , y)xTôiyTôit( 2 n ) !αα = 0,0595t % giá trị có thể có của t (ở phía cao, vì tương quan cao phù hợp với các phân phối tương tự và tương quan thấp thì không). Đây là cách chúng tôi tiến hành xác định hệ số tương quan phải lớn đến mức nào để quyết định dữ liệu đến từ các phân phối khác nhau.100 αt
Mô phỏng phân phối lấy mẫu null
Vì (hoặc, nếu bạn thích, ( 2 n( 2 n ) !, tính số cách chiadữ liệu2nthành hai phần có kích thướcn) trở nên lớn ngay cả đối vớinnhỏ, không thể tính chính xác phân phối lấy mẫu, vì vậy chúng tôi lấy mẫu bằng cách sử dụng mô phỏng. (Ví dụ: khin=16, ( 2n( 2nn) /22 nnnn = 16và(2n)! ≈2,63×1035.) Khoảng một ngàn mẫu thường cũng đủ (và chắc chắn sẽ cho kết quả thám hiểm chúng tôi muốn thực hiện).( 2nn) /2=300540195 ( 2 n ) ! ≈ 2,63 × 1035
Có hai điều chúng ta cần tìm hiểu: đầu tiên, phân phối lấy mẫu trông như thế nào theo giả thuyết null. Thứ hai, thử nghiệm này phân biệt tốt như thế nào giữa các bản phân phối khác nhau?
Có một sự phức tạp: phân phối lấy mẫu phụ thuộc vào bản chất của dữ liệu. Tất cả những gì chúng ta có thể làm là nhìn vào dữ liệu thực tế, được tạo ra để mô phỏng bất cứ thứ gì chúng ta quan tâm nghiên cứu và hy vọng rằng những gì chúng ta học được từ các mô phỏng sẽ áp dụng cho tình huống của chúng ta.
Thực hiện
Để minh họa, tôi đã thực hiện công việc này trong R
. Nó rơi tự nhiên thành ba mảnh.
Một hàm để tính toán thống kê kiểm tra . Vì tôi muốn tổng quát hơn một chút, phiên bản của tôi xử lý các bộ dữ liệu kích thước khác nhau ( n x ≠ n y ) bằng cách nội suy tuyến tính giữa các giá trị trong tập dữ liệu lớn hơn (được sắp xếp) để tạo khớp với tập dữ liệu nhỏ hơn (được sắp xếp). Bởi vì điều này đã được thực hiện bởi hàm , tôi chỉ lấy kết quả của nó:t ( x , y)nx≠ nyR
qqplot
test.statistic <- function(x, y) {
transform <- function(z) -log(1-z^2)/2
fit <- qqplot(x,y, plot.it=FALSE)
transform(cor(fit$x, fit$y))
}
Một chút thay đổi - không cần thiết nhưng hữu ích cho hình dung - thể hiện lại hệ số tương quan theo cách sẽ làm cho phân phối của thống kê null xấp xỉ đối xứng. Đó là những gì transform
đang làm.
Các mô phỏng của phân phối lấy mẫu. Đối với đầu vào, hàm này chấp nhận số lần lặp n.iter
cùng với hai bộ dữ liệu trong mảng x
và y
. Nó xuất ra một loạt các n.iter
giá trị của thống kê kiểm tra. Hoạt động bên trong của nó phải minh bạch, ngay cả với người không R
sử dụng:
permutation.test <- function(n.iter, x, y) {
z <- c(x,y)
n.x <- length(x)
n.y <- length(y)
n <- length(z)
k <- min(n.x, n.y)
divide <- function() {
i <- sample.int(n, size=k)
test.statistic(z[i], z[-i])
}
replicate(n.iter, divide())
}
Mặc dù đó là tất cả những gì chúng ta cần để tiến hành thử nghiệm, để nghiên cứu nó, chúng ta sẽ muốn lặp lại thử nghiệm nhiều lần. Vì vậy, chúng tôi tiến hành kiểm tra một lần và bọc mã đó trong một lớp chức năng thứ ba, thường được đặt tên chung f
ở đây, mà chúng tôi có thể gọi nhiều lần. Để làm cho nó đủ chung cho một nghiên cứu rộng, đối với đầu vào, nó chấp nhận kích thước của các bộ dữ liệu để mô phỏng ( n.x
và n.y
), số lần lặp cho mỗi phép thử hoán vị ( n.iter
), tham chiếu đến hàm test
để tính toán thống kê kiểm tra (bạn sẽ thấy trong giây lát tại sao chúng ta có thể không muốn mã hóa cứng này) và hai hàm để tạo các giá trị ngẫu nhiên iid, một cho ( ) và một cho Y ( ). Một lựa chọnXdist.x
Ydist.y
plot.it
là hữu ích để giúp xem những gì đang xảy ra.
f <- function(n.x, n.y, n.iter, test=test.statistic, dist.x=runif, dist.y=runif,
plot.it=FALSE) {
x <- dist.x(n.x)
y <- dist.y(n.y)
if(plot.it) qqplot(x,y)
t0 <- test(x,y)
sim <- permutation.test(n.iter, x, y)
p <- mean(sim > t0) + mean(sim==t0)/2
if(plot.it) {
hist(sim, xlim=c(min(t0, min(sim)), max(t0, max(sim))),
main="Permutation distribution")
abline(v=t0, col="Red", lwd=2)
}
return(p)
}
Đầu ra là một mô phỏng "p-value": tỷ lệ mô phỏng năng suất một thống kê rằng vẻ bề ngoài hơn cực hơn so với cái thực sự tính toán cho dữ liệu.
Phần (2) và (3) cực kỳ chung chung: bạn có thể thực hiện một nghiên cứu như thế này cho một bài kiểm tra khác chỉ bằng cách thay thế test.statistic
bằng một số tính toán khác. Chúng tôi làm điều đó dưới đây.
Kết quả đầu tiên
n . x = n . y= 1616
set.seed(17) # Makes the results reproducible
n.per.rep <- 1000 # Number of iterations to compute each p-value
n.reps <- 1000 # Number of times to call `f`
n.x <- 16; n.y <- 16 # Dataset sizes
par(mfcol=c(2,3)) # Lay results out in three columns
null <- replicate(n.reps, f(n.x, n.y, n.per.rep))
hist(null, breaks=20)
plot(null)
normal <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=rnorm))
hist(normal, breaks=20)
plot(normal)
exponential <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=function(n) rgamma(n, 1)))
hist(exponential, breaks=20)
plot(exponential)

XYXY
16xTôi16yTôif
0,051116giá trị độc lập từ mỗi. Đó là sức mạnh khá thấp. Nhưng có lẽ đó là điều không thể tránh khỏi, vì vậy hãy tiếp tục.
Các ô bên phải tương tự kiểm tra phân phối đồng đều theo phân số mũ. Kết quả này thật kỳ quái. Thử nghiệm này có xu hướng, thường xuyên hơn không, để kết luận rằng dữ liệu thống nhất và dữ liệu theo cấp số nhân trông giống nhau. Dường như với "nghĩ" rằng đồng phục và mũ variates là hơn tương tự hơn hai biến đồng phục! Những gì đang xảy ra ở đây?
Vấn đề là dữ liệu từ phân phối theo cấp số nhân sẽ có xu hướng có một vài giá trị cực kỳ cao. Khi bạn tạo một biểu đồ phân tán của các giá trị này so với các giá trị được phân phối đồng đều, sau đó sẽ có một vài điểm ở phía trên bên phải của tất cả các phần còn lại. Điều đó tương ứng với một hệ số tương quan rất cao. Do đó, bất cứ khi nào một trong hai phân phối tạo ra một vài giá trị cực trị, hệ số tương quan là một lựa chọn khủng khiếp để đo lường mức độ khác nhau của các phân phối. Điều này dẫn đến một vấn đề khác thậm chí còn tồi tệ hơn: khi kích thước tập dữ liệu tăng lên, cơ hội có được một vài quan sát cực đoan tăng lên. Vì vậy, chúng ta có thể mong đợi thử nghiệm này sẽ thực hiện ngày càng tệ hơn khi lượng dữ liệu tăng lên. Thật là khủng khiếp ...
Một bài kiểm tra tốt hơn
y= x
Đây là một R
thực hiện:
test.statistic <- function(x, y) {
ks.test(x,y)$statistic
}
Đúng vậy: nó được tích hợp sẵn trong phần mềm, vì vậy chúng tôi chỉ phải gọi nó. Nhưng chờ đã! Nếu bạn đọc kỹ hướng dẫn, bạn sẽ biết rằng (a) thử nghiệm cung cấp giá trị p nhưng (b) giá trị p đó (không đúng) là không chính xác khi cả hai x
và y
là bộ dữ liệu. Nó được thiết kế để sử dụng khi bạn tin rằng bạn biết chính xác phân phối dữ liệu x
đến từ đâu và bạn muốn xem liệu điều đó có đúng không. Do đó, thử nghiệm không phù hợp với sự không chắc chắn về phân phối dữ liệu y
đến từ.
Không vấn đề gì! Khung kiểm tra hoán vị vẫn còn hiệu lực. Bằng cách thực hiện thay đổi trước đó test.statistic
, tất cả những gì chúng ta phải làm là chạy lại nghiên cứu trước đó, không thay đổi. Đây là kết quả.

p = 0,20
700,0511
30α = 550α = 100,10
Kết luận
Do đó, các vấn đề với thử nghiệm tương quan không phải do một số khó khăn cố hữu trong cài đặt này. Thử nghiệm tương quan không chỉ thực hiện rất tệ, nó còn tệ so với thử nghiệm được biết đến rộng rãi và có sẵn. (Tôi đoán rằng điều đó là không thể chấp nhận được, có nghĩa là nó sẽ luôn hoạt động kém hơn, trung bình, so với phiên bản hoán vị của thử nghiệm KS, ngụ ý không có lý do nào để sử dụng nó.)