วันพฤหัสบดีที่ 8 มีนาคม พ.ศ. 2561

การคำนวณเชิงตัวเลข (๒๐) การปรับเรียบ (Smoothing) ข้อมูล (ตอนที่ ๑) MO Memoir : Thursday 8 March 2561

ใน Memoir ฉบับวันอังคารที่ ๖ มีนาคมที่ผ่านมา (เรื่อง "รู้ทันนักวิจัย (๙) อยากให้มีพีคก็จัดให้ได้") ผมได้เกริ่นเอาไว้ตอนต้นว่า "ชนิดของอัลกอริธึมทางคณิตศาสตร์ที่ใช้ในการปรับแต่งข้อมูลดิบ ก็สามารถตกแต่งการแปลผลว่าจะให้ออกไปในทิศทางไหนก็ได้" มาถึง Memoir ฉบับนี้ก็เลยอยากจะขอยกตัวอย่างบางตัวอย่างให้ดู คือการปรับข้อมูลที่เต็มไปด้วยสัญญาณรวบกวน (Noise) ให้ราบเรียบขึ้น
 
เทคนิคที่เรียบง่ายที่สุดในการปรับข้อมูลให้เรียบขึ้นคือเทคนิคการหาค่าเฉลี่ยเคลื่อนที่ (Moving average) ในเทคนิคนี้จะใช้จุดข้อมูลที่เป็นจำนวนเลขคี่ กล่าวคือสมมุติว่าเราใช้จุดข้อมูล (x0, y0), (x1, y1) และ (x2, y2) ค่าเฉลี่ยปรับแก้ที่จุด x1 (หรือ y1,ave) จะเท่ากับ (y0 + y1 + y2)/3 และในทำนองเดียวกัน ค่าเฉลี่ยปรับแก้ที่จุด x2 (หรือ y2,ave) จะเท่ากับ (y1 + y2 + y3)/3 การปรับเรียบจะทำอย่างนี้ไปเรื่อย ๆ จนกระทั่งถึงจุด (n-1) โดยเราจะสูญเสียค่าที่จุด x0 และ xn ไป
 
ถ้าเราคิดว่าใช้แค่ 3 จุดข้อมูลยังไม่พอ อยากจะใช้มากขึ้น ลำดับถัดไปก็คือการใช้จุดข้อมูล 5 จุด ในที่นี้จะใช้จุดข้อมูล (x0, y0), (x1, y1), (x2, y2), (x3, y3) และ (x4, y4) เพื่อคำนวณหาค่าเฉลี่ยที่จุด x2 (หรือ y2,ave) ซึ่งเท่ากับ (y0 + y1 + y2+ y3 + y4)/5 และในทำนองเดียวกัน ค่าเฉลี่ยปรับแก้ที่จุด x3 (หรือ y3,ave) จะเท่ากับ (y1 + y2 + y3 + y4 + y5)/5 การปรับเรียบจะทำอย่างนี้ไปเรื่อย ๆ จนกระทั่งถึงจุด (n-2) โดยเราจะสูญเสียค่าที่จุด x0, x1, xn-1 และ xn ไป ยิ่งเราใช้จุดในการหาค่าเฉลี่ยแต่ละจุดมากขึ้น เราก็จะยิ่งสูญเสียข้อมูลด้านหัวและท้ายมากขึ้น ตารางที่ ๑ และรูปที่ ๑ แสดงตัวอย่างการเฉลี่ยค่าข้อมูลด้วยการใช้จุดข้อมูลต่าง ๆ กัน

การลดขนาดของสัญญาณรบกวนหรือ noise นั้นทำได้ 2 วิธีการด้วยกัน วิธีการแรกที่ควรต้องทำก่อนและทำออกมาให้ดีที่สุดเท่าที่จะทำได้คือปรับแต่งการวัด ไม่ว่าจะด้วยติดตั้งอุปกรณ์ให้เหมาะสม การเตรียมตัวอย่าง หรือขั้นตอนการวิเคราะห์ ทั้งนี้เพื่อให้ได้ค่าเฉลี่ยของ noise ออกมาให้น้อยที่สุดก่อน จากนั้นจึงค่อยใช้วิธีการที่สองคือการใช้อัลกอริธึมทางคณิตศาสตร์เข้าไปปรับแต่งต่อ เพราะถ้าข้อมูลดิบที่ได้จากการวัดนั้นออกมาไม่ดี ผลการปรับแต่ง (ที่อาจออกมาดูดี) ที่ได้จากการใช้วิธีการทางคณิตศาสตร์ก็สามารถนำไปสู่การแปลผลที่ผิดได้

