Comencé a hacer Montecarlo en R como pasatiempo, pero finalmente un analista financiero me aconsejó migrar a Matlab. Soy un desarrollador de software experimentado. pero un principiante de Monte Carlo. Quiero construir modelos estáticos con análisis de sensibilidad, modelos dinámicos posteriores. Necesito buenas bibliotecas / algoritmos que me guíen.
A mí me parece que R tiene excelentes bibliotecas, y sospecho que los programadores inexpertos prefieren el mathlab debido al lenguaje fácil de pascal. El lenguaje R se basa en un esquema y esto es difícil para los principiantes, pero no para mí. Si Matlab / Octave no tiene ventajas en el lado numérico / biblioteca, me quedaría con R.
r
matlab
monte-carlo
Roland Kofler
fuente
fuente
Respuestas:
Yo uso ambos. A menudo prototipo de funciones y algoritmos en Matlab porque, como se dijo, es más fácil expresar un algoritmo en algo cercano a un lenguaje matemático puro.
R tiene excelentes bibliotecas. Todavía lo estoy aprendiendo, pero estoy empezando a dejar a Matlab en el polvo porque una vez que conoces R, también es bastante fácil crear prototipos de funciones allí.
Sin embargo, creo que si desea que los algoritmos funcionen eficientemente dentro de un entorno de producción, es mejor pasar a un lenguaje compilado como C ++. Tengo experiencia en envolver C ++ en Matlab y R (y sobresalir para el caso), pero he tenido una mejor experiencia con R. Descargo de responsabilidad: Siendo un estudiante graduado, no he usado una versión reciente de Matlab para mis dlls, He estado trabajando casi exclusivamente en Matlab 7.1 (que tiene como 4 años). Quizás las versiones más nuevas funcionen mejor, pero puedo pensar en dos situaciones fuera de mi cabeza donde un dll C ++ en la parte posterior de Matlab causó que Windows XP apareciera en la pantalla azul porque caminé inapropiadamente fuera de los límites de una matriz, un problema muy difícil de resolver. depurar si su computadora se reinicia cada vez que comete ese error ...
Por último, la comunidad R parece estar creciendo mucho más rápido y con mucho más impulso que la comunidad de Matlab. Además, como es gratis, tampoco tiene que lidiar con el administrador de licencias flexlm de Godforsaken.
Nota: Casi todo mi desarrollo está en algoritmos MCMC en este momento. Realizo alrededor del 90% en producción en C ++ con la visualización en R usando ggplot2.
Actualización para comentarios paralelos:
Una buena parte de mi tiempo de desarrollo en este momento lo paso en paralelo a las rutinas MCMC (es mi tesis doctoral). He usado la caja de herramientas paralelas de Matlab y la solución de Star P (¿supongo que ahora es propiedad de Microsoft? Dios, otra está engullida ...) Encontré que la caja de herramientas paralelas es una pesadilla de configuración , cuando la usé, requirió acceso raíz a cada nodo de cliente. Creo que han solucionado ese pequeño "error" ahora, pero sigue siendo un desastre. Encontré que la solución * 'p es elegante, pero a menudo difícil de perfilar. No he usado Jacket , pero he escuchado cosas buenas. Tampoco he usado las versiones más recientes de la caja de herramientas paralelas que también admiten el cálculo de GPU.
Prácticamente no tengo experiencia con los paquetes paralelos R.
Según mi experiencia, el código de paralelización debe ocurrir en el nivel de C ++ donde tiene una granularidad de control más fina para la descomposición de tareas y la asignación de memoria / recursos. Me parece que si intentas paralelizar programas en un nivel alto, a menudo solo recibes una aceleración mínima a menos que tu código sea trivialmente descomponible (también llamado paralelismo ficticio). Dicho esto, incluso puedes obtener aceleraciones razonables usando una sola línea en el nivel de C ++ usando OpenMP:
Los esquemas más complicados tienen una curva de aprendizaje, pero realmente me gusta hacia dónde van las cosas de gpgpu. A partir de JSM este año, las pocas personas con las que hablé sobre el desarrollo de GPU en R lo citan como solo "dedos en el fondo", por así decirlo. Pero como se dijo, tengo una experiencia mínima: cambiar en el futuro cercano.
fuente
Para ser honesto, creo que cualquier pregunta que hagas aquí sobre R vs ... será un sesgo hacia R. ¡Recuerda que R es, con mucho, la etiqueta más utilizada !
Lo que hago
Mi práctica laboral actual es usar R para crear prototipos y usar C cuando necesito un impulso adicional de velocidad. Solía ser que tendría que cambiar a C muy rápidamente (nuevamente para mis aplicaciones particulares), pero las bibliotecas multinúcleo R han ayudado a retrasar ese cambio. Esencialmente, haces que un
for
ciclo se ejecute en paralelo con un cambio trivial.Debo mencionar que mis aplicaciones son muy computacionalmente intensivas.
Recomendación
Para ser sincero, realmente depende exactamente de lo que quieras hacer. Así que baso mi respuesta en esta afirmación en su pregunta.
Me imagino que este problema sería ideal para crear prototipos en R y usar C cuando sea necesario (o algún otro lenguaje compilado).
Dicho esto, por lo general, el análisis de sensibilidad / Monte-Carlo no implica rutinas estadísticas particularmente avanzadas; por supuesto, puede necesitar otra funcionalidad avanzada. Así que creo (sin más información) que podría llevar a cabo su análisis en cualquier idioma, pero siendo completamente parcial, le recomendaría R!
fuente
Aunque uso casi exclusivamente
R
, realmente admiro el perfiladorMatlab
.Cuando su programa es un poco lento, normalmente quiere saber dónde está el cuello de botella. El generador de perfiles de Matlab es una gran herramienta para lograr esto, ya que le indica cuánto tiempo pasa en cada línea del código.
Al menos para mí, usar
Rprof
es incomparablemente peor. No puedo entender qué llamada es el cuello de botella. Con el usoRprof
no obtiene la información sobre cuánto tiempo se dedica a cada línea, sino cuánto tiempo se dedica a cada función primitiva (más o menos). Sin embargo, muchas de las mismas funciones primitivas son llamadas por muchas funciones diferentes.Aunque lo recomiendo
R
(porque es simplemente genial: gratis, extremadamente potente, ...) si sabes que tienes que perfilar mucho tu código, Matlab es mucho mejor. Y para ser justos, hay cajas de herramientas informáticas multinúcleo y paralelas en Matlab (aunque extremadamente caras).fuente
system.time
diferencia entre diferentes versiones. Aquí hay un caso de estudio interesanteSi sus simulaciones involucrarán técnicas relativamente sofisticadas, entonces R es el camino a seguir, porque es probable que las rutinas que necesitará estén disponibles en R, pero no necesariamente en matlab.
fuente
En mi opinión, Matlab es un lenguaje feo. Quizás ya tiene argumentos predeterminados y argumentos nombrados en su núcleo, pero muchos ejemplos que encuentra en línea hacen el viejo "Si hay 6 argumentos, esto, si hay 5 argumentos esto y aquello ..." y los argumentos nombrados son solo vectores con cadenas alternas (nombres) y valores. Eso es tan de 1970 que simplemente no puedo usarlo.
R puede tener sus problemas, y también es antiguo, pero fue construido sobre una base (Scheme / Lisp) que era prospectiva y se ha mantenido bastante bien en comparación.
Dicho esto, Matlab es mucho más rápido si te gusta codificar con bucles, etc. Y tiene mejores instalaciones de depuración. Y más gráficos interactivos. Por otro lado, lo que pasa por documentar su código / bibliotecas es bastante ridículo en comparación con R y paga un centavo por usar Matlab.
Todo de la OMI.
fuente