Fisher kesin test gücünün şaşırtıcı davranışı (permütasyon testleri)


9

Prototipi Fisher testi olan "kesin testler" veya "permütasyon testleri" adlı paradoksal bir davranışla karşılaştım. İşte burada.

400 kişiden oluşan iki grubunuz (örneğin 400 kontrole karşı 400 vaka) ve iki modaliteli (örneğin maruz kalan / maruz bırakılmamış) bir değişken bulunduğunuzu düşünün. İkinci grupta sadece 5 maruz kalan birey vardır. Fisher testi şöyle:

> x <- matrix( c(400, 395, 0, 5) , ncol = 2)
> x
     [,1] [,2]
[1,]  400    0
[2,]  395    5
> fisher.test(x)

    Fisher's Exact Test for Count Data

data:  x
p-value = 0.06172
(...)

Ama şimdi, ikinci grupta (vakalar), örneğin hastalığın formu veya işe alım merkezi gibi bir heterojenlik var. 100 kişiden oluşan 4 gruba ayrılabilir. Böyle bir şey olması muhtemeldir:

> x <- matrix( c(400, 99, 99 , 99, 98, 0, 1, 1, 1, 2) , ncol = 2)
> x
     [,1] [,2]
[1,]  400    0
[2,]   99    1
[3,]   99    1
[4,]   99    1
[5,]   98    2
> fisher.test(x)

    Fisher's Exact Test for Count Data

data:  x 
p-value = 0.03319
alternative hypothesis: two.sided
(...)

Şimdi, p<0.05...

Bu sadece bir örnek. Ancak, ilk 400 kişide maruz kalma sıklığının 0 olduğunu ve geri kalan 400 kişide 0.0125 olduğunu varsayarak, iki analiz stratejisinin gücünü simüle edebiliriz.

Analizin gücünü 400 kişilik iki grupla tahmin edebiliriz:

> p1 <- replicate(1000, { n <- rbinom(1, 400, 0.0125); 
                          x <- matrix( c(400, 400 - n, 0, n), ncol = 2); 
                          fisher.test(x)$p.value} )
> mean(p1 < 0.05)
[1] 0.372

400 kişilik bir grup ve 100 kişilik 4 grup ile:

> p2 <- replicate(1000, { n <- rbinom(4, 100, 0.0125); 
                          x <- matrix( c(400, 100 - n, 0, n), ncol = 2);
                          fisher.test(x)$p.value} )
> mean(p2 < 0.05)
[1] 0.629

Güç farkı var. 4 alt grupta vakaların bölünmesi, bu alt gruplar arasında dağılım farkı olmasa bile daha güçlü bir test sağlar. Elbette bu güç kazancı, artan tip I hata oranına atfedilemez.

Bu fenomen iyi biliniyor mu? Bu, ilk stratejinin yeterince güçsüz olduğu anlamına mı geliyor? Önyüklenmiş bir p değeri daha iyi bir çözüm olabilir mi? Tüm yorumlarınızı bekliyoruz.

Post Scriptum

@MartijnWeterings tarafından işaret edildiği gibi, bu davranışın nedeninin büyük bir kısmı (ki tam olarak sorum değil!) Yedekte çekme stratejilerinin gerçek tip I hataları aynı değildir. Ancak bu her şeyi açıklamıyor gibi görünüyor. İçin ROC Eğrilerini karşılaştırmaya çalıştım'H0:p0=p1=0.005 vs 'H1:p0=0.05p1=0.0125.

İşte kodum.

B <- 1e5
p0 <- 0.005
p1 <- 0.0125

# simulation under H0 with p = p0 = 0.005 in all groups
# a = 2 groups 400:400, b = 5 groupe 400:100:100:100:100

p.H0.a <- replicate(B, { n <- rbinom( 2, c(400,400), p0);
                           x <- matrix( c( c(400,400) -n, n ), ncol = 2);
                          fisher.test(x)$p.value} )

p.H0.b <- replicate(B, { n <- rbinom( 5, c(400,rep(100,4)), p0);
                           x <- matrix( c( c(400,rep(100,4)) -n, n ), ncol = 2);
                          fisher.test(x)$p.value} )

# simulation under H1 with p0 = 0.005 (controls) and p1 = 0.0125 (cases)

p.H1.a <- replicate(B, { n <- rbinom( 2, c(400,400), c(p0,p1) );
                           x <- matrix( c( c(400,400) -n, n ), ncol = 2);
                          fisher.test(x)$p.value} )

