Değişkenlerin aynı dağılımı takip edip etmediğini test edin


16

İki değişkenin aynı dağılımı takip edip etmediğini test etmek istiyorsanız, her iki değişkeni sıralamak ve sonra korelasyonlarını kontrol etmek iyi bir test olur mu? Yüksekse (en az 0.9?), Büyük olasılıkla değişkenler aynı dağılımdan gelir.

Burada dağıtım ile "normal", "ki-kare", "gama" vb.

Yanıtlar:


35

Bunun iyi bir test olup olmadığını öğrenelim. Sadece kötü olduğunu iddia etmekten veya bir durumda iyi çalışmadığını göstermekten çok daha fazlası var. Testlerin çoğu bazı durumlarda kötü çalışır, bu nedenle çoğu zaman, önerilen herhangi bir testin muhtemelen iyi bir seçim olabileceği koşulları tanımlamakla karşılaşırız.

Testin tanımı

Herhangi bir hipotez testi gibi, bu da (a) sıfır ve alternatif bir hipotez ve (b) hipotezler arasında ayrım yapmayı amaçlayan bir test istatistiği (korelasyon katsayısı) içerir.

Sıfır hipotezi, iki değişkenin aynı dağılımdan gelmesidir. Daha net olmak gerekirse, bize değişkenleri adı izin ve ve gözlenen olduğunu varsayalım örneklerini X olarak adlandırılan, (x_2, \ ldots, x_ {n_x} x_1) x_i = ve n_y örneklerini Y adı verilen Y_I . Sıfır hipotezi, tüm X ve Y örneklerinin bağımsız ve aynı şekilde dağılmış olmasıdır (iid).Y n x X x i = ( x 1 , x 2 , , x n x ) n y Y y i X YXYnxXxi=(x1,x2,,xnx)nyYyiXY

Bize: (a) tüm örnekleri bu alternatif hipotez olarak ele alalım bazı temel dağılıma göre iid tüm örneklerini ve (b) bazı temel dağılıma göre iid (c) ' değişmesidir . (Bu nedenle, arasındaki korelasyonları, arasındaki korelasyonları, ve arasındaki korelasyonları veya 'veya ' arasındaki dağılım farklarını ayrı ayrı : bunun mantıklı olmadığı varsayılır.)F X Y F Y F X F Y x i y i x i y j x yXFXYFYFXFYxiybenxbenyjxy

Önerilen test istatistik varsayar (bu ortak bir değer çağrı ) ve korelasyon katsayısı hesaplar (her zamanki gibi, belirtir verinin en küçüğü). Buna .nx=nyn(x[ben],y[ben])[ben]benincit(x,y)

Permütasyon testleri

İstatistik ne olursa olsun - bu durumda önerilmiştir - biz her zaman gerçekleştirebilirsiniz permütasyon testi. Boş hipotez altında, verinin olasılığı , verisinin herhangi bir permütasyonu olasılığı ile aynıdır. değerler. Başka bir deyişle, verilerin yarısının , diğer yarısının atanması saf rastgele rastlantıdır. Bu, iid varsayımlarının ve sıfır hipotezinin basit ve doğrudan bir sonucudur .( ( x 1 , x 2 , , x n ) , ( y 1 , y 2 , , y n ) ) 2 n X Y F X = F Yt((x1,x2,...,xn),(y1,y2,...,yn))2nXYFX=FY

Bu nedenle, örnek dağılımı , koşullu gözlemlere ve , tüm değerleri dağılımı tüm eldeverinin permütasyonları. Bununla ilgileniyoruz çünkü ( % güvene karşılık gelen) gibi herhangi bir belirli test boyutu , örnekleme dağılımından iki taraflı bir kritik bölge oluşturacağız : olası değerlerinin en uç % %x i y i t ( 2 n ) ! α α = .05 95 t 100 α tt(x,y)xbenybent(2n)!αα=.0595t100αt(yüksek tarafta, çünkü yüksek korelasyon benzer dağılımlarla tutarlıdır ve düşük korelasyon değildir). Verilerin farklı dağılımlardan geldiğine karar vermek için korelasyon katsayısının ne kadar büyük olması gerektiğini belirlemeye devam ediyoruz.

