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.
r
matlab
monte-carlo
Roland Kofler
sumber
sumber
Jawaban:
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:
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.
sumber
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
for
loop 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 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!
sumber
Meskipun saya hampir secara eksklusif menggunakan
R
, saya sangat mengagumi profiler diMatlab
.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. MenggunakanRprof
Anda 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).sumber
system.time
perbedaan antara versi yang berbeda. Ini adalah studi kasus yang menarikJika 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.
sumber
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.
sumber