ความบังเอิญ อคติ และปัจจัยกวน: เหตุใดความสัมพันธ์ที่พบจึงยังไม่ใช่ผลของการรักษา

On this page
อ่านฉบับภาษาอังกฤษ (English version)
บทคัดย่อ
คณะกรรมการของโรงพยาบาลประจำอำเภอแห่งหนึ่งต้องตัดสินว่าจะจ่ายเงินให้ C ซึ่งเป็นการรักษาเชิงป้องกันแบบใหม่หรือไม่ บนโต๊ะมีการศึกษาสองชิ้น ในการทดลองขนาดเล็ก ผู้ป่วยที่ได้ C เกิดภาวะแทรกซ้อนรุนแรงภายในหนึ่งปี 12.12% และผู้ป่วยที่ได้การดูแลตามปกติ A เกิด 21.67% คิดเป็น risk ratio 0.56 (ช่วงความเชื่อมั่น 95% เท่ากับ 0.25 ถึง 1.26) ส่วนเวชระเบียนผู้ป่วย 1,000 คนของโรงพยาบาลประจำจังหวัดบอกตรงกันข้าม คือ 24.6% เทียบกับ 11.2% อัตราส่วน 2.20 บทความนี้ตรวจคำอธิบายสามข้อทีละข้อ ความบังเอิญอธิบายช่วงที่กว้างของการทดลอง และผู้ป่วยที่มากขึ้นจะทำให้ช่วงแคบลง ปัจจัยกวนอธิบายเวชระเบียน เพราะแพทย์ให้ C กับผู้ป่วยที่โรครุนแรงเป็นส่วนใหญ่ การเปรียบเทียบผู้ป่วยชุดเดียวกัน ด้วยการเฉลี่ยภายในกลุ่มความรุนแรงหรือด้วยการถ่วงน้ำหนักผู้ป่วยแต่ละคน ให้ 16.5% เทียบกับ 22.0% อัตราส่วน 0.75 อคติจากวิธีบันทึกภาวะแทรกซ้อนหรือจากจุดเริ่มนับเวลาติดตามไม่ลดลงเมื่อมีผู้ป่วยมากขึ้น แบบจำลองเศรษฐศาสตร์ของคณะกรรมการต้องการข้อมูลนำเข้าหนึ่งค่าจากเรื่องนี้ คือภาวะแทรกซ้อนที่ป้องกันได้ 5.5 ครั้งต่อผู้ป่วย 100 คน
การศึกษาสองชิ้น คำตอบสองแบบบนโต๊ะคณะกรรมการ
คณะกรรมการของโรงพยาบาลประจำอำเภอแห่งหนึ่งต้องตัดสินว่าจะจ่ายเงินให้ C ซึ่งเป็นการรักษาเชิงป้องกันแบบใหม่สำหรับผู้ใหญ่ที่เพิ่งได้รับการวินิจฉัยโรคเรื้อรังโรคหนึ่งหรือไม่ ในการทดลองหนึ่ง ผู้ป่วยที่ได้ C เกิดภาวะแทรกซ้อนรุนแรงภายในหนึ่งปี 8 จาก 66 คน และผู้ป่วยที่ได้การดูแลตามปกติ A เกิด 13 จาก 60 คน ตัวเลขเหล่านี้เป็นตัวอย่างสมมติเพื่อการสอน ไม่ใช่ผลจากการศึกษาจริง
โรงพยาบาลประจำจังหวัดส่งข้อมูลเวชระเบียนมาด้วย ซึ่งเป็นตัวเลขสมมติเช่นกัน ในช่วงไม่กี่ปีที่ผ่านมา ผู้ป่วยของโรงพยาบาลได้ C 500 คน และได้ A 500 คน ภายในหนึ่งปี ผู้ป่วยที่ได้ C เกิดภาวะแทรกซ้อนรุนแรง 123 คน และที่ได้ A เกิด 56 คน เวชระเบียนจึงมีผู้ป่วยมากกว่าการทดลองราวแปดเท่า
การศึกษาทั้งสองให้คำตอบขัดกัน การหารความเสี่ยงเมื่อได้ C ด้วยความเสี่ยงเมื่อได้ A ได้ค่า risk ratio (อัตราส่วนความเสี่ยง) ซึ่งค่า 1 หมายถึงไม่ต่างกัน (อัตราส่วนความเสี่ยง อัตราส่วนออดส์ ผลต่างความเสี่ยง และจำนวนที่ต้องรักษา: ตารางสองคูณสองเดียว คำตอบสี่แบบ) การทดลองได้ 0.56 คือภาวะแทรกซ้อนน้อยลงเมื่อได้ C แต่เวชระเบียนได้ 2.20 คือมากกว่าสองเท่า กรรมการคนหนึ่งเชื่อเวชระเบียนเพราะมีผู้ป่วยมากกว่า อีกคนเชื่อการทดลองเพราะผู้ป่วยถูกสุ่มให้ได้ C หรือ A จึงไม่มีลักษณะของผู้ป่วยมากำหนดว่าใครได้ C
ก่อนที่ตัวเลขใดจะใช้แทนผลของ C ได้ ต้องตัดคำอธิบายอื่นสามข้อออกไปก่อน ข้อแรกคือความบังเอิญ (chance) ผู้ป่วยที่บังเอิญเข้ามาในการศึกษาต่างจากผู้ป่วยกลุ่มถัดไป ข้อสองคืออคติ (bias) การศึกษาวัดหรือนับผู้ป่วยอย่างเอนเอียง ข้อสามคือปัจจัยกวน (confounding) ผู้ป่วยที่ได้ C ต่างจากผู้ป่วยที่ได้ A ตั้งแต่ก่อนเริ่มรักษา
บทความนี้ไล่ดูทีละข้อด้วยการศึกษาสองชิ้นนี้ และจบที่ตัวเลขที่แบบจำลองเศรษฐศาสตร์ต้องการ
ความบังเอิญ: ตัวอย่างใหม่ ตัวเลขใหม่
อ่านก่อนในเว็บไซต์นี้:
ความบังเอิญคือความคลาดเคลื่อนที่เกิดจากว่าผู้ป่วยคนใดบังเอิญเข้ามาอยู่ในการศึกษา ผู้ป่วยอีก 66 และ 60 คนจากอำเภอเดียวกันจะให้จำนวนที่นับได้ต่างไปเล็กน้อย และให้อัตราส่วนต่างไปด้วย การศึกษายิ่งเล็ก การแกว่งนี้ยิ่งมาก
ช่วงความเชื่อมั่น 95% (confidence interval) บอกว่าการแกว่งนี้มากเพียงใด คือช่วงของผลจริงที่ข้อมูลยังตัดออกไปไม่ได้ บทความเรื่อง risk ratio สร้างช่วงของการทดลองนี้ทีละขั้น (อัตราส่วนความเสี่ยง อัตราส่วนออดส์ ผลต่างความเสี่ยง และจำนวนที่ต้องรักษา: ตารางสองคูณสองเดียว คำตอบสี่แบบ) ความเสี่ยง 12.12% เมื่อได้ C และ 21.67% เมื่อได้ A ให้ risk ratio 0.56 และภาวะแทรกซ้อนน้อยลง 9.55 ครั้งต่อผู้ป่วย 100 คน โดยช่วงของอัตราส่วนอยู่ระหว่าง 0.25 ถึง 1.26
ช่วงนี้กว้างตั้งแต่ประโยชน์มากไปจนถึงโทษบางส่วน การทดลองจึงตัดความเป็นไปได้ที่ C ไม่มีผลเลยออกไปไม่ได้ แต่ก็ไม่ได้แสดงว่า C ไม่มีผล เพียงแต่การทดลองเล็กเกินกว่าจะบอกได้
ขนาดของการแกว่งสรุปเป็นตัวเลขเดียว เรียกว่าการกระจาย (spread) คำนวณจากจำนวนสี่ค่านี้เท่านั้น ยิ่งมีผู้ป่วยเกิดภาวะแทรกซ้อนน้อย ค่านี้ยิ่งมาก และในที่นี้มีเพียง 8 และ 13 คน ตัวอย่างคำนวณด้านล่างคำนวณค่านี้ และแสดงว่าผู้ป่วยที่มากขึ้นจะเปลี่ยนอะไร
ผู้ป่วยที่มากขึ้นจะทำอะไรกับช่วงของการทดลอง
ทุกขั้นตรวจด้วยเครื่องคิดเลขได้จากตัวเลขที่แสดงในขั้นนั้น ln คือลอการิทึมธรรมชาติ และการยก e กำลังค่านั้นคือการย้อนกลับ
-
การกระจายจากจำนวนสี่ค่า
\[ \sqrt{\tfrac{1}{8}-\tfrac{1}{66}+\tfrac{1}{13}-\tfrac{1}{60}}=0.412 \]
ค่านี้คือขนาดโดยทั่วไปของความคลาดเคลื่อนจากความบังเอิญในลอการิทึมของ risk ratio พจน์ของ 8 และ 13 มีค่ามากที่สุด เพราะมีผู้ป่วยเกิดภาวะแทรกซ้อนน้อย
-
ช่วงของการทดลอง
\[ e^{\ln 0.56\,\pm\,1.96\times 0.412}=0.25,\ 1.26 \]
ขยับลงและขึ้นจาก ln 0.56 ข้างละ 1.96 เท่าของการกระจาย แล้วใช้ e ย้อนกลับ จะได้ 0.25 ถึง 1.26 ตัวคูณ 1.96 ทำให้เป็นช่วง 95% เพราะครอบคลุม 95% ตรงกลางของความคลาดเคลื่อนจากความบังเอิญ
-
ผู้ป่วยมากขึ้นสิบเท่า ความเสี่ยงเท่าเดิม
\[ \sqrt{\tfrac{1}{80}-\tfrac{1}{660}+\tfrac{1}{130}-\tfrac{1}{600}}=0.130 \]
ถ้าผู้ป่วยที่ได้ C เกิดภาวะแทรกซ้อน 80 จาก 660 คน และที่ได้ A เกิด 130 จาก 600 คน ทุกพจน์จะเล็กลงสิบเท่า การกระจายจึงลดลงเหลือราวหนึ่งในสาม
-
ช่วงที่แคบลง
\[ e^{\ln 0.56\,\pm\,1.96\times 0.130}=0.43,\ 0.72 \]
ช่วงตอนนี้อยู่ระหว่าง 0.43 ถึง 0.72 และไม่รวมค่า 1 แล้ว ความบังเอิญเพียงอย่างเดียวจึงไม่น่าจะเป็นคำอธิบายของประโยชน์นี้
ผลลัพธ์: ผู้ป่วยที่มากขึ้นลดความบังเอิญ ผู้ป่วยมากขึ้นสิบเท่าเหลือการกระจายราวหนึ่งในสามรอบค่า 0.56 เดิม
ช่วงที่แคบไม่ได้แปลว่าคำตอบถูก
เวชระเบียนมีปัญหาตรงกันข้าม ผู้ป่วยที่เกิดภาวะแทรกซ้อนมี 123 และ 56 คน จำนวนจึงมาก และช่วงรอบค่า 2.20 แคบ คือ 1.64 ถึง 2.94 ช่วงนี้ไม่แตะช่วงของการทดลองเลย ซึ่งสิ้นสุดที่ 1.26 ความบังเอิญจึงไม่น่าจะเป็นคำอธิบายว่าทำไมการศึกษาทั้งสองจึงขัดกัน
ช่วงที่แคบบอกว่าตัวเลขแม่นยำ แต่ไม่ได้บอกว่าตัวเลขถูกต้อง การเปรียบเทียบผู้ป่วย 1,000 คนอย่างไม่เป็นธรรมให้คำตอบผิดที่แม่นยำ
ความบังเอิญยังเพิ่มขึ้นตามจำนวนคำถามที่ถาม ช่วงความเชื่อมั่น 95% พลาดค่าจริง 5 ครั้งในทุก 100 การศึกษาโดยการออกแบบ ถ้าการทดลองตรวจผลลัพธ์ 20 อย่างที่เป็นอิสระต่อกันและ C ไม่ได้เปลี่ยนเลย โอกาสที่จะมีอย่างน้อยหนึ่งช่วงไม่รวมค่า 1 เพราะโชคล้วน ๆ คือ $1-0.95^{20}=64.2\%$ ผลที่โดดเด่นเพียงหนึ่งเดียวท่ามกลางผลจำนวนมากจึงควรสงสัยไว้ก่อน
# Writes: stdout only. The illustrative trial: serious complications within one year on C and on A.
risk_c <- 8 / 66
risk_a <- 13 / 60
spread <- sqrt(1 / 8 - 1 / 66 + 1 / 13 - 1 / 60)
spread10 <- sqrt(1 / 80 - 1 / 660 + 1 / 130 - 1 / 600)
f <- function(x, d) formatC(x, d, format = "f")
limits <- function(s) f(exp(log(risk_c / risk_a) + c(-1.96, 1.96) * s), 2)
cat("Risk on C:", f(100 * risk_c, 2), "% on A:", f(100 * risk_a, 2), "%\n")
cat("Risk ratio:", f(risk_c / risk_a, 2), " 95% interval:", limits(spread), "\n")
cat("Complications avoided per 100 patients:", f(100 * (risk_a - risk_c), 2), "\n")
cat("Spread from the four counts:", f(spread, 3), "\n")
cat("Ten times the patients: spread", f(spread10, 3), " 95% interval:", limits(spread10), "\n")
cat("Chance that at least 1 of 20 intervals misses:", f(100 * (1 - 0.95^20), 1), "%\n")
Risk on C: 12.12 % on A: 21.67 %
Risk ratio: 0.56 95% interval: 0.25 1.26
Complications avoided per 100 patients: 9.55
Spread from the four counts: 0.412
Ten times the patients: spread 0.130 95% interval: 0.43 0.72
Chance that at least 1 of 20 intervals misses: 64.2 %
ปัจจัยกวน: ความรุนแรงกำหนดว่าใครได้ C
ถ้าความบังเอิญอธิบายเวชระเบียนไม่ได้ อะไรทำให้ประโยชน์ของ C กลายเป็นโทษ แพทย์ของโรงพยาบาลไม่ได้โยนเหรียญ แต่ให้ C กับผู้ป่วยที่โรครุนแรงตอนวินิจฉัยเป็นส่วนใหญ่ ผู้ป่วย 400 จาก 500 คนที่ได้ C เป็นผู้ป่วยรุนแรง แต่ผู้ป่วยที่ได้ A เป็นผู้ป่วยรุนแรงเพียง 100 จาก 500 คน
ความรุนแรงยังมีผลต่อผลลัพธ์ด้วย เมื่อได้ A ผู้ป่วยรุนแรงเกิดภาวะแทรกซ้อนรุนแรงภายในหนึ่งปี 40 จาก 100 คน ส่วนผู้ป่วยไม่รุนแรงเกิด 16 จาก 400 คน คือ 40.0% เทียบกับ 4.0% กลุ่ม C จึงเริ่มต้นด้วยผู้ป่วยที่มีแนวโน้มจะเกิดภาวะแทรกซ้อนมากกว่ามาก ไม่ว่าจะได้รับการรักษาใด
การเปรียบเทียบที่เป็นธรรมคือเทียบภายในแต่ละระดับความรุนแรง ซึ่งผู้ป่วยที่ได้ C และ A เริ่มต้นเหมือนกัน ตัวอย่างคำนวณด้านล่างเทียบทีละกลุ่ม แล้วรวมกลับเข้าด้วยกันอีกครั้ง
เทียบผู้ป่วยที่เหมือนกัน แล้วค่อยรวม
แต่ละขั้นหารสัดส่วนผู้เกิดภาวะแทรกซ้อนเมื่อได้ C ด้วยสัดส่วนเมื่อได้ A
-
ผู้ป่วยรุนแรง
\[ \frac{120/400}{40/100}=\frac{30.0}{40.0}=0.75 \]
ในผู้ป่วยรุนแรง เกิดภาวะแทรกซ้อน 30.0% เมื่อได้ C และ 40.0% เมื่อได้ A C ลดความเสี่ยงลงหนึ่งในสี่
-
ผู้ป่วยไม่รุนแรง
\[ \frac{3/100}{16/400}=\frac{3.0}{4.0}=0.75 \]
ในผู้ป่วยไม่รุนแรง 3.0% เมื่อได้ C เทียบกับ 4.0% เมื่อได้ A ได้อัตราส่วนเท่าเดิม
-
รวมสองกลุ่มเข้าด้วยกัน
\[ \frac{123/500}{56/500}=\frac{24.6}{11.2}=2.20 \]
เมื่อนับผู้ป่วยรุนแรงและไม่รุนแรงรวมกัน ได้ 24.6% เมื่อได้ C เทียบกับ 11.2% เมื่อได้ A อัตราส่วนกลับทิศเป็น 2.20 หรือภาวะแทรกซ้อนเกินมา 13.4 ครั้งต่อผู้ป่วย 100 คนที่ได้ C
-
ทำไมจึงกลับทิศ
\[ \frac{400}{500}=80\%,\quad \frac{100}{500}=20\% \]
ผู้ป่วยที่ได้ C เป็นผู้ป่วยรุนแรงสี่ในห้า ส่วนผู้ป่วยที่ได้ A เป็นผู้ป่วยรุนแรงเพียงหนึ่งในห้า กลุ่ม C ที่รวมแล้วจึงเป็นผู้ป่วยเสี่ยงสูงเสียส่วนใหญ่ ความเสี่ยงของกลุ่มจึงสูง แม้ C จะช่วยในทุกกลุ่ม
ผลลัพธ์: C ลดความเสี่ยงลงหนึ่งในสี่ในทุกระดับความรุนแรง แต่ดูเหมือนมีโทษเมื่อรวมกลุ่ม ค่า 2.20 ที่ได้จากการรวมจึงวัดว่าใครได้ C มากกว่าวัดว่า C ทำอะไร
ตั้งชื่อ แล้ววาดออกมา
อ่านก่อนในเว็บไซต์นี้:
- ปัจจัยกวนคืออะไร และการศึกษาควบคุมปัจจัยกวนได้ด้วยวิธีใดบ้าง
- วิธีวาดสาเหตุเป็นแผนภาพก่อนเลือกวิธีวิเคราะห์
ปัจจัยที่มีผลทั้งต่อว่าใครได้รับการรักษาและต่อผลลัพธ์เรียกว่าตัวกวน (confounder) และความบิดเบือนที่มันก่อเรียกว่าปัจจัยกวน (confounding) [1] เมื่อปัจจัยนั้นเป็นเหตุผลของการสั่งยาเอง อย่างความรุนแรงในที่นี้ เรียกว่าปัจจัยกวนจากข้อบ่งชี้ (confounding by indication) ทิศกลับกันก็เกิดได้ เรียกว่าปัจจัยกวนจากข้อห้ามใช้ (confounding by contraindication) แพทย์อาจไม่ให้ยากับผู้ป่วยที่เปราะบาง ทำให้ยาดูดีกว่าความจริง
รูปที่ 1 วาดสาเหตุในเวชระเบียนเป็นลูกศรที่เราสมมติจากความรู้ทางคลินิก ความรุนแรงนำไปสู่การได้ C ความรุนแรงนำไปสู่ภาวะแทรกซ้อน และ C อาจทำให้ภาวะแทรกซ้อนน้อยลง เมื่อไม่มีลูกศรเส้นใดวนกลับ แผนภาพแบบนี้จึงเรียกว่าแผนภาพเชิงสาเหตุแบบมีทิศทางที่ไม่วนกลับ (directed acyclic graph, DAG)
# Writes: stdout only. Illustrative hospital records: serious complications within one year.
complications_c <- c(severe = 120, mild = 3); patients_c <- c(severe = 400, mild = 100)
complications_a <- c(severe = 40, mild = 16); patients_a <- c(severe = 100, mild = 400)
risk_c <- c(complications_c / patients_c, all = sum(complications_c) / sum(patients_c))
risk_a <- c(complications_a / patients_a, all = sum(complications_a) / sum(patients_a))
ratio <- risk_c / risk_a
spread <- sqrt(1 / 123 - 1 / 500 + 1 / 56 - 1 / 500)
f <- function(x, d) formatC(x, d, format = "f")
cat("Risk on C, severe / mild / all:", f(100 * risk_c, 1), "%\n")
cat("Risk on A, severe / mild / all:", f(100 * risk_a, 1), "%\n")
cat("Risk ratio, severe / mild / all:", f(ratio, 2), "\n")
cat("All patients, 95% interval:", f(exp(log(ratio[["all"]]) + c(-1.96, 1.96) * spread), 2), "\n")
cat("Extra complications per 100 on C, all:", f(100 * (risk_c[["all"]] - risk_a[["all"]]), 1), "\n")
Risk on C, severe / mild / all: 30.0 3.0 24.6 %
Risk on A, severe / mild / all: 40.0 4.0 11.2 %
Risk ratio, severe / mild / all: 0.75 0.75 2.20
All patients, 95% interval: 1.64 2.94
Extra complications per 100 on C, all: 13.4
การปรับมาตรฐาน: ให้ผู้ป่วยชุดเดียวกันได้ทั้งสองการรักษา
อ่านก่อนในเว็บไซต์นี้:
คณะกรรมการต้องการตัวเลขเดียวสำหรับทั้งอำเภอ ไม่ใช่ตัวเลขแยกตามระดับความรุนแรง และไม่ใช่ค่า 2.20 จากการรวมแน่นอน ทางแก้คือถามการรักษาทั้งสองด้วยคำถามเดียวกัน ถ้าผู้ป่วยชุดเดียวกันทุกคนได้ C ความเสี่ยงจะเป็นเท่าใด และถ้าทุกคนได้ A ความเสี่ยงจะเป็นเท่าใด
ใช้ผู้ป่วยในเวชระเบียนเอง คือผู้ป่วยรุนแรง 500 คน และผู้ป่วยไม่รุนแรง 500 คน อย่างละครึ่ง ถ้าทุกคนได้ C ครึ่งหนึ่งจะมีความเสี่ยงแบบผู้ป่วยรุนแรง 30.0% และอีกครึ่งมีความเสี่ยงแบบผู้ป่วยไม่รุนแรง 3.0% ได้ $0.5\times30.0+0.5\times3.0=16.5\%$ ถ้าทุกคนได้ A ได้ $0.5\times40.0+0.5\times4.0=22.0\%$ ตอนนี้ความเสี่ยงทั้งสองค่าบรรยายผู้ป่วยชุดเดียวกัน
อัตราส่วนคือ 16.5 / 22.0 = 0.75 เท่ากับภายในแต่ละระดับความรุนแรง และผลต่างคือภาวะแทรกซ้อนที่ป้องกันได้ 5.5 ครั้งต่อผู้ป่วย 100 คน การเฉลี่ยบนส่วนผสมของผู้ป่วยชุดเดียวที่เลือกไว้แบบนี้เรียกว่าการปรับมาตรฐาน (standardization) [2] เขียนเป็นสัญลักษณ์ได้ว่า $R_C=\sum_s w_s R_{C,s}$ โดย $w_s$ คือสัดส่วนผู้ป่วยในระดับความรุนแรง $s$ และ $R_{C,s}$ คือความเสี่ยงเมื่อได้ C ในกลุ่มนั้น
ส่วนผสมที่เลือกมีความสำคัญ ในที่นี้ C ลดความเสี่ยงลงหนึ่งในสี่ในทั้งสองกลุ่ม ส่วนผสมใดก็ให้ค่า 0.75 เท่ากัน แต่จำนวนภาวะแทรกซ้อนที่ป้องกันได้ขึ้นกับว่ามีผู้ป่วยรุนแรงมากเพียงใด แบบจำลองจึงควรใช้ส่วนผสมผู้ป่วยของอำเภอเอง
การปรับมาตรฐานแก้ตำแหน่งของค่าประมาณ แต่ช่วงของมันยังบอกเพียงความบังเอิญ ความเสี่ยงของทั้งสี่กลุ่มต่างมีความคลาดเคลื่อนจากความบังเอิญของตัวเอง เมื่อรวมด้วยสัดส่วนครึ่งต่อครึ่งเดียวกัน จะได้การกระจายของลอการิทึมอัตราส่วน 0.143 และเช่นเดิม $e^{\ln 0.75\pm1.96\times0.143}$ ให้ช่วง 0.57 ถึง 0.99 รูปที่ 2 วางการทดลอง เวชระเบียนที่รวมทุกคน และเวชระเบียนที่ปรับมาตรฐานแล้วไว้เคียงกัน
# Writes: stdout only. Both treatments given to the same patients: the records' mix, half severe.
share <- c(severe = 0.5, mild = 0.5)
risk_c <- c(120 / 400, 3 / 100); patients_c <- c(400, 100)
risk_a <- c(40 / 100, 16 / 400); patients_a <- c(100, 400)
std_c <- sum(share * risk_c); std_a <- sum(share * risk_a)
spread <- sqrt(sum(share^2 * risk_c * (1 - risk_c) / patients_c) / std_c^2 +
sum(share^2 * risk_a * (1 - risk_a) / patients_a) / std_a^2)
limits <- exp(log(std_c / std_a) + c(-1.96, 1.96) * spread); avoided <- 100 * std_a * (1 - limits)
f <- function(x, d) formatC(x, d, format = "f")
cat("Standardized risk on C:", f(100 * std_c, 1), "% on A:", f(100 * std_a, 1), "%\n")
cat("Risk ratio:", f(std_c / std_a, 2), " spread of its log:", f(spread, 3), "\n")
cat("95% interval:", f(limits, 2), "\n")
cat("Avoided per 100:", f(100 * (std_a - std_c), 1), " at the limits:", f(avoided, 1), "\n")
Standardized risk on C: 16.5 % on A: 22.0 %
Risk ratio: 0.75 spread of its log: 0.143
95% interval: 0.57 0.99
Avoided per 100: 5.5 at the limits: 9.5 0.2
การถ่วงน้ำหนัก: คำตอบเดียวกันจากอีกเส้นทาง
อ่านก่อนในเว็บไซต์นี้:
- คะแนนความโน้มเอียงคืออะไร และช่วยให้กลุ่มสมดุลได้อย่างไร
- การถ่วงน้ำหนักด้วยส่วนกลับของความน่าจะเป็นที่จะได้รับการรักษาทีละขั้น
เวชระเบียนจริงมีตัวกวนหลายตัวพร้อมกัน เช่น อายุ การทำงานของไต และโรคอื่น ๆ และการแบ่งผู้ป่วยตามทุกการผสมของปัจจัยเหล่านี้จะเหลือกลุ่มละหนึ่งหรือสองคนในไม่ช้า การถ่วงน้ำหนักรับมือด้วยการให้ตัวเลขเดียวแก่ผู้ป่วยแต่ละคน ส่วนการจำกัดการศึกษาไว้ที่ผู้ป่วยแบบเดียว (restriction) และแบบจำลองการถดถอย (regression) เป็นอีกสองทางที่ใช้กันทั่วไป
ตัวเลขนั้นคือโอกาสที่ผู้ป่วยแต่ละคนจะได้ C เมื่อพิจารณาจากลักษณะของเขา ในเวชระเบียน ผู้ป่วยรุนแรง 400 จาก 500 คนได้ C โอกาสของผู้ป่วยรุนแรงจึงเป็น 0.80 และของผู้ป่วยไม่รุนแรงเป็น 0.20 โอกาสได้รับการรักษานี้เรียกว่าคะแนนความโน้มเอียง (propensity score) เมื่อมีลักษณะหลายอย่าง จะใช้แบบจำลองการถดถอยประมาณค่านี้
จากนั้นนับผู้ป่วยแต่ละคนเป็นจำนวนเท่ากับ 1 หารด้วยโอกาสที่จะได้การรักษาที่เขาได้รับจริง ผู้ป่วยรุนแรงที่ได้ C นับเป็น 1 / 0.80 = 1.25 คน ผู้ป่วยรุนแรงที่ได้ A ซึ่งมีน้อยในเวชระเบียน นับเป็น 1 / 0.20 = 5.00 คน ผู้ป่วยที่มีน้อยจึงเป็นตัวแทนของผู้ป่วยอีกมากที่คล้ายกันแต่ได้อีกการรักษาหนึ่ง
ถ่วงน้ำหนักเวชระเบียน แล้วเปรียบเทียบ
คูณจำนวนผู้ป่วยและจำนวนภาวะแทรกซ้อนของแต่ละกลุ่มด้วยน้ำหนักของกลุ่มนั้น
-
น้ำหนัก
\[ \frac{1}{0.80}=1.25,\quad \frac{1}{0.20}=5.00 \]
ผู้ป่วยรุนแรงที่ได้ C และผู้ป่วยไม่รุนแรงที่ได้ A นับเป็น 1.25 เท่า ผู้ป่วยรุนแรงที่ได้ A และผู้ป่วยไม่รุนแรงที่ได้ C นับเป็น 5.00 เท่า
-
กลุ่ม C หลังถ่วงน้ำหนัก
\[ 400\times1.25+100\times5.00=1000,\quad 120\times1.25+3\times5.00=165 \]
กลุ่ม C ตอนนี้แทนผู้ป่วย 1,000 คน รุนแรงครึ่งหนึ่ง ไม่รุนแรงครึ่งหนึ่ง มีภาวะแทรกซ้อน 165 ครั้ง คือ 16.5%
-
กลุ่ม A หลังถ่วงน้ำหนัก
\[ 100\times5.00+400\times1.25=1000,\quad 40\times5.00+16\times1.25=220 \]
กลุ่ม A ก็แทนผู้ป่วย 1,000 คน รุนแรงครึ่งหนึ่ง มีภาวะแทรกซ้อน 220 ครั้ง คือ 22.0%
-
เปรียบเทียบ
\[ \frac{165/1000}{220/1000}=\frac{16.5}{22.0}=0.75 \]
ได้ 0.75 เท่ากับการปรับมาตรฐาน และป้องกันภาวะแทรกซ้อนได้ 5.5 ครั้งต่อผู้ป่วย 100 คนเท่ากัน
ผลลัพธ์: การถ่วงน้ำหนักสร้างประชากรที่ความรุนแรงไม่ได้ทำนายอีกต่อไปว่าใครได้ C การนับผู้ป่วยแต่ละคนเป็น 1 หารด้วยโอกาสที่จะได้การรักษาที่เขาได้รับ ตามที่ทำข้างต้น เรียกว่าการถ่วงน้ำหนักด้วยส่วนกลับของความน่าจะเป็นที่จะได้รับการรักษา (inverse probability of treatment weighting, IPTW)
ตรวจความสมดุล (balance) ไม่ใช่ตรวจ p-value
อ่านก่อนในเว็บไซต์นี้:
- การตรวจสมดุลหลังถ่วงน้ำหนัก และสิ่งที่ต้องแก้เมื่อยังไม่สมดุล
- การจับคู่ด้วยคะแนนความโน้มเอียงทีละขั้น
หลังถ่วงน้ำหนัก ให้ตรวจว่ากลุ่มทั้งสองเหมือนกันแล้วหรือยัง ผลต่างมาตรฐาน (standardized difference) เปรียบเทียบสัดส่วนของลักษณะหนึ่งในสองกลุ่มโดยใช้หน่วยของการกระจาย ก่อนถ่วงน้ำหนัก ผู้ป่วยที่ได้ C เป็นผู้ป่วยรุนแรง 0.80 เทียบกับ 0.20 ของผู้ป่วยที่ได้ A: $\frac{0.80-0.20}{\sqrt{(0.80\times0.20+0.20\times0.80)/2}}=1.50$ หลังถ่วงน้ำหนัก ทั้งสองกลุ่มเป็นผู้ป่วยรุนแรงครึ่งหนึ่ง ผลต่างจึงเป็น 0.00 ค่าที่เกิน 0.1 คือสัญญาณที่ใช้กันทั่วไปว่ายังไม่สมดุล
p-value ไม่ใช่วิธีตรวจที่ถูก เพราะค่านี้ขึ้นกับจำนวนผู้ป่วยพอ ๆ กับขนาดของความต่าง จึงวัดความสมดุลไม่ได้
การจับคู่ (matching) เป็นอีกวิธีที่ใช้คะแนนนี้ ผู้ป่วยที่ได้ C แต่ละคนถูกจับคู่กับผู้ป่วยที่ได้ A ที่มีคะแนนใกล้กัน ในเวชระเบียน ผู้ป่วยรุนแรงที่ได้ A มีเพียง 100 คน การจับคู่แบบหนึ่งต่อหนึ่งจึงหาคู่ให้ผู้ป่วยรุนแรงที่ได้ C ได้เพียง 100 จาก 400 คน ที่เหลือหลุดออกไป การจับคู่จึงตอบคำถามเกี่ยวกับผู้ป่วยแบบที่ได้ C ส่วนการถ่วงน้ำหนักเก็บผู้ป่วยไว้ครบ 1,000 คน และตอบคำถามสำหรับทั้งอำเภอ ซึ่งเป็นคำถามที่แบบจำลองถาม
# Writes: stdout only. Each patient counted 1 / (chance of the treatment they actually received) times.
chance_c <- c(severe = 400 / 500, mild = 100 / 500)
weight_c <- 1 / chance_c; weight_a <- 1 / (1 - chance_c)
patients_w <- c(C = sum(c(400, 100) * weight_c), A = sum(c(100, 400) * weight_a))
events_w <- c(C = sum(c(120, 3) * weight_c), A = sum(c(40, 16) * weight_a))
severe_w <- c(400 * weight_c[["severe"]], 100 * weight_a[["severe"]]) / patients_w
smd <- function(p) abs(p[1] - p[2]) / sqrt((p[1] * (1 - p[1]) + p[2] * (1 - p[2])) / 2)
f <- function(x, d) formatC(x, d, format = "f")
cat("Weights on C, severe / mild:", f(weight_c, 2), " on A:", f(weight_a, 2), "\n")
cat("Weighted patients C / A:", patients_w, " complications:", events_w, "\n")
cat("Weighted risk C / A:", f(100 * events_w / patients_w, 1), "%\n")
cat("Severe share, standardized difference before / after:", f(smd(c(0.80, 0.20)), 2),
f(smd(severe_w), 2), "(above 0.1 = imbalance)\n")
Weights on C, severe / mild: 1.25 5.00 on A: 5.00 1.25
Weighted patients C / A: 1000 1000 complications: 165 220
Weighted risk C / A: 16.5 22.0 %
Severe share, standardized difference before / after: 1.50 0.00 (above 0.1 = imbalance)
เลือกตัวแปรที่จะปรับจากแผนภาพ ไม่ใช่จาก p-value
อ่านก่อนในเว็บไซต์นี้:
- ตัวแปรแต่ละตัวมีบทบาทใดในแผนภาพเชิงสาเหตุ และควรจัดการแต่ละบทบาทอย่างไร
- การปรับตัวแปรตามแผนภาพโดยไม่สร้างอคติใหม่
- ผลของการรักษาแยกเป็นส่วนที่ผ่านตัวแปรคั่นกลางและส่วนที่เหลือได้อย่างไร
เวชระเบียนมีตัวแปรหลายสิบตัว และการปรับตัวแปรผิดตัวอาจสร้างอคติแทนที่จะขจัดมัน ให้ปรับสาเหตุร่วมของการรักษาและผลลัพธ์ เช่นความรุนแรงในรูปที่ 1 อย่าปรับตัวแปรคั่นกลาง (mediator) ซึ่งเป็นขั้นหนึ่งบนเส้นทางจาก C ไปสู่ผลลัพธ์ ถ้า C ได้ผลส่วนหนึ่งด้วยการลดค่าตัวบ่งชี้ในเลือด การเทียบผู้ป่วยที่มีค่าตัวบ่งชี้เท่ากันจะซ่อนประโยชน์ส่วนนั้นไว้ และแบบจำลองจะนับภาวะแทรกซ้อนที่ป้องกันได้น้อยกว่าที่ C ป้องกันได้จริง
อย่าปรับตัวแปรชน (collider) ซึ่งเป็นผลที่สาเหตุสองอย่างมีร่วมกัน เช่น การนอนโรงพยาบาลที่ทั้งผลข้างเคียงของ C และโรคที่รุนแรงต่างทำให้เกิดได้ ในผู้ป่วยที่นอนโรงพยาบาล สาเหตุทั้งสองจะเชื่อมโยงกันขึ้นมา C จึงอาจดูแย่กว่าหรือดีกว่าความจริง และจำนวนภาวะแทรกซ้อนที่ป้องกันได้ต่อผู้ป่วย 100 คนในแบบจำลองก็จะผิด
การคัดด้วย p-value แยกบทบาทเหล่านี้ไม่ออก ตัวแปรคั่นกลางที่แรงผ่านการคัดได้ แต่สาเหตุร่วมที่อ่อนแต่มีจริงอาจไม่ผ่าน ให้วาดสาเหตุก่อน แล้วรายชื่อตัวแปรจะตามมาจากแผนภาพ
อคติ: ความคลาดเคลื่อนที่ผู้ป่วยมากขึ้นก็แก้ไม่ได้
อ่านก่อนในเว็บไซต์นี้:
ความบังเอิญลดลงเมื่อการศึกษาใหญ่ขึ้น แต่อคติไม่ลด อคติคือความคลาดเคลื่อนเชิงระบบในวิธีที่การศึกษาวัดผู้ป่วย หรือเลือกว่าจะนับใคร การศึกษาที่ใหญ่ขึ้นสิบเท่าทำความคลาดเคลื่อนเดิมซ้ำ เพียงแต่แม่นยำขึ้น
สมมติว่าจัดการความรุนแรงแล้ว ความเสี่ยงจริงจึงเป็น 16.5% เมื่อได้ C และ 22.0% เมื่อได้ A ผู้ป่วยที่ได้ C กลับมาเจาะเลือดทุกเดือน ภาวะแทรกซ้อนทุกครั้งจึงถูกบันทึก ผู้ป่วยที่ได้ A กลับมาเฉพาะเมื่อไม่สบาย และเวชระเบียนบันทึกภาวะแทรกซ้อนของเขาได้ 4 ใน 5 ความเสี่ยงที่บันทึกเมื่อได้ A จึงเป็น $0.8\times22.0=17.6\%$ และอัตราส่วนเป็น $16.5/17.6=0.94$ ประโยชน์ส่วนใหญ่ของ C หายไป
นี่คืออคติจากการวัด (information bias) และเพราะบันทึกผลลัพธ์ในสองกลุ่มต่างกัน จึงเรียกว่าการจำแนกผิดที่ต่างกันระหว่างกลุ่ม (differential misclassification) ผู้ป่วยมากขึ้นสิบเท่าก็ยังได้ 0.94 เพียงแต่ช่วงแคบลง
ถ้าทั้งสองกลุ่มบันทึกภาวะแทรกซ้อนหายไป 1 ใน 5 เท่ากัน ซึ่งเรียกว่าการจำแนกผิดที่ไม่ต่างกันระหว่างกลุ่ม (non-differential misclassification) อัตราส่วนยังคงเป็น 0.75 แต่ความเสี่ยงจะลดเหลือ 13.2% และ 17.6% และผลต่างลดจาก 5.5 เหลือ 4.4 ต่อผู้ป่วย 100 คน แบบจำลองที่นับภาวะแทรกซ้อนที่ป้องกันได้จึงต้องการการนับที่ครบ ไม่ใช่แค่อัตราส่วนที่เป็นธรรม
เริ่มนับเวลาของผู้ป่วยทุกคนพร้อมกัน
อ่านก่อนในเว็บไซต์นี้:
- อคติจากช่วงเวลาที่ไม่มีทางเกิดเหตุการณ์ การสัมผัสที่เปลี่ยนตามเวลา และการวิเคราะห์แบบ landmark
- การจำลองการทดลองเป้าหมายด้วยข้อมูลจากการสังเกต
- ด้านต่าง ๆ ของ ROBINS-I สำหรับการศึกษาที่ไม่ได้สุ่ม
อคติจากการคัดเลือก (selection bias) มาจากว่าการศึกษานับใคร และเริ่มนับเมื่อใด ในเวชระเบียน C มักเริ่มให้หลังวินิจฉัยไปหลายสัปดาห์ ผู้ป่วยที่เกิดภาวะแทรกซ้อนก่อนวันนั้นจะไม่ได้เริ่ม C เวชระเบียนจึงจัดภาวะแทรกซ้อนนั้นไว้ในกลุ่ม A ผู้ป่วยที่ได้ C จึงต้องปลอดภาวะแทรกซ้อนจนถึงวันเริ่มยาเสมอ ตามวิธีที่จัดกลุ่ม
ลองนึกถึงผู้ป่วย 1,000 คนที่มีความเสี่ยงเท่ากัน 22.0% ตลอดปี กระจายเท่า ๆ กันทั้งปี และ C ที่ไม่มีผลใดเลย ในจำนวนนี้ 400 คนมีกำหนดเริ่ม C ที่สามเดือน และอีก 600 คนไม่เคยเริ่ม C เลย ก่อนถึงตอนนั้น 22 คนจาก 400 คนเกิดภาวะแทรกซ้อนและยังอยู่ในกลุ่ม A เมื่อนับจากวันวินิจฉัย C มีภาวะแทรกซ้อน 66 ครั้งในผู้ป่วย 378 คน (17.5%) และ A มี 154 ครั้งในผู้ป่วย 622 คน (24.8%) ได้อัตราส่วน 0.71 สำหรับการรักษาที่ไม่มีผลเลย
ทางแก้คือเริ่มนับเวลาของทุกคนพร้อมกัน จุดเริ่มนับเวลาที่ทุกคนใช้ร่วมกันนี้เรียกว่า time zero (เวลาศูนย์) เมื่อนับทั้งสองกลุ่มตั้งแต่สามเดือนในผู้ป่วยที่ยังไม่เกิดภาวะแทรกซ้อน A มีภาวะแทรกซ้อน 99 ครั้งในผู้ป่วย 567 คน คือ 17.5% เท่ากับ C ได้อัตราส่วน 1.00
ช่วงเดือนก่อนเริ่ม C ไม่ใช่ประโยชน์ของ C แต่เป็นเวลาที่ภาวะแทรกซ้อนนับเป็นของ C ไม่ได้ ความคลาดเคลื่อนนี้เรียกว่าอคติจากช่วงเวลาที่ไม่มีทางเกิดเหตุการณ์ (immortal time bias)
วิธีป้องกันทั่วไปคือเขียนการทดลองที่เวชระเบียนควรเลียนแบบออกมาก่อน พร้อมเกณฑ์การคัดเข้า แผนการรักษาสองแบบ time zero และผลลัพธ์ แล้ววิเคราะห์เวชระเบียนราวกับได้ทำการทดลองนั้นจริง วิธีนี้เรียกว่าการจำลองการทดลองเป้าหมาย (target-trial emulation) [3] ROBINS-I ซึ่งเป็นแบบตรวจสำหรับการศึกษาที่ไม่ได้สุ่ม ไล่ดูความคลาดเคลื่อนเหล่านี้ทีละด้าน [4]
# Writes: stdout only. 1,000 patients, same 22.0% one-year risk spread evenly; C does nothing.
starters <- 400; others <- 600; risk_year <- 0.22
early <- starters * risk_year * 3 / 12
risk_c <- (starters * risk_year * 9 / 12) / (starters - early)
risk_a <- (others * risk_year + early) / (others + early)
risk_a3 <- (others * risk_year * 9 / 12) / (others * (1 - risk_year * 3 / 12))
f <- function(x, d) formatC(x, d, format = "f")
cat("Complications before month 3 among those due to start C:", early, "\n")
cat("C from diagnosis:", starters * risk_year * 9 / 12, "of", starters - early, "\n")
cat("A from diagnosis:", others * risk_year + early, "of", others + early, "\n")
cat("A from month 3:", others * risk_year * 9 / 12, "of", others * (1 - risk_year * 3 / 12), "\n")
cat("From diagnosis, C/A:", f(100 * c(risk_c, risk_a), 1), "% ratio:", f(risk_c / risk_a, 2), "\n")
cat("Both from month 3, risk A:", f(100 * risk_a3, 1), "% ratio:", f(risk_c / risk_a3, 2), "\n")
Complications before month 3 among those due to start C: 22
C from diagnosis: 66 of 378
A from diagnosis: 154 of 622
A from month 3: 99 of 567
From diagnosis, C/A: 17.5 24.8 % ratio: 0.71
Both from month 3, risk A: 17.5 % ratio: 1.00
สิ่งที่เวชระเบียนไม่ได้วัด
การปรับมาตรฐานและการถ่วงน้ำหนักขจัดได้เฉพาะปัจจัยกวนที่วัดไว้ ถ้าแพทย์ยังประเมินความเปราะบางด้วยตา และให้ C กับผู้ป่วยที่ดูแข็งแรงกว่า เวชระเบียนก็ไม่มีคอลัมน์ใดเก็บข้อมูลนี้ ปัจจัยกวนที่ยังเหลืออยู่หลังการปรับเรียกว่าปัจจัยกวนที่หลงเหลือ (residual confounding)
คำถามหนึ่งช่วยได้ สาเหตุที่ไม่ได้วัดต้องแรงเพียงใดจึงจะอธิบายค่า 0.75 ได้ทั้งหมด สาเหตุนั้นต้องเชื่อมโยงทั้งกับการได้ C และกับการเกิดภาวะแทรกซ้อน ให้กลับ 0.75 เป็นอัตราส่วนที่มากกว่า 1 คือ $1/0.75=1.333$ แล้วคำนวณ $1.333+\sqrt{1.333\times0.333}=2.00$ สาเหตุที่ซ่อนอยู่ต้องทำให้ภาวะแทรกซ้อนเกิดได้มากขึ้น 2.00 เท่า และพบในกลุ่มการรักษาหนึ่งบ่อยกว่าอีกกลุ่ม 2.00 เท่า นอกเหนือจากความรุนแรง จึงจะดัน 0.75 ไปเป็น 1.00 ได้
ตัวเลขนี้เรียกว่า E-value [5] ถ้าเรียกอัตราส่วนที่กลับให้มากกว่า 1 ว่า $RR^*$ จะได้ $E=RR^*+\sqrt{RR^*(RR^*-1)}$ สำหรับปลายช่วงที่ใกล้ 1 ที่สุดคือ 0.99: $1/0.99=1.010$ และ $1.010+\sqrt{1.010\times0.010}=1.11$ สาเหตุที่ซ่อนอยู่ซึ่งอ่อนกว่ามากจึงดึงช่วงให้คร่อม 1 ได้
E-value วัดความเปราะบางของค่าประมาณ ไม่ใช่ค่าประมาณที่แก้แล้ว ตัวควบคุมเชิงลบ (negative control) ก็ช่วยได้ คือผลลัพธ์ที่ C ไม่มีทางมีผล เช่น การบาดเจ็บจากการหกล้ม ถ้าผู้ป่วยที่ได้ C หกล้มน้อยกว่าด้วย แปลว่ามีอย่างอื่นที่ไม่ใช่ C ทำงานอยู่ เช่น ผู้ป่วยที่กินยาสม่ำเสมอมักมีพฤติกรรมสุขภาพดีกว่า ซึ่งเรียกว่าผลของผู้ใช้ยาสม่ำเสมอที่สุขภาพดี (healthy-adherer effect)
การวิเคราะห์อคติเชิงปริมาณ (quantitative bias analysis) ไปไกลกว่านั้นอีกขั้น คือใส่ขนาดของอคติที่เป็นไปได้เข้าไปในการคำนวณ แบบที่ตัวอย่างการบันทึกทำเมื่อเปลี่ยน 0.75 เป็น 0.94
# Writes: stdout only. Two checks on bias: uneven recording, and the E-value for the result.
true_c <- 16.5; true_a <- 22.0
found <- 0.8
recorded_a <- found * true_a
inverse <- 1 / c(0.75, 0.99)
e_value <- inverse + sqrt(inverse * (inverse - 1))
f <- function(x, d) formatC(x, d, format = "f")
cat("A loses 1 in 5: risk on A", f(recorded_a, 1), "% ratio:", f(true_c / recorded_a, 2), "\n")
cat("Both lose 1 in 5, risks C / A:", f(found * c(true_c, true_a), 1), "%\n")
cat("Both lose 1 in 5, difference per 100:", f(found * (true_a - true_c), 1), "\n")
cat("1 / ratio for 0.75 and 0.99:", f(inverse, 3), " minus 1:", f(inverse - 1, 3), "\n")
cat("E-value for 0.75 and 0.99:", f(e_value, 2), "\n")
A loses 1 in 5: risk on A 17.6 % ratio: 0.94
Both lose 1 in 5, risks C / A: 13.2 17.6 %
Both lose 1 in 5, difference per 100: 4.4
1 / ratio for 0.75 and 0.99: 1.333 1.010 minus 1: 0.333 0.010
E-value for 0.75 and 0.99: 2.00 1.11
อะไรเข้าไปในแบบจำลองเศรษฐศาสตร์
แบบจำลองต้องการจำนวนภาวะแทรกซ้อนที่ป้องกันได้ในผู้ป่วยของอำเภอเอง ตัวเลขสามค่าบนโต๊ะให้ข้อมูลนำเข้าสามแบบ ตารางวางทั้งสามไว้เคียงกัน ทุกค่าในตารางคำนวณไว้แล้วข้างต้น
| แหล่งข้อมูล | ความเสี่ยงเมื่อได้ C เทียบกับ A | risk ratio (ช่วง 95%) | ต่อผู้ป่วย 100 คนที่รักษา |
|---|---|---|---|
| การทดลอง | 12.12% เทียบกับ 21.67% | 0.56 (0.25 ถึง 1.26) | ภาวะแทรกซ้อนน้อยลง 9.55 ครั้ง |
| เวชระเบียน รวมทุกคน | 24.6% เทียบกับ 11.2% | 2.20 (1.64 ถึง 2.94) | ภาวะแทรกซ้อนมากขึ้น 13.4 ครั้ง |
| เวชระเบียน ผู้ป่วยชุดเดียวกัน | 16.5% เทียบกับ 22.0% | 0.75 (0.57 ถึง 0.99) | ภาวะแทรกซ้อนน้อยลง 5.5 ครั้ง |
ความบังเอิญสะท้อนในแบบจำลองได้ แต่อคติสะท้อนไม่ได้
ถ้าป้อนเวชระเบียนที่รวมทุกคน แบบจำลองจะนับภาวะแทรกซ้อนเกินมา 13.4 ครั้งต่อผู้ป่วย 100 คน ให้กับการรักษาที่ป้องกันภาวะแทรกซ้อนได้จริง ต้นทุนหรือราคาใดก็ซ่อมข้อมูลนำเข้านี้ไม่ได้ ค่า 5.5 ต่อผู้ป่วย 100 คนที่ปรับมาตรฐานแล้วสมมติว่าความรุนแรงเป็นตัวกวนเพียงตัวเดียว และบันทึกภาวะแทรกซ้อนเท่ากัน และยังสมมติว่าผู้ป่วยของอำเภอเป็นผู้ป่วยรุนแรงครึ่งหนึ่งเหมือนเวชระเบียน ถ้าไม่ใช่ ให้ใช้ส่วนผสมของอำเภอเอง
ความบังเอิญสะท้อนในแบบจำลองได้ การวิเคราะห์ความไวเชิงความน่าจะเป็น (probabilistic sensitivity analysis, PSA) คือการรันแบบจำลองซ้ำหลายครั้งโดยสุ่มข้อมูลนำเข้าที่ไม่แน่นอนทุกตัว ผลจึงเป็นสัดส่วนของรอบ ไม่ใช่ตัวเลขเดียว แต่ละรอบให้ผลประโยชน์สุทธิส่วนเพิ่ม (net benefit) คือมูลค่าเงินของสุขภาพที่ได้มาลบด้วยต้นทุนที่เพิ่ม เมื่อผลประโยชน์สุทธิส่วนเพิ่มเฉลี่ย 10,000 บาท และส่วนเบี่ยงเบนมาตรฐาน 40,000 บาท จะมีราว 599 จาก 1,000 รอบที่การรักษาคุ้มค่า อ่านบทเรียนเต็มได้ที่ การวิเคราะห์ความไวแบบอาศัยความน่าจะเป็น: จากการแจกแจงพารามิเตอร์สู่ CEAC
ในที่นี้ นักวิเคราะห์รันแบบจำลองซ้ำ แต่ละรอบสุ่มอัตราส่วนจากการแจกแจงที่สร้างจากช่วง 0.57 ถึง 0.99 แล้วดูว่าผลขยับอย่างไร ที่ 0.57 แบบจำลองนับภาวะแทรกซ้อนที่ป้องกันได้ $22.0\times(1-0.57)=9.5$ ครั้งต่อผู้ป่วย 100 คน ที่ 0.99 เพียง 0.2 ครั้ง ผลส่วนใหญ่จึงตกอยู่ระหว่างสองค่านี้ และมีบางรอบที่เลยออกไป
แต่อคติสะท้อนแบบนั้นไม่ได้ เพราะ PSA ครอบคลุมเพียงความบังเอิญ ถ้าป้อนค่า 2.20 จากการรวมพร้อมช่วง 1.64 ถึง 2.94 เกือบทุกรอบจะนับเป็นโทษ และการกระจายที่แคบของผลจะดูน่าวางใจ [6] อคติต้องมีสถานการณ์ทดสอบของตัวเอง เช่นค่า 0.94 จากการบันทึกไม่เท่ากัน หรือต้องหาข้อมูลนำเข้าที่ดีกว่า
ตอนนี้การทดลองและเวชระเบียนที่ปรับมาตรฐานแล้วชี้ไปทางเดียวกัน และช่วงของการทดลองครอบค่า 0.75 ควรเชื่อข้อมูลนำเข้าแต่ละแบบมากเพียงใด และคณะกรรมการมั่นใจได้แค่ไหน คือคำถามเรื่องความเชื่อมั่นของหลักฐาน ซึ่งเป็นเรื่องของบทความถัดไป (พ้นจากพีระมิดหลักฐาน: ระดับความเชื่อมั่นตามแนวทาง GRADE และการเลือกข้อมูลประสิทธิผลเข้าสู่แบบจำลองทางเศรษฐศาสตร์)
# Writes: stdout only. The re-running recap, traced: the series' own example of extra net benefit across 1,000 runs.
gain_mean <- 10000
gain_sd <- 40000
runs <- 1000
share <- pnorm(gain_mean / gain_sd)
cat("Extra net benefit, average (THB):", gain_mean, "\n")
cat("Extra net benefit, standard deviation (THB):", gain_sd, "\n")
cat("Runs of the model:", runs, "\n")
cat("Runs that favour the treatment:", round(share * runs), "\n")
Extra net benefit, average (THB): 10000
Extra net benefit, standard deviation (THB): 40000
Runs of the model: 1000
Runs that favour the treatment: 599
คำศัพท์ที่เราใช้
- Chance (ความบังเอิญ (chance))
- ความคลาดเคลื่อนจากว่าผู้ป่วยคนใดบังเอิญเข้ามาในการศึกษา ลดลงเมื่อการศึกษาใหญ่ขึ้น
- 95% confidence interval (ช่วงความเชื่อมั่น 95%)
- ช่วงของผลจริงที่ข้อมูลยังตัดออกไปไม่ได้ สะท้อนเพียงความบังเอิญ
- Bias (อคติ (bias))
- ความคลาดเคลื่อนเชิงระบบในวิธีวัดหรือเลือกผู้ป่วย การศึกษาที่ใหญ่ขึ้นก็ทำซ้ำ
- Confounding (ปัจจัยกวน (confounding))
- ความต่างระหว่างกลุ่มการรักษา เช่นความรุนแรง ที่มีผลต่อผลลัพธ์ด้วยและปนเข้าไปในการเปรียบเทียบ
- DAG (แผนภาพเชิงสาเหตุ (DAG))
- แผนภาพของสาเหตุที่สมมติไว้ วาดเป็นลูกศรที่ไม่วนกลับ
- Mediator (ตัวแปรคั่นกลาง (mediator))
- ขั้นหนึ่งบนเส้นทางจากการรักษาไปสู่ผลลัพธ์ การปรับตัวแปรนี้ซ่อนผลบางส่วน
- Collider (ตัวแปรชน (collider))
- ผลที่สาเหตุสองอย่างมีร่วมกัน การคัดเลือกตามตัวแปรนี้ทำให้สาเหตุเชื่อมโยงกันอย่างลวง
- Standardization (การปรับมาตรฐาน (standardization))
- การเปรียบเทียบการรักษาราวกับให้ทั้งสองการรักษาแก่ผู้ป่วยชุดเดียวกัน
- Propensity score and IPTW (คะแนนความโน้มเอียงและการถ่วงน้ำหนักด้วยส่วนกลับของความน่าจะเป็นที่จะได้รับการรักษา (IPTW))
- โอกาสที่ผู้ป่วยจะได้รับการรักษา IPTW นับผู้ป่วยแต่ละคน 1 หารด้วยโอกาสนั้นเท่า
- Standardized difference (ผลต่างมาตรฐาน (standardized difference))
- ความต่างของลักษณะหนึ่งระหว่างกลุ่มในหน่วยของการกระจาย ค่าเกิน 0.1 หมายถึงไม่สมดุล
- Immortal time bias (อคติจากช่วงเวลาที่ไม่มีทางเกิดเหตุการณ์ (immortal time bias))
- การนับเวลาที่ผลลัพธ์ไม่มีทางถูกนับเป็นของการรักษาให้เป็นประโยชน์ของการรักษานั้น
- Target-trial emulation (การจำลองการทดลองเป้าหมาย (target-trial emulation))
- การวิเคราะห์เวชระเบียนตามการทดลองที่ควรเลียนแบบ ได้แก่ เกณฑ์เข้า แผนการรักษา จุดเริ่มนับเวลา และผลลัพธ์
- E-value (E-value)
- สาเหตุที่ซ่อนอยู่ต้องสัมพันธ์กับทั้งการรักษาและผลลัพธ์แรงเพียงใดจึงจะอธิบายค่าประมาณได้ทั้งหมด
เอกสารอ้างอิง
- Vandenbroucke JP, von Elm E, Altman DG, Gotzsche PC, Mulrow CD, Pocock SJ, Poole C, Schlesselman JJ, Egger M. Strengthening the Reporting of Observational Studies in Epidemiology (STROBE): explanation and elaboration. PLoS Med. 2007;4(10):e297. doi:10.1371/journal.pmed.0040297
- Muller CJ, MacLehose RF. Estimating predicted probabilities from logistic regression: different methods correspond to different target populations. Int J Epidemiol. 2014;43(3):962-970. doi:10.1093/ije/dyu029
- Hernan MA, Robins JM. Using big data to emulate a target trial when a randomized trial is not available. Am J Epidemiol. 2016;183(8):758-764. doi:10.1093/aje/kwv254
- Sterne JA, Hernan MA, Reeves BC, Savovic J, Berkman ND, Viswanathan M, Henry D, Altman DG, Ansari MT, Boutron I, Carpenter JR, Chan AW, Churchill R, Deeks JJ, Hrobjartsson A, Kirwan JR, Juni P, Loke YK, Pigott TD, Ramsay CR, Regidor D, Rothstein HR, Sandhu L, Santaguida PL, Schunemann HJ, Shea B, Shrier I, Tugwell P, Turner L, Valentine JC, Waddington H, Waters E, Wells GA, Whiting PF, Higgins JP. ROBINS-I: a tool for assessing risk of bias in non-randomised studies of interventions. BMJ. 2016;355:i4919. doi:10.1136/bmj.i4919
- VanderWeele TJ, Ding P. Sensitivity analysis in observational research: introducing the E-value. Ann Intern Med. 2017;167(4):268-274. doi:10.7326/M16-2607
- Briggs AH, Weinstein MC, Fenwick EAL, Karnon J, Sculpher MJ, Paltiel AD. Model parameter estimation and uncertainty: a report of the ISPOR-SMDM Modeling Good Research Practices Task Force-6. Value Health. 2012;15(6):835-842. doi:10.1016/j.jval.2012.04.014
ลำดับการเรียนในชุดนี้
- คู่มือชุดบทความเศรษฐศาสตร์สุขภาพ: อ่านหลักฐานก่อนอ่านต้นทุน
- อุบัติการณ์ ความชุก และตัวหารที่ถูกต้อง: ระบาดวิทยาเบื้องหลังต้นทุนความเจ็บป่วยและแบบจำลองมาร์คอฟ
- รูปแบบการศึกษา แบบจำลองทางสถิติ และเป้าหมายการประมาณค่า: แต่ละรูปแบบการศึกษาประมาณค่าอะไรได้จริง
- อัตราส่วนความเสี่ยง อัตราส่วนออดส์ ผลต่างความเสี่ยง และจำนวนที่ต้องรักษา: ตารางสองคูณสองเดียว คำตอบสี่แบบ
- อัตราส่วนฮาซาร์ดไม่ใช่อัตราส่วนความเสี่ยง: ข้อสมมติความเป็นสัดส่วนของฮาซาร์ด เวลารอดชีพเฉลี่ยแบบจำกัดช่วง และข้อมูลนำเข้าแบบจำลอง
- ความบังเอิญ อคติ และปัจจัยกวน: เหตุใดความสัมพันธ์ที่พบจึงยังไม่ใช่ผลของการรักษา (บทความนี้)
- พ้นจากพีระมิดหลักฐาน: ระดับความเชื่อมั่นตามแนวทาง GRADE และการเลือกข้อมูลประสิทธิผลเข้าสู่แบบจำลองทางเศรษฐศาสตร์
- จากความไวสู่ต้นทุนต่อผู้ป่วยหนึ่งรายที่ตรวจพบ: ค่าทำนายผลบวก ความชุก และเศรษฐศาสตร์ของการคัดกรอง
- ต้นทุนของใคร ณ ปีใด: มุมมองการวิเคราะห์ ต้นทุนค่าเสียโอกาส การปรับค่าเงินเฟ้อ และการปรับลดค่าตามเวลา
- ปีสุขภาวะ ปีสุขภาวะที่สูญเสีย และค่าอรรถประโยชน์: เรากำลังวัดอะไรกันแน่
- อัตราส่วนต้นทุนประสิทธิผลส่วนเพิ่มและระนาบต้นทุนประสิทธิผล: ทางเลือกที่ด้อยกว่า ผลประโยชน์สุทธิ และเกณฑ์ 160,000 บาทต่อปีสุขภาวะ
- ต้นไม้การตัดสินใจ แบบจำลองมาร์คอฟ และการวิเคราะห์ความไวเชิงความน่าจะเป็น: แบบจำลองแปลงหลักฐานเป็นการตัดสินใจได้อย่างไร
- คุ้มค่าไม่ได้แปลว่าจ่ายไหว มีประสิทธิภาพไม่ได้แปลว่าเป็นธรรม: ผลกระทบด้านงบประมาณและความเป็นธรรมทางสุขภาพ
- การคัดเลือกพารามิเตอร์ บัญชีต้นทุนอ้างอิง และฐานข้อมูลค่าอรรถประโยชน์เมื่อข้อมูลในประเทศมีจำกัด
- การประเมินเทคโนโลยีสุขภาพระยะเริ่มต้น เพดานราคาที่คุ้มค่า และการตัดสินใจชุดสิทธิประโยชน์
- การสื่อสารหลักฐานเศรษฐศาสตร์สุขภาพ: จากผลลัพธ์แบบจำลองสู่ข้อเสนอแนะเชิงนโยบาย
ประเด็นสำคัญ
- ความบังเอิญลดลงตามขนาดการศึกษา ผู้ป่วยมากขึ้นสิบเท่าจะทำให้ช่วงของการทดลองแคบลงจาก 0.25 ถึง 1.26 เหลือ 0.43 ถึง 0.72
- แม่นยำไม่ได้แปลว่าถูกต้อง เวชระเบียนที่รวมทุกคนให้ 2.20 (1.64 ถึง 2.94) กับการรักษาที่ลดความเสี่ยงลงหนึ่งในสี่
- เปรียบเทียบผู้ป่วยชุดเดียวกัน การปรับมาตรฐานและการถ่วงน้ำหนักให้ 16.5% เทียบกับ 22.0% risk ratio 0.75 เหมือนกัน
- อคติไม่ลดลงตามขนาดการศึกษา การบันทึกไม่เท่ากันเปลี่ยน 0.75 เป็น 0.94 และการนับจากวันวินิจฉัยทำให้ C ที่ไม่มีผลเลยดูเหมือนได้ 0.71
- แบบจำลองได้ภาวะแทรกซ้อนที่ป้องกันได้ 5.5 ครั้งต่อผู้ป่วย 100 คน การรันแบบจำลองซ้ำตามช่วงความเชื่อมั่นครอบคลุมเพียงความบังเอิญ อคติจึงต้องมีสถานการณ์ทดสอบของตัวเอง
อ่านต่อในวิกิ: รูปแบบการศึกษา แบบจำลองทางสถิติ และเป้าหมายการประมาณค่า: แต่ละรูปแบบการศึกษาประมาณค่าอะไรได้จริง · พ้นจากพีระมิดหลักฐาน: ระดับความเชื่อมั่นตามแนวทาง GRADE และการเลือกข้อมูลประสิทธิผลเข้าสู่แบบจำลองทางเศรษฐศาสตร์ · อัตราส่วนต้นทุนประสิทธิผลส่วนเพิ่มและระนาบต้นทุนประสิทธิผล: ทางเลือกที่ด้อยกว่า ผลประโยชน์สุทธิ และเกณฑ์ 160,000 บาทต่อปีสุขภาวะ · เมื่อ IPTW แล้วยังไม่ balance: ปรับ model หรือ weights แล้วตรวจ overlap และ balance ซ้ำ · Emulating the Target Trial: A Framework of Strengthening Causal Inference in Observational Research