p.H1.b <- replicate(B, { n <- rbinom( 5, c(400,rep(100,4)), c(p0,rep(p1,4)) );
                           x <- matrix( c( c(400,rep(100,4)) -n, n ), ncol = 2);
                          fisher.test(x)$p.value} )

# roc curve 

ROC <- function(p.H0, p.H1) {
  p.threshold <- seq(0, 1.001, length=501)
  alpha <- sapply(p.threshold, function(th) mean(p.H0 <= th) )
  power <- sapply(p.threshold, function(th) mean(p.H1 <= th) )
  list(x = alpha, y = power)
}

par(mfrow=c(1,2))
plot( ROC(p.H0.a, p.H1.a) , type="b", xlab = "alpha", ylab = "1-beta" , xlim=c(0,1), ylim=c(0,1), asp = 1)
lines( ROC(p.H0.b, p.H1.b) , col="red", type="b" )
abline(0,1)

plot( ROC(p.H0.a, p.H1.a) , type="b", xlab = "alpha", ylab = "1-beta" , xlim=c(0,.1) )
lines( ROC(p.H0.b, p.H1.b) , col="red", type="b" )
abline(0,1)

İşte sonuç:

roc eğrileri

Bu nedenle, aynı gerçek tip I hatasıyla yapılan bir karşılaştırmanın hala (gerçekten çok daha küçük) farklılıklara yol açtığını görüyoruz.


Anlamıyorum. Olgu grubunu bölmek, içinde bazı heterojenliklerden şüphelenildiğinde mantıklı olabilir - örneğin, 5 farklı merkezden geliyorlar. "Maruz kalan" modaliteyi bölmek benim için anlamlı görünmüyor.
Elvis

1
Birinci ve ikinci strateji arasındaki farkı grafiksel olarak çizersek. Sonra, hipotez değerleri ve yüzeyinin, olasılığın belli bir seviyenin altında olduğu sapma mesafesini gösteren bir noktaya sahip 5 eksenli (400100100100 ve 100 grupları için) bir koordinat sistemi hayal ediyorum. İlk strateji ile bu yüzey bir silindirdir, ikinci strateji ile bu yüzey bir küredir. Aynı durum, gerçek değerler için ve bunun etrafında hata için bir yüzey için de geçerlidir. İstediğimiz, örtüşmenin olabildiğince küçük olması.
Sextus Empiricus

1
İki yöntem arasında neden bir fark olduğu gerekçesiyle biraz daha fazla bilgi veren sorumun sonunu kabul ettim.
Sextus Empiricus

1
Barnard'ın kesin testinin, iki marjdan sadece biri sabitlendiğinde kullanıldığını düşünüyorum. Ama muhtemelen aynı etkileri alacaksınız.
Sextus Empiricus

1
Yapmak istediğim başka bir (daha fazla) ilginç not, p0> p1 ile test ettiğinizde gücün gerçekten azalmasıdır. Böylece p1> p0 aynı alfa seviyesinde güç artar. Ancak p1 <p0 olduğunda güç azalır (köşegenin altında bir eğri bile alıyorum).
Sextus Empiricus

Yanıtlar:


4

P değerleri neden farklı?

Devam eden iki efekt vardır:

  • Değerlerin gizliliği nedeniyle 'gerçekleşme olasılığı en yüksek' 0 2 1 1 1 vektörünü seçersiniz. Ama bu (imkansız) 0 1.25 1.25 1.25 1.25'ten daha küçük olurdu,χ2 değer.

    Sonuç, 5 0 0 0 0 vektörünün en azından aşırı durum olarak sayılmamasıdır (5 0 0 0 0 daha küçüktür) χ20 2 1 1 1). Daha önce de böyleydi. İki taraflı 2x2 tablo sayımları birinci ya da eşit aşırı ikinci grupta olmak 5 maruziyetin Her iki durumda Fisher testi.

    Bu nedenle p değeri neredeyse bir faktör 2 ile farklılık gösterir. (Bir sonraki noktadan dolayı tam olarak değil)

  • 5 0 0 0 0'ı eşit derecede aşırı bir durum olarak kaybederken, 1 4 0 0 0'ı 0 2 1 1 1'den daha aşırı bir durum olarak kazanırsınız.

Yani fark, χ2değeri (veya kesin Fisher testinin R uygulaması tarafından kullanılan doğrudan hesaplanan bir p değeri). 400'lü grubu 100'lü 4 gruba ayırırsanız, farklı durumlar diğerinden daha fazla veya daha az 'aşırı' olarak kabul edilecektir. 5 0 0 0 0 artık 0 2 1 1 1'den daha az 'aşırı'. Fakat 1 4 0 0 0 daha 'aşırı'.


kod örneği:

# probability of distribution a and b exposures among 2 groups of 400
draw2 <- function(a,b) {
  choose(400,a)*choose(400,b)/choose(800,5)
}

# probability of distribution a, b, c, d and e exposures among 5 groups of resp 400, 100, 100, 100, 100
draw5 <- function(a,b,c,d,e) {
choose(400,a)*choose(100,b)*choose(100,c)*choose(100,d)*choose(100,e)/choose(800,5)
}

# looping all possible distributions of 5 exposers among 5 groups
# summing the probability when it's p-value is smaller or equal to the observed value 0 2 1 1 1
sumx <- 0
for (f in c(0:5)) {
  for(g in c(0:(5-f))) {
    for(h in c(0:(5-f-g))) {
      for(i in c(0:(5-f-g-h))) {
        j = 5-f-g-h-i
        if (draw5(f, g, h, i, j) <= draw5(0, 2, 1, 1, 1)) {
          sumx <- sumx + draw5(f, g, h, i, j)
        }
      }
    }
  } 
}
sumx  #output is 0.3318617

# the split up case (5 groups, 400 100 100 100 100) can be calculated manually
# as a sum of probabilities for cases 0 5 and 1 4 0 0 0 (0 5 includes all cases 1 a b c d with the sum of the latter four equal to 5)
fisher.test(matrix( c(400, 98, 99 , 99, 99, 0, 2, 1, 1, 1) , ncol = 2))[1]
draw2(0,5) + 4*draw(1,4,0,0,0)

# the original case of 2 groups (400 400) can be calculated manually
# as a sum of probabilities for the cases 0 5 and 5 0 
fisher.test(matrix( c(400, 395, 0, 5) , ncol = 2))[1]
draw2(0,5) + draw2(5,0)

bu son bitin çıktısı

> fisher.test(matrix( c(400, 98, 99 , 99, 99, 0, 2, 1, 1, 1) , ncol = 2))[1]
$p.value
[1] 0.03318617

> draw2(0,5) + 4*draw(1,4,0,0,0)
[1] 0.03318617

> fisher.test(matrix( c(400, 395, 0, 5) , ncol = 2))[1]
$p.value
[1] 0.06171924

> draw2(0,5) + draw2(5,0)
[1] 0.06171924

Grupları bölerken gücü nasıl etkiler?

  • P-değerlerinin 'mevcut' seviyelerindeki farklı adımlardan ve Fishers'ın kesin testinin muhafazakarlığından dolayı bazı farklılıklar vardır (ve bu farklılıklar oldukça büyük olabilir).

  • Fisher testi de verilere dayanarak (bilinmeyen) modele uyar ve daha sonra bu modeli p değerlerini hesaplamak için kullanır. Örnekteki model, tam olarak 5 maruz kalmış birey olmasıdır. Verileri farklı gruplar için bir binom ile modellerseniz, zaman zaman 5'ten fazla veya daha az kişi alırsınız. Balıkçı testini buna uyguladığınızda, hatanın bir kısmı yerleştirilecek ve artıklar sabit marjinal testlere göre daha küçük olacaktır. Sonuç, testin tam olarak değil, çok fazla muhafazakar olmasıdır.

