Друга річ виглядає так, що це наближення до обчислення, що використовується для x+y < 20
випадку, але виходячи з наближення Стірлінга .
Зазвичай, коли він використовується для подібного наближення, люди будуть використовувати хоча б наступний додатковий термін (коефіцієнт у наближенні до ), Який би значно покращив відносне наближення для малих .2 πн---√н !н
Наприклад, якщо і обидва 10, перший обчислення дає приблизно 0,088, а наближення, коли коефіцієнт включений у всі терміни, становить приблизно 0,089, достатньо близький для більшості цілей ... але опускання цього терміна в наближенні дає 0,5 - що насправді недостатньо близько! Автор цієї функції явно не намагався перевіряти точність його наближення на граничному випадку.ху2 πн---√
З цією метою автор, ймовірно, повинен був просто назвати вбудовану lgamma
функцію - конкретно, використовуючи це замість того, що він має для log_p1
:
log_p1 <- lgamma(x+y+1)-lgamma(x+1)-lgamma(y+1)-(x+y+1)*log(2)
що призводить до відповіді, яку він намагається наблизити (оскільки lgamma(x+1)
насправді повертає , саме те, що він намагається наблизити - погано - через наближення Стірлінга).журнал( х ! )
Так само я не впевнений, чому автор не використовує вбудовану choose
функцію в першій частині, функцію, що приходить у стандартному розподілі R. Для цього питання, можливо, також вбудована відповідна функція розподілу.
Вам не потрібні два окремі випадки; той lgamma
працює чудово аж до найменших значень. З іншого боку, choose
функціонує для досить великих значень (наприклад, choose(1000,500)
працює чудово). Більш безпечний варіант, ймовірно lgamma
, хоча вам потрібно мати досить великі і перш ніж це було проблемою.ху
Маючи більше інформації, слід встановити джерело тесту. Я здогадуюсь, письменник взяв це звідкись, тому слід відстежити це. У вас є для цього якийсь контекст?
Коли ви говорите "оптимізувати", ви маєте на увазі зробити це швидшим, коротшим, більш ретельним чи чимось іншим?
Відредагуйте після швидкого читання паперу:
Здається, автори помиляються в ряді пунктів. Точний тест Фішера не передбачає, що граничні показники є фіксованими, він просто встановлює на них умови , що зовсім не те саме, що обговорювалося, наприклад, тут , з посиланнями. Дійсно, вони здаються абсолютно невідомими дебатів щодо обумовленості націнки і чому це робиться. Посилання там варто прочитати.
[Вони виходять із "Тесту Фішера завжди більш консервативного, ніж у нас", до твердження, що тест Фішера занадто консервативний ... що не обов'язково слід, якщо це не відповідає умові . Вони повинні це встановити, але враховуючи, що це щось, про що сперечаються статистики вже близько 80 років, і ці автори, здається, не знають, чому робиться умова, я не думаю, що ці хлопці до кінця вирішили цю проблему. .]
Автори статті, принаймні, схоже, розуміють, що ймовірності, які вони дають, повинні накопичуватися, щоб дати p-значення; наприклад, біля середини першого стовпця сторінки 5 (моє наголос):
Статистична значущість за точним тестом Фішера для такого результату становить 4,6% (двохвосте Р-значення, тобто ймовірність виникнення такої таблиці в гіпотезі про те, що активні частоти EST не залежать від бібліотек кДНК). Для порівняння, значення Р, обчислене з кумулятивної форми
(Рівняння 9, див. Методи) рівняння 2 (тобто для відносної частоти ЕСТ-актинів, що є однаковою в обох бібліотеках, враховуючи, що принаймні 11 споріднених ЕСТ спостерігаються в печінкова бібліотека після двох спостерігалася в бібліотеці мозку) становить 1,6%.
(хоча я не впевнений, що я згоден з їхнім розрахунком значення; мені доведеться ретельно перевірити, щоб побачити, що вони насправді роблять з іншим хвостом.)
Я не думаю, що програма це робить.
Однак остерігайтеся, що їх аналіз не є стандартним біноміальним тестом; вони використовують байєсівський аргумент, щоб отримати p-значення в тесті, інакше часті. На мій погляд, вони також здаються дивним чином умовою на , а не на . Це означає, що вони повинні мати щось на кшталт негативного двочлену, а не біноміального, але я вважаю, що документ справді погано організований і жахливо погано пояснений (і я звик працювати, що відбувається в статистичних документах), тому я не буду певним, якщо я не пройду уважнохх + у
Я навіть не впевнений, що сума їхніх ймовірностей на цьому етапі дорівнює 1.
Тут можна сказати набагато більше, але питання не в папері, а в реалізації програми.
-
У будь-якому випадку, підсумок - це, принаймні, в документі правильно визначено, що р-значення складаються з суми ймовірностей, таких як у рівнянні 2, але програма цього не робить . (Див. Рівняння 9a та 9b у розділі Методи статті.)
У цьому коді просто неправильно.
[Ви можете використовувати pbinom
, як випливає з коментаря @ whuber, для опрацювання індивідуальних ймовірностей (але не хвоста, оскільки це не біноміальний тест, як вони структурують його), але тоді в їх рівнянні 2 є додатковий коефіцієнт 1/2 якщо ви хочете повторити результати у роботі, їх потрібно змінити.]
Ви можете отримати його, певно, з pnbinom
-
Звичайними формами негативного двочлена є або кількість випробувань до успіху або кількість відмов до успіху . Два рівносильні; Вікіпедія дає друге форму тут . Функція ймовірності така:кт годкт год
(k + r - 1к) ⋅(1-с)rpк,
Рівняння 2 на p4 (і так також рівняння 1 на p3) є від'ємним двочленним, але зміщеним на 1. Нехай , і .р =N1/ (N1+N2)k = xr = y+ 1
Це мене викликає занепокоєння тим, що оскільки обмеження на не були зміщені аналогічно, їхні ймовірності можуть навіть не додати до 1.у
Це було б погано.
p2
зовсім не потрібно; меншийp1
іp2
відповідає меншомуx
іy
, відповідно, - це неефективність. Можлива помилка полягає в тому, що друга гілка умовного не вдається обчислитиp2
взагалі і використовує лишеp1
. Я також підозріло, що код може бути абсолютно помилковим, оскільки він, схоже, не обчислює p-значення: це лише половина біноміальної ймовірності і, можливо, має бути ймовірністю хвоста . Чому б просто не використовуватиpbinom
/dbinom
і робити з цим?