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

สมมติให้ว่าเรามีผลการทดลองอันหนึ่งที่มีการทำซ้ำอยู่ทั้งหมด 10 ครั้ง และในแต่ละครั้งเราก็จะได้ผลจากการวัดมาทั้งหมด 25 ค่า (t = 1,2,..,25) เมื่อเรานำว่าเขียนกราฟก็จะมีหน้าตาแบบนี้

noo1

และเราก็มีว่าโมเดลหรือแบบจำลองที่จะอธิบายผลการทดลองนี้คือ
y(t)=C0 exp(-ke*t)
ซึ่งถ้าเราทำการ fit ข้อมูลที่ได้จากการทดลองแต่ล่ะครั้งกับโมเดลนี้เราก็จะได้ค่า C0 และ ke สำหรับแต่ละการทดลอง เช่น ถ้าใช้ คำสั่ง NonlinearModelFit หรือ FindFit ก็จะได้

noo2

ลองแสดงผลจากการ fit กับข้อมูลจากแต่ละการทดลองด้วย Manipulate

noo3

หรือจะใช้ WinBUGS ในการหาก็ได้ครับ เช่น ให้ค่าที่ได้จากการวัดจากการทดลอง i ที่เวลา j (y[i,j]) มีการคลาดเคลื่อนจากโมเดล (mod[i,j]) เล็กน้อย (บวก/ลบ SD = 1/sqrt(tau))แบบnormal distribution
ลองดู WinBUGS code ด้านล่างนี้นะครับ โดยเรากำหนดให้ว่า ค่า C0 กับ ke ถูกสุ่มมาจาก uniform distribution ตาม range ที่กำหนดตาม code

noo4

ถ้าใครจะใช้ Mathematica เรียก WinBUGS อีกทีก็สามารถทำได้ตามนี้ครับ

noo5

โดยผลที่ได้ก็จะประมาณนี้ครับ

noo6

ใครที่สนใจเกี่ยวกับวิธีการที่ WinBUGS ใช้นั้นลองดูเรื่อง Bayesian Statistics , Markov Chain Monte Carlo (MCMC) ครับ

ซึ่งในการหาค่า C0 กับ ke แบบนี้เรามองว่าแต่ละการทดลองไม่มีขึ้นต่อกันหรือไม่สนใจว่า C0 หรือ ke จากแต่ละการทดลองมีความสัมพันธ์กันอย่างไร แต่ถ้าเรามองว่า C0 หรือ ke จากการทดลองทั้งหมดนี้มีความสัมพันธ์กันอย่างเช่น C0 หรือ ke จากแต่ละการทดลองอาจจะเป็นค่าที่สุ่มมาจาก normal distribution อันหนึ่งที่มีค่า mean หรือ sd อันหนึ่ง เราก็สามารถหาได้เช่น

noo7

โดยผลที่ได้ก็ตามนี้ครับ

noo8

ซึ่งวิธีคิดแบบข้างบนนี้เขาจะเรียกว่า multilevel หรือ hierachical คือเราสนใจว่าในระดับ population ของข้อมูล เจ้าตัวพารามิเตอร์ที่สนใจนั้นมันฟอร์มกันเป็น distribution อะไรหรือเปล่า หรือสุ่มมาจาก distribution อันใดอันหนึ่งหรือไม่ ซึ่งเราก็ต้องออกแบบโมเดลของเราตามข้อมูล หรือความสัมพันธ์ที่เรารู้ ถ้าสนใจเรื่องนี้ผมแนะนำหนังสือเล่มนี้ครับ

Data Analysis Using Regression and Multilevel/Hierarchical Models โดย Andrew Gelman และ Jennifer Hill

เดี๋ยวมาต่อ..