Matlab / octave หรือ R เหมาะสำหรับการจำลอง monte carlo หรือไม่?


14

ฉันเริ่มทำ Monte Carlo ใน R เป็นงานอดิเรก แต่ในที่สุดนักวิเคราะห์ทางการเงินก็แนะนำให้ย้ายไปที่ Matlab ฉันเป็นนักพัฒนาซอฟต์แวร์ที่มีประสบการณ์ แต่ผู้เริ่มต้น Monte Carlo ฉันต้องการสร้างแบบจำลองสแตติกด้วยการวิเคราะห์ความไวและโมเดลไดนามิกในภายหลัง ต้องการไลบรารี่ / อัลกอริทึมที่ดี

สำหรับฉันดูเหมือนว่า R มีห้องสมุดที่ยอดเยี่ยมและฉันคิดว่า mathlab เป็นที่ต้องการของโปรแกรมเมอร์ที่ไม่มีประสบการณ์เนื่องจากภาษาปาสคาลที่ง่าย ภาษา R ขึ้นอยู่กับแบบแผนและมันยากสำหรับผู้เริ่มต้น แต่ไม่ใช่สำหรับฉัน ถ้า Matlab / Octave ไม่มีข้อได้เปรียบในด้านตัวเลข / ห้องสมุดฉันจะใช้ R


2
R ขึ้นอยู่กับ Scheme แต่ค่อนข้างดีในการแสร้งทำเป็นผู้เริ่มต้นว่ามันค่อนข้าง C

2
> ฉันจะไม่โพสต์สิ่งนี้เป็นคำตอบเพราะมีหลายคนที่มีความรู้ในสิ่งเหล่านี้มากกว่าฉัน อย่างไรก็ตามฉันคิดว่าเกี่ยวกับความเร็วที่คุณต้องแยกแยะระหว่าง R base กับการผสมโปรแกรมเมอร์ที่ดี / แพ็คเกจที่ยอดเยี่ยม โปรแกรมเมอร์ที่ดีสามารถใช้ประโยชน์จากเครื่องมือใน cran เช่น multicore, GPUtools & magma (ในไม่ช้า แต่ยังไม่เป็นประโยชน์สำหรับ MCMC), Rcpp, ... เพื่อสร้างรหัสที่รวดเร็ว ฉันไม่คิดว่าศูนย์กลาง MATLAB มีอะไรเทียบได้กับข้อเสนอ
user603

@kwak - ฉันอาจจะได้โพสต์คำตอบของฉันเป็นความคิดเห็นด้วย ขอโทษสำหรับเรื่องนั้น.
M. Tibbits

2
มอนแทนาที่บ้า - คำตอบของคุณยอดเยี่ยม หากมีสิ่งใด kwak ควรให้คำตอบที่ถูกต้องเช่นกัน ปล่อยให้ผู้โหวตและคำตอบที่มีความรู้มากขึ้น
Matt Parker

ขออภัยล่วงหน้าสำหรับเนื้อร้าย แพ็คเกจทางการเงินของ GNU Octave octave.sourceforge.net/financialขณะนี้สนับสนุน (จาก 0.5.0) การจำลอง Monte Carlo มันเป็นอย่างมีนัยสำคัญได้เร็วขึ้นกว่ารุ่น MATLAB เป็นรหัสที่ถูกเขียนโดยไม่ต้องสำหรับลูป สำหรับการเปรียบเทียบ (เมื่อเทียบกับ MATLAB) และการกวดวิชาให้ดูparsiad.ca/post/simulate-sdes-in-gnu-octave-financial-package ฉันควรเผยแพร่อคติของฉันด้วยเพราะฉันเป็นผู้เขียนวิธีการเหล่านี้
parsiad

คำตอบ:


17

ฉันใช้ทั้งสองอย่าง ฉันมักจะมีฟังก์ชั่นต้นแบบและอัลกอริทึมใน Matlab เพราะตามที่ระบุไว้มันง่ายกว่าที่จะแสดงอัลกอริทึมในสิ่งที่ใกล้เคียงกับภาษาคณิตศาสตร์ที่บริสุทธิ์

R มีห้องสมุดที่ยอดเยี่ยม ฉันยังคงเรียนรู้อยู่ แต่ฉันเริ่มทิ้ง Matlab ไว้ในฝุ่นเพราะเมื่อคุณรู้จัก R แล้วมันก็ค่อนข้างง่ายที่จะมีฟังก์ชั่นต้นแบบที่นั่น

