Ich begann Monte Carlo in R als Hobby zu machen, aber irgendwann riet mir ein Finanzanalyst, nach Matlab zu migrieren. Ich bin ein erfahrener Softwareentwickler. aber ein Monte Carlo Anfänger. Ich möchte statische Modelle mit Sensitivitätsanalyse konstruieren, später dynamische Modelle. Benötige gute Bibliotheken / Algorithmen, die mich leiten.
Mir scheint, dass R ausgezeichnete Bibliotheken hat, und ich vermute, dass Mathlab von unerfahrenen Programmierern wegen der einfachen Pascal-ähnlichen Sprache bevorzugt wird. Die R-Sprache basiert auf einem Schema und das ist für Anfänger schwer, aber nicht für mich. Wenn Matlab / Octave keine Vorteile auf der Seite der Numerik / Bibliothek hat, würde ich bei R bleiben.
r
matlab
monte-carlo
Roland Kofler
quelle
quelle
Antworten:
Ich benutze beides. Ich habe in Matlab oft Funktionen und Algorithmen prototypisiert, weil es, wie gesagt, einfacher ist, einen Algorithmus in etwas auszudrücken, das einer rein mathematischen Sprache nahekommt.
R hat ausgezeichnete Bibliotheken. Ich lerne es immer noch, aber ich lasse Matlab langsam im Staub, denn sobald Sie R kennen, ist es auch ziemlich einfach, dort Funktionen zu prototypisieren.
Wenn Sie jedoch möchten, dass Algorithmen in einer Produktionsumgebung effizient funktionieren, empfiehlt es sich, zu einer kompilierten Sprache wie C ++ zu wechseln. Ich habe Erfahrung darin, C ++ sowohl in Matlab als auch in R zu packen (und diesbezüglich zu übertreffen), aber ich habe eine bessere Erfahrung mit R. Haftungsausschluss: Als Student habe ich keine aktuelle Version von Matlab für meine DLLs verwendet. Ich habe fast ausschließlich in Matlab 7.1 gearbeitet (das ist ungefähr 4 Jahre alt). Vielleicht funktionieren die neueren Versionen besser, aber ich kann mir zwei Situationen vorstellen, in denen eine C ++ - DLL auf der Rückseite von Matlab dazu führte, dass Windows XP einen Bluescreen bekam, weil ich mich unangemessen außerhalb der Grenzen eines Arrays befand - ein sehr schweres Problem Fehlerbehebung, wenn Ihr Computer jedes Mal neu startet, wenn Sie diesen Fehler machen ...
Schließlich scheint die R-Community viel schneller und dynamischer zu wachsen, als es die Matlab-Community jemals getan hat. Da es kostenlos ist, müssen Sie sich auch nicht mit dem Godforsaken Flexlm License Manager auseinandersetzen.
Hinweis: Fast meine gesamte Entwicklung befasst sich derzeit mit MCMC-Algorithmen. Ich mache ungefähr 90% in der Produktion in C ++ mit der Visualisierung in R mit ggplot2.
Update für parallele Kommentare:
Ein beträchtlicher Teil meiner Entwicklungszeit wird derzeit für die Parallelisierung von MCMC-Routinen aufgewendet (dies ist meine Doktorarbeit). Ich habe Matlab parallel Toolbox und Star P-Lösung verwendet (was ich jetzt im Besitz von erraten Microsoft ?? - jeez ist ein anderer verschlungen ...) Ich habe die parallel Toolbox fand eine Konfiguration seinen Alptraum - wenn ich es benutze, Es erforderte Root-Zugriff auf jeden einzelnen Clientknoten. Ich denke, sie haben diesen kleinen "Bug" jetzt behoben, aber immer noch ein Chaos. Ich fand die Lösung elegant, aber oft schwer zu profilieren. Ich habe Jacket nicht benutzt , aber ich habe gute Dinge gehört. Ich habe auch nicht die neueren Versionen der parallelen Toolbox verwendet, die auch die GPU-Berechnung unterstützen.
Ich habe praktisch keine Erfahrung mit den R-Parallel-Paketen.
Ich habe die Erfahrung gemacht, dass die Parallelisierung von Code auf C ++ - Ebene erfolgen muss, wo Sie eine genauere Kontrolle über die Aufteilung der Aufgaben und die Speicher- / Ressourcenzuweisung haben. Ich finde, wenn Sie versuchen, Programme auf hoher Ebene zu parallelisieren, erhalten Sie oft nur eine minimale Beschleunigung, es sei denn, Ihr Code ist trivial zerlegbar (auch als Dummy-Parallelität bezeichnet). Das heißt, Sie können mit OpenMP sogar eine vernünftige Beschleunigung erzielen, wenn Sie eine einzelne Zeile auf C ++ - Ebene verwenden:
Kompliziertere Schemata haben eine Lernkurve, aber ich mag es wirklich, wohin die Dinge mit GPGPU gehen. Seit JSM in diesem Jahr wird es von den wenigen Personen, mit denen ich über die GPU-Entwicklung in R gesprochen habe, sozusagen als "Zehen im tiefen Bereich" bezeichnet. Aber wie gesagt, ich habe nur minimale Erfahrung - in naher Zukunft zu ändern.
quelle
Um ehrlich zu sein, denke ich, dass jede Frage, die Sie hier zu R vs ... stellen, in Richtung R tendiert. Denken Sie daran, dass R bei weitem das am häufigsten verwendete Tag ist !
Was ich mache
Meine derzeitige Arbeitspraxis besteht darin, mit R Prototypen zu erstellen und C zu verwenden, wenn ich einen zusätzlichen Geschwindigkeitsschub benötige. Früher musste ich sehr schnell auf C umsteigen (wieder für meine speziellen Anwendungen), aber das R Multi - Core - Bibliotheken Verzögerung , dass der Schalter geholfen. Im Wesentlichen führen Sie eine
for
Schleife parallel zu einer geringfügigen Änderung aus.Ich sollte erwähnen, dass meine Bewerbungen sind sehr rechenintensiv sind.
Empfehlung
Um ganz ehrlich zu sein, hängt es wirklich davon ab, was Sie genau tun möchten. Ich stütze meine Antwort auf diese Aussage in Ihrer Frage.
Ich würde mir vorstellen, dass dieses Problem ideal für das Prototyping in R und die Verwendung von C bei Bedarf (oder einer anderen kompilierten Sprache) geeignet ist.
In der Regel erfordert die Monte-Carlo-Analyse / Sensitivitätsanalyse keine besonders fortgeschrittenen statistischen Routinen - natürlich sind möglicherweise andere fortgeschrittene Funktionen erforderlich. Also ich (ohne weitere Informationen) denken , dass Sie könnten Ihre Analyse in jeder Sprache durchzuführen, aber vollständig vorgespannt ist, würde ich empfehlen , R!
quelle
Obwohl ich fast ausschließlich verwende
R
, bewundere ich den Profiler inMatlab
.Wenn Ihr Programm langsam ist, möchten Sie normalerweise wissen, wo sich der Engpass befindet. Der Matlab-Profiler ist ein großartiges Werkzeug, um dies zu erreichen, da er Ihnen sagt, wie viel Zeit für jede Codezeile aufgewendet wird.
Zumindest für mich ist die Verwendung
Rprof
unvergleichlich schlimmer. Ich kann nicht herausfinden, welcher Anruf der Engpass ist. Mit erhaltenRprof
Sie nicht die Information, wie viel Zeit für jede Zeile aufgewendet wird, sondern wie viel Zeit für jede primitive Funktion (oder so) aufgewendet wird. Viele der gleichen primitiven Funktionen werden jedoch von vielen verschiedenen Funktionen aufgerufen.Obwohl ich empfehle
R
(weil es einfach großartig ist: kostenlos, extrem leistungsfähig, ...), wenn Sie wissen, dass Sie Ihren Code viel profilieren müssen, ist Matlab viel besser. Und um fair zu sein, es gibt in Matlab Multicore- und Parallel-Computing-Toolboxen (allerdings sehr teuer).quelle
system.time
Unterschied zwischen verschiedenen Versionen. Hier ist eine interessante FallstudieWenn Ihre Simulationen relativ ausgefeilte Techniken beinhalten, ist R der richtige Weg, denn es ist wahrscheinlich, dass die von Ihnen benötigten Routinen in R verfügbar sind, jedoch nicht unbedingt in matlab.
quelle
Matlab ist meiner Meinung nach eine hässliche Sprache. Vielleicht hat es inzwischen Standardargumente und benannte Argumente in seinem Kern, aber viele Beispiele, die Sie online finden, führen das alte "Wenn es 6 Argumente gibt, dies, sonst wenn es 5 Argumente gibt, das und das ..." und benannte Argumente sind gerecht Vektoren mit abwechselnden Zeichenfolgen (Namen) und Werten. Das ist so 1970, dass ich es einfach nicht benutzen kann.
R mag seine Probleme haben, und es ist auch alt, aber es wurde auf einer Grundlage (Schema / Lisp) aufgebaut, die vorausschauend war und sich im Vergleich gut behauptet hat.
Das heißt, Matlab ist viel schneller, wenn Sie mit Schleifen usw. codieren möchten. Außerdem bietet es viel bessere Debugging-Möglichkeiten. Und mehr interaktive Grafiken. Auf der anderen Seite ist das, was für die Dokumentation Ihres Codes / Ihrer Bibliotheken gilt, ziemlich lächerlich im Vergleich zu R, und Sie zahlen einen hübschen Cent für die Verwendung von Matlab.
Alles IMO.
quelle