ตารางที่ ๑ ค่า y คือข้อมูลที่มีสัญญาณรบกวน และนำมาทำการปรับเรียบด้วยการใช้จำนวนจุดต่าง ๆ กัน
x
y
3 pt
5 pt
7 pt
9 pt
0
0.7196841235




0.05
0.7953104631
0.5671218253



0.1
0.1863708893
0.5519866722
0.6385706628


0.15
0.6742786641
0.5592862425
0.6805164395
0.7148009915

0.2
0.8172091742
0.8069669485
0.6977224707
0.702233973
0.7482406044
0.25
0.929413007
0.8759876001
0.7867912918
0.7455958361
0.7332221809
0.3
0.8813406189
0.8141562069
0.8717042599
0.8024740394
0.7284413175
0.35
0.6317149946
0.8706330394
0.8251660875
0.8136174721
0.8075398805
0.4
1.0988435046
0.7716922706
0.7897400247
0.8251958694
0.8268821397
0.45
0.5845183126
0.8118815032
0.793123492
0.8136167251
0.8405333632
0.5
0.7522826926
0.7450196536
0.8364522925
0.8220066633
0.8428139483
0.55
0.8982579557
0.8329665484
0.8046976287
0.8674671316
0.8395755888
0.6
0.8483589968
0.8955623795
0.8777816208
0.8322316858
0.8527556384
0.65
0.9400701859
0.9127891519
0.897764159
0.8559198469
0.8558471708
0.7
0.9499382729
0.9140679475
0.868179656
0.9094033617
0.9187006657
0.75
0.8521953838
0.8508230325
0.9238413159
0.945395049
0.9323417236
0.8
0.7503354407
0.9097327069
0.9658672321
0.9492083656
0.9752135077
0.85
1.1266672961
1.0090675012
0.9508900201
0.9983560552

0.9
1.1501997669
1.0506397587
1.0372717459


0.95
0.8750522131
1.1031186643



1
1.2841040128






รูปที่ ๑ ข้อมูลจากตารางที่ ๑ เมื่อนำมาทำการปรับเรียบข้อมูลด้วยการใช้จำนวนจุดต่าง ๆ กัน

เพื่อให้เห็นภาพจะขอยกตัวอย่างโดยสมมุติว่าได้ทำการวัดค่าสัญญาณ y ในช่วง x ตั้งแต่ 0 ถึง 6 สัญญาณดังกล่าวประกอบด้วยพีคที่มีการกระจายตัวแบบ Gaussian จำนวน 2 พีคด้วยกัน โดยพีคแรกมีศูนย์กลางอยู่ที่ตำแหน่ง x = 2 และแอมพลิจูดเท่ากับ 1.0 พีคที่สองมีศูนย์กลางอยู่ที่ตำแหน่ง x = 4 และแอมพลิจูดเท่ากับ 1.5 กราฟทั้งสองมีค่าครึ่งหนึ่งของความกว้างที่ตำแหน่งครึ่งหนึ่งของความสูงสูงสุดเท่ากับ 1 หน่วย (hwhm - half width at half maximum) กรณีแรกสุดเป็นการจำลองวัดที่กระทำโดยมีช่วงระยะห่างระหว่างจุดข้อมูล Δx = 0.05 กราฟนี้คือเส้น Signal สีน้ำเงินในรูปที่ ๒ (บน)
 
