Матлаб / октава чи R краще підходять для моделювання Монте-Карло?


14

Я почав займатися Монте-Карло в R як хобі, але врешті-решт фінансовий аналітик порадив переїхати до Матлаба. Я досвідчений розробник програмного забезпечення. але новачок в Монте-Карло. Я хочу побудувати статичні моделі з аналізом чутливості, пізніші динамічні моделі. Потрібні хороші бібліотеки / алгоритми, які мене керують.

Мені здається, що R має чудові бібліотеки, і я підозрюю, що математику віддають перевагу недосвідчені програмісти через легку мову, що нагадує паскаль. Мова R заснована на схемі, і це важко для новачків, але не для мене. Якщо Matlab / Octave не має переваг на цифровій / бібліотечній стороні, я би дотримувався Р.


2
R заснований на схемі, але досить непогано виглядає для початківців, що це досить C.

2
> Я не буду публікувати це як відповідь, тому що в цих речах є багато людей більш обізнаних, ніж я. Тим не менш, я думаю, що щодо швидкості ви повинні розрізняти R-базу і гарний програміст / великі пакети. Хороший програміст може використовувати деякі інструменти в крані, такі як багатоядерний, GPUtools і магма (незабаром, але ще не корисний для MCMC), Rcpp, ..., щоб зробити досить швидкий код. Я не думаю, що в matlab central є щось порівнянне з пропозицією.
user603

@kwak - напевно, я мав би також розмістити свою відповідь як коментар. Вибач за це.
М. Тіббіт

2
MT, це божевільно - ваша відповідь чудова. Якщо що-небудь, квак теж повинен зробити свою належну відповідь. Нехай ті більш обізнані голосують або відповідають, як вважають за потрібне.
Метт Паркер

Заздалегідь вибачте за некропост. Фінансовий пакет GNU Octave octave.sourceforge.net/financial тепер підтримує (станом на 0.5.0) моделювання Монте-Карло. Це значно швидше, ніж версія MATLAB, оскільки код пишеться без циклів. Для порівняльного аналізу (порівняно з MATLAB) та навчального посібника див. Parsiad.ca/post/simulate-sdes-in-gnu-octave-financial-package . Я також повинен оприлюднити свою упередженість, оскільки я автор цих методів.
parsiad

Відповіді:


17

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

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

Однак я вважаю, що якщо ви хочете, щоб алгоритми ефективно функціонували у виробничому середовищі, найкраще перейти до компільованої мови на зразок C ++. У мене є досвід введення C ++ і в Matlab, і в R (і в цьому відношенні є чудовим), але я мав кращий досвід роботи з Р. Відмова від відповідальності: Будучи студентом, я не використовував останню версію Matlab для своїх долів, Я працював майже виключно в Matlab 7.1 (це як 4 роки). Можливо, новіші версії працюють краще, але я можу придумати дві ситуації у верхній частині голови, коли C ++ dll в задній частині Matlab спричинив Windows XP на синій екран, тому що я неправильно ходив за межі масиву - дуже складна проблема налагодження, якщо ваш комп'ютер перезавантажується кожен раз, коли ви робите цю помилку ...

Нарешті, R-громада, як видається, зростає набагато швидше і з набагато більшим обертом, ніж коли-небудь спільнота Matlab. Крім того, оскільки це безкоштовно, ви також не маєте справу з менеджером ліцензій Godforsaken flexlm.

Примітка: Майже вся моя розробка зараз в алгоритмах MCMC. Я роблю близько 90% у виробництві на C ++ з візуалізацією в R за допомогою ggplot2.

Оновлення для паралельних коментарів:

Значна кількість мого часу на розробку витрачається на паралелізацію процедур MCMC (це моя кандидатська дисертація). Я використав паралельний набір інструментів Matlab та рішення Star P (який, напевно, зараз належить Microsoft ?? - єєз, ще один згорблений ...) Я знайшов паралельний інструментарій кошмаром конфігурації - коли я його використовував, він вимагав кореневого доступу до кожного окремого клієнтського вузла. Я думаю, що вони виправили цю маленьку «помилку» зараз, але все-таки безлад. Я вважав, що рішення '' p є елегантним, але часто важким для профілювання. Я не використовував Куртку , але чув хороші речі. Я також не використовував новіші версії паралельної панелі інструментів, яка також підтримує обчислення GPU.

Я практично не маю досвіду роботи з паралельними пакетами R.

З мого досвіду, паралелізування коду повинно відбуватися на рівні C ++, де ви маєте більш точну деталізацію контролю для розкладання задач та розподілу пам'яті / ресурсів. Я вважаю, що якщо ви намагаєтеся паралелізувати програми на високому рівні, ви часто отримуєте лише мінімальне прискорення, якщо ваш код не є тривіально розкладеним (його також називають фіктивним паралелізмом). З огляду на це , ви навіть можете отримати розумні скорочення, використовуючи однорядковий рівень на рівні C ++, використовуючи OpenMP:

#pragma omp parallel for

