Apakah Matlab / oktaf atau R lebih cocok untuk simulasi monte carlo?

14

Saya mulai melakukan Monte Carlo di R sebagai hobi, tetapi akhirnya seorang analis keuangan menyarankan untuk bermigrasi ke Matlab. Saya seorang pengembang perangkat lunak yang berpengalaman. tapi seorang pemula Monte Carlo. Saya ingin membangun model statis dengan analisis sensitivitas, kemudian model dinamis. Perlu pustaka / algoritma yang baik yang membimbing saya.

Bagi saya tampaknya R memiliki perpustakaan yang sangat baik, dan saya menduga mathlab lebih disukai oleh programmer yang tidak berpengalaman karena bahasa seperti pascal yang mudah. Bahasa R didasarkan pada skema dan ini sulit untuk pemula, tetapi tidak untuk saya. Jika Matlab / Octave tidak memiliki keuntungan di sisi numerik / perpustakaan saya akan tetap dengan R.

Roland Kofler
sumber
2
R didasarkan pada Skema tetapi cukup baik dalam berpura-pura kepada para pemula bahwa itu agak berbasis C.
2
> Saya tidak akan memposting ini sebagai jawaban karena ada banyak orang yang lebih tahu tentang hal-hal ini daripada saya. Namun, saya pikir mengenai kecepatan Anda harus membedakan antara basis R dan programer campuran yang baik / paket besar. Seorang programmer yang baik dapat memanfaatkan beberapa alat dalam cran seperti multicore, GPUtools & magma (segera tetapi belum berguna untuk MCMC), Rcpp, ... untuk membuat kode yang cukup cepat. Saya tidak berpikir matlab pusat memiliki sesuatu yang sebanding dengan yang ditawarkan.
user603
@ kwak - Saya mungkin seharusnya memposting jawaban saya sebagai komentar juga. Maaf soal itu.
M. Tibbits
2
MT, itu gila - jawaban Anda bagus. Jika ada, kwak harus membuat jawaban yang tepat juga. Biarkan orang yang lebih berpengetahuan memilih atau menjawab sesuai keinginan mereka.
Matt Parker
Permintaan maaf sebelumnya untuk necropost. Paket keuangan GNU Octave octave.sourceforge.net/financial sekarang mendukung (pada 0.5.0) simulasi Monte Carlo. Ini secara signifikan lebih cepat daripada versi MATLAB karena kode ditulis tanpa loop. Untuk pembandingan (dibandingkan dengan MATLAB) dan tutorial, lihat parsiad.ca/post/simulate-sdes-in-gn-octave-financial-package . Saya juga harus mempublikasikan bias saya, karena saya adalah penulis metode ini.
parsiad

Jawaban:

17

Saya menggunakan keduanya. Saya sering membuat prototipe fungsi & algoritma di Matlab karena, seperti yang dinyatakan, lebih mudah untuk mengekspresikan suatu algoritma dalam sesuatu yang dekat dengan bahasa matematika murni.

R memang memiliki perpustakaan yang sangat baik. Saya masih mempelajarinya, tapi saya mulai meninggalkan Matlab di debu karena begitu Anda tahu R, itu juga cukup mudah untuk prototipe fungsi di sana.

Namun, saya menemukan bahwa jika Anda ingin algoritma berfungsi secara efisien dalam lingkungan produksi, yang terbaik adalah pindah ke bahasa yang dikompilasi seperti C ++. Saya memiliki pengalaman membungkus C ++ ke dalam Matlab dan R (dan unggul dalam hal ini), tetapi saya memiliki pengalaman yang lebih baik dengan R. Penafian: Menjadi seorang mahasiswa pascasarjana, saya belum menggunakan versi terbaru dari Matlab untuk dll saya, Saya telah bekerja hampir secara eksklusif di Matlab 7.1 (yang seperti 4 tahun). Mungkin versi yang lebih baru bekerja lebih baik, tapi saya bisa memikirkan dua situasi di atas kepala saya di mana C ++ dll di belakang Matlab menyebabkan Windows XP ke layar biru karena saya berjalan secara tidak tepat di luar batas array - masalah yang sangat sulit untuk debug jika komputer Anda reboot setiap kali Anda melakukan kesalahan itu ...

Terakhir, komunitas R tampaknya tumbuh jauh lebih cepat dan dengan momentum lebih banyak daripada yang dimiliki komunitas Matlab. Lebih lanjut, karena gratis, Anda juga tidak berurusan dengan manajer lisensi flexlm Godforsaken.