ขั้นตอนต่อไปเป็นการจำลองการใส่ noise เข้าไปค่า signal เพื่อสร้างแบบจำลองค่า signal ที่มี noise รบกวน (เส้น S + N) ด้วยการใช้ฟังก์ชันสุ่มตัวเลขแล้วนำตัวเลขที่สุ่มได้นั้นบวกเข้าไปกับค่า singal การสร้างแบบจำลองสัญญาณที่มี noise รบกวนนี้ทดลองทำ 2 กรณีด้วยกัน โดยกรณีแรกเป็นการจำลองการวัด 2 ครั้ง โดยที่แต่ละจุด x จะให้มี noise ที่เป็นบวก 1 ครั้งและ noise ที่เป็นลบ 1 ครั้ง แล้วนำค่าทั้งสองมาเฉลี่ยเป็นค่า y (เส้น (S + N) ในรูปที่ ๒ (บน)) กรณีที่สองเป็นการจำลองการวัด 10 ครั้ง โดยที่แต่ละจุด x จะให้มี noise ที่เป็นบวก 5 ครั้งและ noise ที่เป็นลบ 5 ครั้ง แล้วนำค่าทั้งสองมาเฉลี่ยเป็นค่า y (เส้น (S + N) ในรูปที่ ๒ (ล่าง))

ถัดไปจะเป็นการทดลองการปรับเรียบข้อมูล (S + N) ด้วยการใช้จุดข้อมูลเฉลี่ย 5, 7 และ 9 จุด (กราฟเส้น 5 pt, 7 pt และ 9 pt ตามลำดับ) ในที่นี้เพื่อให้เห็นภาพผลการปรับเรียบชัดเจนขึ้นจึงได้ทำการเลี่อนกราฟแต่ละเส้นให้สูงขึ้นทีละ 0.5 หน่วย (เพราะถ้าไม่เลื่อนก็จะเห็นมันซ้อนทับกันมั่วไปหมดจนแยกไม่ออก) จากผลการคำนวณจะเห็นว่าเมื่อใช้จำนวนจุดข้อมูลเฉลี่ยมากขึ้น กราฟที่ได้ก็จะมีความเรียบมากขึ้นด้วย 


รูปที่ ๒ เส้นกราฟสีน้ำเงินล่างสุด (Signal) คือค่าสัญญาณที่ไม่มีสัญญาณรบกวน เส้นกราฟสีส้มที่อยู่ถัดไป (S + N) คือสัญญาณที่มีสัญญาณรบกวน (กราฟสีน้ำเงิน + noise) เส้นกราฟ 5pt, 7 pt และ 9 pt ได้จากการนำเอาค่า (S + N) นั้นไปทำการปรับเรียบด้วยการใช้จุดข้อมูล 5, 7 และ 9 จุดตามลำดับ รูปบนเป็นกรณีของการจำลองค่าการวัด 2 ครั้ง ที่การวัดแต่ละครั้งนั้นมี noise รบกวน (ให้เป็น noise ทางบวก 1 ครั้งและ noise ทางลบ 1 ครั้ง) แล้วนำค่าที่วัดได้นั้นมาเฉลี่ย ส่วนรูปร่างเป็นกรณีของการจำลองค่าการวัด 10 ครั้ง ที่การวัดแต่ละครั้งนั้นมี noise รบกวน (ให้เป็น noise ทางบวก 5 ครั้ง) และ noise ทางลบ 5 ครั้ง) แล้วนำค่าที่วัดได้นั้นมาเฉลี่ย จะเห็นว่าเมื่อทำการวัดโดยมีจำนวนครั้งมากขึ้น ขนาดของ noise ที่ปรากฏให้เห็นจะลดลง ในที่นี้แต่ละจุด x ห่างกัน 0.05 หน่วย กราฟแต่ละเส้นมีการขยับขึ้น 0.5 หน่วยเพื่อไม่ให้ซ้อนทับกัน

ส่วนรูปที่ ๓ เป็นการทดลองแบบเดียวกันกับรูปที่ ๒ แต่เป็นการจำลองวัดที่กระทำโดยมีช่วงระยะห่างระหว่างจุดข้อมูล Δx = 0.02 (ละเอียดกว่ารูปที่ ๒) ก็จะเห็นว่าได้ผลทำนองเดียวกัน
  
