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 yXFXYFYFXFYxiyixbenyjxy
Ö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[ i ], y[ i ])[ i ]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) )2 nXYFX= 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( 2 n ) !αα = .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( 2 n ) !2nnnn=16 ( 2n( 2nn) /22 nnnn = 16(2, n)! ≈2,63×1035( 2nn) /2=300540195 ( 2 n ) ! ≈ 2,63 × 1035
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.
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 x ≠ n yt ( 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))
}
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
.
Örnekleme dağılımının simülasyonu. Giriş için, bu fonksiyonu yineleme sayısının kabul n.iter
dizilerdeki iki veri kümesi ile birlikte x
ve y
. n.iter
Test istatistiğinin bir dizi değerini çıkarır. İç işleri, R
kullanı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())
}
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 f
burada 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.x
ve 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.x
Ydist.y
plot.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.statistic
baş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)
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ığı%16xben16ybenf
0.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 R
uygulama:
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 x
ve y
vardır veri setlerini. Verilerin hangi dağıtımdan geldiğini tam olarak bildiğinize inandığınızda x
ve bunun doğru olup olmadığını görmek istediğinizde kullanılmak üzere tasarlanmıştır. Bu nedenle test, verilerin y
geldiğ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.
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.)