Matlab / octave veya R monte carlo simülasyonu için daha uygun mudur?


14

Monte Carlo'yu R'de hobi olarak yapmaya başladım, ancak sonunda bir finansal analist Matlab'a göç etmeyi önerdi. Deneyimli bir yazılım geliştiricisiyim. ama bir Monte Carlo acemi. Duyarlılık analizi ile statik modeller, daha sonra dinamik modeller oluşturmak istiyorum. Bana rehberlik edecek iyi kütüphanelere / algoritmalara ihtiyacınız var.

Bana göre R'nin mükemmel kütüphaneleri var ve sanırım paskal benzeri dil nedeniyle tecrübesiz programcılar tarafından mathlab tercih ediliyor. R dili şemaya dayanıyor ve bu yeni başlayanlar için zor, ama benim için değil. Matlab / Octave'nin sayısal / kütüphane tarafında avantajları yoksa, R ile yapışırdım.


2
R, Şema'ya dayanmaktadır, ancak yeni başlayanlara C tabanlı olduğunu iddia etmekte oldukça iyidir.

2
> Bunu cevap olarak vermeyeceğim, çünkü bu konularda benden daha bilgili birçok insan var. Ancak, hız ile ilgili olarak R tabanı ve mix iyi programcı / büyük paketler arasında ayrım yapmak zorunda olduğunu düşünüyorum. İyi bir programcı, oldukça hızlı bir kod oluşturmak için çok çekirdekli, GPUtools & magma (yakında ancak henüz MCMC için kullanışlı değil), Rcpp, ... gibi bazı araçlardan yararlanabilir. Ben matlab merkezi karşılaştırılabilir bir şey olduğunu sanmıyorum.
user603

@kwak - Muhtemelen cevabımı da yorum olarak göndermeliydim. Bunun için üzgünüm.
M. Tibbits

2
MT, bu delilik - cevabınız harika. Bir şey varsa, kwak da ona uygun bir cevap vermelidir. Daha bilgili olanların uygun gördükleri şekilde oy vermesine veya yanıtlamasına izin verin.
Matt Parker

Nekropost için şimdiden özür dileriz. GNU Octave finansal paketi octave.sourceforge.net/financial şimdi (0.5.0 itibariyle) Monte Carlo simülasyonunu destekliyor. Öyle anlamlı kodu olarak MATLAB versiyonu döngüler için olmadan yazılır daha hızlı. Kıyaslama (MATLAB ile karşılaştırıldığında) ve bir eğitim için bkz. Parsiad.ca/post/simulate-sdes-in-gnu-octave-financial-package . Bu yöntemlerin yazarı olduğum için önyargımı da duyurmalıyım.
parsiad

Yanıtlar:


17

Ben ikisini de kullanıyorum. Matlab'daki işlevleri ve algoritmaları sık sık prototiplerim çünkü belirtildiği gibi, saf bir matematiksel dile yakın bir şeyde bir algoritmayı ifade etmek daha kolaydır.

R'nin mükemmel kütüphaneleri var. Hala öğreniyorum, ama Matlab'ı toz içinde bırakmaya başlıyorum çünkü R'yi tanıdığınızda, oradaki fonksiyonları prototiplemek de oldukça kolay.

Ancak, algoritmaların bir üretim ortamında verimli bir şekilde çalışmasını istiyorsanız, C ++ gibi derlenmiş bir dile geçmek en iyisidir. C ++ 'ı hem Matlab'a hem de R'ye kaydırma deneyimim var (ve bu konuda excel), ancak R ile daha iyi bir deneyim yaşadım. Yasal Uyarı: Lisans öğrencisi olarak, dll'lerim için Matlab'ın son bir sürümünü kullanmadım, Neredeyse sadece Matlab 7.1'de (4 yaşında gibi) çalışıyorum. Belki de yeni sürümler daha iyi çalışır, ancak Matlab'ın arkasındaki bir C ++ dll'sinin Windows XP'nin mavi ekrana neden olduğu bir dizi sınırın dışında uygunsuz bir şekilde yürüdüğüm için kafamın üstündeki iki durumu düşünebilirim - çok zor bir sorun her hata yaptığınızda bilgisayarınız yeniden başlatılırsa hata ayıkla ...

Son olarak, R topluluğu Matlab topluluğundan daha hızlı ve daha fazla ivme kazanıyor gibi görünüyor. Dahası, ücretsiz olduğu için Godforsaken flexlm lisans yöneticisi ile de anlaşmazsınız.

