กลุ่มประชากรเดียวกัน แต่ Odds Ratio สองค่า: Non-Collapsibility ที่ไม่มีตัวกวนเกี่ยวข้อง

Clinical Epidemiology ResearchMethodology and Research Design THUniqcret doctor knowledges TH
กลุ่มประชากรเดียวกัน แต่ Odds Ratio สองค่า: Non-Collapsibility ที่ไม่มีตัวกวนเกี่ยวข้อง
On this page

Read the English version

บทคัดย่อ

เมื่อการทดลองแบบสุ่มปรับ odds ratio ด้วยปัจจัยพยากรณ์โรค (prognostic factor) ที่มีผลแรง ซึ่งเป็นลักษณะที่ทำนายผลลัพธ์ ค่าประมาณมักขยับห่างจาก 1 ทั้งที่การสุ่มไม่ได้เหลือตัวกวนใดไว้ ต้นเหตุจึงเป็นอย่างอื่น นั่นคือความไม่ยุบรวมได้ (non-collapsibility) odds ratio ในผู้ป่วยที่มีค่าตัวแปรร่วมเดียวกัน (odds ratio แบบมีเงื่อนไข หรือ conditional odds ratio) ไม่จำเป็นต้องเท่ากับ odds ratio ของประชากรทั้งหมด (odds ratio ระดับประชากร หรือ marginal odds ratio) ในตัวอย่างคำนวณด้วยมือที่มีสองกลุ่มย่อยขนาดเท่ากัน แต่ละกลุ่มมี odds ratio เท่ากับ 2.00 และ odds ratio ระดับประชากรเท่ากับ 1.72 ส่วนอัตราส่วนความเสี่ยงและผลต่างความเสี่ยงยังเป็นค่าเฉลี่ยถ่วงน้ำหนักของค่าในแต่ละกลุ่มย่อย ในข้อมูลจำลองผู้ป่วยกระดูกสะโพกหัก แบบจำลองโลจิสติกหนึ่งแบบให้ odds ratio แบบมีเงื่อนไขของการผ่าตัดเร็วเท่ากับ 0.70 และเมื่อเฉลี่ยความเสี่ยงที่ทำนายได้ทั่วทั้งกลุ่มประชากร (การปรับมาตรฐานระดับประชากร หรือ marginal standardisation) ได้ odds ratio ระดับประชากรเท่ากับ 0.81 บทความนี้สรุปว่า odds ratio แบบมีเงื่อนไขกับแบบระดับประชากรเป็น estimand คนละตัว คือปริมาณเป้าหมายของการประมาณ ดังนั้นควรรายงาน odds ratio ทุกค่าพร้อม estimand ของมัน


ภาพสรุป ข้อมูลจำลอง และตัวอย่างคำนวณด้วยมือ

คณะกรรมการอำนวยการการทดลองกับ odds ratio สองค่า

คณะกรรมการอำนวยการการทดลอง (trial steering committee) กำลังทบทวนการทดลองแบบสุ่มของการรักษาใหม่สำหรับโรคอักเสบเรื้อรัง ผลลัพธ์คือการตอบสนองเมื่อสิ้นสุดการรักษา odds ratio ที่ไม่ได้ปรับสำหรับการตอบสนองเท่ากับ 1.72

แผนวิเคราะห์ที่กำหนดไว้ล่วงหน้าให้ปรับด้วยความรุนแรงของโรคตอนเริ่มต้น ซึ่งเป็นปัจจัยพยากรณ์โรค (prognostic factor) ที่มีผลแรง คือลักษณะที่ทำนายผลลัพธ์ไม่ว่าผู้ป่วยจะได้รับการรักษาแบบใด odds ratio ที่ปรับแล้วเท่ากับ 2.00 ซึ่งห่างจาก 1 มากขึ้น นักวิจัยท่านหนึ่งถามว่าการปรับนั้นกำจัดตัวกวนอะไรออกไป ในเมื่อการสุ่มทำให้ความรุนแรงของโรคสมดุลกันระหว่างสองกลุ่มอยู่แล้ว

การปรับไม่ได้กำจัดตัวกวนใดเลย ตัวเลขทั้งสองถูกต้อง และตอบคำถามต่างกัน การทดลองนี้เป็นตัวอย่างคำนวณด้วยมือ ซึ่งแสดงวิธีคิดไว้ด้านล่าง

สองกลุ่มย่อยที่มี odds ratio เท่ากัน

ให้ $A$ เป็นการรักษา (1 คือได้รับการรักษา 0 คือกลุ่มควบคุม) $Y$ เป็นการตอบสนอง (1 คือตอบสนอง 0 คือไม่ตอบสนอง) และ $Z$ เป็นความรุนแรงของโรค (1 คือไม่รุนแรง 0 คือรุนแรง) ผู้ป่วยที่มีค่า $Z$ เดียวกันเรียกว่ากลุ่มย่อย (stratum, พหูพจน์ strata) คำว่า "ความเสี่ยง" ในที่นี้หมายถึงความน่าจะเป็นของผลลัพธ์ แม้ผลลัพธ์นั้นจะเป็นสิ่งที่พึงประสงค์ อัตราส่วนความเสี่ยง (risk ratio, RR) คือความเสี่ยงของกลุ่มที่ได้รับการรักษาหารด้วยความเสี่ยงของกลุ่มควบคุม ส่วนผลต่างความเสี่ยง (risk difference, RD) คือความเสี่ยงของกลุ่มที่ได้รับการรักษาลบด้วยความเสี่ยงของกลุ่มควบคุม

odds ratio แบบมีเงื่อนไข (conditional odds ratio) หรือ $\mathrm{OR}_c$ เปรียบเทียบสองกลุ่มในผู้ป่วยที่มีค่า $Z$ เดียวกัน ส่วนodds ratio ระดับประชากร (marginal odds ratio) หรือ $\mathrm{OR}_m$ เปรียบเทียบสองกลุ่มในประชากรทั้งหมดของการทดลอง ผู้ป่วยครึ่งหนึ่งมีโรคไม่รุนแรง และในตัวอย่างคำนวณด้วยมือนี้ทั้งสองกลุ่มมีสัดส่วนเท่ากันพอดี เหมือนที่การสุ่มให้ผลโดยเฉลี่ย การรักษาจึงเป็นอิสระจาก $Z$ และไม่มีตัวกวน

ตัวอย่างคำนวณด้วยมือ: odds ratio เท่ากับ 2.00 ในแต่ละกลุ่มย่อย

