16 กุมภาพันธ์ 2552

ใช้โปรแกรม R ช่วยคำนวณ Odds Ratio

มีหลายคนเมล์มาถามผมเกี่ยวกับการคำนวณ Odds Ratio ที่ได้จากการศึกษา วันนี้ผมขอแนะนำโปรแกรมทางสถิติตัวหนึ่งที่นักสถิติและนักระบาดวิทยาหลายคนชอบใช้ นั่นคือโปรแกรม R ครับ

หลายท่านคงเคยได้ยินโปรแกรม SPSS (ซึ่งย่อมาจาก Statistical Package for the Social Sciences) มาแล้ว แต่ท่านทราบหรือไม่ ว่าท่านอาจจะกำลังใช้โปรแกรมนี้อย่างผิดกฎหมายอยู่! นั่นเป็นสิ่งที่ไม่ดีเลยครับ เรามาใช้โปรแกรมอื่นทดแทนโปรแกรมที่ผิดลิขสิทธิ์กันดีกว่า

โปรแกรม R นี้พูดแล้วก็เปรียบเสมือนเครื่องคิดเลขหนึ่งอันครับ โปรแกรมนี้สร้างโดยนักสถิติชาวนิวซีแลนด์ชื่อ Ross Ihaka และ Robert Gentleman ทั้งสองท่านนี้เห็นว่าโปรแกรมสถิติที่เราๆ ท่านๆ ใช้กันอยู่นั้นส่วนใหญ่จะมีราคาแพงถึงแพงหูฉี่ ก็เลยลองเขียนโปรแกรมขึ้นมาใช้เองดู และยังเผยแพร่โค้ดโปรแกรมออกมาอีกด้วย

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