อย่างไรก็ตามฉันพบว่าหากคุณต้องการให้อัลกอริทึมทำงานได้อย่างมีประสิทธิภาพภายในสภาพแวดล้อมการใช้งานจริงคุณควรย้ายไปใช้ภาษาที่คอมไพล์เช่น C ++ ฉันมีประสบการณ์ในการห่อ C ++ ทั้งใน Matlab และ R (และ excel สำหรับเรื่องนั้น) แต่ฉันเคยมีประสบการณ์ที่ดีกว่ากับ R. Disclaimer: ในฐานะนักเรียนที่จบฉันไม่ได้ใช้ Matlab รุ่นล่าสุดสำหรับ DLLs ของฉัน ฉันทำงานเกือบเฉพาะใน Matlab 7.1 (ซึ่งเหมือน 4 ปี) อาจเป็นรุ่นที่ใหม่กว่าทำงานได้ดีขึ้น แต่ฉันคิดว่าสองสถานการณ์นอกหัวของฉันที่ C ++ dll ที่ด้านหลังของ Matlab ทำให้ Windows XP เป็นหน้าจอสีน้ำเงินเพราะฉันเดินนอกขอบเขตอาร์เรย์ที่ไม่เหมาะสม - เป็นปัญหาที่ยากมาก แก้ไขปัญหาหากคอมพิวเตอร์ของคุณรีบูตทุกครั้งที่คุณทำผิดพลาดนั่น ...

สุดท้ายชุมชน R ดูเหมือนจะเติบโตเร็วกว่ามากและมีแรงผลักดันมากกว่าชุมชน Matlab ที่เคยมีมา เพิ่มเติมได้ฟรีคุณยังไม่ได้จัดการกับ Godforsaken flexlm manager manager

หมายเหตุ: การพัฒนาของฉันเกือบทั้งหมดอยู่ในอัลกอริทึม MCMC ในขณะนี้ ฉันทำประมาณ 90% ในการผลิตใน C ++ ด้วยการสร้างภาพใน R โดยใช้ ggplot2

อัปเดตสำหรับความคิดเห็นแบบขนาน:

จำนวนเวลาที่ใช้ในการพัฒนาของฉันตอนนี้ถูกใช้ไปกับการทำ MCMC แบบขนาน (เป็นวิทยานิพนธ์เอกของฉัน) ฉันได้ใช้กล่องเครื่องมือแบบขนานของ Matlab และโซลูชันของ Star P (ซึ่งตอนนี้ฉันเดาว่าเป็นของMicrosoft ?? - jeez อีกอันถูกกลืน ... ) ฉันพบกล่องเครื่องมือแบบขนานนั้นเป็นฝันร้ายของการกำหนดค่า- เมื่อฉันใช้มัน จำเป็นต้องเข้าถึงรูทไปยังโหนดไคลเอ็นต์ทุกโหนด ฉันคิดว่าพวกเขาได้แก้ไขข้อผิดพลาดเล็ก ๆ น้อย ๆ ตอนนี้ แต่ยังคงเป็นระเบียบ ฉันพบวิธีแก้ปัญหา * ที่จะสวย แต่มักจะยากที่จะโปรไฟล์ ฉันไม่ได้ใช้แจ็คเก็ตแต่ฉันได้ยินสิ่งที่ดี ฉันยังไม่ได้ใช้กล่องเครื่องมือแบบขนานรุ่นล่าสุดที่รองรับการคำนวณ GPU อีกด้วย

ฉันแทบไม่มีประสบการณ์กับแพ็คเกจ R ขนาน

เป็นประสบการณ์ของฉันที่โค้ดขนานจะต้องเกิดขึ้นในระดับ C ++ ที่คุณมีการควบคุมอย่างละเอียดยิ่งขึ้นสำหรับการแยกย่อยงานและการจัดสรรหน่วยความจำ / ทรัพยากร ฉันพบว่าหากคุณพยายามที่จะทำให้ขนานโปรแกรมในระดับสูงคุณมักจะได้รับการเร่งความเร็วน้อยที่สุดเว้นแต่ว่ารหัสของคุณจะย่อยสลายเล็กน้อย (หรือเรียกว่าดัมมี่ - ขนาน) ที่กล่าวว่าคุณสามารถรับความเร็วที่เหมาะสมโดยใช้บรรทัดเดียวที่ระดับ C ++ โดยใช้ OpenMP:

#pragma omp parallel for

แผนการที่ซับซ้อนมากขึ้นมีช่วงการเรียนรู้ แต่ฉันชอบสิ่งที่ gpgpu กำลังเกิดขึ้น ในฐานะของ JSM ในปีนี้มีเพียงไม่กี่คนที่ฉันได้พูดคุยเกี่ยวกับการพัฒนา GPU ใน R อ้างว่าเป็นเพียง "นิ้วเท้าที่อยู่ลึกที่สุด" เพื่อพูด แต่ตามที่ระบุไว้ฉันมีประสบการณ์น้อยที่สุด - การเปลี่ยนแปลงในอนาคตอันใกล้


