Matlab / octave 또는 R이 몬테 카를로 시뮬레이션에 더 적합합니까?


14

R에서 Monte Carlo를 취미로 시작했지만 결국 재무 분석가는 Matlab으로 마이그레이션 할 것을 권고했습니다. 저는 숙련 된 소프트웨어 개발자입니다. 하지만 몬테카를로 초보자입니다. 감도 분석, 나중에 동적 모델을 사용하여 정적 모델을 구성하고 싶습니다. 나를 안내하는 좋은 라이브러리 / 알고리즘이 필요합니다.

나에게는 R이 훌륭한 라이브러리를 가지고있는 것 같고, 쉬운 파스칼과 같은 언어 때문에 숙련되지 않은 프로그래머가 mathlab을 선호한다고 생각합니다. R 언어는 체계를 기반으로하며 초보자에게는 어렵지만 나에게는 그렇지 않습니다. Matlab / Octave가 숫자 / 라이브러리 측면에서 이점이 없다면 R을 고수 할 것입니다.


2
R은 Scheme을 기반으로하지만 초보자에게 C 기반이라고 가정하는 것이 좋습니다.

2
> 나는 이것보다 더 많은 지식을 가진 사람들이 있기 때문에 이것을 대답으로 올리지 않을 것입니다. 그러나 속도와 관련하여 R베이스와 믹스 좋은 프로그래머 / 위대한 패키지를 구별해야한다고 생각합니다. 훌륭한 프로그래머는 멀티 코어, GPUtools & magma (곧 MCMC에는 유용하지 않음), Rcpp 등과 같은 크랜의 일부 도구를 활용하여 매우 빠른 코드를 만들 수 있습니다. 나는 matlab central이 비교할만한 것을 가지고 있다고 생각하지 않습니다.
user603

@kwak-아마도 내 답변을 의견으로 게시해야합니다. 미안합니다.
M. Tibbits

2
MT, 미쳤어 요-당신의 대답은 훌륭합니다. kwak도 자신의 정답을 제시해야합니다. 더 잘 알고있는 사람들이 적절하다고 생각하면 투표하거나 답변하십시오.
매트 파커

네크로 포스트에 대한 사과 GNU Octave 금융 패키지 octave.sourceforge.net/financial은 이제 (0.5.0 현재) Monte Carlo 시뮬레이션을 지원합니다. 그것은이다 크게 코드와 MATLAB 버전이 루프에 대한없이 작성되는 것보다 더 빨리. 벤치마킹 (MATLAB과 비교) 및 자습서는 parsiad.ca/post/simulate-sdes-in-gnu-octave-financial-package를 참조하십시오 . 또한이 방법의 저자 인 편견을 홍보해야합니다.
parsiad 2016 년

답변:


17

둘 다 사용합니다. 언급 한 것처럼 순수한 수학 언어에 가까운 알고리즘을 표현하는 것이 더 쉽기 때문에 Matlab에서 함수 및 알고리즘을 프로토 타입하는 경우가 많습니다.

R은 훌륭한 라이브러리를 가지고 있습니다. 나는 아직도 그것을 배우고 있지만, 일단 R을 알고 나면 거기에서 함수를 프로토 타입하는 것이 매우 쉽기 때문에 Matlab을 먼지에 맡기고 있습니다.

그러나 프로덕션 환경에서 알고리즘이 효율적으로 작동하려면 C ++과 같은 컴파일 된 언어로 이동하는 것이 가장 좋습니다. C ++을 Matlab과 R 모두에 랩핑 한 경험이 있지만 R과 관련하여 더 나은 경험을 가지고 있습니다. 면책 조항 : 대학원생이기 때문에 dll에 최신 버전의 Matlab을 사용하지 않았습니다. 나는 Matlab 7.1에서 거의 독점적으로 일해 왔습니다 (4 세와 같습니다). 아마도 최신 버전이 더 잘 작동하지만 Matlab의 뒷면에있는 C ++ dll이 Windows XP를 블루 스크린으로 만들었을 때 두 가지 상황을 생각할 수 있습니다. 실수를 할 때마다 컴퓨터가 재부팅되면 디버그하십시오 ...

마지막으로, R 커뮤니티는 Matlab 커뮤니티보다 훨씬 더 빠른 속도로 더 많은 모멘텀으로 성장하고 있습니다. 또한 무료이기 때문에 Godforsaken flexlm 라이센스 관리자를 다루지 않아도됩니다.