Sıfır örnekleme dağılımının simülasyonu

Çünkü(veya isterseniz, verisini boyutunda iki parçaya bölmenin yollarını sayan ) küçük için bile büyük olur , hesaplamak pratik değildir tam olarak örnekleme dağılımı, bu yüzden bir simülasyon kullanarak örnekliyoruz. (Örneğin, , ve .) Bin örnek hakkında genellikle yeterli (ve kesinlikle üstleneceğimiz keşifler için olacaktır).( 2 n(2n)!2nnnn=16 ( 2n(2nn)/22nnnn=16(2, n)! 2,63×1035(2nn)/2=300 540 195(2n)!2.63x1035

Bulmamız gereken iki şey var: birincisi, örnekleme dağılımı sıfır hipotezi altında neye benziyor. İkincisi, bu test farklı dağılımlar arasında ne kadar iyi ayrım yapıyor?

Bir komplikasyon var: örnekleme dağılımı verilerin niteliğine bağlıdır. Yapabileceğimiz tek şey, çalışmakla ilgilendiğimiz her şeyi taklit etmek için oluşturulan gerçekçi verilere bakmak ve simülasyonlardan öğrendiklerimizin kendi durumumuz için geçerli olacağını ummaktır.

uygulama

Örneklemek gerekirse, ben bu çalışmayı yaptım R. Doğal olarak üç parçaya ayrılır.

  1. Test istatistiğini hesaplayan bir fonksiyon . Biraz daha genel olmak istediğim için, (sıralanmış) daha küçük veri eşleşmeler oluşturmak için (sıralanmış) daha büyük veri kümesindeki değerler arasında doğrusal olarak enterpolasyon farklı boyut veri kümelerini ( ) işler . Bu zaten fonksiyon tarafından yapıldığından , sadece sonuçlarını alıyorum:n xn yt(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))
    }

    Küçük bir bükülme - gereksiz ama görselleştirme için yararlı - korelasyon katsayısını sıfır istatistiğin dağılımını yaklaşık simetrik hale getirecek şekilde yeniden ifade eder. Yapan bu transform.

  2. Örnekleme dağılımının simülasyonu. Giriş için, bu fonksiyonu yineleme sayısının kabul n.iterdizilerdeki iki veri kümesi ile birlikte xve y. n.iterTest istatistiğinin bir dizi değerini çıkarır. İç işleri, Rkullanıcı olmayanlar için bile şeffaf olmalıdır :

    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. Testi yapmak için ihtiyacımız olan her şey bu olsa da , incelemek için testi birçok kez tekrarlamak isteyeceğiz. Bu nedenle, testi bir kez yürütüyoruz ve bu kodu, genellikle fburada adı verilen ve tekrar tekrar çağırabileceğimiz üçüncü bir fonksiyonel katmana sarıyoruz. Geniş bir çalışma için yeterince genel hale getirmek için, girdi için, simulasyon için veri kümelerinin boyutlarını ( n.xve n.y), her permütasyon testi ( n.iter) için yineleme sayısını test, test istatistiğini hesaplama işlevine bir referans kabul eder (göreceksiniz geçici olarak neden bunu kodlamak istemeyebiliriz ) ve biri ( ) için diğeri ( ) için iid rasgele değerler üretmek için iki işlev . Bir seçenekYXdist.xYdist.yplot.it neler olup bittiğini görmenize yardımcı olur.

    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)
    }

    Çıktı simüle edilmiş bir "p-değeri" dir: veriler için hesaplanandan daha aşırı görünen bir istatistik veren simülasyonların oranı .

Parçalar (2) ve (3) son derece geneldir: Farklı bir test için sadece test.statisticbaşka bir hesaplama ile değiştirerek böyle bir çalışma yapabilirsiniz . Bunu aşağıda yapıyoruz.

İlk sonuçlar