รูปที่ ๓ เส้นกราฟสีน้ำเงินล่างสุด (Signal) คือค่าสัญญาณที่ไม่มีสัญญาณรบกวน เส้นกราฟสีส้มที่อยู่ถัดไป (S + N) คือสัญญาณที่มีสัญญาณรบกวน (กราฟสีน้ำเงิน + noise) เส้นกราฟ 5pt, 7 pt และ 9 pt ได้จากการนำเอาค่า (S + N) นั้นไปทำการปรับเรียบด้วยการใช้จุดข้อมูล 5, 7 และ 9 จุดตามลำดับ รูปบนเป็นกรณีของการจำลองค่าการวัด 2 ครั้ง ที่การวัดแต่ละครั้งนั้นมี noise รบกวน (ให้เป็น noise ทางบวก 1 ครั้งและ noise ทางลบ 1 ครั้ง) แล้วนำค่าที่วัดได้นั้นมาเฉลี่ย ส่วนรูปร่างเป็นกรณีของการจำลองค่าการวัด 10 ครั้ง ที่การวัดแต่ละครั้งนั้นมี noise รบกวน (ให้เป็น noise ทางบวก 5 ครั้ง) และ noise ทางลบ 5 ครั้ง) แล้วนำค่าที่วัดได้นั้นมาเฉลี่ย จะเห็นว่าเมื่อทำการวัดโดยมีจำนวนครั้งมากขึ้น ขนาดของ noise ที่ปรากฏให้เห็นจะลดลง ในที่นี้แต่ละจุด x ห่างกัน 0.02 หน่วย กราฟแต่ละเส้นมีการขยับขึ้น 0.5 หน่วยเพื่อไม่ให้ซ้อนทับกัน
 
รูปที่ ๔ เป็นการทดลองนำเอาข้อมูลที่ได้จากการปรับเรียบไปทำการแยกพีค (peak deconvolution) ใหม่เพื่อทดสอบว่าผลออกมาจะเป็นอย่างไร การแยกพีคทำด้วยโปรแกรม fityk 0.9.8 (ตัวนี้เป็นซอฟแวร์แจกฟรีครับ) ข้อมูลที่นำไปทดลองแยกพีคประกอบด้วยข้อมูลจุด 9pt ของรูปที่ ๒ (บน) ที่ได้จากการนำเอาสัญญาณเป็นค่าเฉลี่ยจากการวัด 2 ครั้งไปทำการปรับเรียบโดยใช้จุด 9 จุด ผลที่ได้แสดงไว้ในรูปที่ ๔ (บน) และข้อมูลจุด 9pt ของรูปที่ ๒ (ล่าง) ที่ได้จากการนำเอาสัญญาณเป็นค่าเฉลี่ยจากการวัด 10 ครั้งไปทำการปรับเรียบโดยใช้จุด 9 จุด ผลที่ได้แสดงไว้ในรูปที่ ๔ (ล่าง) ในแต่ละรูปนั้น จุดข้อมูลดิบคือจุดสีเขียว (ดูยากหน่อย) เส้นสีแดงคือพีคที่ได้จากการทำ peak deconvolution และเส้นสีเหลืองคือผลรวมของพีคย่อยแต่ละพีค ส่วนเส้นหยักที่อยู่ในกรอบข้างล่างคือค่าความคลาดเคลื่อน (ผลต่างระหว่างจุดข้อมูลจริงและค่าที่ประมาณได้) ณ แต่ละตำแหน่ง x


รูปที่ ๔ การทำ peak deconvolution ด้วยโปรแกรม fityk 0.9.7 (บน) ข้อมูลจุด 9pt ของรูปที่ ๒ (บน) และ (ล่าง) ข้อมูลจุด 9pt ของรูปที่ ๒ (ล่าง) ผลที่ได้ออกมาเป็นอย่างไรก็ขอให้ลองพิจาณากันเอาเองนะครับว่าการได้มาซึ่งข้อมูลที่ถูกต้องนั้นสำคัญอย่างไรในการแปลผล แม้ว่าจะนำเอาคณิตศาสตร์เข้ามาช่วยแล้วก็ตาม
 
เรื่องการแยกพีคหรือการทำ peak deconvolution นี้ ผลที่ได้จะออกมาอย่างไรนั้นยังมีปัจจัยเกี่ยวข้องอีกหลายอย่าง ไม่ว่าจะเป็น จำนวน ขนาด และตำแหน่ง ของพีคเริ่มแรกที่เราเดาขึ้นมาก่อนให้อัลกอริธึมทำการปรับแต่งเพื่อให้ได้ค่าความคลาดเคลื่อนต่ำสุด หรือจะกล่าวจะว่า "อยากให้มีสักกี่พีค ที่ตำแหน่งไหนบ้าง ก็จัดให้ได้" ก็ไม่น่าจะผิดจากความเป็นจริงไปมากนั้น


ไม่มีความคิดเห็น: