Розрахунок невідомого значення p


9

Нещодавно я налагоджував сценарій R, і я знайшов щось дуже дивне, автор визначив власну функцію p-значення

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 і Y - значення, позитивні значення яких перевищують 0. Випадок <20, здається, є розрахунком для якогось гіпергеометричного розподілу (щось подібне до тесту Фішера?) І чи знає хто, що таке інший обчислення? Як сторонне позначення, я намагаюся оптимізувати цей код, тому намагаюся з'ясувати правильну функцію R для виклику та заміни цього.

Редагувати: Формулювання детальної форми для розрахунку p-значення можна знайти тут (потрібно натиснути pdf, щоб переглянути формули) Методи починаються на сторінці 8 pdf, а формулу, про яку йдеться, можна знайти на сторінці 9 під (1). Поширення, яке вони передбачають, - це Пуассон.

Відповіді:


15

Друга річ виглядає так, що це наближення до обчислення, що використовується для x+y < 20випадку, але виходячи з наближення Стірлінга .

Зазвичай, коли він використовується для подібного наближення, люди будуть використовувати хоча б наступний додатковий термін (коефіцієнт у наближенні до ), Який би значно покращив відносне наближення для малих .2πnn!n

Наприклад, якщо і обидва 10, перший обчислення дає приблизно 0,088, а наближення, коли коефіцієнт включений у всі терміни, становить приблизно 0,089, достатньо близький для більшості цілей ... але опускання цього терміна в наближенні дає 0,5 - що насправді недостатньо близько! Автор цієї функції явно не намагався перевіряти точність його наближення на граничному випадку.xy2πn

З цією метою автор, ймовірно, повинен був просто назвати вбудовану lgammaфункцію - конкретно, використовуючи це замість того, що він має для log_p1:

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

що призводить до відповіді, яку він намагається наблизити (оскільки lgamma(x+1)насправді повертає , саме те, що він намагається наблизити - погано - через наближення Стірлінга).log(x!)

Так само я не впевнений, чому автор не використовує вбудовану chooseфункцію в першій частині, функцію, що приходить у стандартному розподілі R. Для цього питання, можливо, також вбудована відповідна функція розподілу.

Вам не потрібні два окремі випадки; той lgammaпрацює чудово аж до найменших значень. З іншого боку, chooseфункціонує для досить великих значень (наприклад, choose(1000,500)працює чудово). Більш безпечний варіант, ймовірно lgamma, хоча вам потрібно мати досить великі і перш ніж це було проблемою.xy

Маючи більше інформації, слід встановити джерело тесту. Я здогадуюсь, письменник взяв це звідкись, тому слід відстежити це. У вас є для цього якийсь контекст?

Коли ви говорите "оптимізувати", ви маєте на увазі зробити це швидшим, коротшим, більш ретельним чи чимось іншим?


Відредагуйте після швидкого читання паперу:

Здається, автори помиляються в ряді пунктів. Точний тест Фішера не передбачає, що граничні показники є фіксованими, він просто встановлює на них умови , що зовсім не те саме, що обговорювалося, наприклад, тут , з посиланнями. Дійсно, вони здаються абсолютно невідомими дебатів щодо обумовленості націнки і чому це робиться. Посилання там варто прочитати.