Varsayılan olarak, kodumuz iki eşit dağılımdan alınan verileri karşılaştırır. Bunu yapmasına izin verdim ( oldukça küçük veri kümeleri olan ve bu nedenle orta derecede zor bir test durumu sunan ) ve sonra tekdüze-normal bir karşılaştırma ve tekdüze üstel bir karşılaştırma için tekrarlayın. (Düzgün dağılımlar, değerden biraz fazla olmadıkça normal dağılımlardan ayırt etmek kolay değildir , ancak üst eğriliği - uzun çarpıklığı ve uzun sağ kuyruğu olan - genellikle tekdüze dağılımlardan kolayca ayırt edilir.)16n.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)

Korelasyon testi sonuçları

Sol tarafta, hem p-değerleri sıfır dağılımı ve aynı kalacaktır. Histogramın tekdüze yakın olmasını umuyoruz (özellikle "sol" sonuçlar aralığındaki aşırı sol uca özel dikkat göstererek) - ve aslında - ve simülasyon sırasında elde edilen değerlerin sırası, altında gösterilen, rastgele görünüyor - ve öyle. Bu iyi. Bu, ve farklı dağılımlardan geldiğinde bunun nasıl değiştiğini incelemek için bir sonraki adıma geçebileceğimiz anlamına gelir .Y X YXYXY

Orta araziler testi üniform dağılımı özellikleri karşı değişkenler Normal . Daha sık olmamakla birlikte, p değerleri beklenenden daha düşüktü. Bu, testin aslında bir farkı tespit etme eğilimini gösterir. Ama büyük değil. Örneğin, histogramdaki en soldaki çubuk 1000 çalışmasından (1000 ayrı simüle edilmiş veri kümesini içeren), p değerinin sadece yaklaşık 110 kez az olduğunu gösterir . Biz düşünürsek "önemli", sonra bu test sadece bir yaklaşık sahiptir dayanan bir üniforma ve normal dağılım arasındaki farkı tespit olasılığı%16xben16ybenf0.051116her birinden bağımsız değerler. Bu oldukça düşük güç. Ama belki de kaçınılmazdır, bu yüzden devam edelim.

Sağ taraftaki grafikler benzer şekilde üstel olana karşı homojen bir dağılımı test eder. Bu sonuç tuhaf. Bu test, daha sık olmamakla birlikte, tek tip verilerin ve üstel verilerin aynı göründüğü sonucuna varma eğilimindedir. Düzgün ve üstel değişkenlerin iki tekdüzen değişkenden daha benzer olduğunu "düşünüyor" gibi görünüyor ! Burada neler oluyor?

Sorun, üstel bir dağılımdan elde edilen verilerin birkaç aşırı yüksek değere sahip olma eğiliminde olmasıdır. Düzgün dağılmış değerlere karşı bunların dağılım grafiğini oluşturduğunuzda, geri kalanın sağ üst köşesinde birkaç nokta olacaktır. Bu çok yüksek bir korelasyon katsayısına karşılık gelir. Bu nedenle, dağılımlardan herhangi biri birkaç aşırı değer ürettiğinde, korelasyon katsayısı dağılımların ne kadar farklı olduğunu ölçmek için korkunç bir seçimdir. Bu, daha da kötü bir soruna yol açar: veri kümesi boyutları büyüdükçe, birkaç aşırı gözlem elde etme şansı artar. Bu nedenle, bu testin veri miktarı arttıkça daha da kötüleşmesini bekleyebiliriz. Ne kadar korkunç ....

Daha iyi bir test

Orijinal soru olumsuz cevaplandı. Bununla birlikte, dağılımlar arasında ayrımcılık yapmak için iyi bilinen güçlü bir test vardır: Kolmogorov-Smirnov testi. Korelasyon katsayısı yerine, QQ grafiğinde çizgisinden en büyük dikey sapmayı hesaplar . (Veriler aynı dağılımdan geldiğinde, QQ grafiği bu çizgiyi takip etme eğilimindedir. Aksi takdirde, bir yerde sapacaktır; KS istatistiği bu tür en büyük sapmayı alır.)y=x

