Comecei a fazer Monte Carlo em R como hobby, mas eventualmente um analista financeiro aconselhou a migração para o Matlab. Sou um desenvolvedor de software experiente. mas um iniciante em Monte Carlo. Eu quero construir modelos estáticos com análise de sensibilidade, modelos dinâmicos posteriores. Precisa de boas bibliotecas / algoritmos que me guiem.
Para mim, parece que o R possui excelentes bibliotecas, e eu suspeito que o mathlab seja preferido por programadores inexperientes devido à linguagem fácil do tipo pascal. A linguagem R é baseada no esquema e isso é difícil para iniciantes, mas não para mim. Se o Matlab / Octave não tiver vantagens no lado numérico / da biblioteca, eu ficaria com R.
r
matlab
monte-carlo
Roland Kofler
fonte
fonte
Respostas:
Eu uso os dois. Geralmente protótipo de funções e algoritmos no Matlab porque, como afirmado, é mais fácil expressar um algoritmo em algo próximo de uma linguagem matemática pura.
R tem excelentes bibliotecas. Ainda estou aprendendo, mas estou começando a deixar o Matlab na poeira, porque quando você conhece o R, também é bastante fácil criar protótipos de funções lá.
No entanto, acho que se você deseja que os algoritmos funcionem eficientemente dentro de um ambiente de produção, é melhor mudar para uma linguagem compilada como C ++. Tenho experiência em agrupar C ++ em Matlab e R (e, nesse caso, excel), mas tive uma experiência melhor com R. Isenção de responsabilidade: como estudante de graduação, não usei uma versão recente do Matlab para minhas dlls, Eu tenho trabalhado quase exclusivamente no Matlab 7.1 (que tem 4 anos). Talvez as versões mais recentes funcionem melhor, mas consigo pensar em duas situações em que uma dll C ++ na parte de trás do Matlab causou a tela azul do Windows XP porque caminhei de maneira inadequada fora dos limites de uma matriz - um problema muito difícil de resolver. depure se o seu computador reiniciar toda vez que você cometer esse erro ...
Por fim, a comunidade R parece estar crescendo muito mais rápido e com muito mais impulso do que a comunidade Matlab já teve. Além disso, como é gratuito, você também não tem contato com o gerenciador de licenças flexlm esquecido por Deus.
Nota: Quase todo o meu desenvolvimento está nos algoritmos do MCMC agora. Faço cerca de 90% na produção em C ++ com a visualização em R usando o ggplot2.
Atualização para comentários paralelos:
Uma boa parte do meu tempo de desenvolvimento atualmente é gasta em paralelo às rotinas do MCMC (é minha tese de doutorado). Eu usei a caixa de ferramentas paralela do Matlab e a solução Star P (que eu acho que agora é de propriedade da Microsoft ?? - eita, outra é devorada ...) Eu achei a caixa de ferramentas paralela um pesadelo de configuração - quando eu a usei, exigia acesso raiz a todos os nós do cliente. Acho que eles corrigiram esse pequeno "bug" agora, mas ainda estão uma bagunça. Eu achei a solução * 'p elegante, mas geralmente difícil de definir. Eu não usei Jacket , mas ouvi coisas boas. Também não usei as versões mais recentes da caixa de ferramentas paralelas, que também suportam o cálculo da GPU.
Não tenho praticamente nenhuma experiência com os pacotes paralelos R.
Minha experiência é que o código paralelo deve ocorrer no nível C ++, onde você tem uma granularidade de controle mais fina para decomposição de tarefas e alocação de memória / recurso. Descobri que, se você tentar paralelizar programas em um nível alto, geralmente recebe apenas uma aceleração mínima, a menos que seu código seja trivialmente decomponível (também chamado de paralelismo fictício). Dito isso, você pode até obter velocidades razoáveis usando uma linha única no nível C ++ usando o OpenMP:
Esquemas mais complicados têm uma curva de aprendizado, mas eu realmente gosto de onde as coisas do gpgpu estão indo. No JSM deste ano, as poucas pessoas com quem conversei sobre o desenvolvimento de GPU no R o citam como sendo apenas "dedos no fundo do poço", por assim dizer. Mas, como afirmado, tenho experiência mínima - para mudar no futuro próximo.
fonte
Para ser honesto, acho que qualquer pergunta que você fizer por aqui sobre R vs ... será tendenciosa para R. Lembre-se de que R é de longe a tag mais usada !
O que eu faço
Minha prática de trabalho atual é usar R para prototipar e usar C quando eu precisar de um aumento extra de velocidade. Costumava ter que mudar para C muito rapidamente (novamente para meus aplicativos específicos), mas as bibliotecas R de vários núcleos ajudaram a atrasar essa troca. Essencialmente, você
for
executa um loop em paralelo com uma alteração trivial.Devo mencionar que meus aplicativos são muito computacionais.
Recomendação
Para ser perfeitamente honesto, isso realmente depende exatamente do que você deseja fazer. Então, estou baseando minha resposta nessa afirmação em sua pergunta.
Eu imaginaria que esse problema seria ideal para prototipar em R e usar C quando necessário (ou alguma outra linguagem compilada).
Ao dizer isso, normalmente a análise de Monte-Carlo / sensibilidade não envolve rotinas estatísticas particularmente avançadas - é claro que pode ser necessária outra funcionalidade avançada. Então eu acho (sem mais informações) que você poderia realizar sua análise em qualquer idioma, mas sendo completamente tendencioso, eu recomendaria o R!
fonte
Embora eu quase exclusivamente use
R
, eu realmente admiro o criador de perfil noMatlab
.Quando o seu programa está meio lento, você normalmente quer saber onde está o gargalo. O criador de perfil do Matlab é uma ótima ferramenta para conseguir isso, pois informa quanto tempo é gasto em cada linha do código.
Pelo menos para mim, o uso
Rprof
é incomparavelmente pior. Não consigo descobrir qual chamada é o gargalo. UsandoRprof
você não obtém informações sobre quanto tempo é gasto em cada linha, mas quanto tempo é gasto em cada função primitiva (mais ou menos). No entanto, muitas das mesmas funções primitivas são chamadas por muitas funções diferentes.Embora eu recomende
R
(porque é ótimo: gratuito, extremamente poderoso, ...) se você sabe que precisa criar um perfil muito do seu código, o Matlab é muito melhor. E para ser justo, existem caixas de ferramentas de computação multicore e paralelas no Matlab (embora extremamente caras).fonte
system.time
diferença entre versões diferentes. Aqui está um estudo de caso interessanteSe suas simulações envolverem técnicas relativamente sofisticadas, R é o caminho a seguir, porque é provável que as rotinas necessárias estejam disponíveis em R, mas não necessariamente no matlab.
fonte
Na minha opinião, o Matlab é uma linguagem feia. Talvez já tenha obtido argumentos padrão e argumentos nomeados em seu núcleo, mas muitos exemplos que você encontra on-line fazem o antigo "Se houver 6 argumentos, este, caso contrário, se houver 5 argumentos, isto e aquilo ..." e argumentos nomeados são apenas vetores com seqüências alternadas (nomes) e valores. Isso é tão dos anos 70 que eu simplesmente não posso usá-lo.
O R pode ter seus problemas, e também é antigo, mas foi construído sobre uma base (Scheme / Lisp) que era prospectiva e se mantinha bastante bem em comparação.
Dito isto, o Matlab é muito mais rápido se você gosta de codificar com loops, etc. E possui recursos de depuração muito melhores. E gráficos mais interativos. Por outro lado, o que se passa com a documentação de seu código / bibliotecas é ridículo em comparação ao R e você paga um centavo para usar o Matlab.
Todos IMO.
fonte