ตัวอย่างคำนวณด้วยมือ การตอบสนองในกลุ่มควบคุมคือ 10.0% ในโรคที่รุนแรง ($Z = 0$) และ 50.0% ในโรคที่ไม่รุนแรง ($Z = 1$) กลุ่มย่อยทั้งสองมีขนาดเท่ากัน และการรักษาเพิ่ม odds เป็นสองเท่าในทั้งสองกลุ่ม odds คือความเสี่ยงหารด้วยหนึ่งลบความเสี่ยง ส่วนความเสี่ยงคือ odds หารด้วยหนึ่งบวก odds

  1. โรครุนแรง กลุ่มควบคุม

    \[ \text{odds} = \frac{0.100}{1 - 0.100} = 0.111 \]

    odds ของการตอบสนองเมื่อไม่ได้รับการรักษา

  2. โรครุนแรง กลุ่มที่ได้รับการรักษา

    \[ \text{odds} = 2.00 \times 0.111 = 0.222 \]

    ความเสี่ยงของกลุ่มที่ได้รับการรักษาคือ 0.182 ดังนั้น RR ของกลุ่มย่อยเท่ากับ 1.82 และ RD เท่ากับ 0.082

  3. โรคไม่รุนแรง

    \[ \text{odds} = \frac{0.500}{1 - 0.500} = 1.000 \]

    odds ของกลุ่มที่ได้รับการรักษาคือ 2.000 และความเสี่ยงคือ 0.667 ดังนั้น RR ของกลุ่มย่อยเท่ากับ 1.33 และ RD เท่ากับ 0.167

  4. ความเสี่ยงระดับประชากร

    \[ p_0 = \frac{0.100 + 0.500}{2} = 0.300, \;\; p_1 = \frac{0.182 + 0.667}{2} = 0.424 \]

    ในที่นี้ $p_0$ และ $p_1$ คือความเสี่ยงของทั้งกลุ่มควบคุมและทั้งกลุ่มที่ได้รับการรักษา แต่ละค่าเป็นค่าเฉลี่ยธรรมดาของความเสี่ยงในกลุ่มย่อย คำนวณจากค่าที่ยังไม่ปัดเศษ

  5. odds ratio ระดับประชากร

    \[ \mathrm{OR}_m = \frac{0.424 / 0.576}{0.300 / 0.700} = \frac{0.737}{0.429} = 1.72 \]

    ทุกกลุ่มย่อยมี odds ratio เท่ากับ 2.00 แต่ odds ratio ระดับประชากรที่คำนวณจากความเสี่ยงที่ยังไม่ปัดเศษเท่ากับ 1.72

  6. RR และ RD ระดับประชากร

    \[ \mathrm{RR}_m = \frac{0.424}{0.300} = 1.41, \;\; \mathrm{RD}_m = 0.424 - 0.300 = 0.124 \]

    RR ระดับประชากรเป็นค่าเฉลี่ยถ่วงน้ำหนักของ RR ในกลุ่มย่อย คือ $0.167 \times 1.82 + 0.833 \times 1.33 = 1.41$ โดยน้ำหนักเท่ากับสัดส่วนของผู้ตอบสนองในกลุ่มควบคุมที่อยู่ในกลุ่มย่อยนั้น (ในที่นี้เป็นสัดส่วนกับความเสี่ยงของกลุ่มควบคุม เพราะกลุ่มย่อยมีขนาดเท่ากัน) ส่วน RD ระดับประชากรเป็นค่าเฉลี่ยของ 0.082 และ 0.167 โดยคลาดเคลื่อนจากการปัดเศษเท่านั้น

ผลลัพธ์: $\mathrm{OR}_m = 1.72$ อยู่นอกช่วงของ odds ratio ในกลุ่มย่อย จึงไม่ใช่ค่าเฉลี่ยของ odds ratio เหล่านั้น ส่วน RR และ RD ระดับประชากรอยู่ระหว่างค่าของกลุ่มย่อย

มาตรวัดที่ยุบรวมได้และยุบรวมไม่ได้

มาตรวัดหนึ่งยุบรวมได้ (collapsible) เมื่อไม่มีตัวกวน และค่าระดับประชากรของมันเป็นค่าเฉลี่ยถ่วงน้ำหนักของค่าในแต่ละกลุ่มย่อย [1, 2] RD และ RR ยุบรวมได้ ดังที่ตัวอย่างคำนวณด้วยมือแสดงไว้ แต่ odds ratio ไม่เป็นเช่นนั้น นี่คือความไม่ยุบรวมได้ (non-collapsibility) [1, 3]

อัตราส่วนฮาซาร์ด (hazard ratio) ก็ยุบรวมไม่ได้เช่นกัน มันเปรียบเทียบอัตราการเกิดเหตุการณ์ทันทีของสองกลุ่มในผู้ป่วยที่ยังไม่เกิดเหตุการณ์ และมักประมาณด้วยแบบจำลอง Cox ซึ่งเป็นการถดถอยมาตรฐานสำหรับข้อมูลเวลาจนเกิดเหตุการณ์

สาเหตุอยู่ที่มาตรวัด odds เมื่อปัจจัยพยากรณ์โรคเป็นตัวแปรสองค่า แบบจำลองโลจิสติกคือ

$$\operatorname{logit} P(Y = 1 \mid A, Z) = \beta_0 + \beta_1 A + \beta_2 Z$$

ในสมการนี้ $\operatorname{logit}(p) = \ln\{p/(1 - p)\}$ คือลอการิทึมของ odds (log odds) $\beta$ แต่ละตัวคือสัมประสิทธิ์ และ $\mathrm{OR}_c = \exp(\beta_1)$ ในทุกกลุ่มย่อย การรวมข้อมูลเฉลี่ยความเสี่ยงของกลุ่มย่อย ไม่ได้เฉลี่ย log odds และ log odds ของค่าเฉลี่ยไม่เท่ากับค่าเฉลี่ยของ log odds พิสูจน์ได้ว่าเมื่อการรักษาเป็นอิสระจาก $Z$ มีทั้งสองกลุ่มย่อย และ $\beta_1 \neq 0$ กับ $\beta_2 \neq 0$ ค่า $\mathrm{OR}_m$ จะอยู่ใกล้ 1 กว่า $\mathrm{OR}_c$ [4]

ช่องว่างนี้กว้างขึ้นตามความแรงของปัจจัยพยากรณ์โรคและขนาดของผล ช่องว่างจะเล็กเมื่อผลลัพธ์พบน้อยในทุกกลุ่มย่อย เพราะ odds ratio จะใกล้เคียง RR ภาวะสับสนเฉียบพลัน (delirium) หลังกระดูกสะโพกหัก ซึ่งเท่ากับ 31.0% ในข้อมูลจำลองด้านล่าง ไม่ใช่ผลลัพธ์ที่พบน้อย

ตัวอย่างคำนวณด้วยมือ เลื่อนความเสี่ยงของกลุ่มควบคุมในแต่ละกลุ่มย่อย สัดส่วนของผู้ป่วยที่มี $Z = 1$ และ odds ratio ร่วม แผงจะแสดง odds ratio ทั้งสองแบบ พร้อม RR และ RD ระดับประชากร โดยการรักษาเป็นอิสระจาก $Z$ ค่าเริ่มต้นคือตัวอย่างคำนวณด้วยมือ (ความเสี่ยงของกลุ่มควบคุม 0.100 และ 0.500 กลุ่มย่อยขนาดเท่ากัน odds ratio เท่ากับ 2.00) หากความเสี่ยงของกลุ่มควบคุมเท่ากันในสองกลุ่มย่อย หรือ odds ratio เท่ากับ 1 odds ratio ทั้งสองแบบจะตรงกัน แถบด้านล่างของแผงแสดงซ้ำคู่ค่าจากประชากรขนาดใหญ่ในกระดูกสะโพกหัก (ข้อมูลจำลอง)

Estimand ที่ถูกต้องสองแบบ

Estimand (ปริมาณเป้าหมายของการประมาณ) คือปริมาณที่แน่ชัดที่การศึกษาตั้งใจประมาณ ได้แก่ประชากร การเปรียบเทียบ และมาตรวัดสรุป $\mathrm{OR}_c$ ตอบคำถามเกี่ยวกับผู้ป่วยหนึ่งคนที่มีความรุนแรงของโรคค่าหนึ่ง ส่วน $\mathrm{OR}_m$ ตอบคำถามเกี่ยวกับประชากร คือ odds ของการตอบสนองจะเปลี่ยนไปอย่างไรหากทุกคนได้รับการรักษาแทนที่จะไม่มีใครได้รับ

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