İşte bir Ruygulama:

test.statistic <- function(x, y) {
  ks.test(x,y)$statistic
}

Bu doğru: yazılıma yerleşik, bu yüzden sadece çağırmamız gerekiyor. Fakat bekle! Manuel dikkatlice okursanız (a) testi malzemeleri bir p-değeri ancak her iki (b) p değeridir (fena halde) yanlış öğrenecektir xve yvardır veri setlerini. Verilerin hangi dağıtımdan geldiğini tam olarak bildiğinize inandığınızda xve bunun doğru olup olmadığını görmek istediğinizde kullanılmak üzere tasarlanmıştır. Bu nedenle test, verilerin ygeldiği dağılım hakkındaki belirsizliği uygun şekilde yerine getirmez .

Sorun değil! Permütasyon testi çerçevesi hala aynı derecede geçerlidir. Önceki değişikliği yaparak test.statistic, tek yapmamız gereken bir önceki çalışmayı değişmeden çalıştırmaktır. Sonuçlar burada.

KS test çalışması

Boş dağıtım olmasına rağmen değil (üst sol) üniforma, aşağıda oldukça üniforma biz gerçekten onun değerlerine önem nerede olduğu ya da öylesine. Aşağıdaki grafikte (sol altta) bir bakış sorunu gösterir: KS istatistiği birkaç ayrı değer etrafında kümelenme eğilimindedir. (Bu sorun pratikte daha büyük veri kümeleri için ortadan kalkar.)p=0.20

Orta (üniform - normal) ve sağ (üniform - üstel) histogramlar tam olarak doğru olanı yapıyor: iki dağılımın farklı olduğu vakaların büyük çoğunluğunda, bu test küçük p değerleri üretiyor. Örneğin , her birinden 16 değere göre bir üniforma ile normal arasında karşılaştırılırken, düşük bir p değeri sağlama şansı% . Bunu korelasyon katsayısı testi ile elde edilen piddling % karşılaştırın .700.0511