+1 สำหรับ C ++; ในขณะที่มันค่อนข้างง่ายที่จะฝัง C / C ++ ไปยัง RI มักจะห่อรหัสของฉันและเรียกใช้พวกเขาใน R - แล้วมันก็ดีกว่าที่จะผ่านพารามิเตอร์ทำวิชวลไลเซชันและวิเคราะห์ผลลัพธ์โดยไม่ต้องคิดว่า

ใส่กัน; ในที่สุด MC จะต้องใช้หนึ่งเพื่อย้ายไปที่ C / C ++ ฉันไม่มีประสบการณ์เพียงพอในการแสดงความคิดเห็น แต่มีอาการปวดหัวจำนวนมากที่ใช้ C / C ++ กับ Matlab เนื่องจากไลบรารีวัตถุที่ใช้ร่วมกันรุ่นต่าง ๆ (ภายใต้ Linux) ถูกดึงโดย Matlab ที่ปฏิบัติการได้มากกว่าสิ่งที่ฉันต้องการเชื่อมโยงด้วย รหัสของฉัน
shabbychef

เคล็ดลับ: คุณสร้าง RN ได้อย่างไรเมื่อใช้ openMP
csgillespie

ตอนนี้ฉันไม่ได้ ชิ้นส่วนที่แพงที่สุดของอัลกอริทึม MCMC ของฉันกำลังคำนวณโอกาสหลายอย่างดังนั้นฉันจึงพยายามรวบรวมพวกเขาให้ดีที่สุดเท่าที่จะทำได้และคำนวณในแบบคู่ขนาน แต่การตั้งค่าทั้งหมด, การสร้าง RN (สำหรับข้อเสนอ), ทำบนซีพียูคอร์เดี่ยว สำหรับ RNG แบบขนานฉันจะเริ่มต้นด้วยDCสำหรับ Mersenne Twister แต่ฉันไม่เคยใช้มันเกินกว่าการแปลเล็กน้อยเพื่อ CUDA สำหรับ GPU (มากกว่าการออกกำลังกายจริงๆ)
M. Tibbits

15

พูดตามตรงฉันคิดว่าคำถามใด ๆ ที่คุณถามเกี่ยวกับ R vs ... จะมีอคติต่อ R โปรดจำไว้ว่า R เป็นแท็กที่ใช้บ่อยที่สุด!

สิ่งที่ฉันทำ

การปฏิบัติงานปัจจุบันของฉันคือการใช้ R เพื่อต้นแบบและใช้ C เมื่อฉันต้องการความเร็วที่เพิ่มขึ้นเป็นพิเศษ มันเคยเป็นว่าฉันจะต้องเปลี่ยนเป็น C อย่างรวดเร็ว (อีกครั้งสำหรับแอปพลิเคชันเฉพาะของฉัน) แต่ไลบรารีR multicoreได้ช่วยชะลอการสลับนั้น โดยพื้นฐานแล้วคุณจะต้องforวนรอบแบบขนานกับการเปลี่ยนแปลงเล็กน้อย

ฉันควรพูดถึงว่าแอปพลิเคชันของฉันมีความเข้มข้นสูงมาก

คำแนะนำ

การซื่อสัตย์อย่างสมบูรณ์นั้นขึ้นอยู่กับสิ่งที่คุณต้องการทำ ดังนั้นฉันจึงใช้คำตอบของฉันในข้อความนี้ในคำถามของคุณ

ฉันต้องการสร้างแบบจำลองสแตติกด้วยการวิเคราะห์ความไวและโมเดลไดนามิกในภายหลัง ต้องการไลบรารี่ / อัลกอริทึมที่ดี

ฉันคิดว่าปัญหานี้จะเหมาะกับการสร้างต้นแบบใน R และการใช้ C เมื่อต้องการ (หรือภาษาที่คอมไพล์อื่น ๆ )

เมื่อบอกว่าโดยทั่วไปแล้วการวิเคราะห์ Monte-Carlo / ความไวไม่ได้เกี่ยวข้องกับขั้นตอนทางสถิติขั้นสูงโดยเฉพาะ - แน่นอนว่ามันอาจจำเป็นต้องใช้ฟังก์ชั่นขั้นสูงอื่น ๆ ดังนั้นฉันคิดว่า (หากไม่มีข้อมูลเพิ่มเติม) ที่คุณสามารถทำการวิเคราะห์ของคุณในภาษาใด ๆ แต่การมีอคติอย่างสมบูรณ์ฉันจะแนะนำ R!


4
ฉันชอบส่วนที่เกี่ยวกับ "การทำงานในปัจจุบันของฉันคือการใช้ R เพื่อต้นแบบและใช้ C เมื่อฉันต้องการความเร็วที่เพิ่มขึ้นเป็นพิเศษ" - ดูเหมือนว่ารายละเอียดงานของตัวเองที่ไร้ค่าไม่ดีของฉันและผู้พัฒนา C ++ ในสำนักงานต่อไป ... และฉันคิดว่ามันจะจับภาพสถานการณ์ใด ๆ ที่เกี่ยวข้องกับ R, C / C ++ และปัญหาในการคำนวณเชิงสถิติ
Stephan Kolassa