odds ratio แบบมีเงื่อนไขกับแบบระดับประชากร รวมทั้ง hazard ratio ทั้งสองแบบ อาจต่างกันได้แม้ไม่มีตัวกวนเลย ในการทดลองแบบสุ่ม การปรับด้วยปัจจัยพยากรณ์โรคที่มีผลแรงมักทำให้ odds ratio ขยับห่างจาก 1 มากขึ้น นั่นคือการเปลี่ยน estimand ไม่ใช่การกำจัดความลำเอียง

ตัวกวนเป็นปัญหาอีกอย่าง คือสาเหตุร่วมของการรักษาและผลลัพธ์ ซึ่งทำให้การเปรียบเทียบแบบดิบลำเอียงสำหรับ estimand ทั้งสองแบบ ความไม่ยุบรวมได้ไม่ต้องมีสาเหตุร่วม ดังนั้นช่องว่างระหว่าง $\mathrm{OR}_c$ กับ $\mathrm{OR}_m$ ในประชากรและชุดตัวแปรร่วมเดียวกัน ไม่ได้เป็นหลักฐานของตัวกวนโดยลำพัง [1, 5]

เมื่อความต่างนี้มีความสำคัญ

การปรับในการทดลองแบบสุ่ม การเพิ่มปัจจัยพยากรณ์โรคเข้าไปเปลี่ยนเป้าหมายจาก $\mathrm{OR}_m$ เป็น $\mathrm{OR}_c$ ซึ่งมักห่างจาก 1 มากกว่า [4] ค่าคลาดเคลื่อนมาตรฐานของมันใหญ่กว่า แต่การทดสอบว่าไม่มีผลมักมีอำนาจการทดสอบ (power) เพิ่มขึ้น [6]

การวัดซ้ำ สำหรับผลลัพธ์สองค่าที่วัดหลายครั้ง สมการประมาณค่าวางนัยทั่วไป (generalized estimating equations, GEE) ซึ่งเป็นวิธีถดถอยที่สร้างแบบจำลองผลลัพธ์เฉลี่ยข้ามผู้ป่วย โดยยอมให้การวัดหลายครั้งของผู้ป่วยคนเดียวกันสัมพันธ์กัน จะประมาณ odds ratio ระดับประชากร ส่วนแบบจำลองผสมเชิงเส้นวางนัยทั่วไป (generalized linear mixed model, GLMM) ซึ่งเป็นแบบจำลองโลจิสติกที่มีผลสุ่มเลื่อน odds เริ่มต้นของผู้ป่วยแต่ละคน จะประมาณ odds ratio แบบมีเงื่อนไข ซึ่งมักห่างจาก 1 มากกว่า คู่มือเลือกแบบจำลองสำหรับการวัดซ้ำกล่าวถึงการเลือกนี้

การวิเคราะห์การรอดชีพ ในการทดลองแบบสุ่ม การเพิ่มปัจจัยพยากรณ์โรคที่มีผลแรงเข้าไปในแบบจำลอง Cox มักทำให้ hazard ratio ขยับห่างจาก 1 [4] บทความเรื่องเส้น Kaplan-Meier และแบบจำลอง Coxวางเรื่องนี้ไว้ท่ามกลางวิธีอ่าน hazard ratio แบบอื่น

จากแบบจำลองที่ปรับแล้วสู่ odds ratio ระดับประชากร

แบบจำลองโลจิสติกที่ปรับแล้วยังให้ $\mathrm{OR}_m$ ได้ การปรับมาตรฐานระดับประชากร (marginal standardisation) ซึ่งเรียกอีกชื่อว่า g-computation หรือ regression standardisation ทำนายความเสี่ยงของผู้ป่วยทุกคนสองครั้งจากแบบจำลองที่ฟิตแล้ว ครั้งแรกกำหนดให้การรักษาเป็น 1 และครั้งที่สองเป็น 0 โดยคงตัวแปรร่วมของผู้ป่วยแต่ละคนไว้ตามเดิม เมื่อเฉลี่ยแต่ละชุดทั่วทั้งกลุ่มประชากรจะได้ความเสี่ยงระดับประชากรสองค่า คือ $\hat p_1$ และ $\hat p_0$ โดยเครื่องหมายหมวกแสดงว่าเป็นค่าประมาณ

$$\widehat{\mathrm{OR}}_m = \frac{\hat p_1 / (1 - \hat p_1)}{\hat p_0 / (1 - \hat p_0)}$$

สูตรนี้คือ odds ratio ของความเสี่ยงเฉลี่ยสองค่า และความเสี่ยงชุดเดียวกันให้ RR และ RD ระดับประชากรด้วย ใน Stata ขั้นตอนเหล่านี้คือ margins และ nlcom ใน R คือ avg_comparisons() จากแพ็กเกจ marginaleffects ช่วงเชื่อมั่นได้จากวิธีเดลตา (delta method) ซึ่งเป็นการประมาณมาตรฐานสำหรับตัวอย่างขนาดใหญ่ ตอนเรื่อง risk ratio ในชุดบทความนี้ใช้ขั้นตอนเดียวกัน

การถ่วงน้ำหนักด้วยส่วนกลับของความน่าจะเป็นในการได้รับการรักษา (inverse probability of treatment weighting, IPTW) ซึ่งถ่วงน้ำหนักผู้ป่วยเพื่อให้การรักษาไม่ขึ้นกับตัวแปรร่วมที่วัดไว้อีกต่อไป ก็มุ่งไปที่ odds ratio ระดับประชากรเช่นกัน การถดถอยที่ปรับแล้วกับการวิเคราะห์ถ่วงน้ำหนักที่ถูกต้องของกลุ่มประชากรเดียวกันจึงให้ผลต่างกันได้โดยไม่มีฝ่ายใดผิดพลาด

ความไม่ยุบรวมได้ในข้อมูลจำลองกระดูกสะโพกหัก

ทะเบียนผู้ป่วยจำลองมีผู้สูงอายุที่กระดูกสะโพกหัก 20,000 คน สิ่งสัมผัสคือการผ่าตัดภายในหนึ่งวันหลังรับไว้ในโรงพยาบาล (surg24) และผลลัพธ์คือภาวะสับสนเฉียบพลันหลังผ่าตัด ซึ่งเกิด 31.0% ของทั้งหมด ผู้ป่วยที่อ่อนแอ (frail) และผู้ป่วยที่มีภาวะสมองเสื่อมต้องรอนานกว่า การเปรียบเทียบในทะเบียนจึงมีตัวกวน การทดลองแบบสุ่มที่ซ้อนอยู่ในทะเบียนสุ่มให้ผู้ป่วย 950 คนผ่าตัดเร็ว

ภาวะอ่อนแอ (frailty) ทำนายภาวะสับสนเฉียบพลันได้แรง และในโลกจำลองนี้ยังเปลี่ยนผลของการผ่าตัดเร็วด้วย odds ratio แบบมีเงื่อนไขที่แท้จริงเท่ากับ 0.50 ในผู้ป่วยที่ไม่อ่อนแอ และ 1.00 ในผู้ป่วยที่อ่อนแอ คำว่า "แบบมีเงื่อนไข" ในที่นี้หมายถึงในกลุ่มผู้ป่วยที่เหมือนกันทุกลักษณะที่การจำลองใช้สร้างภาวะสับสนเฉียบพลัน

คู่ค่าจากประชากรขนาดใหญ่

เพื่อตัดความบังเอิญออก การจำลองยังคำนวณ odds ratio แต่ละแบบในประชากรขนาดใหญ่มากจากตัวสร้างข้อมูลเดียวกัน ในผู้เข้าร่วมการทดลองที่ไม่อ่อนแอ odds ratio ระดับประชากรเท่ากับ 0.52 เทียบกับค่าแบบมีเงื่อนไขที่ 0.50 การรักษาถูกสุ่ม และตามการออกแบบของการจำลอง odds ratio แบบมีเงื่อนไขเท่ากันในผู้ป่วยที่ไม่อ่อนแอทุกคน ช่องว่างนี้จึงเป็นความไม่ยุบรวมได้ล้วน ๆ

ในกลุ่มประชากรจำลองนี้ โอกาสเข้าร่วมการทดลองถูกกำหนดให้ต่ำลงในผู้ที่อายุมากกว่า ผู้ที่อ่อนแอ ผู้ที่มีภาวะสมองเสื่อม และผู้ที่มีปัจจัยเสี่ยงอื่นของภาวะสับสนเฉียบพลัน ภาวะสับสนเฉียบพลันในการทดลองจึงพบน้อยกว่าในทะเบียนทั้งหมด (31.0%) ช่องว่างในผู้ที่ไม่อ่อนแอข้างต้นจึงเล็ก ส่วนในคู่ค่าจากทะเบียนด้านล่างซึ่งภาวะสับสนเฉียบพลันพบบ่อย ช่องว่างจะใหญ่กว่า

ในผู้ป่วยที่อ่อนแอ ค่าทั้งสองแบบเท่ากับ 1.00 เพราะ odds ratio เท่ากับ 1 ยุบรวมได้ ในผู้เข้าร่วมการทดลองทั้งหมด odds ratio ระดับประชากรเท่ากับ 0.69 แบบจำลองโลจิสติกที่ปรับด้วยตัวแปรร่วมหกตัวมีค่าในตัวอย่างขนาดใหญ่เท่ากับ 0.65 การปรับจึงทำให้ odds ratio ขยับห่างจาก 1

ตัวแปรร่วมคืออายุ เพศ ภาวะอ่อนแอ ภาวะสมองเสื่อม ระดับสภาวะทางกายตามเกณฑ์ของ American Society of Anesthesiologists (ASA) ตั้งแต่ 3 ขึ้นไป และการใช้ยาต้านการแข็งตัวของเลือด เมื่อไม่มีพจน์ภาวะอ่อนแอคูณการรักษา ค่า 0.65 เป็นค่าประนีประนอมระหว่าง 0.50 กับ 1.00 ไม่ใช่ผลระดับผู้ป่วยรายเดียว

แบบจำลองหนึ่งแบบ odds ratio สองค่า

ภาพประกอบที่สองฟิตแบบจำลองโลจิสติกหนึ่งแบบ ด้วยตัวแปรร่วมหกตัวชุดเดียวกัน กับผู้ป่วยในทะเบียนทั้ง 20,000 คน ค่าเอกซ์โปเนนเชียลของสัมประสิทธิ์การรักษา ซึ่งคือ odds ratio แบบมีเงื่อนไข เท่ากับ 0.70 (ช่วงเชื่อมั่น 95% คือ 0.64 ถึง 0.76) การปรับมาตรฐานระดับประชากรของแบบจำลองเดียวกันให้ odds ratio ระดับประชากรเท่ากับ 0.81 (ช่วงเชื่อมั่น 95% คือ 0.77 ถึง 0.85)

ทั้งสองค่ามาจากแบบจำลองเดียว ที่ปรับตัวกวนที่วัดไว้ด้วยวิธีเดียว ตัวกวนใดที่แบบจำลองยังเหลืออยู่ย่อมกระทบตัวเลขทั้งสอง ดังนั้นสำหรับแบบจำลองนั้น ช่องว่างระหว่างสองค่าจึงเป็นความไม่ยุบรวมได้ ไม่ใช่ตัวกวนที่เหลืออยู่ เช่นเดียวกับ 0.65 ค่า 0.70 เป็นค่าประนีประนอมข้ามระดับของภาวะอ่อนแอ เพราะแบบจำลองไม่มีพจน์ภาวะอ่อนแอคูณการรักษา เหมือนทุกการเปรียบเทียบที่ไม่เป็นศูนย์ข้างต้น odds ratio ระดับประชากรคือค่าที่ใกล้ 1 กว่า

ข้อมูลจำลอง odds ratio ของการผ่าตัดเร็วต่อภาวะสับสนเฉียบพลัน (ค่าต่ำกว่า 1 เข้าข้างการผ่าตัดเร็ว) แถวจากประชากรขนาดใหญ่มาจากตัวสร้างข้อมูล ส่วนแถวทะเบียนแสดงช่วงเชื่อมั่น 95%
แหล่งที่มาประชากรodds ratio แบบมีเงื่อนไขหรือแบบที่ปรับแล้วodds ratio ระดับประชากร
ค่าจริงในประชากรขนาดใหญ่ผู้เข้าร่วมการทดลองที่ไม่อ่อนแอ0.500.52
ค่าจริงในประชากรขนาดใหญ่ผู้เข้าร่วมการทดลองที่อ่อนแอ1.001.00
ค่าจริงในประชากรขนาดใหญ่ผู้เข้าร่วมการทดลองทั้งหมด0.65 (แบบจำลองที่มีตัวแปรร่วมหกตัว)0.69
แบบจำลองที่ฟิตหนึ่งแบบผู้ป่วยในทะเบียนทั้ง 20,000 คน0.70 (0.64 ถึง 0.76)0.81 (0.77 ถึง 0.85)

Stata: แบบจำลองหนึ่งแบบ odds ratio สองค่า

โค้ด Stata w1_sim.do (บรรทัด 504-507 จาก 719)
logit delirium i.surg24 age_c female frail dementia asa3 anticoag
ciz c5.or_cond 1.surg24 exp
margins surg24, post
nlcom (rd: _b[1.surg24] - _b[0.surg24]) (lnrr: ln(_b[1.surg24]/_b[0.surg24])) (lnor: ln((_b[1.surg24]/(1 - _b[1.surg24]))/(_b[0.surg24]/(1 - _b[0.surg24])))), post
ผลลัพธ์จากการรัน w1_sim.log
. logit delirium i.surg24 age_c female frail dementia asa3 anticoag

Iteration 0:  Log likelihood = -12384.413
Iteration 1:  Log likelihood = -8110.2012
Iteration 2:  Log likelihood = -7862.3384
Iteration 3:  Log likelihood = -7859.1356
Iteration 4:  Log likelihood =  -7859.132
Iteration 5:  Log likelihood =  -7859.132

Logistic regression                                    Number of obs =  20,000
                                                       LR chi2(7)    = 9050.56
                                                       Prob > chi2   =  0.0000
Log likelihood = -7859.132                             Pseudo R2     =  0.3654

------------------------------------------------------------------------------
    delirium | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
    1.surg24 |  -.3588307   .0437061    -8.21   0.000    -.4444931   -.2731684
       age_c |   .0536275   .0020106    26.67   0.000     .0496868    .0575682
      female |  -.0455033   .0437455    -1.04   0.298    -.1312429    .0402362
       frail |    1.85723   .0425718    43.63   0.000      1.77379    1.940669
    dementia |   2.056683   .0450837    45.62   0.000      1.96832    2.145045
        asa3 |   .4778636   .0438002    10.91   0.000     .3920168    .5637103
    anticoag |   .1739927   .0528003     3.30   0.001      .070506    .2774794
       _cons |  -2.654324   .0611431   -43.41   0.000    -2.774162   -2.534485
