J'ai commencé à faire de Monte Carlo en R comme hobby, mais finalement un analyste financier m'a conseillé de migrer vers Matlab. Je suis un développeur de logiciels expérimenté. mais un débutant à Monte-Carlo. Je veux construire des modèles statiques avec analyse de sensibilité, plus tard des modèles dynamiques. Besoin de bonnes bibliothèques / algorithmes qui me guident.
Il me semble que R a d'excellentes bibliothèques, et je soupçonne que mathlab est préféré par les programmeurs inexpérimentés en raison du langage pascal facile. Le langage R est basé sur le schéma et c'est difficile pour les débutants, mais pas pour moi. Si Matlab / Octave n'a pas d'avantages du côté numérique / bibliothèque, je resterais avec R.
r
matlab
monte-carlo
Roland Kofler
la source
la source
Réponses:
J'utilise les deux. Je prototype souvent des fonctions et des algorithmes dans Matlab parce que, comme indiqué, il est plus facile d'exprimer un algorithme dans quelque chose qui est proche d'un langage mathématique pur.
R possède d'excellentes bibliothèques. Je suis encore en train de l'apprendre, mais je commence à laisser Matlab dans la poussière car une fois que vous connaissez R, il est également assez facile de prototyper les fonctions là-bas.
Cependant, je trouve que si vous voulez que les algorithmes fonctionnent efficacement dans un environnement de production, il est préférable de passer à un langage compilé comme C ++. J'ai de l'expérience dans l'intégration de C ++ dans Matlab et R (et j'excelle d'ailleurs), mais j'ai eu une meilleure expérience avec R. Avertissement: étant un étudiant diplômé, je n'ai pas utilisé une version récente de Matlab pour mes dll, J'ai travaillé presque exclusivement dans Matlab 7.1 (qui a environ 4 ans). Peut-être que les versions les plus récentes fonctionnent mieux, mais je peux penser à deux situations sur le dessus de ma tête où une DLL C ++ à l'arrière de Matlab a provoqué un écran bleu de Windows XP parce que je marchais de manière inappropriée en dehors des limites d'un tableau - un problème très difficile à résoudre. déboguer si votre ordinateur redémarre à chaque fois que vous faites cette erreur ...
Enfin, la communauté R semble se développer beaucoup plus rapidement et avec beaucoup plus d'élan que la communauté Matlab n'a jamais eu. De plus, comme c'est gratuit, vous n'avez pas non plus affaire avec le gestionnaire de licence Godforsaken flexlm.
Remarque: Presque tout mon développement est en ce moment dans les algorithmes MCMC. Je fais environ 90% de la production en C ++ avec la visualisation en R en utilisant ggplot2.
Mise à jour pour les commentaires parallèles:
Une bonne partie de mon temps de développement est actuellement consacrée à la parallélisation des routines MCMC (c'est ma thèse de doctorat). J'ai utilisé la boîte à outils parallèle de Matlab et la solution de Star P (qui, je suppose, appartient maintenant à Microsoft ?? - jeez un autre est englouti ...) J'ai trouvé que la boîte à outils parallèle était un cauchemar de configuration - quand je l'ai utilisé, il nécessite un accès root à chaque nœud client unique. Je pense qu'ils ont corrigé ce petit "bug" maintenant, mais toujours un gâchis. J'ai trouvé la solution * 'p élégante, mais souvent difficile à profiler. Je n'ai pas utilisé Jacket , mais j'ai entendu de bonnes choses. Je n'ai pas non plus utilisé les versions les plus récentes de la boîte à outils parallèle qui prennent également en charge le calcul GPU.
Je n'ai pratiquement aucune expérience avec les packages parallèles R.
D'après mon expérience, la parallélisation du code doit se produire au niveau C ++ où vous avez une granularité plus fine de contrôle pour la décomposition des tâches et l'allocation de mémoire / ressource. Je trouve que si vous essayez de paralléliser des programmes à un niveau élevé, vous ne recevez souvent qu'une accélération minimale à moins que votre code ne soit décomposable de manière triviale (également appelé parallélisme factice). Cela dit, vous pouvez même obtenir des accélérations raisonnables en utilisant une seule ligne au niveau C ++ en utilisant OpenMP:
Les schémas plus compliqués ont une courbe d'apprentissage, mais j'aime vraiment où les choses gpgpu vont. En ce qui concerne JSM cette année, les quelques personnes à qui j'ai parlé du développement de GPU dans R le citent comme n'étant que des "orteils au fond" pour ainsi dire. Mais comme indiqué, j'ai une expérience minimale - pour changer dans un avenir proche.
la source
Pour être honnête, je pense que toute question que vous poserez ici à propos de R vs ... sera biaisée vers R. N'oubliez pas que R est de loin le tag le plus utilisé !
Ce que je fais
Ma pratique de travail actuelle consiste à utiliser R pour créer un prototype et à utiliser C lorsque j'ai besoin d'un coup de pouce supplémentaire. Auparavant, je devais passer très rapidement en C (encore une fois pour mes applications particulières), mais les bibliothèques multicœurs R ont aidé à retarder ce changement. Essentiellement, vous effectuez une
for
boucle en parallèle avec un changement trivial.Je dois mentionner que mes applications sont très gourmandes en calcul.
Recommandation
Pour être parfaitement honnête, cela dépend vraiment de ce que vous voulez faire. Je fonde donc ma réponse sur cette affirmation dans votre question.
J'imagine que ce problème serait idéalement adapté au prototypage en R et à l'utilisation de C en cas de besoin (ou d'un autre langage compilé).
En disant que, généralement, l'analyse Monte-Carlo / sensibilité n'implique pas de routines statistiques particulièrement avancées - bien sûr, il peut avoir besoin d'autres fonctionnalités avancées. Je pense donc (sans plus d'informations) que vous pourriez effectuer votre analyse dans n'importe quelle langue, mais étant complètement biaisé, je recommanderais R!
la source
Bien que j'utilise presque exclusivement
R
, j'admire vraiment le profileurMatlab
.Lorsque votre programme est un peu lent, vous voulez normalement savoir où se trouve le goulot d'étranglement. Le profileur de Matlab est un excellent outil pour y parvenir car il vous indique combien de temps est consacré à chaque ligne du code.
Au moins pour moi, en utilisant
Rprof
est incomparablement pire. Je ne peux pas déterminer quel appel est le goulot d'étranglement. En utilisant,Rprof
vous n'obtenez pas les informations sur le temps passé sur chaque ligne, mais sur le temps passé sur chaque fonction primitive (ou ainsi). Cependant, un grand nombre des mêmes fonctions primitives sont appelées par un grand nombre de fonctions différentes.Bien que je recommande
R
(car il est tout simplement génial: gratuit, extrêmement puissant, ...) si vous savez que vous devez beaucoup profiler votre code, Matlab est bien meilleur. Et pour être honnête, il existe des boîtes à outils de calcul multicœurs et parallèles dans Matlab (bien que extrêmement coûteuses).la source
system.time
différence entre les différentes versions. Voici une étude de cas intéressanteSi vos simulations impliquent des techniques relativement sophistiquées, alors R est la voie à suivre, car il est probable que les routines dont vous aurez besoin seront disponibles dans R, mais pas nécessairement dans matlab.
la source
À mon avis, Matlab est une langue laide. Peut-être qu'il a maintenant des arguments par défaut et des arguments nommés dans son noyau, mais de nombreux exemples que vous trouvez en ligne font l'ancien "s'il y a 6 arguments, ceci, sinon s'il y a 5 arguments ceci et cela ..." et les arguments nommés sont juste vecteurs avec des chaînes (noms) et des valeurs alternées. C'est tellement des années 1970 que je ne peux tout simplement pas l'utiliser.
R peut avoir ses problèmes, et il est également ancien, mais il a été construit sur une fondation (Scheme / Lisp) qui était prospective et a plutôt bien résisté en comparaison.
Cela dit, Matlab est beaucoup plus rapide si vous aimez coder avec des boucles, etc. Et il a de bien meilleures fonctionnalités de débogage. Et des graphismes plus interactifs. En revanche, ce qui passe pour documenter votre code / bibliothèques est plutôt risible par rapport à R et vous payez un joli centime pour utiliser Matlab.
Tous IMO.
la source