Doğru histogram o kadar iyi değil, ama en azından şimdi doğru yönde! Biz olduğunu tahmin ediyoruz30 muntazam ve üstel dağılımı arasındaki farkın tespit edilmesi şansı% % seviyesi ve de bu algılama yapma olasılığı% (% seviyesi için iki çubuk için p değeri az, toplam 1000 iterasyondan 500'ü).α=550α=100.10

Sonuçlar

Bu nedenle, korelasyon testi ile ilgili problemler bu ortamdaki bazı doğal zorluklardan kaynaklanmamaktadır. Korelasyon testi sadece çok kötü performans göstermekle kalmaz, aynı zamanda yaygın olarak bilinen ve mevcut bir testle karşılaştırıldığında kötüdür. (Kabul edilemez olduğunu tahmin ediyorum , yani ortalama olarak KS testinin permütasyon versiyonundan her zaman daha kötü performans gösterecek ve bunu kullanmak için hiçbir sebep olmadığı anlamına geliyor.)


Çok güzel bir açıklama ve başkalarının bazı simülasyonlar yaptığını görmek hoşuma gidiyor. Neden bir korelasyonun biraz tahmin ediyor gibi göründüğünü anlamakta zorlanıyorum (ya da bu kadarını bile söyleyemeyiz?). Ayrıca, tek belirsiz (KS'nin neden çalıştığını anlamanın kritik kısmı) "x = y" çizgisiyle ilgilidir ("QQ grafiğinde y = x çizgisinden en büyük dikey sapmayı hesaplar. (Veriler aynı olduğunda QQ grafiği bu çizgiyi takip etme eğilimindedir. "). Çaba için teşekkürler, çok şey öğrendim
PascalVKooten

1
Açık aramalarla Wikipedia'da bulmak çok kolay :-). Korelasyon ile ilgili olarak, sorun değişkenlerin güçlü bir şekilde ilişkilendirilebildiği, ancak tamamen farklı dağılımlara sahip olabileceği; aslında, korelasyon katsayılarının dağılımı büyük veri setlerinde keyfi olarak yaklaşırken, keyfi olarak "çok uzak" (sezgisel anlamda) bir dağılım dizileri vardır . Bu, korelasyon katsayısını dağılımın zayıf bir ayırıcısı yapar. 1
whuber

KS, iki veri kümesinin aynı dağıtım işlevinden gelip gelmediğini, yani CDF'lerinin aynı olup olmadığını test eder. Bana öyle geliyor ki OP, Exp (0.1) 'ün Exp (100) ile aynı ve Normal (0, 5)' in Normal (10, .2) ile aynı olduğunu söyleyecek bir test arıyor olabilir. ). KS bunu hiç yapmaz ve aslında genel olarak imkansızdır (ve ne zaman isteyeceğinizi gerçekten bilmiyorum). Ancak, birinin nasıl deforme olabileceğine dair bazı testler basit durumlarda işe yarayabilir (örneğin, merkezleme ve standartlaştırma, üstel olmamakla birlikte normalleri iyi işleyecektir).
Dougal

@Dougal Yorumunuzu tekrar okudum. "Dağılımların aynı olduğunu" söylediğimizde CDF'nin aynı olduğunu söylemek doğru mudur?
PascalVKooten

@PascalvKooten "Dağıtım", farklı bağlamlarda farklı şeyler ifade etmek için kullanılan bir kelimedir. Genel olarak, yine de, "dağıtımın" tipik olarak belirli bir CDF (veya eşdeğeri) tarafından tanımlanan bir şey anlamına geldiğini düşünüyorum; "normal" veya "gama" , parametre değerlerine göre belirli bir dağılımı tanımlayan dağıtım ailelerini belirtir ( normal için ve ). μσ2
Dougal

5

Hayır, korelasyon bunun iyi bir testi değildir.

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

Örneğin, iki dağılımın hem normal, hem de muhtemelen farklı ortalama ve sd ile karşılaştırılıp karşılaştırıldığı iyi bir test bilmiyorum Dolaylı olarak, her birinin normalliğini ayrı ayrı test edebilirsiniz ve her ikisi de normal görünüyorsa, her ikisi de sanırım.


0

Yeterince çok sayıda değişken varsa, bu, büyüklük sıralı değerlerle daha fazla korelasyon gösterebilir. Bununla birlikte, özellikle aynı modeli kullanabileceklerine dair güven tahmin etmek için çok az araç sağladığı için, özellikle yararlı bir yöntem gibi görünmemektedir.

Deneyimlemekle yükümlü olduğunuz bir sorun, benzer ortalama ve çarpıklığa sahip modelleriniz olduğunda, ancak basıklıktaki bir farkın, ılımlı sayıda ölçümün oldukça iyi korelasyonlu görünmek için yeterince iyi olabileceğidir.

Her biri için hangisinin daha olası olduğunu görmek ve sonuçları karşılaştırmak için her iki değişkeni farklı dağılımlara göre modellemek daha makul görünmektedir.

Her iki değeri normalleştirmek, her birini sıralamak ve çizmek için bir değer olabilir - bu, uyumların nasıl karşılaştırıldığını görmenize izin verir - ve her ikisi için de önerdiğinizle ilişkili olacak, ancak bunun yerine, olası bir modeli çizebilirsiniz. somut bir cevap beklemek, sadece dağılımların yakınlığı hakkında görsel bir fikir.


(1) Analizim, ilk cümlede ifade edilen beklentinin karşılanmadığını ortaya koyuyor: yeterince fazla sayıda değişkenle, dağıtımlardan birinin kısa kuyrukları varsa ve diğerinin daha fazla aşırı değer sergileme şansı varsa, korelasyon aşırı derecede yüksek olma eğilimindedir. (2) "Farklı dağıtımlara karşı modelleme" yaptığınızda, bu reçeteyle ima edilen çoklu bağımlı testleri nasıl kontrol edersiniz?
whuber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.