9

แม้ว่าฉันจะใช้เป็นพิเศษ แต่Rฉันชื่นชมผู้สร้างโปรไฟล์Matlabจริงๆ
เมื่อโปรแกรมของคุณช้าคุณมักต้องการทราบว่าคอขวดอยู่ตรงไหน ผู้สร้างโปรไฟล์ของ Matlab เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการบรรลุเป้าหมายนี้เพราะจะบอกคุณว่าใช้เวลานานเท่าใดในแต่ละบรรทัดของโค้ด

อย่างน้อยสำหรับฉันแล้วการใช้Rprofนั้นแย่กว่ากันมาก ฉันไม่สามารถทราบได้ว่าการโทรแบบใดเป็นคอขวด การใช้Rprofคุณจะไม่ได้รับข้อมูลเกี่ยวกับเวลาที่ใช้ไปกับแต่ละบรรทัด แต่จะใช้เวลาเท่าใดในแต่ละฟังก์ชันดั้งเดิม (หรือมากกว่านั้น) อย่างไรก็ตามฟังก์ชั่นดั้งเดิมดั้งเดิมจำนวนมากถูกเรียกใช้โดยฟังก์ชั่นที่แตกต่างกันมากมาย

แม้ว่าฉันจะแนะนำR(เพราะมันยอดเยี่ยมมาก: ฟรี, ทรงพลังมาก, ... ) หากคุณรู้ว่าคุณต้องใส่รหัสของคุณเป็นจำนวนมาก Matlab จะดีกว่านี้ และเพื่อความเป็นธรรมมีกล่องเครื่องมือการคำนวณแบบมัลติคอร์และแบบขนานใน Matlab (แม้ว่าจะมีราคาแพงมาก)


4
ฉันเห็นด้วยอย่างสมบูรณ์ @Henrik หากคุณกังวลเกี่ยวกับการทำโปรไฟล์ Matlab มีเครื่องมือการทำโปรไฟล์ที่ยอดเยี่ยม (แม้จะย้อนกลับไปในเวอร์ชั่น 7.1 !!) Rprof ในทางกลับกันใบมากที่ต้องการ ฉันสิ้นสุดการทำโปรไฟล์โดยดำเนินการแต่ละคำสั่งหลายครั้งในการวนซ้ำและเปรียบเทียบความsystem.timeแตกต่างระหว่างเวอร์ชันที่แตกต่างกัน นี่คือกรณีศึกษาที่น่าสนใจ
M. Tibbits

2

หากการจำลองของคุณจะเกี่ยวข้องกับเทคนิคที่ค่อนข้างซับซ้อนดังนั้น R เป็นวิธีที่จะไปเพราะเป็นไปได้ว่ากิจวัตรที่คุณต้องใช้จะมีอยู่ใน R แต่ไม่จำเป็นต้องใช้ใน MATLAB


2

ในความคิดของฉัน Matlab เป็นภาษาที่น่าเกลียด บางทีมันอาจได้รับอาร์กิวเมนต์เริ่มต้นและตั้งชื่ออาร์กิวเมนต์ในแกนกลางแล้ว แต่ตัวอย่างมากมายที่คุณพบว่าออนไลน์ทำแบบเก่า "ถ้ามี 6 ข้อโต้แย้งนี่คือสิ่งอื่นถ้ามี 5 ข้อโต้แย้งนี้และ ... " และอาร์กิวเมนต์ที่ตั้งชื่อเป็นเพียง เวกเตอร์ที่มีสตริงการสลับ (ชื่อ) และค่า นั่นคือ 1970's ที่ฉันไม่สามารถใช้มัน

R อาจมีปัญหาและยังเก่า แต่ก็ถูกสร้างขึ้นบนรากฐาน (Scheme / Lisp) ที่เป็นการคาดการณ์ล่วงหน้าและมีการเปรียบเทียบค่อนข้างดี

Matlab นั้นเร็วกว่ามากถ้าคุณชอบที่จะเขียนโค๊ดด้วยลูปเป็นต้นและมันก็มีการดีบั๊กที่ดีกว่ามาก และกราฟิกเชิงโต้ตอบมากขึ้น ในทางตรงกันข้ามสิ่งที่ผ่านไปสำหรับการบันทึกรหัส / ไลบรารีของคุณค่อนข้างน่าหัวเราะเมื่อเทียบกับ R และคุณจ่ายเงินเพนนีให้ใช้ Matlab

IMO ทั้งหมด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.