Permütasyon testinde 0'a eşit P değerleri


15

İki veri setim var ve bunların önemli ölçüde farklı olup olmadıklarını bilmek istiyorum (bu " İki grup önemli ölçüde farklı mı? Kullanmak için test " ten geliyor ).

Bir permütasyon testi kullanmaya karar verdim.

permutation.test <- function(coding, lncrna) {
    coding <- coding[,1] # dataset1
    lncrna <- lncrna[,1] # dataset2

    ### Under null hyphotesis, both datasets would be the same. So:
    d <- c(coding, lncrna)

    # Observed difference
    diff.observed = mean(coding) - mean(lncrna)
    number_of_permutations = 5000
    diff.random = NULL

    for (i in 1:number_of_permutations) {
        # Sample from the combined dataset
        a.random = sample (d, length(coding), TRUE)
        b.random = sample (d, length(lncrna), TRUE)
        # Null (permuated) difference
        diff.random[i] = mean(b.random) - mean(a.random)
    }

    # P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
    pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations
    pvalue
}

Bununla birlikte, bu belgeye göre p değerleri 0 olmamalıdır: http://www.statsci.org/smyth/pubs/permp.pdf

Ne yapmamı önerirsiniz? Bu p değerini hesaplamak için mi kullanılır:

pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations

iyi bir yol? Yoksa aşağıdakileri yapmak daha mı iyi?

pvalue = sum(abs(diff.random) >= abs(diff.observed)) + 1 / number_of_permutations + 1

(1) Sorudaki son satır hatalı çünkü amaçlanan hesaplamayı gerçekleştirmesi için gerekli parantezleri içermiyor. (Daha büyük sonuç üretir garantilidir iki numune (2), aslında bir permütasyon testi yapılırken değildir. Herhangi bir p-değeri için mümkün değildir) ve üst üste binme tipik olarak veri rastgele bölüm ihtiva nadiren ancak esasen. Bunun yerine, hesaplamak tamamlayıcısı birliği içinde ve . 1a.randomb.randomb.randoma.randomcodinglncrna
whuber

P-değeri en azından gözlemlenen kadar aşırı değerler kümesi olduğundan , eğer permütasyon dağılımını değerlendirirseniz, gözlemlenen istatistik sayılan "permütasyonlar" dadır. Rasgeleleştirme yaparken, gözlenen istatistiği düşünülen permütasyon istatistikleri arasında saymak yaygındır (benzer nedenlerle).
Glen_b

Yanıtlar:


15

Tartışma

Bir permütasyon testi , bir veri kümesinin tüm ilgili permütasyonlarını oluşturur , bu permütasyonların her biri için belirlenmiş bir test istatistiği hesaplar ve gerçek test istatistiğini, istatistiklerin sonuçta meydana gelen permütasyon dağılımı bağlamında değerlendirir . Bunu değerlendirmenin yaygın bir yolu, (bir anlamda) gerçek istatistikten "aşırı ya da aşırı" olan istatistiklerin oranını bildirmektir. Buna genellikle "p değeri" denir.

Gerçek veri kümesi bu permütasyonlardan biri olduğundan, istatistiği mutlaka permütasyon dağılımında bulunanlar arasında olacaktır. Bu nedenle, p değeri asla sıfır olamaz.

Veri kümesi çok küçük olmadığı sürece (tipik olarak yaklaşık 20-30 toplam sayıdan az) veya test istatistiği özellikle güzel bir matematiksel forma sahip değilse, tüm permütasyonları oluşturmak için uygun değildir. (Tüm permütasyonların üretildiği bir örnek R'deki Permütasyon Testinde görünür .) Bu nedenle permütasyon testlerinin bilgisayar uygulamaları tipik olarak permütasyon dağılımından örneklenir . Bunu bağımsız rasgele permütasyonlar üreterek yaparlar ve sonuçların tüm permütasyonların temsili bir örneği olmasını umarlar.

Bu nedenle, böyle bir örnekten türetilen herhangi bir sayı ("p-değeri" gibi) yalnızca permütasyon dağılımının özelliklerinin tahmin edicisidir. Tahmini p değerinin sıfır olması oldukça mümkündür - ve genellikle etkiler büyük olduğunda gerçekleşir . Bunda yanlış bir şey yok, ancak şimdiye kadar ihmal edilen sorunu , tahmin edilen p değerinin doğru olandan ne kadar farklı olabileceği konusunda hemen gündeme getiriyor. Bir oranın (tahmini bir p değeri gibi) örnekleme dağılımı Binom olduğundan, bu belirsizlik bir Binom güven aralığıyla giderilebilir .


Mimari

İyi yapılandırılmış bir uygulama tartışmayı her açıdan yakından takip edecektir. Test istatistiğini hesaplamak için bir rutin ile başlayacaktır, çünkü bu iki grubun araçlarını karşılaştırmak için:

diff.means <- function(control, treatment) mean(treatment) - mean(control)

Veri kümesinin rastgele bir permütasyonunu oluşturmak ve test istatistiğini uygulamak için başka bir rutin yazın. Bu arayüz, arayan kişinin test istatistiğini argüman olarak sunmasına izin verir. mBir dizinin (bir referans grup olduğu varsayılır) ilk elemanlarını kalan elemanlarla ("tedavi" grubu) karşılaştıracaktır.

f <- function(..., sample, m, statistic) {
  s <- sample(sample)
  statistic(s[1:m], s[-(1:m)])
}

Permütasyon testi (iki dizi depolanacak varsayılmıştır veriler için istatistik bularak ilk gerçekleştirilir controlve treatmentbunların çok sayıda bağımsız rastgele permütasyon istatistikleri bulma o) ve:

z <- stat(control, treatment) # Test statistic for the observed data
sim<- sapply(1:1e4, f, sample=c(control,treatment), m=length(control), statistic=diff.means)

Şimdi p-değerinin binom tahminini ve bunun için bir güven aralığını hesaplayın. Bir yöntem binconf, HMiscpaketteki yerleşik yordamı kullanır :

require(Hmisc)                                    # Exports `binconf`
k <- sum(abs(sim) >= abs(z))                      # Two-tailed test
zapsmall(binconf(k, length(sim), method='exact')) # 95% CI by default

Oldukça uygulanabilir olmadığı bilinse bile, sonucu başka bir testle karşılaştırmak kötü bir fikir değildir: en azından sonucun nerede olması gerektiği konusunda bir büyüklük duygusu alabilirsiniz. Bu örnekte (karşılaştırma araçlarının), bir Öğrenci t-testi genellikle yine de iyi bir sonuç verir:

t.test(treatment, control)

Bu mimari, daha karmaşık bir durumda, çalışma Rkoduyla Değişkenlerin Aynı Dağılımı İzleyip İzlemediğini gösterir .


Misal

100201.5

set.seed(17)
control <- rnorm(10)
treatment <- rnorm(20, 1.5)

Bir permütasyon testi yapmak için önceki kodu kullandıktan sonra, gerçek istatistiği işaretlemek için permütasyon dağılımının örneğini dikey kırmızı bir çizgi ile birlikte çizdim:

h <- hist(c(z, sim), plot=FALSE)
hist(sim, breaks=h$breaks)
abline(v = stat(control, treatment), col="Red")

şekil

Binom güven sınırı hesaplaması sonuçlandı

 PointEst Lower        Upper
        0     0 0.0003688199

00.000373.16e-050.000370.000370.050.010.001


Yorumlar

kN k/N(k+1)/(N+1)N

10102=1000.0000051.611.7milyon başına parça: bildirilen Student t-testinden biraz daha küçük. Veriler, Student t-testi kullanılarak haklı çıkacak normal rasgele sayı üreteçleri ile oluşturulmuş olsa da, her bir gözlem grubundaki dağılımlar tamamen normal olmadığı için permütasyon testi sonuçları Student t-testi sonuçlarından farklıdır.


Smyth & Phipson'un yukarıda belirtilen makalesi, k / N'nin bir p değeri tahmincisi için neden kötü bir seçim olduğunu açıkça göstermektedir. Özetle, alfa = 0.05 gibi ilgili anlamlılık seviyeleri için P ((k / N) a-H0) alfadan şaşırtıcı şekilde daha büyük olabilir. Bu, p-değeri tahmincisi olarak k / N ve reddetme eşiği olarak 0,05 kullanan rastgele permütasyon testinin, sıfır hipotezini% 5'ten fazla reddedeceği anlamına gelir! Sıfır p değeri bu sorunun aşırı bir örneğidir - alfa = 0 ölçütü ile hiçbir zaman null değerini reddetmemizi bekleriz, ancak b / m null değerinin altında sıfıra eşit olabilir ve yanlış bir reddetmeye yol açabilir.
Trisoloriansunscreen

1
@Tal Belirli bir amaç için "Kötü bir seçim" . Bizi istatistikçi olarak diğerlerinden ayıran şey, veri analizi ve karar almada değişkenliğin rolünün yanı sıra bu değişkenliği uygun şekilde ölçebilme kabiliyetimiz hakkındaki anlayışımızdır. Buradaki cevabımda örneklenen (ve dolaylı olarak savunulan) yaklaşım budur. Gerçekleştirildiğinde tarif ettiğiniz gibi bir sorun yoktur, çünkü permütasyon prosedürünün kullanıcısı sınırlarını ve güçlü yanlarını anlamaya yönlendirilir ve hedeflerine göre hareket etme özgürlüğüne sahip olacaktır.
whuber

13

BMB+1M+1

(B, gözlemlenenden daha büyük veya eşit bir istatistik elde edilen rasgele permütasyon sayısıdır ve M, örneklenen toplam rasgele permütasyon sayısıdır).

BM


1
+1 Bu makalenin ana noktasının güzel bir özetidir. Özellikle tahmini bir p değeri ile gerçek permütasyon p değeri arasındaki ayrımı dikkate aldığınız için teşekkür ederiz.
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.