[Вони виходять із "Тесту Фішера завжди більш консервативного, ніж у нас", до твердження, що тест Фішера занадто консервативний ... що не обов'язково слід, якщо це не відповідає умові . Вони повинні це встановити, але враховуючи, що це щось, про що сперечаються статистики вже близько 80 років, і ці автори, здається, не знають, чому робиться умова, я не думаю, що ці хлопці до кінця вирішили цю проблему. .]

Автори статті, принаймні, схоже, розуміють, що ймовірності, які вони дають, повинні накопичуватися, щоб дати p-значення; наприклад, біля середини першого стовпця сторінки 5 (моє наголос):

Статистична значущість за точним тестом Фішера для такого результату становить 4,6% (двохвосте Р-значення, тобто ймовірність виникнення такої таблиці в гіпотезі про те, що активні частоти EST не залежать від бібліотек кДНК). Для порівняння, значення Р, обчислене з кумулятивної форми (Рівняння 9, див. Методи) рівняння 2 (тобто для відносної частоти ЕСТ-актинів, що є однаковою в обох бібліотеках, враховуючи, що принаймні 11 споріднених ЕСТ спостерігаються в печінкова бібліотека після двох спостерігалася в бібліотеці мозку) становить 1,6%.

(хоча я не впевнений, що я згоден з їхнім розрахунком значення; мені доведеться ретельно перевірити, щоб побачити, що вони насправді роблять з іншим хвостом.)

Я не думаю, що програма це робить.

Однак остерігайтеся, що їх аналіз не є стандартним біноміальним тестом; вони використовують байєсівський аргумент, щоб отримати p-значення в тесті, інакше часті. На мій погляд, вони також здаються дивним чином умовою на , а не на . Це означає, що вони повинні мати щось на кшталт негативного двочлену, а не біноміального, але я вважаю, що документ справді погано організований і жахливо погано пояснений (і я звик працювати, що відбувається в статистичних документах), тому я не буду певним, якщо я не пройду уважноxx+y

Я навіть не впевнений, що сума їхніх ймовірностей на цьому етапі дорівнює 1.

Тут можна сказати набагато більше, але питання не в папері, а в реалізації програми.

-

У будь-якому випадку, підсумок - це, принаймні, в документі правильно визначено, що р-значення складаються з суми ймовірностей, таких як у рівнянні 2, але програма цього не робить . (Див. Рівняння 9a та 9b у розділі Методи статті.)

У цьому коді просто неправильно.

[Ви можете використовувати pbinom, як випливає з коментаря @ whuber, для опрацювання індивідуальних ймовірностей (але не хвоста, оскільки це не біноміальний тест, як вони структурують його), але тоді в їх рівнянні 2 є додатковий коефіцієнт 1/2 якщо ви хочете повторити результати у роботі, їх потрібно змінити.]

Ви можете отримати його, певно, з pnbinom-

Звичайними формами негативного двочлена є або кількість випробувань до успіху або кількість відмов до успіху . Два рівносильні; Вікіпедія дає друге форму тут . Функція ймовірності така:kthkth

(k+r1k)(1p)rpk,

Рівняння 2 на p4 (і так також рівняння 1 на p3) є від'ємним двочленним, але зміщеним на 1. Нехай , і .p=N1/(N1+N2)k=xr=y+1

Це мене викликає занепокоєння тим, що оскільки обмеження на не були зміщені аналогічно, їхні ймовірності можуть навіть не додати до 1.y

Це було б погано.


1
+1 Приємне пояснення. З цим кодом є деякі додаткові проблеми. Обчислюватися p2зовсім не потрібно; менший p1і p2відповідає меншому xі y, відповідно, - це неефективність. Можлива помилка полягає в тому, що друга гілка умовного не вдається обчислити p2взагалі і використовує лише p1. Я також підозріло, що код може бути абсолютно помилковим, оскільки він, схоже, не обчислює p-значення: це лише половина біноміальної ймовірності і, можливо, має бути ймовірністю хвоста . Чому б просто не використовувати pbinom/ dbinomі робити з цим?
whuber

Дякую за чудову відповідь, мені вдалося відшукати джерело формули: genome.cshlp.org/content/7/10/986.коротко я хотів змінити її, щоб вона була швидшою та легшою для обслуговування / читання.
yingw

Спасибі за папір; Це було корисно для з'ясування того, що відбувається в коді. Що за сімола.
Glen_b -Встановіть Моніку

1
+1. Це повідомлення, яке не повинно бути вікі спільноти! Я думаю, що це пов’язано з 14 обертами, але в цьому випадку вони всі ви. Ваша старанність була покарана!
Даррен Кук

Дякуємо за вотум довіри. Так, я продовжував повертатися та вдосконалювався, читаючи газету, але, мабуть, я частково сам винен у тому, що не досягнуто ефективного результату.
Glen_b -Встановіть Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.