Я начал заниматься Монте-Карло в R как хобби, но в конце концов финансовый аналитик посоветовал перейти на Matlab. Я опытный разработчик программного обеспечения. но начинающий Монте-Карло. Я хочу построить статические модели с анализом чувствительности, позже динамические модели. Нужны хорошие библиотеки / алгоритмы, которые меня направляют.
Мне кажется, что R имеет отличные библиотеки, и я подозреваю, что mathlab предпочитают неопытные программисты из-за легкого языка, похожего на паскаль. Язык R основан на схеме, и это трудно для начинающих, но не для меня. Если у Matlab / Octave нет преимуществ в числовой / библиотечной части, я бы остановился на R.
r
matlab
monte-carlo
Роланд Кофлер
источник
источник
Ответы:
Я использую оба. Я часто создаю прототипы функций и алгоритмов в Matlab, потому что, как уже говорилось, легче выразить алгоритм в чем-то, что близко к чисто математическому языку.
У R есть отличные библиотеки. Я все еще учусь этому, но я начинаю оставлять Matlab в пыли, потому что, когда вы знаете R, там также довольно легко создавать прототипы функций.
Однако я считаю, что если вы хотите, чтобы алгоритмы эффективно функционировали в производственной среде, лучше всего перейти на скомпилированный язык, такой как C ++. У меня есть опыт работы с C ++ как в Matlab, так и в R (и в этом смысле превосходно), но у меня был лучший опыт с R. Отказ от ответственности: Будучи аспирантом, я не использовал последнюю версию Matlab для своих библиотек, Я работаю почти исключительно в Matlab 7.1 (ему 4 года). Возможно, более новые версии работают лучше, но я могу вспомнить две ситуации, когда DLL-библиотека C ++ в задней части Matlab вызвала появление Windows XP с синим экраном, потому что я неуместно вышел за границы массива - очень трудная проблема для отладка, если ваш компьютер перезагружается каждый раз, когда вы делаете эту ошибку ...
Наконец, сообщество R, похоже, растет гораздо быстрее и с гораздо большей динамикой, чем когда-либо было сообщество Matlab. Кроме того, поскольку это бесплатно, вы также не имеете дела с менеджером лицензий Godforsaken flexlm.
Примечание: почти все мои разработки сейчас связаны с алгоритмами MCMC. Я делаю около 90% в производстве в C ++ с визуализацией в R с использованием ggplot2.
Обновление для параллельных комментариев:
Сейчас я потратил немало времени на параллелизацию процедур MCMC (это моя кандидатская диссертация). Я использовал параллельный инструментарий Matlab и решение Star P (которое, я полагаю, теперь принадлежит Microsoft ?? - еще один сожрал ...) Я обнаружил, что параллельный инструментарий - это кошмар конфигурации - когда я его использовал, это требовало корневого доступа к каждому клиентскому узлу. Я думаю, что они исправили эту маленькую «ошибку» сейчас, но все еще беспорядок. Я нашел решение * 'p элегантным, но часто сложным для профилирования. Я не использовал куртку , но слышал хорошие вещи. Я также не использовал более поздние версии параллельного инструментария, которые также поддерживают вычисления на GPU.
У меня практически нет опыта работы с параллельными пакетами R.
По моему опыту, распараллеливание кода должно происходить на уровне C ++, где у вас есть более тонкая гранулярность контроля для декомпозиции задач и распределения памяти / ресурсов. Я считаю, что если вы пытаетесь распараллелить программы на высоком уровне, вы часто получаете только минимальное ускорение, если ваш код не является тривиально разложимым (также называемым фиктивным параллелизмом). Тем не менее, вы можете даже получить разумное ускорение, используя одну строку на уровне C ++, используя OpenMP:
У более сложных схем есть кривая обучения, но мне действительно нравится, куда идут дела в gpgpu. Что касается JSM в этом году, несколько человек, с которыми я говорил о разработке графических процессоров в R, называют это, так сказать, всего лишь «пальцами в глубине». Но, как указано, у меня минимальный опыт - поменять в ближайшее время.
источник
Честно говоря, я думаю, что любой вопрос, который вы зададите здесь о R против ..., будет смещен в сторону R. Помните, что R - безусловно, самый используемый тег !
Что я делаю
Моя текущая практика работы - использовать R для создания прототипа и использовать C, когда мне нужно дополнительное повышение скорости. Раньше мне приходилось очень быстро переключаться на C (опять же для моих конкретных приложений), но многоядерные библиотеки R помогли задержать это переключение. По сути, вы делаете
for
цикл, запущенный параллельно с тривиальным изменением.Я должен отметить, что мои приложения очень интенсивны в вычислительном отношении.
Рекомендация
Чтобы быть совершенно честным, это действительно зависит от того, что именно вы хотите сделать. Поэтому я основываю свой ответ на этом утверждении в вашем вопросе.
Я полагаю, что эта проблема идеально подходит для создания прототипов в R и использования C при необходимости (или некоторого другого скомпилированного языка).
Сказав это, как правило, анализ Монте-Карло / чувствительности не включает в себя особенно продвинутые статистические процедуры - конечно, он может нуждаться в других расширенных функциях. Поэтому я думаю (без дополнительной информации), что вы могли бы провести анализ на любом языке, но, будучи полностью предвзятым, я бы порекомендовал R!
источник
Хотя я почти исключительно использую
R
, я действительно восхищаюсь профилировщиком вMatlab
.Когда ваша программа работает медленно, вы обычно хотите знать, где находится узкое место. Профилировщик Matlab - отличный инструмент для достижения этой цели, так как он говорит вам, сколько времени тратится на каждую строку кода.
По крайней мере, для меня использование
Rprof
несравнимо хуже. Я не могу понять, какой звонок является узким местом. При использованииRprof
вы не получаете информацию о том, сколько времени тратится на каждую строку, но сколько времени тратится на каждую примитивную функцию (или около того). Однако множество одинаковых примитивных функций вызывается множеством различных функций.Хотя я рекомендую
R
(потому что это просто здорово: бесплатно, очень мощно, ...), если вы знаете, что вам нужно много профилировать свой код, Matlab намного лучше. И, честно говоря, в Matlab есть многоядерные и параллельные вычислительные наборы инструментов (хотя и очень дорогие).источник
system.time
разницу между разными версиями. Вот интересный пример из практикиЕсли в ваших симуляциях будут использоваться относительно сложные методы, тогда лучше использовать R, поскольку вполне вероятно, что необходимые вам процедуры будут доступны в R, но не обязательно в Matlab.
источник
На мой взгляд, Matlab - уродливый язык. Возможно, он получил аргументы по умолчанию и именованные аргументы в своем ядре к настоящему времени, но многие примеры, которые вы находите в сети, делают старое «Если есть 6 аргументов, это, иначе, если есть 5 аргументов это и то ...» и именованные аргументы просто векторы с чередующимися строками (именами) и значениями. Это так 1970-х годов, что я просто не могу его использовать.
У R могут быть свои проблемы, и он тоже старый, но он был построен на фундаменте (Scheme / Lisp), который был ориентирован на будущее и достаточно хорошо выдерживал сравнение.
Тем не менее, Matlab намного быстрее, если вы любите кодировать с помощью циклов и т. Д. И он имеет гораздо лучшие средства отладки. И еще интерактивная графика. С другой стороны, то, что нужно для документирования вашего кода / библиотек, довольно смешно по сравнению с R, и вы платите немалые деньги за использование Matlab.
Все ИМО.
источник