Bilinmeyen p-değeri hesaplaması


9

Son zamanlarda bir R betiğinde hata ayıkladım ve çok garip bir şey buldum, yazar kendi p-değeri işlevini tanımladı

pval <- function(x, y){
    if (x+y<20) { # x + y is small, requires R.basic
        p1<- nChooseK(x+y,x) * 2^-(x+y+1);
        p2<- nChooseK(x+y,y) * 2^-(x+y+1);
        pvalue = max(p1, p2)
    }
    else { # if x+y is large, use approximation
        log_p1 <- (x+y)*log(x+y) - x*log(x) - y*log(y) - (x+y+1)*log(2);
        pvalue<-exp(log_p1);
    }
    return(pvalue)
}

X ve Y değerleri 0'dan büyük pozitif değerler olduğunda. <20 vaka bir tür hipergeometrik dağılım (Fisher testine benzer bir şey?) İçin bir hesaplama gibi görünüyor ve diğer hesaplamanın ne olduğunu bilen var mı? Bir sidenote olarak, bu kodu çağırmak ve bununla değiştirmek için uygun R işlevini anlamaya çalışıyorum bu yüzden optimize etmeye çalışıyorum.

Düzenleme: p-değeri hesaplaması için kağıt detaylandırma formülü burada bulunabilir (formülleri görmek için pdf'ye tıklamanız gerekir) Yöntemler pdf'in 8. sayfasında başlar ve söz konusu formül (1) altında 9. sayfada bulunabilir. Aldıkları dağılım bir Poisson.

Yanıtlar:


15

İkinci şey, x+y < 20durum için kullanılan hesaplamaya bir yaklaşımdır , ancak Stirling yaklaşımına dayanmaktadır .

Bu yaklaşım için bu tür kullanılmakta olan normal olarak, insanlar, en azından aşağıdaki ilave terimi (faktörünü kullanmak için yaklaşımda Küçük için büyük ölçüde göreli yaklaşım iyileştirecektir), .2πnn!n

Örneğin, ve her ikisi de 10 ise, ilk hesaplama yaklaşık 0.088 verirken, faktörü tüm terimlere dahil edildiğinde yaklaşık 0.089 civarındadır, çoğu amaç için yeterince yakındır ... ama bu terimi yaklaşık olarak atlamak 0.5 verir - ki bu gerçekten yeterince yakın değildir! Bu işlevin yazarı, sınır davasındaki yaklaşımının doğruluğunu kontrol etme zahmetine girmedi.xy2πn

Bu amaçla, yazar muhtemelen yerleşik lgammaişlevi çağırmış olmalıdır - özellikle, bunun için sahip olduğu şey yerine bunu kullanarak log_p1:

log_p1 <- lgamma(x+y+1)-lgamma(x+1)-lgamma(y+1)-(x+y+1)*log(2)

bu da yaklaştırmaya çalıştığı cevabı verir ( lgamma(x+1)aslında döndürdüğü için , Stirling yaklaşımı ile yaklaşık olarak - kötü bir şekilde - yapmaya çalıştığı şey).günlük(x!)

Benzer şekilde, yazarın neden chooseilk bölümde yerleşik işlevi kullanmadığını, R'nin standart dağılımında gelen bir işlevi kullanmadığından emin değilim. Bu nedenle , ilgili dağıtım işlevi de muhtemelen yerleşiktir.

Gerçekten iki ayrı davaya ihtiyacınız yok; en lgammaküçük değerlere kadar gayet iyi çalışıyor. Öte yandan, choosefonksiyon oldukça büyük değerler için çalışır (örneğin choose(1000,500)gayet iyi çalışır). Daha güvenli seçenek muhtemelen lgamma, bir sorun olmadan önce oldukça büyük ve sahip olmanız gerekir .xy

Daha fazla bilgi ile testin kaynağını tanımlamak mümkün olmalıdır. Benim tahminim yazar bir yerden almış, bu yüzden onu takip etmek mümkün olmalı. Bunun için bir bağlamınız var mı?

'Optimize' dediğinizde, onu daha hızlı, daha kısa, daha sürdürülebilir veya başka bir şey yapmak mı demek istersiniz?


Kağıdı hızlı bir şekilde okuduktan sonra düzenleyin:

Yazarlar bazı noktalarda yanlış gibi görünüyor. Fisher'ın kesin testi , marjların sabit olduğunu varsaymaz , sadece bunlarla ilgili koşullar , ki bu, örneğin burada referanslarla tartışıldığı gibi hiç de aynı şey değildir . Gerçekten de, marjlar üzerinde koşullandırma ve neden yapıldığına dair tartışmalardan tamamen habersiz görünüyorlar. Oradaki bağlantılar okumaya değer.

['Fisher'in testi her zaman bizimkinden daha muhafazakardır' dan Fisher'in testinin çok muhafazakâr olduğu iddiasına ilerlerler ... koşullandırma yanlış olmadıkça mutlaka uymaz . Bunu belirlemek zorunda kalacaklardı, ancak bunun istatistikçilerin yaklaşık 80 yıldır tartıştığı bir şey olduğu ve bu yazarların koşullandırma neden yapıldığından habersiz göründükleri için, bu adamların bu konunun sonuna geldiğini sanmıyorum. .]

Makalenin yazarları en azından p-değerleri vermek için verdikleri olasılıkların birikmesi gerektiğini anlamış gibi görünüyor; örneğin, sayfa 5'teki ilk sütunun ortasına yakın (vurgulama mayını):

Fisher'ın böyle bir sonuç için kesin testine göre istatistiksel anlamlılık% 4.6'dır (iki kuyruklu P değeri, yani aktin EST frekanslarının cDNA kütüphanelerinden bağımsız olduğu hipotezinde böyle bir tablonun meydana gelme olasılığı). Buna karşılık, Denklem 2'nin kümülatif formundan (Denklem 9, bkz. Yöntemler) hesaplanan P değeri (yani, aktin EST'lerin nispi frekansının her iki kütüphanede de aynı olması için, en az 11 aynı kökenli EST'nin gözlenmesi beyin kütüphanesinde iki kişiden sonra karaciğer kütüphanesi gözlendi)% 1.6'dır.

(buradaki değer hesaplamasına katıldığımdan emin değilim; diğer kuyrukla gerçekten ne yaptıklarını görmek için dikkatlice kontrol etmeliydim.)

Programın bunu yaptığını sanmıyorum.

Onların analizi olduğunu, ancak, dikkat değil , standart bir binom testi; aksi halde sık kullanılan bir testte p-değeri türetmek için Bayesci bir argüman kullanırlar. Ayrıca - biraz garip bir şekilde, aklıma - yerine üzerinde koşullanıyor gibi görünüyorlar . Bu, bir binomdan ziyade negatif bir binom gibi bir şeyle sonuçlanması gerektiği anlamına gelir , ancak kağıdı gerçekten kötü organize edilmiş ve çok kötü bir şekilde açıklanmış buluyorum (ve istatistik kağıtlarında neler olup bittiğini öğrenmeye alışkınım), bu yüzden dikkatlice geçmediğim sürece emin olmayacağım.xx+y

Bu noktada olasılıklarının toplamının 1 olduğuna bile ikna olmadım.

Burada söylenecek çok şey var, ama soru kağıtla ilgili değil, programdaki uygulama ile ilgili.

-

Her neyse, sonuç olarak, en azından kağıt, p-değerlerinin denklem 2'deki gibi olasılıkların toplamından oluştuğunu doğru bir şekilde tanımlamaktadır, ancak program bunu yapmaz . (Makalenin Yöntemler bölümündeki eqn 9a ve 9b'ye bakın.)

Kod bu konuda yanlış.

[ pbinom@ Whuber'ın yorumundan da anlaşılacağı gibi, bireysel olasılıkları (ancak kuyruğu değil, yapılandırdığı için bir binom testi olmadığı için) kullanmak için kullanabilirsiniz, ancak daha sonra denklem 2'de fazladan bir faktör 1/2 vardır. sonuçları makalede çoğaltmak istiyorsanız bunları değiştirmeniz gerekir.]

Biraz uğraşarak, pnbinom-

Negatif binomun olağan biçimleri ya kthbaşarı veya sayısı arızaları içinkthbaşarısı. İkisi eşdeğerdir; Wikipedia burada ikinci formu veriyor . Olasılık fonksiyonu:

(k+r-1k)(1-p)rpk,

P4'teki denklem 2 (ve ayrıca 1) negatif bir binomiyaldir, ancak 1 ile değiştirilir . , ve .p=N-1/(N-1+N-2)k=xr=y+1

Bu beni üzerindeki sınırlar benzer şekilde değişmediği için olasılıklarının 1'e bile eklenemeyeceği konusunda beni endişelendiriyor .y

Bu kötü olur.


1
+1 Güzel açıklama. Bu kodla ilgili bazı ek sorunlar var. Hesaplamak gereksizdir p2; daha küçük p1ve p2daha küçük karşılık gelir xve ybir verimsizlik olduğunu - sırasıyla. Olası bir hata, koşulun ikinci dalının p2hiç hesaplama yapamaması ve sadece kullanmasıdır p1. Kodun tamamen hatalı olabileceğinden de şüpheliyim, çünkü bir p değeri hesaplıyor gibi görünmüyor: sadece binom olasılığının yarısıdır ve belki de bir kuyruk olasılığı olmalıdır. Neden sadece pbinom/ kullanmıyorsunuz dbinom?
whuber

Harika yanıt için teşekkürler, formülün kaynağını izleyebildim: genome.cshlp.org/content/7/10/986.short Daha hızlı ve daha kolay okunur / okunacak şekilde değiştirmek istedim.
yingw

Kağıt için teşekkürler; kodda neler olduğunu anlamaya yardımcı oldu. Ne büyük bir travesti.
Glen_b -Monica

1
+1. Bu topluluk wiki olmaması gereken bir yazı! Bence 14 devir nedeniyle, ama bu durumda hepsi sizin tarafınızdan. Çalışkanlığınız cezalandırıldı!
Darren Cook

güven oyu için teşekkürler. Evet, makaleyi okurken geri gelmeye ve iyileştirmeler yapmaya devam ettim, ama sonuçta daha etkili bir sonuç elde edemem, kısmen kendi hatam.
Glen_b -Monica
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.