Складніші схеми мають криву навчання, але мені дуже подобається, куди йдуть речі з gpgpu. Що стосується JSM цього року, мало хто з якими я говорив про розвиток GPU в R, цитують це як "лише пальці в глибокому кінці", так би мовити. Але, як зазначалося, у мене мінімальний досвід - щоб змінити найближчим часом.


+1 для C ++; Хоча вставляти C / C ++ в RI досить просто, часто обгортайте мої коди і запускайте їх всередині R - тоді приємніше передавати параметри, робити візуалізацію в реальному часі і, очевидно, аналізувати результати, не замислюючись про формат вихідного файлу.

добре поставлений; Врешті-решт MC потребує переходу на C / C ++. У мене не вистачає досвіду роботи в R, щоб коментувати, але у мене виникли ряд головних болів за допомогою C / C ++ з Matlab через різні версії спільних бібліотек об'єктів (під Linux), які витягуються виконуваним файлом Matlab, ніж те, з чим я хочу зв’язати мій код.
shabbychef

tibbits: Як ви генеруєте RN під час використання openMP?
csgillespie

Зараз я - ні. Найдорожчі частини моїх алгоритмів MCMC обчислюють кілька ймовірностей, тому я намагаюсь якнайкраще зібрати їх разом і обчислити їх паралельно. Але все налаштування, генерація RN (для пропозицій), робиться на одному ядрі процесора. Для паралельних RNG я почав би з DC для Mersenne Twister - але я ніколи особисто не використовував його за межі тривіального перекладу на CUDA для графічних процесорів (більше, як насправді).
М. Тіббіт

15

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

Що я роблю

Моя нинішня практика роботи - використовувати R для прототипу та використовувати C, коли мені потрібно додаткове збільшення швидкості. Бувало, що мені доведеться дуже швидко перейти на C (знову ж таки для моїх спеціальних програм), але багатобічні бібліотеки R допомогли затримати цей перемикач. По суті, ви робите forцикл паралельно тривіальним змінам.

Зазначу, що мої програми дуже обчислювальні.

Рекомендація

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

Я хочу побудувати статичні моделі з аналізом чутливості, пізніші динамічні моделі. Потрібні хороші бібліотеки / алгоритми, які мене керують

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

Якщо сказати, що, як правило, аналіз Монте-Карло / чутливості не передбачає особливо вдосконалених статистичних процедур - звичайно, він може потребувати інших розширених функціональних можливостей. Тож я думаю (без додаткової інформації), що ви могли б провести свій аналіз будь-якою мовою, але, будучи повністю упередженим, рекомендую R!


4
Мені подобається частина про "Моя теперішня практика роботи - використовувати R для прототипу і використовувати C, коли мені потрібно додаткове збільшення швидкості". - це звучить як опис роботи мого бідного негідного себе та розробників C ++ у сусідньому офісі ... і я думаю, що це справді фіксує будь-яку ситуацію, пов’язану з R, C / C ++ та проблемою статистичних обчислень.
Стефан Коласа

9

Хоча я майже ексклюзивно використовую R, я дуже захоплююся профілером в Matlab.
Коли ваша програма є повільною, ви зазвичай хочете знати, де знаходиться вузьке місце. Профілер Matlab - чудовий інструмент для досягнення цього, оскільки він говорить вам, скільки часу витрачається на кожен рядок коду.

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

Хоча я і рекомендую R(адже він просто чудовий: безкоштовний, надзвичайно потужний, ...), якщо ви знаєте, що вам доведеться багато профілювати свій код, Matlab - це набагато краще. І якщо чесно, у Matlab є багатоядерні та паралельні обчислювальні інструменти (хоча це надзвичайно дорого).


4
Я повністю згоден @Henrik. Якщо ви стурбовані профілюванням, у Matlab є чудовий інструмент для профілювання (навіть у версії 7.1 !!). Rprof з іншого боку залишає бажати кращого. Я закінчую профілювання, виконуючи кожну команду кілька разів у циклі for і порівнюючи system.timeрізницю між різними версіями. Ось цікаве тематичне дослідження
М. Тіббіт

2

Якщо ваші імітації включатимуть відносно складні методи, тоді R - це шлях, оскільки цілком імовірно, що потрібні вам програми будуть доступні в R, але не обов'язково в matlab.


2

На мою думку, Матлаб - це некрасива мова. Можливо, на даний момент у нього є основні аргументи та названі аргументи, але багато прикладів, які ви знаходите в Інтернеті, роблять старі "Якщо є 6 аргументів, це, інакше, якщо є 5 аргументів це і те ...", а названі аргументи просто вектори з чергуванням рядків (імен) та значень. Це так у 1970-х, що я просто не можу ним користуватися.

У R можуть бути свої проблеми, і він також старий, але він був побудований на фундаменті (схема / Lisp), який був перспективним і тримався досить добре в порівнянні.

Однак, Matlab набагато швидше, якщо ви хочете кодувати петлі тощо. І у нього є набагато кращі засоби налагодження. І більше інтерактивної графіки. З іншого боку, те, що проходить за документування вашого коду / бібліотеки, є досить смішним порівняно з R, і ви платите за копію Matlab досить копійки.

Всі ІМО.

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