SakNgoi

Tag: R2WinBUGS

MCMC ใน R

ถ้าจะทำ Markov Chain Monte Carlo Monte Carlo (MCMC) ใน R นั้นนอกจากจะเขียนแล้วก็ยังมีโปรแกรมช่วยอีกหลายตัวครับ โดยโปรแกรมที่เป็นที่นิยมกันก็ได้แก่ WinBUGS, OpenBUGS, Jags, และก็ Stan ครับ โดย R มี package ที่ช่วยให้เราส่งผ่านหรือรับข้อมูล/โมเดล ระหว่าง R กับโปรแกรม MCMC เหล่านี้ครับ เช่น rjags, RStan, R2WinBUGS, R2OpenBUGS, BRugs ส่วน package ที่ช่วยในการวิเคราะห์ก็อย่างเช่น coda

เรื่องปวดหัว R structure vs WinBUGS structure

พอดีเขียนโปรแกรมใช้งาน WinBUGS  ผ่าน RLink ใน Mathematica แล้วเจอการส่งและรับค่าแปลกๆของตัวแปรประเภท structure ที่มีการเขียนหรือวางตำแหน่งของอาร์เรย์ไม่เหมือนกัน คือว่า จาก .Data ที่เป็นlistของตัวเลขจะถูกแปลงเป็นอาร์เรย์สองมิติโดยที่ใน Rจะใส่ตัวเลขลงในแต่ละcolumnหรือตามแนวตั้ง แต่WinBUGS จะใส่ตัวเลขตามแถวหรือแนวนอน ระวังกันด้วยเน้อ… http://www.openbugs.net/Manuals/ModelSpecification.html#FormattingOfData  

การ fit ข้อมูลหลายชุดกับโมเดล

สมมติให้ว่าเรามีผลการทดลองอันหนึ่งที่มีการทำซ้ำอยู่ทั้งหมด 10 ครั้ง และในแต่ละครั้งเราก็จะได้ผลจากการวัดมาทั้งหมด 25 ค่า (t = 1,2,..,25) เมื่อเรานำว่าเขียนกราฟก็จะมีหน้าตาแบบนี้ และเราก็มีว่าโมเดลหรือแบบจำลองที่จะอธิบายผลการทดลองนี้คือ y(t)=C0 exp(-ke*t) ซึ่งถ้าเราทำการ fit ข้อมูลที่ได้จากการทดลองแต่ล่ะครั้งกับโมเดลนี้เราก็จะได้ค่า C0 และ ke สำหรับแต่ละการทดลอง เช่น ถ้าใช้ คำสั่ง NonlinearModelFit หรือ FindFit ก็จะได้ ลองแสดงผลจากการ fit กับข้อมูลจากแต่ละการทดลองด้วย Manipulate หรือจะใช้ WinBUGS ในการหาก็ได้ครับ เช่น ให้ค่าที่ได้จากการวัดจากการทดลอง i ที่เวลา j (y[i,j]) มีการคลาดเคลื่อนจากโมเดล (mod[i,j]) เล็กน้อย (บวก/ลบ SD = 1/sqrt(tau))แบบnormal distribution ลองดู WinBUGS code ด้านล่างนี้นะครับ โดยเรากำหนดให้ว่า ค่า C0 […]

ใช้ RLink ช่วยในการทำ MCMC ด้วย WinBUGS

อันนี้เป็นอีกตัวอย่างที่ผมใช้ประโยชน์ RLink ใน Mathematica ครับ ผมมีแบบจำลองอันหนึ่งที่ผมเขียนด้วยภาษา Oberon (โบราณมาก; http://en.wikipedia.org/wiki/Oberon_(programming_language)) เพื่อใช้ใน WinBUGS อีกทีเพื่อทำ Markov Chain Monte Carlo (MCMC; http://en.wikipedia.org/wiki/Markov_chain_Monte_Carlo) ด้วยเทคนิค Gibbs Sampling (http://en.wikipedia.org/wiki/Gibbs_sampling) ในการประมาณค่าตัวแปรของแบบจำลองครับ ในการทำ MCMC เพื่อประมาณค่าตัวแปรของแบบจำลองกับข้อมูลแต่ละชุดของผมนี้จะใช้เวลาประมาณ 15 นาที ซึ่งค่อนข้างจะเสียเวลามากถ้าทำทีละครั้งกับข้อมูลทั้งหมดที่มี ดังนั้นผมเลยใช้ RLink ช่วย วิธีที่ผมทำก็คือใช้ R เรียก WinBUGS ด้วยแพ็คเกจ R2WinBUGS แล้วก็ใช้ RLink ช่วยเรียก R อีกทีครับ จากนั้นผมก็เอามาทำ parallel ใน Mathematica ครับ อันนี้เป็นตัวอย่าง code ครับ เราจะทำการโหลด RLink ไปที่ kernels ทุกตัว […]

ปัญหา R2WinBUGS เรียก WinBUGS ช้า

ปัญหาที่เจอคือหลังจากที่ใช้งาน WinBUGS ผ่าน R2WinBUGS ไปสักพักรู้สึกว่าตัว WinBUGS มันช้ากว่าที่ตัวมันเองจะเริ่มประมวนผล ก็พยามยามหาดูว่ามันเป็นเพราะอะไร สุดท้ายไปเจอว่าไฟล์ ชื่อ Registry.odc และ Registry_Rsave.odc ใน System\Rsrc ของ WinBUGS มันมีขนาดใหญ่มากประมาณ 16 GB ! ก็เลยตัดสินใจลบมันทิ้งทั้งคู่ แล้วลอง R2WinBUGS ใหม่ปรากฏว่ามันกลับมาเร็วเหมือนเดิมและเจ้าไฟล์ทั้งสองก็ถูกสร้างขึ้นมาใหม่ที่ขนาดเล็กกว่าเดิม ฉะนั้นใครที่เจอปัญหานี้ให้ลองดูที่ขนาดไฟล์ Registry ทั้งสองนี้ด้วยนะครับ

Back to top
%d bloggers like this: