Виконайте MCMC: використовуйте jags / stan або реалізуйте його самостійно


13

Я новачок у баєсівській статистиці. Я чув від дослідників, що байєсські дослідники краще впроваджують MCMC самостійно, а не використовують такі інструменти, як JAGS / Stan. Чи можу я запитати, яка користь від самостійного впровадження алгоритму MCMC ("не дуже швидкими" мовами, такими як R), за винятком цілей навчання?


Оскільки тоді ви можете самостійно вибрати власний розподіл пропозицій, ви повинні вибрати його таким чином, щоб ланцюг Маркова, що виникає в результаті цього, максимально швидко переходив на задній.

Спасибі! Це єдина причина?
користувач112758

4
Якщо ви прикладний дослідник, який хоче дізнатися більше Bayes, використовуючи його для додатків, я б рекомендував почати з JAGS або Stan, а потім перейти до написання власного MCMC, якщо вам здається, що вам це потрібно. Майте на увазі, що JAGS та Stan мають дещо різні сили та обмеження.
кон'югатприор

Спасибі! Так, я займаюся прикладними дослідженнями. Розкажіть мені більше про обмеження JAGS та Stan. Я спершу спробував Стен, але я просто виявив, що у нього немає "моніторингу в Інтернеті" чи "вибірки до зближення" або додаткових додатків --- це дратує, зараз я можу спробувати JAGS.
користувач112758

Відповіді:


26

Загалом, я настійно пропоную не кодувати свій власний MCMC для реального прикладного байєсівського аналізу. Це і велика робота, і час, і дуже ймовірно, що в коді будуть внесені помилки. Пробовідбірники Blackbox, такі як Stan, вже використовують дуже складні пробовідбірники. Повірте, ви не будете кодувати пробовідбірник цього калібру лише для одного аналізу!

Є спеціальні випадки, коли в цьому цього буде недостатньо. Наприклад, якщо вам потрібно було зробити аналіз в режимі реального часу (тобто рішення на комп'ютері на основі вхідних даних), ці програми не були б гарною ідеєю. Це тому, що Стен вимагає компілювати код C ++, що може зайняти значно більше часу, ніж просто запустити вже підготовлений зразок для відносно простих моделей. У такому випадку ви можете написати власний код. Крім того, я вважаю, що існують особливі випадки, коли такі пакети, як Stan, роблять дуже погано, такі як моделі не-гауссового простору держави (повне розкриття: я вважаю, що Стен в цій справі робить погано, але не знаю). У цьому випадку можливо, варто застосувати спеціальний MCMC. Але це виняток, а не правило!

Якщо чесно, я вважаю, що більшість дослідників, які пишуть вибірки для одного аналізу (і це трапляється, я це бачив) роблять так, тому що вони люблять писати власні пробовідбірники. Принаймні, я можу сказати, що я підпадаю під цю категорію (тобто я розчарований, що написати власний пробовідбірник - це не найкращий спосіб робити речі).

Крім того, хоча не має сенсу писати власний пробовідбірник для одного аналізу , це може мати багато сенсу писати власний код для класу аналізів. Оскільки JAG, Stan та ін. Є зразками з чорного ящика, ви завжди можете зробити все швидше, спеціалізуючись на даній моделі, хоча сума вдосконалення залежить від моделі. Але писати надзвичайно ефективний зразок з нуля - це, можливо, 10-1000 годин роботи, залежно від досвіду, складності моделі тощо. Якщо ви займаєтесь дослідженнями методів Байєса або пишете статистичне програмне забезпечення, це добре; це ваша робота. Але якщо ваш начальник скаже: "Ей, чи можете ви проаналізувати цей набір даних про неодноразові заходи?" і ви витрачаєте 250 годин на написання ефективного пробовідбору, швидше за все, ваш начальник буде засмучений. На противагу цьому, ви могли написати цю модель в Стен за, скажімо, 2 години, а у вас було 2 хвилини часу замість 1 хвилини пробігу, досягнутого ефективним пробовідбірником.


3
+1. Крім того, Стен безпосередньо не справляється з деякими проблемами, пов’язаними з дискретними розподілами, тому вам доведеться знати досить, щоб інтегрувати їх, що саме по собі не є простим, так що це може бути випадком, коли прокрутка вашого власного може допомогти. Я вважаю, що JAGS безпосередньо обробляє подібні випадки, тому, якщо ви можете тримати в думках різні філософії BUGS / JAGS та Stan, було б найкраще просто переключитися між ними.
Уейн

Більше того, у Стен можуть виникнути проблеми, коли діагональна евклідова метрика недостатньо відповідає геометрії задньої частини; це, зокрема, коли є лише вузька, непарноподібна область задньої частини, яка має велику ймовірність. Результат полягає в тому, що взяти проби на задньому плані - це як намагатися їздити на велосипеді по краю обриву: ви можете "впасти", якщо ви зробите неправильний поворот!
Sycorax каже, що повернеться до Моніки

2
+1. Моя загальна рекомендація студентам - це зашифрувати це в JAGS. Якщо це не спрацює, зашифруйте це в Стен. Якщо це не спрацює, почніть писати власний пробовідбірник. Існують також певні моделі, наприклад, просторові моделі, де ви можете використовувати BUGS. І певні моделі, наприклад, не гауссові моделі простору держав, де потрібно використовувати NIMBLE. Можлива вартість початку роботи з написання власного пробовідбору дуже висока.
jaradniemi

Я не розумію випадку "в реальному часі" - якщо можливо мати "вже підготовлений" власний пробовідбірник, чому не так просто використовувати вже складену модель Стен? Мені також цікаво, чи будь-який MCMC досить швидкий для додатків у режимі реального часу.
Juho Kokkala

1
І я недостатньо знайомий зі Стен, щоб знати, що саме вимагає компіляції нових моделей, але не надто важко уявити, що як би не було обмеження, існує динамічна модель, така що в міру надходження нових даних модель стане більш складною і тому перекомпіляція була б необхідною. Я думаю, що непараметричні методи (у яких простір параметрів зростає з розміром вибірки) відповідали б цим критеріям? Але можуть бути розумні способи подолати це.
Кліф АВ

6

Це питання ґрунтується насамперед на думці, але я думаю, що тут достатньо записати відповідь. Причин кодування власної вибірки для дослідницької проблеми може бути багато. Ось деякі з них

  1. Пропозиція: Як запропонував fcop у своєму коментарі, якщо зразок MH, то кодування вашого власного пробовідбірника дозволяє вам пограти з розподілами пропозицій, щоб отримати найкращий вибірник для змішування.

  2. Гнучкість: у вбудованих програмах можливо не надавати потрібної вам гнучкості. Ви можете почати з конкретного випадкового значення або використовувати конкретну структуру насіння.

  3. Розуміння: Кодування власного пробовідбірника допомагає зрозуміти поведінку вибірки, даючи уявлення про ланцюговий процес Маркова. Це корисно для дослідника, який працює над проблемою.

  4. Онус: Якщо дані, за якими я роблю всі свої байєсівські умовиводи, походять від програми, яку я не кодував, то навантаження на висновок більше не стосується мене. Як дослідник, я хотів би взяти на себе всю відповідальність за представлені нами методи / результати. Використання вбудованих методів не дозволяє зробити це.

Можливо, є більше причин, але саме ці чотири змушують мене кодувати власні пробовідбірники.


6
Я б сказав, що причина "довіри" суперечлива: Стен є відкритим кодом і має багато учасників, тому багато людей переглянули його вихідний код, тому навряд чи у нього є серйозні помилки. З іншого боку, якщо ви робите це самостійно, ви завжди можете пропустити помилку, яку ви зробили - і всі роблять помилки, це лише питання кількості рядків коду, які ви пишете ...
Тим

@Tim Я згоден. Я змінив цю точку, щоб відобразити те, що намагався сказати. Спасибі.
Грінпаркер

5
+1 для аргументу Understanding. Однак аргумент Онуса здається трохи завищеним. Практично все, що ви кодуєте самі, буде покладатися на чужу статистичну мову, лінійну бібліотеку алгебри, генератор випадкових чисел тощо, тож «брати на себе відповідальність» - це питання ступеня.
кон'югатприор

@conjugateprior Абсолютно згоден. Саме тому моя відповідь на це була від першої особи. Це була суто моя думка.
Грінпаркер

4

Я дав +1 на відповідь Cliff AB. Щоб додати ще один маленький ласощі, якщо ви хочете працювати на нижчому рівні, але не знижуватись до рівня коду-все-про себе, вам слід поцікавитись пакетом LaplacesDemon . Оригінальний автор був геніальним, але, схоже, випав із сітки, а пакунок перебрав хтось інший. (Я вважаю, що це на Github.)

Він реалізує вражаючу кількість алгоритмів, які використовуються в MCMC, і включені віньєтки варто прочитати, навіть якщо ви не використовуєте пакет. Практично будь-який пробовідбірник, про який ви читали, він має. Ви кодуєте іншим чином, ніж BUGS / JAGS або Stan, і це все в R, але часто це настільки ефективно, що є конкурентоспроможним.


1
Безсоромний плагін: ви також можете використовувати [nimble] (r-nimble.org), який дозволяє налаштувати ваш MCMC (тобто використовувати пробник зрізів для цього вузла, оновити блок для цієї групи вузлів тощо) без необхідності переписувати це пробовідбірники щоразу. Ви також можете написати власні пробовідбірники для безпосереднього впровадження! Розкриття інформації: Я працював над цим проектом.
Кліф АВ

@CliffAB: Звучить схоже LaplacesDemon, якщо ви з цим знайомі. Радий також почути nimble. Я принаймні скачу його. (Хоча декілька віньєток LaplacesDemon може бути вартим завантаження, навіть якщо ви користуєтеся спритним.) ... О, просто зайшов на сторінку. Якщо його SMC простий у використанні, я стану великим шанувальником. Єдиний пакет, який я бачив, що робить SMC, жахливо складний.
Уейн

@CliffAB: Нічого, прочитавши nimbleвеб-сайт, це дуже вражає. Чому я ніколи про це не чув? Це виглядає як чудовий варіант для людей, які звикли до мови моделювання BUGS / JAGS. Звичайно, вони зроблять найкращі можливі порівняння на веб-сайті, але все одно мені це подобається поки що. (За винятком того, що з rstanarmта brms, які використовують Стен під кришкою, чемпіоном з простоти у використанні буде Stan.)
Wayne

це все ще дуже нове: v0.1 було випущено, я думаю, трохи більше 2 років тому? І SMC був величезним мотиватором проекту: PI зробила значну публікацію на фільтрах частинок і щораз дратувала їх написання з нуля кожного разу. Але я трохи займався поточною роботою, щоб не відставати від сучасного стану пробовідбірників SMC; коли я пішов (майже два роки тому), ми щойно зібрали дуже примітивний.
Кліф АВ

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