Grupları rasgele böldüğünüzde deney tipi I hata olasılığı üzerindeki etkinin çok iyi olmayacağını beklemiştim. Eğer sıfır hipotezi doğruysa kabaca karşılaşacaksınızαolguların yüzdesi anlamlı bir p değerine sahiptir. Bu örnekte, resimde gösterildiği gibi farklar büyüktür. Bunun ana nedeni, toplam 5 pozlama ile sadece üç mutlak fark seviyesi (5-0, 4-1, 3-2, 2-3, 1-4, 0-5) ve sadece üç ayrı p- değerleri (400'lü iki grup olması durumunda).

En ilginç olanı reddetme olasılıklarının grafiği 'H0 Eğer 'H0 doğrudur ve eğer 'Hbirdoğru. Bu durumda alfa seviyesi ve takdirsizlik çok önemli değil (etkili ret oranını çiziyoruz) ve hala büyük bir fark görüyoruz.

Soru, bunun tüm olası durumlar için geçerli olup olmadığıdır.

Güç analizinizin 3 kez kod ayarı (ve 3 resim):

5 maruz kalan birey için binom kısıtlaması kullanma

Etkili reddetme olasılığının grafikleri 'H0seçilen alfa fonksiyonu olarak. Fisher'ın kesin testi için p-değerinin tam olarak hesaplandığı bilinir, ancak yalnızca birkaç seviye (adımlar) oluşur, bu nedenle test seçilen alfa seviyesine göre çok muhafazakar olabilir.

Etkinin 400-400 kasa (kırmızı) için 400-100-100-100-100 kasa (mavi) karşısında çok daha güçlü olduğunu görmek ilginçtir. Bu nedenle, bu bölünmeyi gücü arttırmak, H_0'ı reddetme olasılığını artırmak için kullanabiliriz. (tip I hata yapma olasılığını çok fazla önemsemememize rağmen, bu yüzden gücü arttırmak için bu ayrımı yapmak her zaman çok güçlü olmayabilir)

H0'ı reddetmek için farklı olasılıklar

maruz kalan 5 kişiyle sınırlı olmayan binom kullanımı

Sizin gibi bir binom kullanırsak, iki durumdan hiçbiri 400-400 (kırmızı) veya 400-100-100-100-100 (mavi) doğru bir p değeri vermez. Bunun nedeni, Fisher kesin testinin sabit satır ve sütun toplamlarını varsaymasıdır, ancak binom modeli bunların serbest olmasına izin verir. Fisher testi, kalan terimi gerçek hata teriminden daha küçük yapan satır ve sütun toplamlarına 'uyacaktır'.

aşırı muhafazakar Fisher kesin testi

artan güç bir bedeli var mı?

Reddetme olasılıklarını karşılaştırdığımızda 'H0 doğrudur ve 'Hbir doğrudur (birinci değerin düşük ve ikinci değerin yüksek olmasını diliyoruz) o zaman gerçekten gücün ( 'Hbir doğru) tip I hatasının artması maliyeti olmadan artırılabilir.

H_0 ve H_a karşılaştırması

# using binomial distribution for 400, 100, 100, 100, 100
# x uses separate cases
# y uses the sum of the 100 groups
p <- replicate(4000, { n <- rbinom(4, 100, 0.006125); m <- rbinom(1, 400, 0.006125); 
x <- matrix( c(400 - m, 100 - n, m, n), ncol = 2);
y <- matrix( c(400 - m, 400 - sum(n), m, sum(n)), ncol = 2);
c(sum(n,m),fisher.test(x)$p.value,fisher.test(y)$p.value)} )

# calculate hypothesis test using only tables with sum of 5 for the 1st row
ps <- c(1:1000)/1000
m1 <- sapply(ps,FUN = function(x) mean(p[2,p[1,]==5] < x))
m2 <- sapply(ps,FUN = function(x) mean(p[3,p[1,]==5] < x))

plot(ps,ps,type="l",
     xlab = "chosen alpha level",
     ylab = "p rejection")
lines(ps,m1,col=4)
lines(ps,m2,col=2)

title("due to concervative test p-value will be smaller\n leading to differences")

# using all samples also when the sum exposed individuals is not 5
ps <- c(1:1000)/1000
m1 <- sapply(ps,FUN = function(x) mean(p[2,] < x))
m2 <- sapply(ps,FUN = function(x) mean(p[3,] < x))

plot(ps,ps,type="l", 
     xlab = "chosen alpha level",
     ylab = "p rejection")
lines(ps,m1,col=4)
lines(ps,m2,col=2)

title("overly conservative, low effective p-values \n fitting marginals makes residuals smaller than real error")


#   
# Third graph comparing H_0 and H_a
#
# using binomial distribution for 400, 100, 100, 100, 100
# x uses separate cases
# y uses the sum of the 100 groups
offset <- 0.5
p <- replicate(10000, { n <- rbinom(4, 100, offset*0.0125); m <- rbinom(1, 400, (1-offset)*0.0125); 
x <- matrix( c(400 - m, 100 - n, m, n), ncol = 2);
y <- matrix( c(400 - m, 400 - sum(n), m, sum(n)), ncol = 2);
c(sum(n,m),fisher.test(x)$p.value,fisher.test(y)$p.value)} )

# calculate hypothesis test using only tables with sum of 5 for the 1st row
ps <- c(1:10000)/10000
m1 <- sapply(ps,FUN = function(x) mean(p[2,p[1,]==5] < x))
m2 <- sapply(ps,FUN = function(x) mean(p[3,p[1,]==5] < x))

offset <- 0.6
p <- replicate(10000, { n <- rbinom(4, 100, offset*0.0125); m <- rbinom(1, 400, (1-offset)*0.0125); 
x <- matrix( c(400 - m, 100 - n, m, n), ncol = 2);
y <- matrix( c(400 - m, 400 - sum(n), m, sum(n)), ncol = 2);
c(sum(n,m),fisher.test(x)$p.value,fisher.test(y)$p.value)} )

# calculate hypothesis test using only tables with sum of 5 for the 1st row
ps <- c(1:10000)/10000
m1a <- sapply(ps,FUN = function(x) mean(p[2,p[1,]==5] < x))
m2a <- sapply(ps,FUN = function(x) mean(p[3,p[1,]==5] < x))

plot(ps,ps,type="l",
     xlab = "p rejecting if H_0 true",
     ylab = "p rejecting if H_a true",log="xy")
points(m1,m1a,col=4)
points(m2,m2a,col=2)

legend(0.01,0.001,c("400-400","400-100-100-100-100"),pch=c(1,1),col=c(2,4))

title("comparing H_0:p=0.5 \n with H_a:p=0.6")

Neden gücü etkiliyor?

Sorunun anahtarının "anlamlı" olarak seçilen sonuç değerlerinin farkı olduğuna inanıyorum. Durum, 400, 100, 100, 100 ve 100 büyüklüğündeki 5 gruptan beş maruz kalan kişiden alınmıştır. 'Aşırı' kabul edilen farklı seçimler yapılabilir. görünüşe göre ikinci stratejiye gittiğimizde güç artar (etkili tip I hatası aynı olsa bile).

Birinci ve ikinci strateji arasındaki farkı grafiksel olarak çizersek. Sonra, hipotez değerleri ve yüzeyinin, olasılığın belli bir seviyenin altında olduğu sapma mesafesini gösteren bir noktaya sahip 5 eksenli (400100100100 ve 100 grupları için) bir koordinat sistemi hayal ediyorum. İlk strateji ile bu yüzey bir silindirdir, ikinci strateji ile bu yüzey bir küredir. Aynı durum, gerçek değerler için ve bunun etrafında hata için bir yüzey için de geçerlidir. İstediğimiz, örtüşmenin olabildiğince küçük olması.

Biraz farklı bir problemi düşündüğümüzde gerçek bir grafik yapabiliriz (daha düşük boyutsallıkla).

Bir Bernoulli sürecini test etmek istediğimizi düşünün 'H0:p=0.51000 deney yaparak. Sonra aynı stratejiyi 1000'i 500 büyüklüğünde iki gruba ayırarak yapabiliriz. Bu nasıl görünüyor (X ve Y her iki gruptaki sayımlar olsun)?

mekanizma örneği

Grafik, 500 ve 500'lük grupların (tek bir 1000 grubu yerine) nasıl dağıtıldığını gösterir.

Standart hipotez testi (% 95 alfa seviyesi için) X ve Y toplamının 531'den büyük veya 469'dan küçük olup olmadığını değerlendirir.

Ancak bu, X ve Y'nin eşit olmayan eşitsiz dağılımını içerir.

Dağıtımın 'H0 için 'Hbir. Sonra kenarlardaki bölgeler çok önemli değil ve daha dairesel bir sınır daha mantıklı olurdu.

Ancak bu, grupların rastgele bölünmesini seçmediğimizde ve gruplar için bir anlam olabileceği zaman (gerekli değildir) doğru değildir.


Güç tahmini için kodumu çalıştırmaya çalışın, sadece 0.0125'i 0.02 ile değiştirin (ortalama 8 maruz kalma vakasına sahip olma önerinize uyması için): 400'e karşı 400 analizinin gücü% 80'dir ve 5 grubuyla yapılan analizin gücü vardır % 90.
Elvis

Ancak, istatistiğin ilk durumda daha az farklı değerler alabileceğini ve yardımcı olmadığını kabul ediyorum. Ancak bu sorunu açıklamak için yeterli değildir: bu güç üstünlüğü sadece 0.05 değil, tüm tip I hata seviyeleri için gözlemlenebilir. İkinci strateji ile elde edilen p değerlerinin miktarları her zaman birincisi tarafından elde edilenlerden daha düşüktür.
Elvis

Sanırım söylediklerinize katılıyorum. Ama sonuç nedir? Biraz güç kazanmak için 4 alt gruptaki vaka grubunu rastgele bölmeyi önerir misiniz? Yoksa bana bunun haklı çıkartılamayacağına katılıyor musun?
Elvis

Bence sorun, 4 alt gruba bölünmüş vakalarla yapılan testin kötü özelliklere sahip olmaması değildir - ikimiz de tip I hata oranının iyi davranması gerektiği konusunda anlaştık. Sorunun 400 kontrolle 400 vaka arasındaki testin yetersiz kaldığını düşünüyorum. Bunun için "temiz" bir çözüm var mı? Bootstrap p-değeri yardımcı olabilir mi?
Elvis

(
Elvis
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.