------------------------------------------------------------------------------

. ciz c5.or_cond 1.surg24 exp
CANON w1.c5.or_cond 0.6985
CANON w1.c5.or_cond.lo 0.6411
CANON w1.c5.or_cond.hi 0.7610

. margins surg24, post

Predictive margins                                      Number of obs = 20,000
Model VCE: OIM

Expression: Pr(delirium), predict()

------------------------------------------------------------------------------
             |            Delta-method
             |     Margin   std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
      surg24 |
          0  |   .3274425   .0033774    96.95   0.000      .320823     .334062
          1  |   .2820044   .0042555    66.27   0.000     .2736638    .2903449
------------------------------------------------------------------------------

. nlcom (rd: _b[1.surg24] - _b[0.surg24]) (lnrr: ln(_b[1.surg24]/_b[0.surg24])) (lnor: ln((_b[1.surg24]/(1 - _b[1.surg24
> ]))/(_b[0.surg24]/(1 - _b[0.surg24])))), post

          rd: _b[1.surg24] - _b[0.surg24]
        lnrr: ln(_b[1.surg24]/_b[0.surg24])
        lnor: ln((_b[1.surg24]/(1 - _b[1.surg24]))/(_b[0.surg24]/(1 - _b[0.surg24])))

------------------------------------------------------------------------------
             | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
          rd |  -.0454381   .0056018    -8.11   0.000    -.0564174   -.0344587
        lnrr |  -.1493897   .0188227    -7.94   0.000    -.1862814   -.1124979
        lnor |  -.2147655   .0268091    -8.01   0.000    -.2673104   -.1622206
------------------------------------------------------------------------------
ข้อมูลจำลอง ผลลัพธ์จากโค้ดที่แสดง ซึ่งเป็นข้อความที่ตัดมาจากสคริปต์จำลองข้อมูลของชุดบทความนี้ ชื่อไฟล์และช่วงบรรทัดจึงบอกเพียงที่มา ตาราง logit ให้สัมประสิทธิ์ของการรักษาบนมาตรา log odds และค่าเอกซ์โปเนนเชียลของมัน ซึ่งตัวช่วย ciz ของผู้เขียนพิมพ์ออกมาพร้อมช่วงเชื่อมั่น 95% คือ odds ratio แบบมีเงื่อนไข 0.70 (0.64 ถึง 0.76) จากนั้น margins เฉลี่ยความเสี่ยงที่ทำนายได้ของผู้ป่วยทุกคนทั่วทั้งทะเบียน โดยกำหนดให้การรักษาเป็น 0 แล้วเป็น 1 และ nlcom แปลงค่าเฉลี่ยสองค่าเป็นผลต่างความเสี่ยง (rd) ลอการิทึมของอัตราส่วนความเสี่ยง (lnrr) และลอการิทึมของ odds ratio (lnor) ค่าเอกซ์โปเนนเชียลของแถว lnor คือ odds ratio ระดับประชากร 0.81 (0.77 ถึง 0.85) บรรทัดที่ขึ้นต้นด้วย CANON คือตัวช่วยบันทึกค่าของผู้เขียน ไม่ใช่ผลลัพธ์ของโปรแกรม ให้อ่านตารางผลโมเดลด้านบน

R: คู่ค่าเดียวกัน

โค้ด R w1_sim_r.R (บรรทัด 254-261 จาก 587)
lg <- glm(f_out, family = binomial, data = d)
b <- coef(lg)[["surg24"]]; se <- sqrt(vcov(lg)["surg24", "surg24"])
canon_ci("c5.or_cond", exp(b), exp(b - z * se), exp(b + z * se))
std <- function(cmp) avg_comparisons(lg, variables = list(surg24 = c(0, 1)), comparison = cmp)
rr <- std("lnratioavg"); canon_ci("c3.rr_std", exp(rr$estimate), exp(rr$conf.low), exp(rr$conf.high))
rd <- std("differenceavg"); canon_ci("c3.rd_std", rd$estimate, rd$conf.low, rd$conf.high)
# the same model averaged over the cohort gives the marginal odds ratio (non-collapsibility)
om <- std("lnoravg"); canon_ci("c5.or_marg", exp(om$estimate), exp(om$conf.low), exp(om$conf.high))
ผลลัพธ์จากการรัน w1_sim_r.log
> lg <- glm(f_out, family = binomial, data = d)

> b <- coef(lg)[["surg24"]]

> se <- sqrt(vcov(lg)["surg24", "surg24"])

> canon_ci("c5.or_cond", exp(b), exp(b - z * se), exp(b +
+     z * se))
CANON w1.c5.or_cond 0.6985
CANON w1.c5.or_cond.lo 0.6411
CANON w1.c5.or_cond.hi 0.7610

> std <- function(cmp) avg_comparisons(lg, variables = list(surg24 = c(0,
+     1)), comparison = cmp)

> rr <- std("lnratioavg")

> canon_ci("c3.rr_std", exp(rr$estimate), exp(rr$conf.low),
+     exp(rr$conf.high))
CANON w1.c3.rr_std 0.8612
CANON w1.c3.rr_std.lo 0.8300
CANON w1.c3.rr_std.hi 0.8936

> rd <- std("differenceavg")

> canon_ci("c3.rd_std", rd$estimate, rd$conf.low, rd$conf.high)
CANON w1.c3.rd_std -0.0454
CANON w1.c3.rd_std.lo -0.0564
CANON w1.c3.rd_std.hi -0.0345

> om <- std("lnoravg")

> canon_ci("c5.or_marg", exp(om$estimate), exp(om$conf.low),
+     exp(om$conf.high))
CANON w1.c5.or_marg 0.8067
CANON w1.c5.or_marg.lo 0.7654
CANON w1.c5.or_marg.hi 0.8503
ข้อมูลจำลอง ผลลัพธ์จากโค้ดที่แสดง ซึ่งเป็นข้อความที่ตัดมาจากสคริปต์จำลองข้อมูลของชุดบทความนี้ ชื่อไฟล์และช่วงบรรทัดจึงบอกเพียงที่มา ในโค้ดนี้ d คือทะเบียนผู้ป่วยจำลอง f_out คือสูตรของแบบจำลอง (ภาวะสับสนเฉียบพลันกับการผ่าตัดเร็วและตัวแปรร่วมหกตัว) และ z คือควอนไทล์ของการแจกแจงปกติสำหรับช่วงเชื่อมั่น 95% ส่วน std() เรียก avg_comparisons กับแบบจำลองที่ฟิตแล้ว และ lnoravg ขอค่าลอการิทึมของ odds ratio ระดับประชากร บรรทัดที่ขึ้นต้นด้วย CANON คือตัวช่วยบันทึกค่าของผู้เขียน (canon_ci) ซึ่งพิมพ์ค่าประมาณพร้อมช่วงเชื่อมั่น 95% ส่วนคำนำหน้าเป็นป้ายภายในที่ข้ามได้ R ไม่ได้พิมพ์ตารางผลโมเดลในส่วนนี้ จึงให้อ่านชื่อที่ตามหลังคำนำหน้า โดย or_cond คือ odds ratio แบบมีเงื่อนไข 0.70 (0.64 ถึง 0.76) or_marg คือ odds ratio ระดับประชากร 0.81 (0.77 ถึง 0.85) ส่วน rr_std และ rd_std คืออัตราส่วนความเสี่ยงและผลต่างความเสี่ยงระดับประชากรจากการปรับมาตรฐานชุดเดียวกัน

หมายเหตุ: ชุดการทดลองที่สุ่มสร้างขึ้นจริง 950 คน

หมายเหตุ ข้อมูลจำลอง: ผู้ป่วยในการทดลอง 950 คนเป็นตัวอย่างจำกัดที่สุ่มสร้างขึ้นหนึ่งชุด ในชุดนี้ การปรับทำให้ odds ratio ขยับเข้าใกล้ 1 เล็กน้อย จาก 0.56 เป็น 0.57 เพราะความไม่สมดุลของตัวแปรร่วมที่เกิดจากความบังเอิญมีน้ำหนักมากกว่าความไม่ยุบรวมได้ การปรับมาตรฐานของแบบจำลองที่ปรับแล้วให้ 0.62 ซึ่งเป็นค่าประมาณของ estimand ระดับประชากรตัวเดียวกับ 0.56 ที่ไม่ได้ปรับ โดยปรับสำหรับความไม่สมดุลที่เกิดจากความบังเอิญในตัวแปรร่วมหกตัวที่วัดไว้ ช่วงเชื่อมั่นของมันคือ 0.42 ถึง 0.92 เทียบกับ 0.37 ถึง 0.86 และแคบกว่าบนมาตราลอการิทึม ซึ่งเป็นมาตราที่ใช้คำนวณช่วงของ odds ratio

การทดลองขนาดนี้แสดงความไม่ยุบรวมได้อย่างชัดเจนไม่ได้ จึงใช้คู่ค่าจากประชากรขนาดใหญ่เป็นตัวพาข้อโต้แย้ง

ข้อมูลจำลอง ผู้ป่วยที่ถูกสุ่ม 950 คน คอลัมน์สุดท้ายแสดงค่าที่การประมาณแต่ละแบบจะลงตัวในการทดลองขนาดใหญ่มาก
การประมาณEstimandOdds ratio (ช่วงเชื่อมั่น 95%)ค่าในตัวอย่างขนาดใหญ่
แบบจำลองโลจิสติกที่ไม่ได้ปรับระดับประชากร0.56 (0.37 ถึง 0.86)0.69
แบบจำลองโลจิสติกที่มีตัวแปรร่วมหกตัวแบบมีเงื่อนไข0.57 (0.36 ถึง 0.90)0.65
แบบจำลองที่ปรับแล้ว ปรับมาตรฐานแล้วระดับประชากร0.62 (0.42 ถึง 0.92)0.69
โค้ด Stata w1_sim.do (บรรทัด 514-521 จาก 719)
logit delirium surg24 if trial == 1
ciz c5.trial_realised.or_crude surg24 exp
logit delirium i.surg24 age_c female frail dementia asa3 anticoag if trial == 1
ciz c5.trial_realised.or_adj 1.surg24 exp
* trial-standardised marginal OR: the adjusted trial model averaged over the trial participants
margins surg24, post
nlcom (lnor: ln((_b[1.surg24]/(1 - _b[1.surg24]))/(_b[0.surg24]/(1 - _b[0.surg24])))), post
ciz c5.trial_realised.or_std lnor exp
ผลลัพธ์จากการรัน w1_sim.log
. logit delirium surg24 if trial == 1

Iteration 0:  Log likelihood = -315.36835
Iteration 1:  Log likelihood = -311.81017
Iteration 2:  Log likelihood = -311.76372
Iteration 3:  Log likelihood = -311.76371

Logistic regression                                     Number of obs =    950
                                                        LR chi2(1)    =   7.21
                                                        Prob > chi2   = 0.0073
Log likelihood = -311.76371                             Pseudo R2     = 0.0114

------------------------------------------------------------------------------
    delirium | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
      surg24 |  -.5789759   .2183915    -2.65   0.008    -1.007015   -.1509365
       _cons |   -1.89712   .1384437   -13.70   0.000    -2.168465   -1.625775
------------------------------------------------------------------------------

. ciz c5.trial_realised.or_crude surg24 exp
CANON w1.c5.trial_realised.or_crude 0.5605
CANON w1.c5.trial_realised.or_crude.lo 0.3653
CANON w1.c5.trial_realised.or_crude.hi 0.8599

. logit delirium i.surg24 age_c female frail dementia asa3 anticoag if trial == 1

Iteration 0:  Log likelihood = -315.36835
Iteration 1:  Log likelihood = -280.15645
Iteration 2:  Log likelihood = -259.58042
Iteration 3:  Log likelihood = -259.36843
Iteration 4:  Log likelihood = -259.36809
Iteration 5:  Log likelihood = -259.36809

Logistic regression                                     Number of obs =    950
                                                        LR chi2(7)    = 112.00
                                                        Prob > chi2   = 0.0000
Log likelihood = -259.36809                             Pseudo R2     = 0.1776

------------------------------------------------------------------------------
    delirium | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
    1.surg24 |   -.569812    .237313    -2.40   0.016    -1.034937   -.1046871
       age_c |   .0512336   .0113324     4.52   0.000     .0290224    .0734447
      female |  -.1175797   .2537164    -0.46   0.643    -.6148548    .3796953
       frail |    1.64791    .249635     6.60   0.000     1.158635    2.137186
    dementia |   1.515149   .4364832     3.47   0.001     .6596574     2.37064
        asa3 |   .1945099   .2438201     0.80   0.425    -.2833688    .6723885
    anticoag |   .4303196   .3769845     1.14   0.254    -.3085564    1.169196
       _cons |  -2.184724   .2759506    -7.92   0.000    -2.725577    -1.64387
------------------------------------------------------------------------------

. ciz c5.trial_realised.or_adj 1.surg24 exp
CANON w1.c5.trial_realised.or_adj 0.5656
CANON w1.c5.trial_realised.or_adj.lo 0.3552
CANON w1.c5.trial_realised.or_adj.hi 0.9006

. * trial-standardised marginal OR: the adjusted trial model averaged over the trial participants
. margins surg24, post

Predictive margins                                         Number of obs = 950
Model VCE: OIM

Expression: Pr(delirium), predict()

------------------------------------------------------------------------------
             |            Delta-method
             |     Margin   std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
      surg24 |
          0  |   .1251813   .0139445     8.98   0.000     .0978506     .152512
          1  |   .0811157   .0116559     6.96   0.000     .0582706    .1039609
------------------------------------------------------------------------------

. nlcom (lnor: ln((_b[1.surg24]/(1 - _b[1.surg24]))/(_b[0.surg24]/(1 - _b[0.surg24])))), post

        lnor: ln((_b[1.surg24]/(1 - _b[1.surg24]))/(_b[0.surg24]/(1 - _b[0.surg24])))

------------------------------------------------------------------------------
             | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
        lnor |  -.4830296   .2019661    -2.39   0.017    -.8788759   -.0871833
------------------------------------------------------------------------------

. ciz c5.trial_realised.or_std lnor exp
CANON w1.c5.trial_realised.or_std 0.6169
CANON w1.c5.trial_realised.or_std.lo 0.4152
CANON w1.c5.trial_realised.or_std.hi 0.9165
ข้อมูลจำลอง ผลลัพธ์จากโค้ดที่แสดง ซึ่งเป็นข้อความที่ตัดมาจากสคริปต์จำลองข้อมูลของชุดบทความนี้ ชื่อไฟล์และช่วงบรรทัดจึงบอกเพียงที่มา โค้ดนี้ทำขั้นตอนเดียวกันเฉพาะในผู้ป่วยในการทดลอง 950 คน (if trial == 1) ได้แก่ logit ที่ไม่ได้ปรับ logit ที่มีตัวแปรร่วมหกตัว แล้วตามด้วย margins และ nlcom สำหรับ odds ratio ระดับประชากรที่ปรับมาตรฐานแล้ว หลังแต่ละขั้น ตัวช่วย ciz ของผู้เขียนแปลงค่าประมาณของการรักษาด้วยเอกซ์โปเนนเชียลพร้อมช่วงเชื่อมั่น 95% ได้ 0.56 0.57 และ 0.62 ตามลำดับ บรรทัดที่ขึ้นต้นด้วย CANON คือตัวช่วยบันทึกค่าของผู้เขียน ไม่ใช่ผลลัพธ์ของโปรแกรม ให้อ่านตารางผลโมเดลด้านบน
โค้ด R w1_sim_r.R (บรรทัด 264-274 จาก 587)
tr <- d[d$trial == 1, ]
for (nm in c("crude", "adj")) {
  f <- if (nm == "crude") delirium ~ surg24 else f_out
  ft <- glm(f, family = binomial, data = tr)
  b <- coef(ft)[["surg24"]]; se <- sqrt(vcov(ft)["surg24", "surg24"])
  canon_ci(paste0("c5.trial_realised.or_", nm), exp(b), exp(b - z * se), exp(b + z * se))
}
# trial-standardised marginal OR: the adjusted trial model averaged over the trial participants
ltr <- glm(f_out, family = binomial, data = tr)
om_t <- avg_comparisons(ltr, variables = list(surg24 = c(0, 1)), comparison = "lnoravg")
canon_ci("c5.trial_realised.or_std", exp(om_t$estimate), exp(om_t$conf.low), exp(om_t$conf.high))
ผลลัพธ์จากการรัน w1_sim_r.log
> tr <- d[d$trial == 1, ]

> for (nm in c("crude", "adj")) {
+     f <- if (nm == "crude")
+         delirium ~ surg24
+     else f_out
+     ft <- glm(f, family = binomial, data = tr)
+     b <- coef(ft)[["surg24"]]
+     se <- sqrt(vcov(ft)["surg24", "surg24"])
+     canon_ci(paste0("c5.trial_realised.or_", nm), exp(b), exp(b -
+         z * se), exp(b + z * se))
+ }
CANON w1.c5.trial_realised.or_crude 0.5605
CANON w1.c5.trial_realised.or_crude.lo 0.3653
CANON w1.c5.trial_realised.or_crude.hi 0.8599
CANON w1.c5.trial_realised.or_adj 0.5656
CANON w1.c5.trial_realised.or_adj.lo 0.3553
CANON w1.c5.trial_realised.or_adj.hi 0.9006

> ltr <- glm(f_out, family = binomial, data = tr)

> om_t <- avg_comparisons(ltr, variables = list(surg24 = c(0,
+     1)), comparison = "lnoravg")

> canon_ci("c5.trial_realised.or_std", exp(om_t$estimate),
+     exp(om_t$conf.low), exp(om_t$conf.high))
CANON w1.c5.trial_realised.or_std 0.6169
CANON w1.c5.trial_realised.or_std.lo 0.4153
CANON w1.c5.trial_realised.or_std.hi 0.9165
ข้อมูลจำลอง ผลลัพธ์จากโค้ดที่แสดง ซึ่งเป็นข้อความที่ตัดมาจากสคริปต์จำลองข้อมูลของชุดบทความนี้ ชื่อไฟล์และช่วงบรรทัดจึงบอกเพียงที่มา นี่คือแบบจำลองของการทดลองใน R ซึ่งตรงกับ Stata ถึงทศนิยมตำแหน่งที่สาม โดย tr คือผู้ป่วยในการทดลอง 950 คน ลูปฟิตแบบจำลองที่ไม่ได้ปรับและแบบจำลองที่มีตัวแปรร่วมหกตัว และ avg_comparisons ปรับมาตรฐานแบบจำลองที่ปรับแล้ว บรรทัดที่ขึ้นต้นด้วย CANON คือตัวช่วยบันทึกค่าของผู้เขียน (canon_ci) ซึ่งพิมพ์ค่าประมาณพร้อมช่วงเชื่อมั่น 95% โดย z คือควอนไทล์ของการแจกแจงปกติสำหรับช่วงเชื่อมั่น 95% ส่วนคำนำหน้าเป็นป้ายภายในที่ข้ามได้ R ไม่ได้พิมพ์ตารางผลโมเดลในส่วนนี้ จึงให้อ่านชื่อที่ตามหลังคำนำหน้า โดย or_crude, or_adj และ or_std คือค่า 0.56 0.57 และ 0.62 ในตารางของการทดลอง

สิ่งที่ควรรายงาน

ระบุ estimand ไว้ข้างทุก odds ratio คำว่า "OR ที่ปรับแล้ว 0.70" ทำให้ผู้อ่านต้องเดา แต่ "OR 0.70 แบบมีเงื่อนไขต่ออายุ เพศ ภาวะอ่อนแอ ภาวะสมองเสื่อม สถานะ ASA และการใช้ยาต้านการแข็งตัวของเลือด จากแบบจำลองที่ไม่มีพจน์ภาวะอ่อนแอคูณการรักษา" ไม่ทำให้เกิดการเดา ส่วน odds ratio ระดับประชากรควรระบุประชากรและวิธีการของมัน

สำหรับผลลัพธ์ที่พบบ่อย RD หรือ RR ระดับประชากรจากการปรับมาตรฐานชุดเดียวกันมักอ่านง่ายกว่า odds ratio จากต่างการศึกษาหรือต่างแบบจำลองประมาณปริมาณเดียวกันได้ก็ต่อเมื่อปรับด้วยตัวแปรร่วมชุดเดียวกัน [6] แม้เช่นนั้น ปัจจัยพยากรณ์โรคที่ถูกละไว้ก็ต้องกระจายใกล้เคียงกันในแต่ละประชากร การปรับมาตรฐานแต่ละประชากรให้เป็นประชากรที่ระบุชื่อเป็นวิธีหนึ่งในการเปรียบเทียบ [6]

ความเข้าใจผิดที่พบบ่อยและวิธีแก้

  • "ความต่างระหว่าง odds ratio สองค่าหมายถึงมีตัวกวน"

    ไม่มีสิ่งใดเป็นตัวกวนในตัวอย่างคำนวณด้วยมือหรือในคู่ค่าจากประชากรขนาดใหญ่ แต่ odds ratio ทั้งสองก็ยังต่างกัน

    วิธีแก้: odds ratio แบบมีเงื่อนไขกับแบบระดับประชากร รวมทั้ง hazard ratio ทั้งสองแบบ อาจต่างกันได้แม้ไม่มีตัวกวนเลย ในการทดลองแบบสุ่ม การปรับด้วยปัจจัยพยากรณ์โรคที่มีผลแรงมักทำให้ odds ratio ขยับห่างจาก 1 มากขึ้น นั่นคือการเปลี่ยน estimand ไม่ใช่การกำจัดความลำเอียง

  • "odds ratio ระดับประชากรคือผลจริง ดังนั้นแบบจำลองที่ปรับแล้วจึงประเมินผลเกินจริง"

    ทั้งสองเป็นค่าจริงของ estimand คนละแบบ ในตัวอย่างคำนวณด้วยมือ 2.00 สำหรับผู้ป่วยที่มีความรุนแรงของโรคค่าหนึ่ง และ 1.72 สำหรับประชากรของการทดลอง

    วิธีแก้: เลือก estimand จากคำถามก่อนจะเห็นตัวเลขใด ๆ

  • "odds ratio เปลี่ยนไปมากกว่า 10% หลังเพิ่มตัวแปรร่วม แสดงว่าตัวแปรนั้นเป็นตัวกวน"

    สำหรับ odds ratio และ hazard ratio การเปลี่ยนแปลงนั้นอาจเกิดจากความไม่ยุบรวมได้บางส่วนหรือทั้งหมด [1]

    วิธีแก้: ตัดสินตัวกวนจากโครงสร้างเชิงสาเหตุ เช่น DAG หรือเปรียบเทียบค่าประมาณระดับประชากรเมื่อมีและไม่มีตัวแปรร่วมนั้น

  • "ยุบรวมได้หมายความว่า risk ratio ที่ปรับแล้วเท่ากับ risk ratio ระดับประชากร"

    เมื่อ RR ของกลุ่มย่อยต่างกัน เช่น 1.82 และ 1.33 ในตัวอย่างคำนวณด้วยมือ แบบจำลองที่ไม่มีพจน์ปฏิกิริยาสัมพันธ์จะรายงานค่าประนีประนอมที่ไม่จำเป็นต้องเท่ากับค่าระดับประชากร

    วิธีแก้: หา risk ratio ระดับประชากรด้วยการปรับมาตรฐานระดับประชากร ไม่ว่าจะใช้ฟังก์ชันเชื่อมโยงแบบใด

สิ่งที่ควรทำในการวิเคราะห์ของคุณเอง

อภิธานศัพท์

non-collapsibility (ความไม่ยุบรวมได้)
สมบัติของ odds ratio และ hazard ratio ที่ค่าระดับประชากรอาจต่างจากค่าแบบมีเงื่อนไขที่เท่ากันในทุกกลุ่มย่อยได้ แม้ไม่มีตัวกวน
collapsible
ใช้กับมาตรวัดที่ค่าระดับประชากรของมัน เมื่อไม่มีตัวกวน เป็นค่าเฉลี่ยถ่วงน้ำหนักของค่าในแต่ละกลุ่มย่อย
conditional odds ratio (odds ratio แบบมีเงื่อนไข)
odds ratio ในผู้ป่วยที่มีค่าของตัวแปรร่วมในแบบจำลองเหมือนกัน
marginal odds ratio (odds ratio ระดับประชากร)
odds ratio ที่เปรียบเทียบทั้งประชากรเมื่อได้รับการรักษากับเมื่อไม่ได้รับการรักษา
marginal standardisation (การปรับมาตรฐานระดับประชากร)
การเฉลี่ยความเสี่ยงที่แบบจำลองทำนายทั่วทั้งกลุ่มประชากร โดยกำหนดให้การรักษาเป็นแต่ละระดับ แล้วเปรียบเทียบค่าเฉลี่ย เรียกอีกชื่อว่า g-computation หรือ regression standardisation
prognostic factor
ลักษณะของผู้ป่วยที่ทำนายผลลัพธ์ไม่ว่าจะได้รับการรักษาแบบใด
estimand (ปริมาณเป้าหมายของการประมาณ)
ปริมาณที่แน่ชัดที่การศึกษาตั้งใจประมาณ ได้แก่ประชากร การเปรียบเทียบ และมาตรวัดสรุป
hazard ratio (อัตราส่วนฮาซาร์ด)
อัตราส่วนของอัตราการเกิดเหตุการณ์ทันทีระหว่างสองกลุ่มในผู้ป่วยที่ยังไม่เกิดเหตุการณ์

เอกสารอ้างอิง

  1. Greenland S, Pearl J, Robins JM. Confounding and collapsibility in causal inference. Stat Sci. 1999;14(1):29-46. doi:10.1214/ss/1009211805 https://doi.org/10.1214/ss/1009211805
  2. Hernán MA, Clayton D, Keiding N. The Simpson's paradox unraveled. Int J Epidemiol. 2011;40(3):780-785. doi:10.1093/ije/dyr041 https://doi.org/10.1093/ije/dyr041
  3. Whitcomb BW, Naimi AI. Defining, quantifying, and interpreting 'noncollapsibility' in epidemiologic studies of measures of 'effect'. Am J Epidemiol. 2021;190(5):697-700. doi:10.1093/aje/kwaa267 https://doi.org/10.1093/aje/kwaa267
  4. Gail MH, Wieand S, Piantadosi S. Biased estimates of treatment effect in randomized experiments with nonlinear regressions and omitted covariates. Biometrika. 1984;71(3):431-444. doi:10.1093/biomet/71.3.431 https://doi.org/10.1093/biomet/71.3.431
  5. Didelez V, Stensrud MJ. On the logic of collapsibility for causal effect measures. Biom J. 2022;64(2):235-242. doi:10.1002/bimj.202000305 https://doi.org/10.1002/bimj.202000305
  6. Daniel R, Zhang J, Farewell D. Making apples from oranges: comparing noncollapsible effect estimators and their standard errors after adjustment for different covariate sets. Biom J. 2021;63(3):528-557. doi:10.1002/bimj.201900297 https://doi.org/10.1002/bimj.201900297

ประเด็นสำคัญ

  • เมื่อไม่มีตัวกวน ผลต่างความเสี่ยงและอัตราส่วนความเสี่ยงยุบรวมได้ คือค่าระดับประชากรของมันเป็นค่าเฉลี่ยถ่วงน้ำหนักของค่าในแต่ละกลุ่มย่อย
  • odds ratio แบบมีเงื่อนไขกับแบบระดับประชากร รวมทั้ง hazard ratio ทั้งสองแบบ อาจต่างกันได้แม้ไม่มีตัวกวนเลย ในการทดลองแบบสุ่ม การปรับด้วยปัจจัยพยากรณ์โรคที่มีผลแรงมักทำให้ odds ratio ขยับห่างจาก 1 มากขึ้น นั่นคือการเปลี่ยน estimand ไม่ใช่การกำจัดความลำเอียง
  • ในตัวอย่างคำนวณด้วยมือ odds ratio เท่ากับ 2.00 ในแต่ละกลุ่มย่อยจากสองกลุ่มที่ขนาดเท่ากัน ให้ odds ratio ระดับประชากรเท่ากับ 1.72
  • การปรับมาตรฐานระดับประชากรเปลี่ยนแบบจำลองโลจิสติกที่ปรับแล้วให้เป็น odds ratio อัตราส่วนความเสี่ยง และผลต่างความเสี่ยงระดับประชากรสำหรับประชากรที่ระบุชื่อ
  • รายงาน odds ratio ทุกค่าพร้อม estimand ของมัน คือมีเงื่อนไขต่อตัวแปรร่วมใด หรือเป็นระดับประชากรของประชากรใด

อ่านต่อในวิกิ: [[repeated-measures-modeling-guide-th]] [[collapsibility-effect-change-guide]]

0
ถึงนักอ่านชาวไทยและต่างชาติทำความเข้าใจบริบททางการแพทย์ของผมอ่านต่อ →ถึงนักอ่านชาวไทยและต่างชาติทำความเข้าใจเนื้อหาของผมที่นอกเหนือจากการแพทย์อ่านต่อ →

ความคิดเห็น

ยังไม่มีความคิดเห็น มาเป็นคนแรกกันเลย

เข้าสู่ระบบเพื่อแสดงความคิดเห็น