참고 : 거의 모든 개발 과정은 현재 MCMC 알고리즘입니다. ggplot2를 사용하여 R에서 시각화하여 C ++에서 약 90 %를 생산합니다.

병렬 주석 업데이트 :

현재 MCMC 루틴을 병렬화하는 데 상당한 개발 시간이 소요됩니다 (제 박사 학위 논문입니다). Matlab의 병렬 도구 상자와 Star P의 솔루션을 사용했습니다 (이제 Microsoft 가 소유하고 있다고 생각합니다 -또 다른 도구가 엉망이되었습니다 ...) 병렬 도구 상자가 구성 악몽 이라는 것을 알았습니다. 모든 단일 클라이언트 노드에 대한 루트 액세스가 필요했습니다. 나는 그들이 그 작은 "버그"를 고쳤지만 여전히 엉망이라고 생각합니다. * 'p 솔루션은 우아하지만 프로파일 링이 어려운 것으로 나타났습니다. Jacket을 사용하지 않았지만 좋은 소식을 들었습니다. 또한 GPU 계산을 지원하는 최신 버전의 병렬 도구 상자도 사용하지 않았습니다.

R 병렬 패키지에 대한 경험이 거의 없습니다.

작업 분해 및 메모리 / 자원 할당에 대한 세밀한 제어가 가능한 C ++ 수준에서 병렬 코드가 발생해야한다는 것은 저의 경험이었습니다. 프로그램을 높은 수준으로 병렬화하려고 시도하면 코드를 사소하게 분해 할 수없는 경우 (더미 병렬화라고도 함) 가 아닌 경우에만 속도가 최소화 됩니다. 즉, OpenMP를 사용하여 C ++ 수준에서 단일 라인 을 사용하여 합리적인 속도 향상을 얻을 수 있습니다 .

#pragma omp parallel for

더 복잡한 체계에는 학습 곡선이 있지만 gpgpu 일이 실제로 진행되는 것을 좋아합니다. 올해 JSM을 기준으로 R에서 GPU 개발에 관해 이야기 한 소수의 사람들은 "심각한 발가락"이라고 만 말합니다. 그러나 언급 한 바와 같이, 나는 가까운 미래에 변화 할 최소한의 경험을 가지고 있습니다.


C ++의 경우 +1; C / C ++을 RI에 포함시키는 것은 매우 쉬운 일이지만 종종 내 코드를 래핑하고 R 내에서 실행합니다. 그런 다음 매개 변수를 전달하고 실시간 시각화를 수행하고 출력 파일 형식을 생각하지 않고 결과를 분명히 분석하는 것이 좋습니다.

잘 넣어; MC는 결국 C / C ++로 옮겨야합니다. R에 대해 언급할만한 충분한 경험이 없지만 Matlab 실행 파일에 의해 링크 된 것과 다른 버전의 공유 객체 라이브러리 (Linux의 경우)가 Matlab과 함께 C / C ++을 사용하는 데 어려움을 겪었습니다. 내 코드.
shabbychef

tibbits : openMP를 사용할 때 RN을 어떻게 생성합니까?
csgillespie

지금은 아니에요 내 MCMC 알고리즘의 가장 비싼 부분은 여러 가능성을 계산하는 것이므로 가능한 한 가장 많이 묶고 병렬로 계산하려고합니다. 그러나 모든 설정, RN 생성 (제안 용)은 단일 CPU 코어에서 수행됩니다. 병렬 RNG의 경우 Mersenne Twister의 DC 부터 시작 하지만 GPU 용 CUDA 로의 간단한 변환을 넘어서는 개인적으로 사용한 적이 없습니다 (실제로 연습).
M. Tibbits

15

솔직히 말해서, R과 관련하여 여기에서 묻는 질문은 R에 대한 편견 일 것입니다. R은 가장 많이 사용되는 태그입니다 .

내가하는 일

현재 작업 실습은 추가 속도 향상이 필요할 때 R을 사용하여 프로토 타입을 만들고 C를 사용하는 것입니다. 예전에는 특정 응용 프로그램에서 C로 매우 빠르게 전환해야했지만 R 멀티 코어 라이브러리는 해당 전환을 지연시키는 데 도움이되었습니다. 본질적으로, for사소한 변경과 동시에 루프를 실행합니다.

내 응용 프로그램은 매우 계산 집약적입니다.

추천