Catatan: Hampir semua perkembangan saya dalam algoritma MCMC sekarang. Saya melakukan sekitar 90% dalam produksi di C ++ dengan visualisasi dalam R menggunakan ggplot2.

Pembaruan untuk Komentar Paralel:

Cukup banyak waktu pengembangan saya sekarang dihabiskan untuk memparalelkan rutinitas MCMC (ini tesis PhD saya). Saya telah menggunakan toolbox paralel Matlab dan bintang P solusi (yang saya kira sekarang dimiliki oleh Microsoft ?? - Astaga satu lagi menelan ...) saya menemukan toolbox paralel menjadi konfigurasi mimpi buruk - ketika saya menggunakannya, diperlukan akses root ke setiap node klien tunggal. Saya pikir mereka telah memperbaiki "bug" kecil itu sekarang, tetapi masih berantakan. Saya menemukan solusi untuk menjadi elegan, tetapi seringkali sulit untuk profil. Saya belum pernah menggunakan Jaket , tetapi saya sudah mendengar hal-hal baik. Saya juga belum menggunakan versi terbaru dari kotak alat paralel yang juga mendukung perhitungan GPU.

Saya hampir tidak memiliki pengalaman dengan paket paralel R.

Sudah pengalaman saya bahwa kode paralelisasi harus terjadi pada tingkat C ++ di mana Anda memiliki granularity kontrol yang lebih baik untuk dekomposisi tugas dan alokasi memori / sumber daya. Saya menemukan bahwa jika Anda mencoba untuk memparalelkan program pada tingkat tinggi, Anda sering hanya menerima speedup minimal kecuali kode Anda mudah terurai (juga disebut dummy-parallelism). Yang mengatakan, Anda bahkan bisa mendapatkan speedup yang masuk akal menggunakan satu baris di level C ++ menggunakan OpenMP:

#pragma omp parallel for

Skema yang lebih rumit memiliki kurva belajar, tapi saya sangat suka kemana perginya gpgpu. Pada JSM tahun ini, beberapa orang yang saya ajak bicara tentang pengembangan GPU dalam R mengutipnya hanya sebagai "jari kaki di ujung yang dalam" begitu untuk berbicara. Tetapi seperti yang dinyatakan, saya memiliki pengalaman minimal - untuk berubah dalam waktu dekat.

M. Tibbits
sumber
+1 untuk C ++; sementara cukup mudah untuk menanamkan C / C ++ ke RI sering membungkus kode saya dan menjalankannya di dalam R - maka lebih baik untuk melewatkan parameter, melakukan visualisasi langsung dan jelas menganalisis hasil tanpa memikirkan format file output.
ditempatkan dengan baik; MC pada akhirnya akan meminta seseorang untuk pindah ke C / C ++. Saya tidak memiliki cukup pengalaman dalam R untuk berkomentar, tetapi telah mengalami sejumlah sakit kepala menggunakan C / C ++ dengan Matlab karena versi yang berbeda dari pustaka objek bersama (di Linux) ditarik oleh Matlab yang dapat dieksekusi daripada yang ingin saya tautkan dengan kode saya.
shabbychef
tibbits: Bagaimana Anda menghasilkan RN saat menggunakan openMP?
csgillespie
Saat ini, saya tidak. Bagian paling mahal dari algoritma MCMC saya adalah menghitung beberapa kemungkinan jadi saya mencoba untuk menggabungkan mereka sebaik mungkin dan menghitungnya secara paralel. Tetapi semua pengaturan, pembuatan RN (untuk proposal), dilakukan pada satu inti cpu. Untuk RNG paralel, saya akan mulai dengan DC untuk Twister Mersenne - tetapi saya tidak pernah secara pribadi menggunakannya di luar terjemahan sepele untuk CUDA untuk GPU (lebih sebagai latihan sebenarnya).
M. Tibbits
15

Sejujurnya, saya pikir setiap pertanyaan yang Anda tanyakan di sini tentang R vs ... akan bias terhadap R. Ingat bahwa R adalah tag yang paling banyak digunakan !

Apa yang saya lakukan

Praktek kerja saya saat ini adalah menggunakan R untuk prototipe dan menggunakan C ketika saya membutuhkan dorongan kecepatan ekstra. Dulu saya harus beralih ke C dengan sangat cepat (sekali lagi untuk aplikasi khusus saya), tetapi pustaka R multicore telah membantu menunda pergantian itu. Pada dasarnya, Anda membuat forloop berjalan secara paralel dengan perubahan sepele.

Saya harus menyebutkan bahwa aplikasi saya sangat intensif secara komputasi.

Rekomendasi

