Kiểm tra xem các biến có tuân theo phân phối giống nhau không


16

Nếu bạn muốn kiểm tra xem hai biến có theo cùng một phân phối hay không, đó có phải là một thử nghiệm tốt để đơn giản sắp xếp cả hai biến và sau đó kiểm tra mối tương quan của chúng không? Nếu nó cao (ít nhất là 0,9?), Thì các biến rất có thể đến từ cùng một phân phối.

Với phân phối ở đây tôi có nghĩa là "bình thường", "chi bình phương", "gamma", v.v.

Câu trả lời:


35

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 XY là độc lập và phân phối giống hệt nhau (iid).Y n xXYnxXxTôi= =(x1,x2,Giáo dục,xnx)nyYyTôiXY

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 iy j hoặc sự khác biệt về phân phối giữa x 's hoặc yXFXYFYFXFYxTôiyTôixTôiyjxyRiê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[Tôi],y[Tôi])[Tôi]Tôithứ tựt(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,Giáo dục,xn),(y1,y2,Giáo dục,yn))2nXYlà 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 iy 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(2n)!αα= =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

(hoặc, nếu bạn thích, ( 2 n(2n)!, 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)/22nnnn= =16(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= =300 540 195(2n)!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.

  1. 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 xn 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)nxnyRqqplot

    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.

  2. 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.itercùng với hai bộ dữ liệu trong mảng xy. Nó xuất ra một loạt các n.itergiá 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 Rsử 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())
    }
  3. 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.xn.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.xYdist.yplot.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.statisticbằ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)

Kết quả xét nghiệm tương quan

XYXY

16xTôi16yTôif0,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 Rthự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 xylà 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ả.

Nghiên cứu thử nghiệm KS

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ó.)


Giải thích rất hay, và tôi thích thấy người khác làm một số mô phỏng. Tôi vẫn gặp khó khăn khi hiểu tại sao một mối tương quan dường như dự đoán một chút (hoặc chúng ta thậm chí không thể nói nhiều như vậy?). Ngoài ra, phần mơ hồ duy nhất (chưa quan trọng để hiểu tại sao KS hoạt động) là về dòng "x = y" ("nó tính độ lệch dọc lớn nhất so với dòng y = x trong biểu đồ QQ của họ. (Khi dữ liệu đến từ cùng một phân phối, cốt truyện QQ có xu hướng đi theo dòng này. "). Cảm ơn vì nỗ lực, tôi đã học được rất nhiều
PascalVKooten

1
1

KS kiểm tra xem hai bộ dữ liệu đến từ cùng một chức năng phân phối, tức là CDF của chúng có giống nhau không. Tuy nhiên, đối với tôi, OP có thể đang tìm kiếm một bài kiểm tra sẽ nói rằng Exp (0.1) giống với Exp (100) và Bình thường (0, 5) giống với Bình thường (10, .2 ). KS hoàn toàn không làm điều này, và thực sự có lẽ nói chung là không thể (và tôi thực sự không biết khi nào bạn muốn nó). Nhưng một số thử nghiệm về cách một người biến dạng thành người khác có thể hoạt động trong các trường hợp đơn giản (ví dụ: định tâm và tiêu chuẩn hóa sẽ xử lý các quy tắc thông thường, mặc dù không theo cấp số nhân).
Dougal

@Dougal Tôi đọc lại bình luận của bạn. Có đúng không khi nói rằng khi chúng tôi đề cập rằng "phân phối là như nhau", chúng tôi có nghĩa là CDF giống nhau?
PascalVKooten

μσ2

5

Không, tương quan không phải là một thử nghiệm tốt về điều này.

x <- 1:100 #Uniform
y <- sort(rnorm(100)) #Normal
cor(x,y) #.98

Tôi không biết về một thử nghiệm tốt để so sánh xem, ví dụ: hai phân phối đều bình thường, nhưng có thể có ý nghĩa khác nhau và sd Một cách gián tiếp, bạn có thể kiểm tra tính bình thường của từng loại, và nếu cả hai đều có vẻ bình thường, hãy đoán cả hai đều bình thường.


0

Nếu có một số lượng biến đủ lớn, thì điều này có thể hiển thị nhiều tương quan hơn với các giá trị theo thứ tự kích thước. Tuy nhiên, nó dường như không phải là một phương pháp đặc biệt hữu ích, nhất là vì nó cung cấp rất ít phương tiện để ước tính niềm tin rằng họ có thể sử dụng cùng một mô hình.

Một vấn đề mà bạn có thể gặp phải là khi bạn có các mô hình có ý nghĩa và độ lệch tương tự, nhưng sự khác biệt về kurtosis, vì một số phép đo vừa phải có thể đủ phù hợp để trông tương quan khá tốt.

Có vẻ hợp lý hơn khi mô hình hóa cả hai biến dựa trên các phân phối khác nhau để xem cái nào có khả năng nhất cho từng biến và so sánh kết quả.

Có thể có một số giá trị để bình thường hóa cả hai giá trị, sắp xếp và vẽ sơ đồ từng giá trị - điều này sẽ cho phép bạn xem cách so sánh phù hợp - và bạn cũng có thể vẽ một mô hình có thể cho cả hai, có liên quan đến những gì bạn đề xuất, nhưng thay vì mong đợi một câu trả lời cụ thể, chỉ là một ý tưởng trực quan về sự gần gũi của các bản phân phối.


(1) Phân tích của tôi thấy rằng kỳ vọng được thể hiện trong câu đầu tiên không được đưa ra: với số lượng biến đủ lớn, nếu một trong các phân phối có đuôi ngắn và cái kia chỉ có một cơ hội nhỏ để thể hiện các giá trị cực đoan hơn, thì mối tương quan có xu hướng cao quá mức. (2) Khi bạn "mô hình ... chống lại các bản phân phối khác nhau", làm thế nào để bạn kiểm soát nhiều xét nghiệm phụ thuộc được ngụ ý theo toa đó?
whuber
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.