완벽하게 정직하기 위해서는 실제로 무엇을하고 싶은지에 달려 있습니다. 그래서 나는 당신의 질문 에이 진술에 내 대답을 기초로하고 있습니다.

감도 분석, 나중에 동적 모델을 사용하여 정적 모델을 구성하고 싶습니다. 나를 안내하는 좋은 라이브러리 / 알고리즘이 필요합니다

이 문제는 R에서 프로토 타이핑하고 필요할 때 C (또는 다른 컴파일 된 언어)를 사용하는 데 이상적이라고 생각합니다.

일반적으로 Monte-Carlo / sensitivity 분석에는 특별히 고급 통계 루틴이 포함되지 않습니다. 물론 다른 고급 기능이 필요할 수도 있습니다. 따라서 (더 많은 정보없이) 어떤 언어로든 분석을 수행 할 있지만 완전히 편향되어 있다고 생각합니다.


4
"현재 작업 방식은 R을 사용하여 추가 속도 향상이 필요할 때 C를 프로토 타입하고 사용하는 것"에 대한 부분이 마음에 듭니다. -그것은 저의 부적합한 자기 자신과 다음 사무실의 C ++ 개발자에 대한 직업 설명처럼 들립니다 ... 그리고 그것은 R, C / C ++ 및 통계 계산의 문제와 관련된 모든 상황을 실제로 포착한다고 생각합니다 .
Stephan Kolassa

9

나는 거의 독점적으로 사용하지만 R프로파일 러에 감탄합니다.Matlab .
프로그램 속도가 느리면 일반적으로 병목 현상의 위치를 ​​알고 싶습니다. Matlab의 프로파일 러는 코드의 각 라인에 소요되는 시간을 알려주기 때문에이를 달성하기위한 훌륭한 도구입니다.

적어도 나에게는 사용 Rprof이 비교할 수 없을 정도로 나쁘다. 어떤 호출이 병목 현상인지 알 수 없습니다. 를 사용 Rprof하면 각 라인에 소요되는 시간에 대한 정보를 얻을 수 없지만 각 기본 기능에 소요되는 시간에 대한 정보를 얻을 수 있습니다. 그러나 많은 동일한 기본 함수가 여러 다른 함수에 의해 호출됩니다.

R코드를 많이 프로파일 링해야한다는 것을 알고 있다면 (무료이기 때문에 강력하지만 ...) 권장하지만 Matlab이 더 좋습니다. 그리고 공정하게 말하면 Matlab에는 멀티 코어 및 병렬 컴퓨팅 툴박스가 있습니다 (비싸지 만).


4
@Henrik에 전적으로 동의합니다. 프로파일 링이 걱정된다면 Matlab은 뛰어난 프로파일 링 도구를 가지고 있습니다 (버전 7.1에서도 다시 돌아 왔습니다 !!). 반면에 Rprof는 많은 것을 요구합니다. for 루프에서 각 명령을 여러 번 실행하고 system.time다른 버전 간의 차이점을 비교하여 프로파일 링을 마칩니다 . 흥미로운 사례 연구가 있습니다
M. Tibbits

2

시뮬레이션에 상대적으로 정교한 기술이 필요한 경우 R이 필요합니다. 필요한 루틴이 R에서 가능하지만 반드시 MATLAB에서는 가능하지 않기 때문입니다.


2

내 생각에 Matlab은 못생긴 언어입니다. 아마도 지금까지 기본 인수와 명명 된 인수를 얻었을지 모르지만 온라인에서 찾은 많은 예제는 이전의 "6 개의 인수가있는 경우 이것, 그렇지 않으면 5 개의 인수가 있으면 이것과 저것 ..."이라고 명명됩니다. 문자열 (이름)과 값이 교대로있는 벡터 1970 년대가되어서 사용할 수 없습니다.

R은 문제가있을 수 있지만 오래되었지만, 미래 지향적이며 비교적 비교가 잘되지 않은 기반 (Scheme / Lisp)을 기반으로 구축되었습니다.

즉, Matlab은 루프 등으로 코딩하려는 경우 훨씬 빠릅니다. 디버깅 기능이 훨씬 뛰어납니다. 더 인터랙티브 한 그래픽. 반면에 코드 / 라이브러리를 문서화하는 데 필요한 것은 R에 비해 다소 웃기 며 Matlab을 사용하려면 돈을 지불해야합니다.

모든 IMO.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.