พูดมานานแล้ว มาโหลดไปใช้กันดีกว่า เข้าหน้านี้ (http://www.r-project.org/) แล้วเลือกทำตามขั้นตอนต่อไปนี้เลยครับ

R_install1

1. เลือก Download ใต้หัวข้อ CRAN
2. เลือกสถานที่ที่ใกล้เราที่สุดเพื่อจะได้โหลดเร็วๆ (เมืองไทยก็มี) แต่แนะนำ Australia เพราะเมืองไทยมักไม่อัพเดต

R_install2

3. เลือกวินโดวส์ ถ้าคุณใช้วินโดวส์
4. เลือก base
5. เลือกอันที่ลงท้ายด้วย .exe ครับ (มันจะเป็นชื่อเวอร์ชั่นอยู่เช่นขณะที่ผมเขียนอยู่นี่มัน 2.8.1)

R_install3

6. ได้มาแล้ว ลงตามปกติเลยครับ

เมื่อเปิดโปรแกรมจะพบหน้าตาโปรแกรมดูโบราณๆ นิดนึง (เห็นโบราณแบบนี้แต่มันทรงพลังทีเดียวเลยล่ะ)

R_program1

สามารถลองพิมพ์ลงไปได้เลยครับว่าอยากจะให้มันคำนวณอะไร แล้วก็กด Enter

R_program2

ถ้าพิมพ์ผิดไม่ต้องกลัวมันไม่เจ๊งครับ มันก็แค่ขึ้น Error เท่านั้นแหละ แต่ถ้าพิมพ์ๆ ไปแล้วเป็นแบบนี้

> log(log(4)+sqrt(5)
+ |

นั่นเกิดจากว่าคุณใส่สูตรไม่จบ ส่วนมากเกิดลืมใส่วงเล็บ ก็แค่พิมพ์ ) เพิ่มไปแล้วกด Enter มันก็จะคำนวณให้ครับ

ฟังก์ชันที่ใช้นั้นก็มีหลากหลาย ตั้งแต่ธรรมดาๆ เชน log, sqrt (ย่อมาจาก square root), sin, cos, tan,… จนไปถึงฟังก์ชันทางสถิติเช่นพวกหา p-value จากค่า Chi-square เลยทีเดียวครับ (จนตอนนี้ผมใช้แทนเครื่องคิดเลขไปแล้วแหละ)

หมายเหตุนิดนึงว่าฟังก์ชัน log นั้นเป็นฐาน e นะครับ ถ้าต้องการฐานสิบ ก็พิมพ์ ,10 ในวงเล็บแบบนี้

> log(1,10)
[1] 0

สำหรับเลข [1] นั้นไม่ต้องสนใจครับ เขาใช้เวลามันมีผลลัพธ์เยอะๆ ขึ้นบรรทัดใหม่มันจะบอกว่าเป็นผลลัพธ์อันที่เท่าไหร่

ข้อดีของโปรแกรม R นี้นอกจากจะฟรีแล้วยังสามารถใส่ความสามารถอื่นๆ เข้าไปได้ ในวันนี้ที่ผมจะเอามาใช้คำนวณ Odds Ratio นั่นคือโปรแกรมเสริม EpiCalc โดยอาจารย์วีระศักดิ์จากมอ. เขียนไว้สำหรับทำงานด้านระบาด โดยเฉพาะเลยครับ

วิธีลงโปรแกรม Epicalc เพิ่มให้เราเลือกจากเมนูดังนี้

Epicalc_1

1. เลือก Packages –> Install Package(s)…
2. เลือกประเทศไหนก็ได้เหมือนเดิม (แนะนำ Australia เหมือนเดิมครับ)
3. จะเจอโปรแกรมเสริม (เรียกว่า package) มากมายก่ายกอง ให้เลือก epicalc ที่เราต้องการ

Epicalc_2

4. มันจะดาวน์โหลดมาให้เอง รอนิดนึงครับ

Epicalc_3

5. ดาวน์โหลดเสร็จแล้วยังใช้ไม่ได้ ต้องเลือก Load package… เพื่อเอามาใช้ก่อน
6. แล้วเลือก epicalc เหมือนเดิม

สำหรับขั้นที่ 5-6 นั้นต้องทำทุกครั้งหลังเปิดโปรแกรมใหม่นะครับ เอาละครับ ทีนี้มาลองใส่ข้อมูลกันเลยนะครับ

สมมติว่าผมทำการศึกษาคนไข้กลุ่มหนึ่ง โดยแบ่งคนไข้หูอักเสบเป็นสองกลุ่ม กลุ่มนึงให้หยอดยา อีกกลุ่มหยอดน้ำธรรมดา แล้วลองดูซิว่าทั้งสองกลุ่มหายหรือไม่หาย

ในที่นี้ exposure คือการหยอดยา (exposure +) หรือไม่หยอดยา (exposure –) และ outcome ที่ผมสนใจคือหูยังเป็นโรคอยู่ (outcome +) หรือหูไม่เป็นโรคแล้ว (outcome –) ถ้าเขียนตารางก็ได้ดังนี้ครับ

study1

แต่แทนที่เราจะมานั่งคำนวณเอง เราก็สามารถใช้โปรแกรม R+Epicalc นี้คำนวณได้ โดยใส่ฟังก์ชันดังนี้

> csi(3,29,18,13)

          Exposure
Outcome    Non-exposed Exposed Total
  Negative 13          29      42  
  Positive 18          3       21
  Total    31          32      63


           Rne         Re      Rt  
  Risk     0.58        0.09    0.33 
                       Estimate Lower95ci Upper95ci
Risk difference (Re - Rne) -0.49    -0.72     -0.25   
Risk ratio                0.16     0.06      0.41    
Protective efficacy =(Rne-Re)/Rne*100  
                           83.9     59.14     93.73   
   or percent of risk reduced
Number needed to treat (NNT)2.05   1.39      3.97    
   or -1/(risk difference)                                          

เราก็จะได้มาหมดเลย อย่างในที่นี้ที่จะรายงานก็คือ Relative Risk (Risk Ratio) = 0.16 โดยมี 95%CI = 0.06-0.41 ครับ

ถ้าจำไม่ได้ว่าในวงเล็บอันไหนเป็นอันไหน ก็ลองพิมพ์ดู แล้วดูว่าตารางนั้นออกมาตรงหรือเปล่าก็ได้ครับ แต่ถ้าอยากรู้คำสั่งให้มากขึ้น ให้พิมพ์

> help(csi)

จะขึ้นข้อความช่วยเหลือให้ครับ

ลองใช้กันดูนะครับ ผมหวังว่าจะมีประโยชน์ ถ้าว่างวันหลังจะมาเขียนเพิ่ม

14 กุมภาพันธ์ 2552

วิธีการค้นหาขั้นพื้นฐานด้วย PubMed - MeSH

ใครอยู่ในแวดวงสาธารณสุขแล้วไม่รู้จัก PubMed ผมคิดว่าค่อนข้างล้าหลังเลยทีเดียว นักศึกษาแพทย์สมัยใหม่ตอนนี้ได้รับการฝึกให้รู้จักการใช้ฐานข้อมูลออนไลน์ตัวนี้มาตั้งแต่ปีสามปีสี่ แต่จะมีสักกี่คนกันที่เอาไปใช้ในชีวิตจริง วันนี้ผมจะลองนำเสนอการค้นหาข้อมูลจากชีวิตจริงโดยประยุกต์ใช้ PubMed มาให้ดูนะครับ

สมมุติว่าผมมีคนไข้ผู้หญิงอายุประมาณ 40 ปีมาปรึกษาด้วยอาการใบหน้าข้างซ้ายชาและปากเบี้ยว ตรวจร่างกายทางระบบประสาทอื่นๆ ปกติ ตรวจใบหน้าเข้ากันได้กับภาวะที่เรียกว่า Bell’s palsy ปัญหาของผมที่อยากรู้คือว่าการรักษาที่เคยเห็นเขาใช้ๆ กันคือให้ Steroid และ Antiviral แต่ผมอยากรู้ว่ามันได้ผลหรือเปล่า เพราะเคยเห็นพี่บางคนให้แต่ก็ไม่เห็นมันจะหายเบี้ยวเลย ทำยังไงดี

จากสถานการณ์นี้เราลองมาสรุปดูเป็นคำถามทางคลินิก โดยใช้หลักของ PICO (แยกคำถามเป็น Patient, Intervention, Comparison, Outcome) เพื่อหางานวิจัยที่เขามีคำถาม PICO คล้ายของเรามากที่สุดดูนะครับ (ลองคิดเองก่อนดูของผมก็ดีนะครับ)

ส่วนของผมลองตั้งได้คือ

P: ผู้หญิง, 40 ปี, วินิจฉัย Bell’s Palsy, ตรวจร่างกายมีชาและปากเบี้ยวดังกล่าว
I: Steroid และ/หรือ Antiviral
C: ไม่ให้อะไรเลย
O: หายปากเบี้ยว

ปัญหาคือเราจะเอา PICO นี้ไปหาใน PubMed ได้อย่างไร? หลายๆ คนคงคิดว่าไม่ยาก ก็ใส่มันลงไปหมดเลยซิ

1

เป็นไงครับ ผลที่ได้ ดูเหมือนจะได้ผลดีเหมือนกันนะครับ แต่ทำไมมันออกมาน้อยจัง นี่ยังดี บางคนหาจหาไม่ได้เลยก็เป็นไปได้นะครับ นั่นเป็นเพราะว่า PubMed มันเป็นฐานข้อมูลที่ยังไม่ค่อยฉลาดเสียเท่าไหร่ มันอาจตีความคำค้นหาของเราผิดก็ได้

วิธีของผมคือ ลองจัดลำดับความสำคัญ (Prioritize) ว่าคำค้นหาคำไหนมันสำคัญกว่ากัน

Bell’s Palsy: สำคัญแน่ๆ ไม่งั้นไม่เกี่ยวข้องเลย ผมให้ความสำคัญ 100%
Steroid, Antiviral: สำคัญเหมือนกัน แต่เลือกเอาระหว่างตัวมันกับ Antiviral
Female: ผมว่าไม่น่าจะสำคัญซะเท่าไหร่ ผู้ชายก็น่าจะเหมือนกันมั้ง ให้ความสำคัญประมาณ 20%

การค้นหาก็เหมือนกันครับ เราจะต้องทำการค้นหาเอาเฉพาะผลที่มีโรค Bell’s Palsy นี่ให้ได้ แต่บางที คนเขียนงานวิจัยเค้าอาจจะใช้ Idiopathic Facial Palsy ก็ได้ ใครจะรู้ บางคนอาจจะใช้แค่ Facial Palsy เฉยๆ หรือบางคนใช้ Bell Palsy ที่ไม่มี ‘s ทีนี้จะทำไงดี

ทางแก้ของเราคือใช้ฐานข้อมูลคำของ PubMed ครับ นั่นคือสิ่งที่เขาเรียกว่า “Medical Subject Heading” (MeSH) ซึ่งภายใน PubMed เอง เมื่อมีงานวิจัยเข้ามาในฐานข้อมูล จะให้บรรณารักษ์เป็นผู้กำหนดว่า งานวิจัยไหน เข้าหมวดหมู่กับคำในฐานข้อมูล MeSH อันใด เราสามารถค้นหาได้โดยเลือกฐานข้อมูลเป็น MeSH แล้วค้นครับ

2

ตามรูปเลยครับ เปลี่ยนในช่องด้านบนซ้ายให้เป็น MeSH แล้วพิมพ์หา Bell’s Palsy แล้วกด Go จะปรากฎผลลัพธ์ด้านล่าง ให้ติ๊กถูกหน้าคำที่เราสนใจ (บางทีจะขึ้นมาหลายคำ เราก็ลองอ่านดูว่ามันเป็นความหมายที่เราสนใจหรือเปล่า อย่างของผม “A syndrome characterized by the acute-onset of unilateral FACIAL PARALYSIS…” ก็น่าจะใช่นะ แล้วคลิ๊กที่ Send to เพื่อเลือก Search Box with And

3

จริงๆ จะเป็น AND/OR/NOT ก็ได้ครับ ไม่ค่อยสำคัญเท่าไหร่ เพราะเดี๋ยวเราก็จะต้องมาพิจารณาก่อนที่จะหาต่ออีกทีหนึ่งว่ามันเข้าใจเราถูกบ้างหรือเปล่า หลังจากเลือกแล้วมันก็จะมีช่องว่างๆ ขึ้นมาดังนี้เลยครับ

4

นี่ละครับ แสดงว่าคำที่บรรณารักษ์เขาใช้มันคือ “Bell Palsy” ไม่ใช่ “Bell’s Palsy” อย่างที่ผมเข้าใจซักหน่อย (ไม่มี ‘s จริงๆ ด้วย) หลังจากนั้น เราสามารถหาคำอื่นๆ ในฐานข้อมูล MeSH แล้วค่อยๆ Send to Search Box with AND ลงไปได้เรื่อยๆ ด้วยวิธีการเดียวกัน ผมจะลองใส่ Antiviral, Steroid ลงไปด้วยวิธีการหาจาก MeSH นะครับ:

5

จะสังเกตได้ว่า คำค้นหาคือ “Bell Palsy”[Mesh], “Steroids”[Mesh], “Antiviral Agents”[Mesh] ทีนี้ อย่างที่ผมบอกไปว่าผมอยากได้ทั้ง Steroid เดี่ยวๆ กับ Antiviral เดี่ยวๆ ด้วย ผมก็คงต้องเปลี่ยนเป็นว่า ผมต้องการบทความที่มีคำว่า Bell และ (Steroid หรือ Antiviral) ดังนั้นก็คงจะต้องเปลี่ยนในช่องเล็กน้อย

6

ครับ ทีนี้เราก็พร้อมจะค้นแล้ว ให้กดที่ “Search PubMed” ได้เลยครับ

7

เห็นไหมครับ ว่าตอนนี้เราได้ผลลัพธ์เยอะกว่าเดิม ลองใช้วิธีนี้ดูนะครับ!