Druga rzecz wygląda na to, że jest to przybliżenie obliczeń zastosowanych w x+y < 20
przypadku, ale oparte na przybliżeniu Stirlinga .
Zwykle, gdy jest on używany do tego rodzaju przybliżenia, ludzie używają co najmniej następnego dodatkowego terminu (współczynnik w przybliżeniu dla ), Co poprawiłoby względne przybliżenie znacznie dla małego .2πn−−−√n!n
Na przykład, jeżeli i są równe 10, pierwsze obliczenie daje około 0,088 zaś zbliżanie gdy współczynnik znajduje się we wszystkich warunkach wynosi około 0,089, na tyle blisko, dla większości celów ... ale pominięcie tego terminu w przybliżeniu daje 0,5 - co tak naprawdę nie jest wystarczająco blisko! Autor tej funkcji najwyraźniej nie zadał sobie trudu, aby sprawdzić dokładność swojego przybliżenia w przypadku granicy.xy2πn−−−√
W tym celu autor powinien prawdopodobnie po prostu wywołać funkcję wbudowaną lgamma
- w szczególności, używając tego zamiast tego, co ma do log_p1
:
log_p1 <- lgamma(x+y+1)-lgamma(x+1)-lgamma(y+1)-(x+y+1)*log(2)
co skutkuje odpowiedzią, którą próbuje przybliżyć (ponieważ lgamma(x+1)
faktycznie zwraca , tą właśnie rzeczą stara się przybliżyć - słabo - poprzez przybliżenie Stirlinga).log(x!)
Podobnie, nie jestem pewien, dlaczego autor nie korzysta z wbudowanej choose
funkcji w pierwszej części, która wchodzi w standardowy rozkład R. Jeśli o to chodzi, odpowiednia funkcja dystrybucji jest prawdopodobnie również wbudowana.
Tak naprawdę nie potrzebujesz dwóch osobnych przypadków; ten lgamma
działa dobrze aż do najmniejszych wartości. Z drugiej strony choose
funkcja działa dla całkiem dużych wartości (np. choose(1000,500)
Działa dobrze). Bezpieczniejszym rozwiązaniem jest prawdopodobnie lgamma
, chociaż trzeba by mieć dość dużą i , zanim było to problemem.xy
Przy większej ilości informacji powinna istnieć możliwość zidentyfikowania źródła testu. Domyślam się, że autor skądś go wziął, więc powinno być możliwe wyśledzenie go. Czy masz na to jakiś kontekst?
Kiedy mówisz „optymalizuj”, masz na myśli uczynienie go szybszym, krótszym, łatwiejszym w utrzymaniu lub czymś innym?
Edytuj po szybkim przeczytaniu na papierze:
Autorzy wydają się mylnie pod wieloma względami. Dokładny test Fishera nie zakładamy, że marginesy są stałe, to po prostu warunki na nich, który nie jest to samo, w ogóle, jak to opisano, na przykład, tutaj , z odniesieniami. Rzeczywiście, wydają się oni prawie zupełnie nieświadomi debaty na temat uzależnienia od marż i dlaczego tak się dzieje. Linki tam są warte przeczytania.
[Przechodzą od „testu Fishera zawsze bardziej konserwatywnego niż nasz” do twierdzenia, że test Fishera jest zbyt konserwatywny ... co niekoniecznie następuje, chyba że złym jest warunek . Musieliby to ustalić, ale biorąc pod uwagę, że statystycy o to kłócą się od około 80 lat, a ci autorzy wydają się nie wiedzieć, dlaczego uwarunkowanie jest zrobione, nie sądzę, że ci faceci doszli do sedna tego problemu .]
Autorzy artykułu zdają się przynajmniej rozumieć, że podane przez nich prawdopodobieństwa muszą się kumulować, aby uzyskać wartości p; na przykład w pobliżu środka pierwszej kolumny strony 5 (moje podkreślenie):
Istotność statystyczna według dokładnego testu Fishera dla takiego wyniku wynosi 4,6% (wartość P dla dwóch ogonów, tj. Prawdopodobieństwo wystąpienia takiej tabeli w hipotezie, że częstotliwości aktyny EST są niezależne od bibliotek cDNA). Dla porównania wartość P obliczona z postaci skumulowanej
(równanie 9, patrz Metody) równania 2 (tj. Dla względnej częstotliwości aktynowych EST w obu bibliotekach, biorąc pod uwagę, że co najmniej 11 pokrewnych EST jest obserwowanych w biblioteka wątroby po dwóch zaobserwowano w bibliotece mózgu) wynosi 1,6%.
(choć nie jestem pewien, czy zgadzam się z ich obliczeniem wartości tam; musiałbym dokładnie sprawdzić, co faktycznie robią z drugim ogonem).
Nie sądzę, że program to robi.
Uważaj jednak, że ich analiza nie jest standardowym testem dwumianowym; używają argumentu Bayesa, aby uzyskać wartość p w teście, który często bywa. Wydaje mi się również - nieco dziwnie, moim zdaniem - warunkować , a nie . Oznacza to, że muszą kończyć się czymś w rodzaju ujemnego dwumianu zamiast dwumianu, ale uważam, że gazeta jest naprawdę źle zorganizowana i strasznie źle wyjaśniona (i jestem przyzwyczajony do opracowywania tego, co dzieje się w dokumentach statystycznych), więc jestem nie będę pewien, dopóki nie przejdę ostrożnie.xx+y
Nie jestem nawet przekonany, że suma ich prawdopodobieństw wynosi w tym momencie 1.
Jest tu o wiele więcej do powiedzenia, ale pytanie nie dotyczy papieru, ale implementacji w programie.
-
W każdym razie wynik jest taki, że przynajmniej papier poprawnie identyfikuje, że wartości p składają się z sumy prawdopodobieństw takich jak te w równaniu 2, ale program tego nie robi . (Patrz eqn 9a i 9b w sekcji Metody w dokumencie).
Kod jest po prostu zły.
[Mógłbyś użyć pbinom
, jak sugerowałby komentarz @ Whubera, do obliczenia poszczególnych prawdopodobieństw (ale nie ogona, ponieważ nie jest to test dwumianowy, ponieważ je konstruują), ale wtedy jest dodatkowy czynnik 1/2 w ich równaniu 2, więc jeśli chcesz powielić wyniki w pracy, musisz je zmienić.]
Możesz go uzyskać, z pewnymi skrzypkami, od pnbinom
-
Zwyczajowe negatywu dwumianowego są albo liczbę prób do sukces lub liczbę niepowodzeń do sukcesem. Te dwa są równoważne; Wikipedia podaje tutaj drugą formę . Funkcja prawdopodobieństwa to:kthkth
(k+r−1k)⋅(1−p)rpk,
Równanie 2 na p4 (a więc także równanie 1 na p3) jest dwumianem ujemnym, ale przesuniętym o 1. Niech , i .p=N1/(N1+N2)k=xr=y+1
Niepokoi mnie to, że ponieważ limity nie zostały podobnie przesunięte, ich prawdopodobieństwa mogą nawet nie wzrosnąć do 1.y
To by było złe.
p2
ogóle nie trzeba obliczać ; mniejszyp1
ip2
odpowiada odpowiednio mniejszemux
iy
- to jest nieefektywność. Możliwym błędem jest to, że druga gałąź warunku w ogóle się nie obliczap2
i używa tylkop1
. Podejrzewam również, że kod może być całkowicie błędny, ponieważ wydaje się, że nie oblicza wartości p: jest to tylko połowa prawdopodobieństwa dwumianowego i być może powinno być to prawdopodobieństwo ogona . Dlaczego nie po prostu użyćpbinom
/dbinom
i skończyć z tym?