Matlab / octaveまたはRは、モンテカルロシミュレーションに適していますか?


14

私は趣味としてRでモンテカルロを始めましたが、最終的には金融アナリストがMatlabに移行することを勧めました。私は経験豊富なソフトウェア開発者です。しかし、モンテカルロ初心者。感度分析を使用して静的モデルを作成し、後で動的モデルを作成したい。私を導く良いライブラリ/アルゴリズムが必要です。

私には、Rには優れたライブラリがあり、簡単なパスカルのような言語のために、未経験のプログラマーにはmathlabが好まれていると思われます。R言語はスキームに基づいており、これは初心者には難しいですが、私には難しいです。Matlab / Octaveに数値/ライブラリ側の利点がない場合、私はRに固執します。


2
RはSchemeに基づいていますが、初心者にはCに基づいているというふりをするのにかなり適しています。

2
>私よりもこれらのことに詳しい人が多いので、これを回答として投稿しません。ただし、速度に関しては、Rベースと優れたプログラマー/優れたパッケージの混在を区別する必要があると思います。優れたプログラマーは、マルチコア、GPUtools&magma(間もなくMCMCにはまだ有用ではない)、Rcppなどのcranのツールを活用して、非常に高速なコードを作成できます。matlab centralには、提供できるものはないと思います。
user603

@kwak-おそらく答えもコメントとして投稿すべきだった。ごめんなさい
M. Tibbits

2
MT、それはクレイジーです-あなたの答えは素晴らしいです。どちらかといえば、kwakも彼の適切な答えを出すべきです。それらのより知識のある投票または回答を、彼らが適切と思うようにしましょう。
マットパーカー

ネクロポストについて事前におApび申し上げます。GNU Octave金融パッケージoctave.sourceforge.net/financialは、モンテカルロシミュレーション(0.5.0以降)をサポートするようになりました。それは大幅にコードとしてMATLABバージョンはforループせずに書かれているよりも速いです。ベンチマーク(MATLABとの比較)およびチュートリアルについては、parsiad.ca / post / simulate-sdes-in-gnu-octave-financial-packageを参照してください。私はこれらの方法の著者であるため、自分のバイアスも公表する必要があります。
パーシアード

回答:


17

私は両方を使用します。前述のように、純粋な数学言語に近いものでアルゴリズムを表現する方が簡単であるため、Matlabで関数とアルゴリズムのプロトタイプを作成することがよくあります。

Rには優れたライブラリがあります。私はまだそれを学んでいますが、Rを知ってしまえば、Matlabで関数をプロトタイプ化するのもかなり簡単だから、Matlabを粉塵にしてしまい始めています。

ただし、運用環境内でアルゴリズムを効率的に機能させたい場合は、C ++などのコンパイル言語に移行するのが最善であることがわかります。私はC ++をMatlabとRの両方にラップした経験があります(そしてその点で優れています)が、Rについてはより良い経験がありました。 免責事項:卒業生であるため、Matlabの最新バージョンをdllに使用していませんが、私はほとんど独占的にMatlab 7.1(4歳のような)で働いてきました。おそらく新しいバージョンの方がうまく動作しますが、Matlabの後ろにあるC ++ dllがWindows XPをブルースクリーンにした2つの状況を頭の中で考えることができます。間違いを犯すたびにコンピューターが再起動するかどうかをデバッグします...

最後に、Rコミュニティは、Matlabコミュニティがこれまで持っていたよりもはるかに速く成長しているようです。さらに、無料であるため、Godforsaken flexlmライセンスマネージャーを使用する必要もありません。

注:私の開発のほとんどは、現在MCMCアルゴリズムで行われています。Rでの可視化とggplot2を使用して、C ++での生産で約90%を実行します。

並行コメントの更新:

現在、私の開発時間のかなりの部分がMCMCルーチンの並列化に費やされています(私の博士論文です)。Matlabの並列ツールボックスとStar Pのソリューションを使用しました(現在はMicrosoftが所有していると思いますか? -もう1つはがっかりしています...)並列ツールボックスは設定の悪夢であることがわかりました-使用したとき、すべての単一クライアントノードへのルートアクセスが必要でした。彼らは今ではその小さな「バグ」を修正したと思いますが、それでも混乱です。* 'pソリューションはエレガントであることがわかりましたが、多くの場合、プロファイルを作成するのは困難です。私はジャケットを使用していませんが、良いことを聞いています。また、GPU計算をサポートする最新バージョンの並列ツールボックスも使用していません。

R並列パッケージの経験はほとんどありません。

私の経験では、タスクの分解とメモリ/リソースの割り当てをより細かく制御できるC ++レベルでコードを並列化する必要があります。プログラムを高レベルで並列化しようとすると、コードが簡単に分解可能でない限り(ダミー並列処理とも呼ばれる)、最小限のスピードアップしか得られないことがよくあります。そうは言っても、OpenMPを使用してC ++レベルで単一行を使用すると、合理的なスピードアップを得ることができます。

#pragma omp parallel for

より複雑なスキームには学習曲線がありますが、私はgpgpuの状況が本当に好きです。今年のJSMの時点で、RでのGPU開発について話した数人の人は、いわば「深い終わりのつま先」にすぎないと言っています。しかし、述べたように、私は最小限の経験しか持っていません-近い将来に変化します。


C ++の場合は+1。C / C ++をRIに組み込むのは非常に簡単ですが、コードをラップしてR内で実行することがよくあります。その後、出力ファイル形式を考えずに、パラメーターを渡し、ライブビジュアライゼーションを行い、結果を明らかに分析する方が優れています。

よく置きます; MCは最終的にC / C ++に移行する必要があります。Rでコメントするだけの十分な経験はありませんが、C / C ++をMatlabで使用すると、共有オブジェクトライブラリ(Linuxの場合)の異なるバージョンが、Matlab実行可能ファイルにリンクするものとは異なるために多くの頭痛の種になりました私のコード。
みすぼらしいシェフ

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(または他のコンパイルされた言語)を使用するのに理想的に適していると思います。

通常、モンテカルロ/感度分析には特に高度な統計ルーチンは含まれません-もちろん、他の高度な機能が必要になる場合があります。したがって、(詳細情報なしで)分析はどの言語でも実行できると思いますが、完全に偏っているので、Rをお勧めします!


4
「現在の作業習慣は、Rを使用してプロトタイプを作成し、速度をさらに上げる必要があるときにCを使用する」という部分が気に入っています。-それは私の貧しい価値のない自己と次のオフィスのC ++開発者の仕事の説明のように聞こえます...そしてそれは基本的にR、C / C ++および統計計算の問題を含むあらゆる状況を本当に捉えていると思います。
ステファン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個の引数がある場合、this and that ...」と名前付き引数はちょうど文字列(名前)と値が交互になっているベクトル。それはとても1970年代なので、私は単にそれを使うことができません。

Rには問題があるかもしれませんし、古いものでもありますが、将来を見据えた基盤(Scheme / Lisp)に基づいて構築されており、比較するとかなり上手くいきました。

とは言っても、ループなどでコーディングしたい場合、Matlabははるかに高速です。また、デバッグ機能がはるかに優れています。よりインタラクティブなグラフィック。一方、あなたのコード/ライブラリを文書化するために合格することは、Rと比較してかなり笑いやすく、Matlabを使用するためにかなりの費用を払います。

すべてのIMO。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.