Zacząłem robić Monte Carlo w R jako hobby, ale w końcu analityk finansowy doradził migrację do Matlaba. Jestem doświadczonym programistą. ale początkujący Monte Carlo. Chcę budować modele statyczne z analizą wrażliwości, później modele dynamiczne. Potrzebujesz dobrych bibliotek / algorytmów, które mnie poprowadzą.
Wydaje mi się, że R ma doskonałe biblioteki i podejrzewam, że matematyka jest preferowana przez niedoświadczonych programistów ze względu na łatwy język podobny do pascal. Język R jest oparty na schemacie i jest to trudne dla początkujących, ale nie dla mnie. Jeśli Matlab / Octave nie ma zalet po stronie numerycznej / bibliotecznej, trzymałbym się R.
r
matlab
monte-carlo
Roland Kofler
źródło
źródło
Odpowiedzi:
Używam obu. Często prototypuję funkcje i algorytmy w Matlabie, ponieważ, jak powiedziano, łatwiej jest wyrazić algorytm w czymś zbliżonym do czystego języka matematycznego.
R ma doskonałe biblioteki. Wciąż się tego uczę, ale zaczynam zostawiać Matlaba w pyle, ponieważ kiedy poznasz R, łatwo jest też prototypować funkcje.
Uważam jednak, że jeśli chcesz, aby algorytmy działały wydajnie w środowisku produkcyjnym, najlepiej jest przejść do skompilowanego języka, takiego jak C ++. Mam doświadczenie w pakowaniu C ++ zarówno w Matlaba, jak i R (i do tego świetnie), ale mam lepsze doświadczenia z R. Zastrzeżenie: Będąc studentem grad, nie używałem najnowszej wersji Matlaba dla moich bibliotek dll, Pracuję prawie wyłącznie w Matlab 7.1 (który ma 4 lata). Być może nowsze wersje działają lepiej, ale mogę sobie wyobrazić dwie sytuacje, w których dll C ++ z tyłu Matlaba spowodował niebieski ekran systemu Windows XP, ponieważ niewłaściwie wyszedłem poza granice tablicy - bardzo trudny problem debuguj, jeśli komputer uruchamia się ponownie za każdym razem, gdy popełnisz ten błąd ...
Wreszcie, społeczność R wydaje się rosnąć znacznie szybciej i z większym rozmachem niż społeczność Matlaba. Ponadto, ponieważ jest to bezpłatne, nie masz również do czynienia z menedżerem licencji Godforsaken flexlm.
Uwaga: prawie cały mój rozwój dotyczy obecnie algorytmów MCMC. Robię około 90% produkcji w C ++ z wizualizacją w R przy użyciu ggplot2.
Aktualizacja równoległych komentarzy:
Spora część mojego obecnego czasu poświęcana jest na równoległe wykonywanie procedur MCMC (to moja praca doktorska). Użyłem równoległego zestawu narzędzi Matlaba i rozwiązania Star P (które, jak sądzę, jest teraz własnością Microsoftu? - jeez inny jest pożerany ...) Odkryłem, że równoległy zestaw narzędzi jest koszmarem konfiguracji - kiedy go użyłem, wymagało to dostępu do konta root do każdego węzła klienta. Myślę, że naprawili teraz ten mały „błąd”, ale wciąż jest bałagan. Uważam, że rozwiązanie * p jest eleganckie, ale często trudne do profilowania. Nie używałem kurtki , ale słyszałem dobre rzeczy. Nie korzystałem również z nowszych wersji równoległego zestawu narzędzi, które również obsługują obliczenia na GPU.
Nie mam praktycznie żadnego doświadczenia z równoległymi pakietami R.
Z mojego doświadczenia wynika, że kod równoległy musi występować na poziomie C ++, gdzie masz dokładniejszą kontrolę nad rozkładem zadań i alokacją pamięci / zasobów. Uważam, że jeśli próbujesz zrównoleglać programy na wysokim poziomie, często otrzymujesz tylko minimalne przyspieszenie, chyba że twój kod jest w sposób trywialny rozkładalny (zwany również atrapą równoległości). To powiedziawszy, możesz nawet uzyskać rozsądne przyspieszenia przy użyciu pojedynczej linii na poziomie C ++ przy użyciu OpenMP:
Bardziej skomplikowane schematy mają krzywą uczenia się, ale naprawdę podoba mi się, dokąd zmierzają gpgpu. Począwszy od JSM w tym roku, kilka osób, z którymi rozmawiałem o rozwoju GPU w R, cytuje to jako „tylko palce u stóp w głębokim końcu”. Ale jak powiedziano, mam minimalne doświadczenie - do zmiany w najbliższej przyszłości.
źródło
Szczerze mówiąc, myślę, że każde pytanie, które zadajesz tutaj na temat R vs ... będzie stronnicze w stosunku do R. Pamiętaj, że R jest zdecydowanie najczęściej używanym znacznikiem !
Co robię
Moja obecna praktyka polega na używaniu R do prototypowania i używaniu C, gdy potrzebuję dodatkowego przyspieszenia. Kiedyś musiałem bardzo szybko przełączać się na C (ponownie dla moich konkretnych aplikacji), ale biblioteki wielordzeniowe R pomogły opóźnić tę zmianę. Zasadniczo wykonujesz
for
pętlę równolegle z trywialną zmianą.Powinienem wspomnieć, że moje aplikacje wymagają dużej mocy obliczeniowej.
Rekomendacje
Szczerze mówiąc, tak naprawdę zależy to dokładnie od tego, co chcesz zrobić. Opieram więc swoją odpowiedź na tym stwierdzeniu w twoim pytaniu.
Wyobrażam sobie, że ten problem idealnie nadaje się do prototypowania w języku R i używania C w razie potrzeby (lub innego skompilowanego języka).
Mówiąc, że typowo analiza Monte-Carlo / analiza wrażliwości nie obejmuje szczególnie zaawansowanych procedur statystycznych - oczywiście może wymagać innych zaawansowanych funkcji. Więc myślę, że (bez więcej informacji), które mogłyby wykonywać swoją analizę w dowolnym języku, ale jest całkowicie stronniczy, polecam R!
źródło
Chociaż prawie wyłącznie używam
R
, naprawdę podziwiam profiler wMatlab
.Kiedy twój program działa powoli, zwykle chcesz wiedzieć, gdzie jest wąskie gardło. Profiler Matlaba jest doskonałym narzędziem do osiągnięcia tego celu, ponieważ informuje, ile czasu spędza na każdej linii kodu.
Przynajmniej dla mnie używanie
Rprof
jest nieporównywalnie gorsze. Nie wiem, który telefon jest wąskim gardłem. Za pomocąRprof
nie otrzymujesz informacji o tym, ile czasu spędza się na każdej linii, ale ile czasu spędza na każdej prymitywnej funkcji (lub mniej więcej). Jednak wiele takich samych prymitywnych funkcji jest wywoływanych przez wiele różnych funkcji.Chociaż polecam
R
(ponieważ jest po prostu świetny: darmowy, niezwykle wydajny, ...) jeśli wiesz, że musisz dużo profilować swój kod, Matlab jest znacznie lepszy. I szczerze mówiąc, w Matlabie znajdują się wielordzeniowe i równoległe zestawy narzędzi obliczeniowych (choć bardzo drogie).źródło
system.time
różnicę między różnymi wersjami. Oto interesujące studium przypadkuJeśli twoje symulacje będą wymagały stosunkowo wyrafinowanych technik, to R jest właściwą drogą, ponieważ prawdopodobne jest, że procedury będą potrzebne w R, ale niekoniecznie w Matlabie.
źródło
Moim zdaniem Matlab jest brzydkim językiem. Być może otrzymało już domyślne argumenty i nazwane argumenty w swoim rdzeniu, ale wiele przykładów, które można znaleźć w Internecie, robi stare „Jeśli jest 6 argumentów, to, w przeciwnym razie, jeśli jest 5 argumentów to i tamto ...” i nazwane argumenty są po prostu wektory z naprzemiennymi łańcuchami (nazwami) i wartościami. To takie lata siedemdziesiąte, że po prostu nie mogę tego użyć.
R może mieć swoje problemy i jest również stary, ale został zbudowany na fundamencie (Scheme / Lisp), który był wybiegający w przyszłość i radził sobie dość dobrze w porównaniu.
To powiedziawszy, Matlab jest znacznie szybszy, jeśli lubisz kodować za pomocą pętli itp. I ma znacznie lepsze funkcje debugowania. I więcej interaktywnej grafiki. Z drugiej strony, to, co udaje się w celu udokumentowania twojego kodu / bibliotek, jest raczej śmieszne w porównaniu do R, a za korzystanie z Matlaba płacisz całkiem grosza.
Wszystkie IMO.
źródło