Not: Hemen hemen tüm gelişimim MCMC algoritmalarında. C ++ 'da üretimde yaklaşık% 90'ı ggplot2 kullanarak R'de görselleştirme ile yapıyorum.

Paralel Yorumlar için Güncelleme:

Şu anda geliştirme süremin önemli bir kısmı MCMC rutinlerini paralelleştirmeye harcanıyor (bu benim doktora tezim). Matlab'ın paralel araç kutusunu ve Star P'nin çözümünü kullandım (sanırım şimdi Microsoft'a ait mi ?? - jeez başka bir tane gobbled ...) Paralel araç kutusunu bir yapılandırma kabusu olarak buldum - kullandığımda, her bir istemci düğümüne kök erişimi gerektiriyordu. Sanırım şu küçük "hatayı" düzelttiler, ama yine de bir karmaşa. * 'P çözümünün zarif olduğunu, ancak genellikle profilin zor olduğunu gördüm. Ben kullanmadıysanız ceket , ama iyi şeyler duydum. Ayrıca GPU hesaplamasını da destekleyen paralel araç kutusunun daha yeni sürümlerini kullanmadım.

R paralel paketlerle neredeyse hiç deneyimim yok.

Deneyimime göre, kod ayrıştırma, görev ayrıştırma ve bellek / kaynak ayırma için daha küçük bir ayrıntı düzeyine sahip olduğunuz C ++ düzeyinde gerçekleşmelidir. Programları yüksek düzeyde paralelleştirmeye çalışırsanız , kodunuz önemsiz bir şekilde ayrıştırılamazsa (aynı zamanda kukla paralellik olarak da bilinir) genellikle yalnızca minimum bir hızlanma elde edersiniz . Bununla birlikte, OpenMP kullanarak C ++ düzeyinde tek bir satır kullanarak makul hızlandırmalar elde edebilirsiniz :

#pragma omp parallel for

Daha karmaşık şemaların bir öğrenme eğrisi vardır, ancak gpgpu şeylerinin nereye gittiğini gerçekten seviyorum. JSM'den bu yıl, R'deki GPU gelişimi hakkında konuştuğum az sayıda insan, bunu söylemek gerekirse, sadece "derin uçtaki ayak parmakları" olduğunu söylüyor. Ancak belirtildiği gibi, yakın gelecekte değişmek için asgari deneyimim var.


C ++ için +1; C / C ++ 'yı RI'ye gömmek oldukça kolay olsa da, kodlarımı sarın ve R içinde çalıştırın - o zaman parametreleri geçirmek, canlı görselleştirme yapmak ve çıktı dosyası formatını düşünmeden sonuçları açıkça analiz etmek daha iyidir.

iyi koymak; MC sonunda C / C ++ 'a taşınmak için bir tane gerektirir. R yorum yapmak için yeterli deneyime sahip değilim, ama Matlab çalıştırılabilir tarafından bağlanmak istediğimden daha fazla paylaşılan nesne kütüphanelerinin (Linux altında) farklı sürümleri nedeniyle Matlab ile C / C ++ kullanarak bir dizi baş ağrısı yaşadım kodum.
shabbychef

tibbitler: openMP kullanırken RN'leri nasıl üretiyorsunuz?
csgillespie

Şimdi değilim. MCMC algoritmalarımın en pahalı kısımları birkaç olasılık hesaplıyor, bu yüzden onları mümkün olan en iyi şekilde bir araya getirmeye ve paralel olarak hesaplamaya çalışıyorum. Ancak tüm kurulum, RN üretimi (teklifler için), tek bir işlemci çekirdeği üzerinde yapılır. Paralel RNG'ler için Mersenne Twister için DC ile başlardım - ancak kişisel olarak GPU'lar için CUDA'ya önemsiz bir çevirinin ötesinde hiç kullanmadım (daha çok bir egzersiz olarak).
M. Tibbits

15

Dürüst olmak gerekirse, burada R vs ... hakkında sorduğunuz herhangi bir soru R'ye karşı önyargı olacaktır. R'nin en çok kullanılan etiket olduğunu unutmayın !

Ne yaptığım

Şu andaki çalışma pratiğim, ekstra bir hız artışına ihtiyaç duyduğumda C'yi prototiplemek ve kullanmaktır. Eskiden çok hızlı bir şekilde C'ye geçmek zorunda kalıyordum (yine benim özel uygulamalar için), ancak R çok çekirdekli kütüphaneler bu geçişin gecikmesine yardımcı oldu. Esasen, bir fordöngüyü önemsiz bir değişime paralel olarak çalıştırırsınız.

Başvurularımın hesaplama açısından çok yoğun olduğunu belirtmeliyim .

Öneri

Dürüst olmak gerekirse, gerçekten tam olarak ne yapmak istediğinize bağlıdır. Bu yüzden cevabımı sorunuzdaki bu ifadeye dayandırıyorum.

Duyarlılık analizi ile statik modeller, daha sonra dinamik modeller oluşturmak istiyorum. Bana rehberlik edecek iyi kütüphanelere / algoritmalara ihtiyacınız var

Bu sorunun, R'de prototip oluşturmaya ve gerektiğinde C'yi kullanmaya (veya derlenmiş başka bir dile) uygun olacağını düşünürüm.

Bununla birlikte, tipik olarak Monte-Carlo / duyarlılık analizi özellikle gelişmiş istatistiksel rutinleri içermez - elbette başka gelişmiş işlevsellik gerektirebilir. Bu yüzden (daha fazla bilgi olmadan) analizinizi herhangi bir dilde yapabileceğinizi düşünüyorum , ancak tamamen önyargılı, R'yi tavsiye ederim!


4
"Şu andaki çalışma pratiğim R'yi prototip oluşturmak ve ekstra hız artışı istediğimde C kullanmaktır." - bu benim zavallı değersiz benlik ve sonraki ofiste C ++ geliştiricileri iş tanımına gibi geliyor ... ve bunun gerçekten yakalar temelde düşünmek herhangi bir durum kapsayan R, C / C ++ ve istatistiksel hesaplama bir sorun.
Stephan Kolassa

9

Neredeyse tamamen kullanmama rağmen R, profil oluşturucuya gerçekten hayranım Matlab.
Programınız biraz yavaş olduğunda normalde darboğazın nerede olduğunu bilmek istersiniz. Matlab'ın profil oluşturucusu, bunu başarmak için harika bir araçtır, çünkü kodun her satırında ne kadar zaman harcandığını anlatır.

En azından benim için kullanmak Rprofkıyaslanamayacak kadar kötü. Hangi çağrının darboğaz olduğunu anlayamıyorum. Kullanarak Rprof, her bir satır için ne kadar zaman harcandığına dair bilgi almazsınız, ancak her ilkel işlev için ne kadar zaman harcandığına dair bilgi alırsınız. Bununla birlikte, aynı ilkel işlevlerin çoğuna birçok farklı işlev denir.

Her ne kadar tavsiye Retsem de (sadece harika olduğu için: ücretsiz, son derece güçlü, ...) kodunuzu çok fazla profillemeniz gerektiğini biliyorsanız, Matlab çok daha iyi. Ve adil olmak gerekirse, Matlab'da çok çekirdekli ve paralel hesaplama araç kutuları vardır (ancak, son derece pahalı).


4
@Henrik'e tamamen katılıyorum. Profil oluşturma konusunda endişeleriniz varsa, Matlab mükemmel bir profil oluşturma aracına sahiptir (7.1 sürümünde bile!). Diğer taraftan Rprof arzulanan bir çok şey bırakıyor. Her komutu bir for döngüsü içinde birkaç kez yürüterek ve system.timefarklı sürümler arasındaki farkı karşılaştırarak profil oluşturma işlemini bitiririm . İşte ilginç bir vaka çalışması
M. Tibbits

2

Simülasyonlarınız nispeten sofistike teknikler içerecekse, R gitmek için bir yoldur, çünkü ihtiyacınız olan rutinlerin R'de mevcut olması gerekir, ancak matlab'da olması gerekmez.


2

Bence Matlab çirkin bir dildir. Belki de şu ana kadar varsayılan argümanları ve isimlerinde argümanları almıştır, ancak çevrimiçi bulduğunuz birçok örnek eski "6 argüman varsa, bu, eğer bu ve bu ..." 5 argüman varsa ve dizeleri (isimleri) ve değerleri olan vektörler. O kadar 1970'lerde kullanamıyorum ki.

R'nin sorunları olabilir ve aynı zamanda eskidir, ancak ileriye bakan ve karşılaştırıldığında oldukça iyi duran bir temel üzerine (Scheme / Lisp) inşa edilmiştir.

Yani, döngüler, vb. İle kodlamak isterseniz Matlab çok daha hızlıdır ve çok daha iyi hata ayıklama olanaklarına sahiptir. Ve daha etkileşimli grafikler. Öte yandan, kodunuzu / kütüphanelerinizi belgelemek için geçen şey R'ye kıyasla oldukça gülünç ve Matlab'ı kullanmak için oldukça kuruş ödersiniz.

Tüm IMO.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.