Sejujurnya, itu benar-benar tergantung pada apa yang ingin Anda lakukan. Jadi saya mendasarkan jawaban saya pada pernyataan ini dalam pertanyaan Anda.

Saya ingin membangun model statis dengan analisis sensitivitas, kemudian model dinamis. Perlu pustaka / algoritma yang baik yang membimbing saya

Saya membayangkan bahwa masalah ini idealnya cocok untuk membuat prototipe dalam R dan menggunakan C saat dibutuhkan (atau bahasa kompilasi lainnya).

Mengatakan bahwa, biasanya analisis sensitivitas Monte-Carlo / tidak melibatkan rutinitas statistik lanjutan - tentu saja mungkin diperlukan fungsionalitas lanjutan lainnya. Jadi saya pikir (tanpa informasi lebih lanjut) bahwa Anda dapat melakukan analisis Anda dalam bahasa apa pun, tetapi karena sangat bias, saya akan merekomendasikan R!

csgillespie
sumber
4
Saya suka bagian tentang "Praktek kerja saya saat ini adalah menggunakan R untuk prototipe dan menggunakan C ketika saya membutuhkan dorongan kecepatan ekstra." - Kedengarannya seperti deskripsi pekerjaan dari diri saya yang tidak layak dan pengembang C ++ di kantor sebelah ... dan saya pikir itu pada dasarnya menangkap setiap situasi yang melibatkan R, C / C ++ dan masalah dalam perhitungan statistik.
Stephan Kolassa
9

Meskipun saya hampir secara eksklusif menggunakan R, saya sangat mengagumi profiler di Matlab.
Ketika program Anda agak lambat, Anda biasanya ingin tahu di mana hambatannya. Profiler Matlab adalah alat yang hebat untuk mencapai hal ini karena memberi tahu Anda berapa banyak waktu yang dihabiskan pada setiap baris kode.

Setidaknya bagi saya, menggunakan Rprof jauh lebih buruk. Saya tidak tahu panggilan mana yang menjadi hambatan. Menggunakan RprofAnda tidak mendapatkan informasi tentang berapa banyak waktu yang dihabiskan di setiap baris, tetapi berapa banyak waktu yang dihabiskan untuk setiap fungsi primitif (atau lebih). Namun, banyak fungsi primitif yang sama dipanggil oleh banyak fungsi berbeda.

Walaupun saya merekomendasikan R(karena ini hebat: gratis, sangat kuat, ...) jika Anda tahu Anda harus sering membuat kode profil, Matlab jauh lebih baik. Dan agar adil, ada kotak alat komputasi multicore dan paralel di Matlab (meskipun, sangat mahal).

Henrik
sumber
4
Saya sepenuhnya setuju @ Henrik. Jika Anda khawatir tentang profil, Matlab memiliki alat profil yang sangat baik (bahkan kembali ke versi 7.1 !!). Di sisi lain, Rprof meninggalkan banyak hal yang diinginkan. Saya akhirnya membuat profil dengan mengeksekusi setiap perintah beberapa kali dalam for for loop dan membandingkan system.timeperbedaan antara versi yang berbeda. Ini adalah studi kasus yang menarik
M. Tibbits
2

Jika simulasi Anda akan melibatkan teknik yang relatif canggih, maka R adalah cara untuk melakukannya, karena kemungkinan bahwa rutinitas yang Anda perlukan akan tersedia di R, tetapi tidak harus di matlab.

PeterR
sumber
2

Menurut pendapat saya, Matlab adalah bahasa yang jelek. Mungkin sudah ada argumen default dan namanya argumen di intinya sekarang, tetapi banyak contoh yang Anda temukan online melakukan yang lama "Jika ada 6 argumen, ini, kalau tidak ada 5 argumen ini dan itu ..." dan argumen bernama hanya vektor dengan string bergantian (nama) dan nilai. Itu sangat tahun 1970-an sehingga saya tidak bisa menggunakannya.

R mungkin memiliki masalah, dan juga sudah tua, tetapi dibangun di atas fondasi (Skema / Lisp) yang berwawasan ke depan dan telah bertahan cukup baik dalam perbandingan.

Yang mengatakan, Matlab jauh lebih cepat jika Anda suka kode dengan loop, dll. Dan itu memiliki fasilitas debug yang jauh lebih baik. Dan grafik yang lebih interaktif. Di sisi lain, apa yang lolos untuk mendokumentasikan kode / pustaka Anda agak menggelikan dibandingkan dengan R dan Anda membayar sedikit untuk menggunakan Matlab.

Semua IMO.

Wayne
sumber