Link และ Family: ตัวหนึ่งกำหนดมาตรวัดผล อีกตัวกำหนดค่าคลาดเคลื่อนมาตรฐาน

Clinical Epidemiology ResearchMethodology and Research Design THUniqcret doctor knowledges TH
Link และ Family: ตัวหนึ่งกำหนดมาตรวัดผล อีกตัวกำหนดค่าคลาดเคลื่อนมาตรฐาน
On this page

Read the English version

บทคัดย่อ

แบบจำลองเชิงเส้นวางนัยทั่วไป (generalized linear model, GLM) มีสามส่วน ตัวทำนายเชิงเส้น (linear predictor) หรือ eta รวมตัวแปรร่วมเข้าด้วยกัน ฟังก์ชันเชื่อมโยง (link function) เชื่อมค่าเฉลี่ยของผลลัพธ์กับ eta และ family ให้ฟังก์ชันความแปรปรวน (variance function) link กำหนดมาตรวัดผล คือ identity ให้ผลต่างความเสี่ยง (risk difference) log ให้ risk ratio และ logit ให้ odds ratio ส่วน family กำหนดค่าคลาดเคลื่อนมาตรฐาน และเมื่อมีตัวแปรร่วม กำหนดว่าผู้ป่วยแต่ละคนมีน้ำหนักเท่าใด ภายใต้ log link ความเสี่ยงเท่ากับเลขชี้กำลังของ eta จึงต้องให้ eta ไม่เกินศูนย์ และใกล้กำแพงนั้นการประมาณแบบ log-binomial จะล้มเหลว Poisson ดัดแปลง (modified Poisson) คง log link ไว้และไม่ชนกำแพง ในทะเบียนจำลองของผู้ป่วยกระดูกสะโพกหัก 20,000 คน แบบจำลองทั้งสองให้ผลตรงกันทุกประการเมื่อมีการผ่าตัดเร็วเพียงตัวเดียว ต่างกันเล็กน้อยหลังปรับด้วยอายุและเพศ และ log-binomial ล้มเหลวเมื่อใส่อายุและความเปราะบาง โดยรวม link ควรตามมาตรวัดผล family ที่ยืมมาจาก Poisson ต้องใช้ค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช ซึ่งประมาณจากส่วนเหลือที่สังเกตได้ และความต่างเล็กน้อยหลังปรับสะท้อนการถ่วงน้ำหนัก ไม่ใช่ความผิดพลาด


ภาพสรุป ข้อมูลจำลอง

นักวิจัยสองคน ทะเบียนเดียว มาตรวัดผลสองแบบ

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

นักวิจัยคนแรกใช้ logistic regression และรายงาน odds ratio (อัตราส่วนออดส์) นักวิจัยคนที่สองรายงาน risk ratio (อัตราส่วนความเสี่ยง) จากแบบจำลองที่ใช้ log link คือแบบจำลองบนลอการิทึมของความเสี่ยง เมื่อใช้ family (การแจกแจงที่สมมติให้ผลลัพธ์) แบบ binomial แล้วเปลี่ยนเป็นแบบ Poisson ค่า risk ratio ของเธอตรงกันถึงสี่ตำแหน่งทศนิยม แต่ช่วงเชื่อมั่นไม่ตรงกัน

ผู้เชี่ยวชาญด้านระเบียบวิธีที่เป็นประธานการประชุมถามว่าการเลือกแต่ละอย่างทำหน้าที่อะไร สรุปสั้น ๆ คือ link เลือกมาตรวัดผล ส่วน family เลือกค่าคลาดเคลื่อนมาตรฐาน

สามส่วนของแบบจำลองเชิงเส้นวางนัยทั่วไป

แบบจำลองเชิงเส้นวางนัยทั่วไป (GLM) มีสามส่วน [1, 2] ส่วนแรกคือตัวทำนายเชิงเส้น (linear predictor) $\eta$ (อักษรกรีก eta) ซึ่งเป็นผลรวมถ่วงน้ำหนักของตัวแปรร่วมของผู้ป่วย:

$$\eta = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots$$

แต่ละ $x$ คือค่าของตัวแปรร่วม เช่นตัวบ่งชี้การผ่าตัดเร็ว และแต่ละ $\beta$ คือสัมประสิทธิ์ที่ต้องประมาณ ผลรวมนี้เขียนย่อเป็น $X\beta$ และมีค่าได้ทั้งลบและบวก

ส่วนที่สองคือฟังก์ชันเชื่อมโยง (link function) $g(\cdot)$ ซึ่งเชื่อมค่าเฉลี่ยของผลลัพธ์กับตัวทำนายเชิงเส้น:

$$g(\mu) = \eta$$

ในที่นี้ $\mu$ คือค่าเฉลี่ยของผลลัพธ์ $Y$ ในผู้ป่วยที่มีค่าตัวแปรร่วมเหมือนกัน สำหรับผลลัพธ์ที่ลงรหัส 1 เมื่อเกิดภาวะสับสนเฉียบพลันและ 0 เมื่อไม่เกิด $\mu$ คือความเสี่ยง ฟังก์ชันผกผันของ link เปลี่ยนตัวทำนายเชิงเส้นกลับเป็นค่าเฉลี่ย

ส่วนที่สามคือ family ซึ่งเป็นการแจกแจงที่สมมติให้ผลลัพธ์กระจายรอบค่าเฉลี่ย ในการประมาณ หน้าที่หลักของมันคือให้ฟังก์ชันความแปรปรวน (variance function) $V(\mu)$ คือความแปรปรวนของผลลัพธ์ขึ้นกับค่าเฉลี่ยอย่างไร

family กำหนดฟังก์ชันความแปรปรวน ส่วน link กำหนดว่าสัมประสิทธิ์ของตัวแปรสัมผัสวัดอะไร และการยกเอกซ์โปเนนเชียลให้ log ของอัตราส่วนจะได้อัตราส่วนนั้น แถว modified Poisson ยืม Poisson มาเป็น working family คือ family ที่ให้สมการสำหรับการประมาณโดยไม่ได้ตรงกับการแจกแจงของผลลัพธ์ และจับคู่กับค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช (sandwich standard error) คือค่าที่ประมาณจากส่วนเหลือที่สังเกตได้ (ทั้งสองอย่างอธิบายต่อไปด้านล่าง)
ผลลัพธ์Family, $V(\mu)$Link, $g(\mu)$สัมประสิทธิ์ของตัวแปรสัมผัส
ต่อเนื่อง เช่นความดันโลหิตGaussian (แจกแจงปกติ) ค่าคงที่Identity, $\mu$ผลต่างของค่าเฉลี่ย
สองค่า (0 หรือ 1)Binomial, $\mu(1-\mu)$Identity, $\mu$ผลต่างความเสี่ยง
สองค่า (0 หรือ 1)Binomial, $\mu(1-\mu)$Log, $\log \mu$Log risk ratio
สองค่า (0 หรือ 1)Binomial, $\mu(1-\mu)$Logit, $\log\{\mu/(1-\mu)\}$Log odds ratio
สองค่า (0 หรือ 1) แบบ modified PoissonPoisson เป็น working family, $\mu$, พร้อมค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิชLog, $\log \mu$Log risk ratio
จำนวนนับของเหตุการณ์Poisson, $\mu$Log, $\log \mu$Log rate ratio โดยใช้ลอการิทึมของเวลาติดตามเป็นออฟเซต (offset) คือพจน์ที่สัมประสิทธิ์ถูกตรึงไว้ที่ 1

ให้ตัวแปรสัมผัสแบบสองค่า $A$ ลงรหัส 1 สำหรับการผ่าตัดเร็วและ 0 สำหรับกรณีอื่น และให้ $\mu_1$ กับ $\mu_0$ เป็นความเสี่ยงเมื่อมีและไม่มีการผ่าตัดเร็ว เมื่อใช้ identity link $g(\mu) = \mu$ แบบจำลองคือ $\mu = \beta_0 + \beta_1 A$ ดังนั้น $\beta_1$ คือผลต่างความเสี่ยง (risk difference) $\mu_1 - \mu_0$ เมื่อใช้ binomial family link นี้ต้องรักษาความเสี่ยงที่แบบจำลองพอดีทุกค่าให้อยู่ระหว่าง 0 กับ 1 [3]

ใน Stata ตั้ง link ภายใน glm เช่น glm delirium surg24, family(binomial) link(identity) ส่วนใน R คือ glm(delirium ~ surg24, family = binomial(link = "identity"), data = d) ในที่นี้ surg24 คือตัวแปรสัมผัส $A$ และ d คือข้อมูลทะเบียนที่ใช้ต่อไปนี้

เมื่อใช้ log link แบบจำลองคือ $\log \mu = \beta_0 + \beta_1 A$ โดย $\log$ คือลอการิทึมธรรมชาติ (ln) เมื่อนำกลุ่มที่ไม่สัมผัสไปลบจากกลุ่มที่สัมผัสจะได้

$$\log \mu_1 - \log \mu_0 = \log \frac{\mu_1}{\mu_0} = \beta_1$$

ผลต่างของลอการิทึมคือลอการิทึมของอัตราส่วน ดังนั้น $\beta_1$ คือ log risk ratio และเอกซ์โปเนนเชียลของมัน $e^{\beta_1}$ คือ risk ratio เอง ส่วนข้อมูลนับ พีชคณิตเดียวกันให้ rate ratio [2]

logit link ใช้ลอการิทึมของออดส์ (odds) คือความเสี่ยงหารด้วยหนึ่งลบความเสี่ยง:

$$\operatorname{logit}(\mu) = \log \frac{\mu}{1-\mu} = \beta_0 + \beta_1 A$$

การลบแบบเดียวกันทำให้ $e^{\beta_1}$ เป็น odds ratio ฟังก์ชันผกผัน $\mu = e^{\eta}/(1 + e^{\eta})$ อยู่ระหว่าง 0 กับ 1 อย่างเคร่งครัดสำหรับทุกค่าของ $\eta$ logit link จึงไม่เคยเรียกร้องความเสี่ยงที่สูงกว่า 1 และสำหรับความเสี่ยงสองค่าเดียวกัน odds ratio อยู่ห่างจาก 1 มากกว่า risk ratio เสมอเมื่อความเสี่ยงสองค่าต่างกัน และห่างมากกว่ามากเมื่อผลลัพธ์พบบ่อย

family: จุดที่การแจกแจงเข้ามามีบทบาท

link และตัวทำนายเชิงเส้นกำหนดค่าเฉลี่ย ส่วน family อธิบายว่าผลลัพธ์ที่สังเกตได้กระจายรอบค่าเฉลี่ยนั้นอย่างไร เพราะผู้ป่วยสองคนที่มีตัวแปรร่วมเหมือนกันทุกประการก็ยังต่างกันได้ family เข้าสู่การประมาณผ่านฟังก์ชันความแปรปรวน [2]:

สำหรับผลลัพธ์แบบสองค่า มีเพียงความแปรปรวนแบบ binomial ที่ถูกต้อง ความแปรปรวนแบบ Poisson $\mu$ มากกว่า $\mu(1-\mu)$ ที่ทุกระดับความเสี่ยง และช่องว่างยิ่งกว้างเมื่อความเสี่ยงสูงขึ้น ค่าคลาดเคลื่อนมาตรฐานแบบอิงแบบจำลอง (model-based) สร้างจาก $V(\mu)$ ดังนั้น family ที่ไม่ตรงกับผลลัพธ์จะพิมพ์ค่าคลาดเคลื่อนมาตรฐานที่ผิด แม้สัมประสิทธิ์จะถูกต้อง

ทำไมต้องมี family: น้ำหนักและค่าคลาดเคลื่อนมาตรฐาน

GLM หาสัมประสิทธิ์โดยแก้สมการสกอร์ (score equations) หนึ่งสมการต่อหนึ่งสัมประสิทธิ์ แต่ละสมการตั้งผลรวมถ่วงน้ำหนักของส่วนเหลือ (residual) ให้เท่ากับศูนย์ [2] เมื่อใช้ log link สมการเหล่านี้คือ

$$\sum_{i=1}^{n} x_i \, \frac{\mu_i}{V(\mu_i)} \, (y_i - \mu_i) = 0$$

ในที่นี้ $y_i$ คือผลลัพธ์ของผู้ป่วยคนที่ $i$ และ $\mu_i$ คือความเสี่ยงที่แบบจำลองพอดี $x_i$ เก็บค่าตัวแปรร่วมของผู้ป่วย โดยมี 1 สำหรับจุดตัดแกน และ $n$ คือจำนวนผู้ป่วย ตัวคูณ $\mu_i/V(\mu_i)$ คือน้ำหนักของส่วนเหลือแต่ละตัว

เมื่อใช้ Poisson family น้ำหนักนั้นเท่ากับ 1 ส่วนเหลือทุกตัวจึงนับเท่ากัน เมื่อใช้ binomial family น้ำหนักคือ $1/(1-\mu_i)$ ผู้ป่วยที่มีความเสี่ยงที่แบบจำลองพอดีสูงจึงดึงแรงกว่า

สมการสกอร์ของ Poisson มีค่าคาดหมายเป็นศูนย์ที่สัมประสิทธิ์จริง ตราบที่แบบจำลองค่าเฉลี่ย $\log \mu_i = X_i\beta$ ถูกต้อง ไม่ว่าความแปรปรวนจริงจะเป็นอย่างไร ค่าที่ได้จากการแก้สมการเหล่านี้จึงมีความคงเส้นคงวา (consistent) สำหรับ log risk ratio คือเข้าใกล้ค่าจริงเมื่อตัวอย่างใหญ่ขึ้น [4] มีเพียงค่าคลาดเคลื่อนมาตรฐานของ Poisson ซึ่งสร้างจาก $V(\mu) = \mu$ เท่านั้นที่ผิด

ค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช (sandwich standard error) หรือเรียกว่า robust standard error มาแทนที่ค่านั้นโดยประมาณความแปรปรวนจากส่วนเหลือที่สังเกตได้ แทนที่จะใช้ $V(\mu)$ แซนด์วิชซ่อมอะไรได้และซ่อมอะไรไม่ได้ อธิบายในตอนที่ 4 ของชุดบทความนี้

กำแพง: ทำไม log link จึงเรียกร้องความเสี่ยงที่สูงกว่า 1 ได้

ภายใต้ log link ฟังก์ชันผกผันคือ $\mu = e^{\eta}$ ซึ่งเป็นบวกสำหรับทุกค่าของ $\eta$ แต่ไม่มีเพดาน เมื่อ $\eta = 0$ ค่านี้เท่ากับ 1 และทุก $\eta$ ที่เป็นบวกให้ค่าเฉลี่ยที่สูงกว่า 1 ความเสี่ยงสูงกว่า 1 ไม่ได้ ดังนั้นแบบจำลอง log-binomial ซึ่งคือ binomial family ที่ใช้ log link ต้องรักษาตัวทำนายเชิงเส้นของผู้ป่วยทุกคนให้ไม่เกิน 0:

$$\eta_i = X_i\beta \le 0 \quad \text{for every patient } i$$

อสมการนี้คือกำแพง ซึ่งเป็นขอบเขตจำกัด (boundary) ของสัมประสิทธิ์ โดยมีหนึ่งข้อบังคับต่อผู้ป่วยหนึ่งคน [3, 5]

ปัญหาเริ่มเมื่อค่าที่พอดีที่สุดอยู่บนหรือใกล้กำแพง เรื่องนี้เกิดเมื่อรูปแบบตัวแปรร่วมบางแบบ (covariate pattern) คือชุดค่าตัวแปรร่วมหนึ่งชุด มีความเสี่ยงใกล้ 1 หรือเมื่อแบบจำลองดันความเสี่ยงให้เกิน 1 ขั้นตอนคำนวณเสนอก้าวที่ข้ามกำแพงซ้ำแล้วซ้ำอีก แล้วต้องตัดก้าวให้สั้นลง ผลคือไม่ถึงการลู่เข้า (convergence) ซึ่งเป็นจุดที่ค่าประมาณต่อเนื่องหยุดเปลี่ยนแปลง หรือหยุดบนขอบเขตพร้อมคำเตือน [5]

ตัวอย่างคำนวณด้วยมือ: รูปแบบตัวแปรร่วมที่อยู่เลยกำแพง

ตัวอย่างคำนวณด้วยมือ แบบจำลอง log-binomial สมมติ risk ratio ค่าเดียวสำหรับทุกรูปแบบตัวแปรร่วม สมมติว่ารูปแบบหนึ่งมีความเสี่ยงพื้นฐาน 0.60 และ risk ratio ของตัวแปรสัมผัสในแบบจำลองคือ 2.00

  1. ความเสี่ยงที่แบบจำลองต้องการ

    \[ \mu = 0.60 \times 2.00 = 1.20 \]

    ผู้ป่วยที่สัมผัสในรูปแบบนั้นจะต้องมีความเสี่ยง 1.20

  2. ตัวทำนายเชิงเส้นภายใต้ log link

    \[ \eta = \log 1.20 = 0.18 \]

    ค่าเฉลี่ยนั้นสอดคล้องกับตัวทำนายเชิงเส้น 0.18

  3. อยู่ฝั่งไหนของกำแพง

    \[ \eta = 0.18 > 0 \;\Rightarrow\; \mu = e^{\eta} > 1 \]

    ตัวทำนายเชิงเส้นที่เป็นบวกให้ค่าเฉลี่ยสูงกว่า 1 ซึ่งไม่ใช่ความเสี่ยง

ผลลัพธ์: แบบจำลอง log-binomial แทนรูปแบบนี้ไม่ได้ การประมาณจึงติดค้างอยู่ที่กำแพงหรือหยุดบนขอบเขต

ลากแถบเลื่อนเพื่อเปลี่ยน eta แล้วอ่านค่าเฉลี่ยที่แต่ละ link ให้ เส้นโค้ง logit อยู่ระหว่าง 0 กับ 1 ส่วนเส้นโค้ง log ถึง 1 เมื่อ eta เท่ากับ 0 และบริเวณที่แรเงาถัดไปคือกำแพง

modified Poisson ผ่านกำแพงได้อย่างไร

Poisson ดัดแปลง (modified Poisson regression) คง log link ไว้ แต่เปลี่ยน binomial family เป็น Poisson family โดยใช้ Poisson เป็น working family คือให้สมการสกอร์โดยไม่ถือว่าเป็นการแจกแจงของผลลัพธ์ [4] ค่าเฉลี่ยของ Poisson คือจำนวนนับที่คาดหมาย ค่า $e^{\eta}$ ที่สูงกว่า 1 จึงยอมให้มีได้ และการประมาณไม่มีกำแพง สมการค่าเฉลี่ยไม่เปลี่ยน ดังนั้น $e^{\beta_1}$ ยังคงเป็น risk ratio และรายงานพร้อมค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช

ค่าที่แบบจำลองพอดีซึ่งสูงกว่า 1 ไม่ใช่ความเสี่ยง มันแสดงว่าแบบจำลองค่าเฉลี่ยเชิงเส้นบนสเกลลอการิทึมไม่อาจถูกต้องสมบูรณ์สำหรับผู้ป่วยเหล่านั้น Poisson ดัดแปลงเป็นวิธีที่ใช้ได้จริงในการประมาณ risk ratio ไม่ใช่แบบจำลองที่ใกล้ความจริงกว่าสำหรับผลลัพธ์แบบสองค่า [6]

ทะเบียนจำลอง: ตัวแปรร่วมตัวเดียว risk ratio เท่ากัน

ในทะเบียนจำลองที่ใช้ต่อจากนี้ ข้อมูลถูกสร้างขึ้นให้ผู้ป่วยที่เปราะบาง และผู้ที่มีภาวะสมองเสื่อมหรือใช้ยาต้านการแข็งตัวของเลือด รอผ่าตัดนานกว่า ทุกการเปรียบเทียบด้านล่างจึงมีตัวกวน (confounding) การประมาณเหล่านี้แสดงว่า link และ family ทำงานอย่างไร ไม่ได้ประมาณผลของการผ่าตัดเร็ว

การประมาณชุดแรกมีเพียงการผ่าตัดเร็ว แบบจำลองจึงอิ่มตัว (saturated) คือมีหนึ่งพารามิเตอร์ต่อหนึ่งกลุ่ม และทำซ้ำความเสี่ยงที่สังเกตได้ทั้งสองค่า ผู้ป่วยทุกคนในกลุ่มเดียวกันมีความเสี่ยงที่แบบจำลองพอดีและน้ำหนักเท่ากัน สมการสกอร์จึงตั้งความเสี่ยงที่แบบจำลองพอดีของแต่ละกลุ่มให้เท่ากับความเสี่ยงที่สังเกตได้ ไม่ว่าน้ำหนักจะเป็นเท่าใด และ family ทั้งสองให้ risk ratio เท่ากัน

การผ่าตัดเร็วเพียงตัวเดียว: สอง family หนึ่ง risk ratio

ข้อมูลจำลอง ผู้ป่วยในทะเบียนทั้ง 20,000 คน ค่าแสดงเป็นทศนิยมสี่ตำแหน่ง เพราะความต่างที่สนใจอยู่ที่ทศนิยมตำแหน่งที่สามหรือสี่
แบบจำลองRisk ratioช่วงเชื่อมั่น 95%ค่าคลาดเคลื่อนมาตรฐานของ log risk ratio
Log-binomial ค่าคลาดเคลื่อนมาตรฐานแบบอิงแบบจำลอง0.39090.3709 ถึง 0.41200.0268
Poisson ดัดแปลง ค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช0.39090.3709 ถึง 0.41200.0268
Poisson ค่าคลาดเคลื่อนมาตรฐานแบบอิงแบบจำลอง0.39090.3683 ถึง 0.41490.0304

ทำไมช่วงเชื่อมั่นแบบอิงแบบจำลองของ Poisson จึงกว้างเกินไป

ทั้งสามแถวมี risk ratio เดียวกันคือ 0.3909 ค่าคลาดเคลื่อนมาตรฐานของ log risk ratio แบบอิงแบบจำลองของ Poisson คือ 0.0304 มากกว่าค่าแบบแซนด์วิช 0.0268 เพราะ $V(\mu) = \mu$ ประเมินความแปรปรวนของผลลัพธ์แบบสองค่าสูงเกินจริง ช่วงเชื่อมั่นของมัน 0.3683 ถึง 0.4149 จึงกว้างเกินไป ค่าแบบแซนด์วิชเท่ากับค่าคลาดเคลื่อนมาตรฐานของ log-binomial ถึงทศนิยมสี่ตำแหน่ง ซึ่งฟังก์ชันความแปรปรวนของ log-binomial ถูกต้องในกรณีนี้

Stata: การผ่าตัดเร็วเพียงตัวเดียวภายใต้สอง family

โค้ด Stata w1_sim.do (บรรทัด 409-425 จาก 719)
glm delirium surg24, family(binomial) link(log)
* model-based CI (identical bread in both languages for a saturated model)
ciz c2.rr_crude_logbin surg24 exp
* log-RR SE, log-binomial, model-based
canon c2.se_crude_logbin _se[surg24]
quietly glm delirium surg24, family(poisson) link(log)
scalar sc_pn = _se[surg24]
glm delirium surg24, family(poisson) link(log) vce(robust)
matrix bpc = e(b)
* modified Poisson, robust CI
ciz c2.rr_crude_poisson surg24 exp
* Poisson model-based log-RR SE (too large for a binary outcome) versus the sandwich log-RR SE
canon c2.se_crude_poisson_naive scalar(sc_pn)
canon c2.se_crude_poisson_robust _se[surg24]
* naive Poisson 95% CI
canon c2.rr_crude_poisson_naive.lo exp(_b[surg24] - invnormal(0.975)*scalar(sc_pn))
canon c2.rr_crude_poisson_naive.hi exp(_b[surg24] + invnormal(0.975)*scalar(sc_pn))
ผลลัพธ์จากการรัน w1_sim.log
. glm delirium surg24, family(binomial) link(log)

Iteration 0:  Log likelihood = -15980.666
Iteration 1:  Log likelihood = -11656.381
Iteration 2:  Log likelihood = -11603.266
Iteration 3:  Log likelihood = -11601.752
Iteration 4:  Log likelihood = -11601.751
Iteration 5:  Log likelihood = -11601.751

Generalized linear models                         Number of obs   =     20,000
Optimization     : ML                             Residual df     =     19,998
                                                  Scale parameter =          1
Deviance         =  23203.50245                   (1/df) Deviance =   1.160291
Pearson          =        20000                   (1/df) Pearson  =     1.0001

Variance function: V(u) = u*(1-u)                 [Bernoulli]
Link function    : g(u) = ln(u)                   [Log]

                                                  AIC             =   1.160375
Log likelihood   = -11601.75122                   BIC             =  -174846.4

------------------------------------------------------------------------------
             |                 OIM
    delirium | Coefficient  std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
      surg24 |  -.9392798   .0267983   -35.05   0.000    -.9918036    -.886756
       _cons |  -.8693602   .0109964   -79.06   0.000    -.8909127   -.8478077
------------------------------------------------------------------------------

. * model-based CI (identical bread in both languages for a saturated model)
. ciz c2.rr_crude_logbin surg24 exp
CANON w1.c2.rr_crude_logbin 0.3909
CANON w1.c2.rr_crude_logbin.lo 0.3709
CANON w1.c2.rr_crude_logbin.hi 0.4120

. * log-RR SE, log-binomial, model-based
. canon c2.se_crude_logbin _se[surg24]
CANON w1.c2.se_crude_logbin 0.0268

. quietly glm delirium surg24, family(poisson) link(log)

. scalar sc_pn = _se[surg24]

. glm delirium surg24, family(poisson) link(log) vce(robust)

Iteration 0:  Log pseudolikelihood = -13125.243
Iteration 1:  Log pseudolikelihood = -12910.664
Iteration 2:  Log pseudolikelihood = -12910.633
Iteration 3:  Log pseudolikelihood = -12910.633

Generalized linear models                         Number of obs   =     20,000
Optimization     : ML                             Residual df     =     19,998
                                                  Scale parameter =          1
Deviance         =  13415.26583                   (1/df) Deviance =   .6708304
Pearson          =        13797                   (1/df) Pearson  =    .689919

Variance function: V(u) = u                       [Poisson]
Link function    : g(u) = ln(u)                   [Log]

                                                  AIC             =   1.291263
Log pseudolikelihood = -12910.63291               BIC             =  -184634.7

------------------------------------------------------------------------------
             |               Robust
    delirium | Coefficient  std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
      surg24 |  -.9392798    .026799   -35.05   0.000    -.9918049   -.8867547
       _cons |  -.8693602   .0109967   -79.06   0.000    -.8909132   -.8478071
------------------------------------------------------------------------------

. matrix bpc = e(b)

. * modified Poisson, robust CI
. ciz c2.rr_crude_poisson surg24 exp
CANON w1.c2.rr_crude_poisson 0.3909
CANON w1.c2.rr_crude_poisson.lo 0.3709
CANON w1.c2.rr_crude_poisson.hi 0.4120

. * Poisson model-based log-RR SE (too large for a binary outcome) versus the sandwich log-RR SE
. canon c2.se_crude_poisson_naive scalar(sc_pn)
CANON w1.c2.se_crude_poisson_naive 0.0304

. canon c2.se_crude_poisson_robust _se[surg24]
CANON w1.c2.se_crude_poisson_robust 0.0268

. * naive Poisson 95% CI
. canon c2.rr_crude_poisson_naive.lo exp(_b[surg24] - invnormal(0.975)*scalar(sc_pn))
CANON w1.c2.rr_crude_poisson_naive.lo 0.3683

. canon c2.rr_crude_poisson_naive.hi exp(_b[surg24] + invnormal(0.975)*scalar(sc_pn))
CANON w1.c2.rr_crude_poisson_naive.hi 0.4149
ข้อมูลจำลอง ผลลัพธ์จากโค้ดที่แสดง ส่วนนี้ตัดมาจากสคริปต์จำลองข้อมูลของชุดบทความนี้และไฟล์ผลลัพธ์ (log) ของมัน ชื่อไฟล์และช่วงบรรทัดจึงบอกเพียงว่าตัดมาจากตรงไหน ส่วน ciz และ canon เป็นคำสั่งช่วยที่นิยามไว้ตอนต้นของสคริปต์นั้น ตัวแปรคือ delirium (1 คือเกิดภาวะสับสนเฉียบพลัน 0 คือไม่เกิด) surg24 (1 คือผ่าตัดภายในวันแรกหลังรับไว้ในโรงพยาบาล 0 คือไม่ใช่) และในการประมาณแบบปรับด้านล่าง age_c (อายุที่เลื่อนจุดศูนย์กลาง) female และ frail การประมาณแบบ binomial และ Poisson พิมพ์สัมประสิทธิ์ surg24 เท่ากัน บรรทัดที่ขึ้นต้นด้วย CANON คือตัวช่วยบันทึกค่าของผู้เขียน ซึ่งพิมพ์ค่าประมาณและช่วงเชื่อมั่น 95% ไม่ใช่ผลลัพธ์ของโปรแกรม ให้อ่านตารางผลโมเดลด้านบน ส่วนค่าคลาดเคลื่อนมาตรฐานแบบอิงแบบจำลองของ Poisson และช่วงเชื่อมั่นของมันมาจากการประมาณแบบเงียบซึ่งไม่พิมพ์ตาราง จึงปรากฏเฉพาะในบรรทัด CANON

R: การประมาณชุดเดียวกัน ด้วยแพ็กเกจ sandwich

โค้ด R w1_sim_r.R (บรรทัด 202-210 จาก 587)
cb <- rr_glm(delirium ~ surg24, binomial(link = "log"), d)
canon_ci("c2.rr_crude_logbin", cb$est, cb$lo, cb$hi)          # model-based SE (identical bread in both languages here)
canon("c2.se_crude_logbin", cb$se)                            # log-RR SE, log-binomial, model-based
cp <- rr_glm(delirium ~ surg24, poisson(link = "log"), d, TRUE)
canon_ci("c2.rr_crude_poisson", cp$est, cp$lo, cp$hi)         # modified Poisson, robust CI
canon("c2.se_crude_poisson_naive", cp$se_naive)               # Poisson model-based log-RR SE (too large for a binary outcome)
canon("c2.se_crude_poisson_robust", cp$se)                    # sandwich log-RR SE
canon("c2.rr_crude_poisson_naive.lo", exp(log(cp$est) - z * cp$se_naive))   # naive Poisson 95% CI, lower
canon("c2.rr_crude_poisson_naive.hi", exp(log(cp$est) + z * cp$se_naive))   # naive Poisson 95% CI, upper
ผลลัพธ์จากการรัน w1_sim_r.log
> cb <- rr_glm(delirium ~ surg24, binomial(link = "log"),
+     d)

> canon_ci("c2.rr_crude_logbin", cb$est, cb$lo, cb$hi)
CANON w1.c2.rr_crude_logbin 0.3909
CANON w1.c2.rr_crude_logbin.lo 0.3709
CANON w1.c2.rr_crude_logbin.hi 0.4120

> canon("c2.se_crude_logbin", cb$se)
CANON w1.c2.se_crude_logbin 0.0268

> cp <- rr_glm(delirium ~ surg24, poisson(link = "log"),
+     d, TRUE)

> canon_ci("c2.rr_crude_poisson", cp$est, cp$lo, cp$hi)
CANON w1.c2.rr_crude_poisson 0.3909
CANON w1.c2.rr_crude_poisson.lo 0.3709
CANON w1.c2.rr_crude_poisson.hi 0.4120

> canon("c2.se_crude_poisson_naive", cp$se_naive)
CANON w1.c2.se_crude_poisson_naive 0.0304

> canon("c2.se_crude_poisson_robust", cp$se)
CANON w1.c2.se_crude_poisson_robust 0.0268

> canon("c2.rr_crude_poisson_naive.lo", exp(log(cp$est) -
+     z * cp$se_naive))
CANON w1.c2.rr_crude_poisson_naive.lo 0.3683

> canon("c2.rr_crude_poisson_naive.hi", exp(log(cp$est) +
+     z * cp$se_naive))
CANON w1.c2.rr_crude_poisson_naive.hi 0.4149
ข้อมูลจำลอง ผลลัพธ์จากโค้ดที่แสดง ส่วนนี้ตัดมาจากสคริปต์จำลองข้อมูลของชุดบทความนี้และไฟล์ผลลัพธ์ (log) ของมัน โดย rr_glm, canon และ canon_ci เป็นฟังก์ชันช่วยที่นิยามไว้ก่อนหน้าในสคริปต์นั้น ฟังก์ชันช่วย rr_glm ประมาณ glm แล้วคืนค่า risk ratio ช่วงเชื่อมั่น และค่าคลาดเคลื่อนมาตรฐานทั้งสองแบบ โดยใช้ vcovHC(type = "HC0") เป็นแซนด์วิช (HC0 คือแซนด์วิชแบบพื้นฐานที่ไม่มีการปรับแก้สำหรับตัวอย่างขนาดเล็ก) บรรทัดที่ขึ้นต้นด้วย CANON คือตัวช่วยบันทึกค่าของผู้เขียน ซึ่งพิมพ์ค่าประมาณ ช่วงเชื่อมั่น 95% หรือค่าคลาดเคลื่อนมาตรฐาน คำนำหน้าในบรรทัดเป็นเพียงป้ายกำกับภายใน การรัน R ส่วนนี้ไม่พิมพ์ตารางผลโมเดล ผลลัพธ์จึงอยู่ในบรรทัด CANON

ปรับด้วยอายุและเพศ: ความต่างเล็กน้อย ไม่ใช่ความผิดพลาด

เมื่อเพิ่มอายุและเพศ ผู้ป่วยแต่ละคนจะมีความเสี่ยงที่แบบจำลองพอดีเป็นของตัวเอง น้ำหนักจึงต่างกันภายในแต่ละกลุ่ม น้ำหนักของ log-binomial คือ $1/(1-\mu_i)$ ให้ความสำคัญกับผู้ป่วยความเสี่ยงสูงมากกว่าน้ำหนัก 1 ของ Poisson ดัดแปลง หากแบบจำลองค่าเฉลี่ยถูกต้องสมบูรณ์ ค่าประมาณทั้งสองจะมีความคงเส้นคงวา แต่ก็ยังต่างกันเล็กน้อยในตัวอย่างใดตัวอย่างหนึ่ง

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

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

ปรับด้วยอายุและเพศ: ใกล้กันแต่ไม่เท่ากัน

ข้อมูลจำลอง ผู้ป่วยในทะเบียนทั้ง 20,000 คน สองแถว log-binomial ประมาณแบบจำลองเดียวกันใน Stata และใน R ได้ risk ratio เท่ากัน และต่างกันเฉพาะวิธีคำนวณค่าคลาดเคลื่อนมาตรฐาน
แบบจำลองRisk ratioช่วงเชื่อมั่น 95%ค่าคลาดเคลื่อนมาตรฐานของ log risk ratio
Log-binomial, Stata (observed information)0.51960.4924 ถึง 0.54840.0275
Log-binomial, R (expected information)0.51960.4928 ถึง 0.54790.0270
Poisson ดัดแปลง ค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช0.51790.4911 ถึง 0.54630.0272
Poisson ค่าคลาดเคลื่อนมาตรฐานแบบอิงแบบจำลอง0.5179ไม่ได้คำนวณ0.0315

ค่าคลาดเคลื่อนมาตรฐานสองค่าสำหรับแบบจำลอง log-binomial เดียว

ซอฟต์แวร์สร้างค่าคลาดเคลื่อนมาตรฐานแบบอิงแบบจำลองจากinformation (สารสนเทศ) คือความโค้งของลอการิทึมของภาวะน่าจะเป็น (log-likelihood) ซึ่งเป็นปริมาณที่การประมาณทำให้สูงสุด ณ จุดยอด ค่าเริ่มต้นของ Stata ใช้ความโค้งที่สังเกตได้ และให้ค่าคลาดเคลื่อนมาตรฐาน 0.0275 ส่วน glm ของ R ใช้ค่าคาดหมายของมัน และให้ 0.0270

ทั้งสองแบบตรงกันสำหรับ canonical link ของแต่ละ family คือ link ที่สมการสกอร์ให้ส่วนเหลือทุกตัวมีน้ำหนัก 1 ได้แก่ logit สำหรับ binomial และ log สำหรับ Poisson สำหรับ log link กับ binomial family ทั้งสองแบบโดยทั่วไปต่างกัน เมื่อตัวแปรร่วมทำให้ผู้ป่วยมีความเสี่ยงที่แบบจำลองพอดีต่างกัน ในการประมาณแบบอิ่มตัวข้างต้นทั้งสองแบบตรงกัน [2]

Stata: ปรับด้วยอายุและเพศ

โค้ด Stata w1_sim.do (บรรทัด 429-439 จาก 719)
* adjusted for age and sex
quietly glm delirium surg24 age_c female, family(poisson) link(log)
scalar sc_p2n = _se[surg24]
glm delirium surg24 age_c female, family(poisson) link(log) vce(robust)
matrix bp2 = e(b)
scalar sc_p2 = exp(_b[surg24])
scalar sc_p2lo = exp(_b[surg24] - invnormal(0.975)*_se[surg24])
scalar sc_p2hi = exp(_b[surg24] + invnormal(0.975)*_se[surg24])
scalar sc_p2r = _se[surg24]
* adjusted fits: the log-binomial starts from the Poisson fit
glm delirium surg24 age_c female, family(binomial) link(log) from(bp2)
ผลลัพธ์จากการรัน w1_sim.log
. * adjusted for age and sex
. quietly glm delirium surg24 age_c female, family(poisson) link(log)

. scalar sc_p2n = _se[surg24]

. glm delirium surg24 age_c female, family(poisson) link(log) vce(robust)

Iteration 0:  Log pseudolikelihood = -12338.777
Iteration 1:  Log pseudolikelihood = -12134.247
Iteration 2:  Log pseudolikelihood = -12134.177
Iteration 3:  Log pseudolikelihood = -12134.177

Generalized linear models                         Number of obs   =     20,000
Optimization     : ML                             Residual df     =     19,996
                                                  Scale parameter =          1
Deviance         =  11862.35488                   (1/df) Deviance =   .5932364
Pearson          =  13271.16135                   (1/df) Pearson  =   .6636908

Variance function: V(u) = u                       [Poisson]
Link function    : g(u) = ln(u)                   [Log]

                                                  AIC             =   1.213818
Log pseudolikelihood = -12134.17744               BIC             =  -186167.8

------------------------------------------------------------------------------
             |               Robust
    delirium | Coefficient  std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
      surg24 |  -.6578832   .0271581   -24.22   0.000    -.7111121   -.6046544
       age_c |   .0450466   .0008786    51.27   0.000     .0433246    .0467686
      female |  -.0201594    .020605    -0.98   0.328    -.0605445    .0202257
       _cons |  -1.100182   .0202124   -54.43   0.000    -1.139798   -1.060567
------------------------------------------------------------------------------

. matrix bp2 = e(b)

. scalar sc_p2 = exp(_b[surg24])

. scalar sc_p2lo = exp(_b[surg24] - invnormal(0.975)*_se[surg24])

. scalar sc_p2hi = exp(_b[surg24] + invnormal(0.975)*_se[surg24])

. scalar sc_p2r = _se[surg24]

. * adjusted fits: the log-binomial starts from the Poisson fit
. glm delirium surg24 age_c female, family(binomial) link(log) from(bp2)

Iteration 0:  Log likelihood =  -10500.15
Iteration 1:  Log likelihood = -10413.165
Iteration 2:  Log likelihood = -10400.121
Iteration 3:  Log likelihood = -10399.792
Iteration 4:  Log likelihood = -10399.791

Generalized linear models                         Number of obs   =     20,000
Optimization     : ML                             Residual df     =     19,996
                                                  Scale parameter =          1
Deviance         =  20799.58236                   (1/df) Deviance =   1.040187
Pearson          =   19229.2475                   (1/df) Pearson  =   .9616547

Variance function: V(u) = u*(1-u)                 [Bernoulli]
Link function    : g(u) = ln(u)                   [Log]

                                                  AIC             =   1.040379
Log likelihood   = -10399.79118                   BIC             =  -177230.6

------------------------------------------------------------------------------
             |                 OIM
    delirium | Coefficient  std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
      surg24 |   -.654659   .0274789   -23.82   0.000    -.7085167   -.6008014
       age_c |    .039937    .000757    52.75   0.000     .0384532    .0414208
      female |   .0025709   .0169232     0.15   0.879     -.030598    .0357398
       _cons |  -1.098012   .0185469   -59.20   0.000    -1.134363    -1.06166
------------------------------------------------------------------------------
ข้อมูลจำลอง ผลลัพธ์จากโค้ดที่แสดง ส่วนนี้ตัดมาจากสคริปต์จำลองข้อมูลของชุดบทความนี้และไฟล์ผลลัพธ์ (log) ของมัน ชื่อไฟล์และช่วงบรรทัดจึงบอกเพียงว่าตัดมาจากตรงไหน สัมประสิทธิ์ของ Poisson เป็นค่าเริ่มต้นของการประมาณ log-binomial สัมประสิทธิ์ surg24 ทั้งสองต่างกันที่ทศนิยมตำแหน่งที่สาม และ OIM ย่อมาจาก observed information การยกเอกซ์โปเนนเชียลให้สัมประสิทธิ์ surg24 แต่ละค่าจะได้ risk ratio ในตารางด้านบน

R: ปรับด้วยอายุและเพศ แล้วปรับด้วยอายุและความเปราะบาง

โค้ด R w1_sim_r.R (บรรทัด 213-236 จาก 587)
# adjusted fits: the log-binomial needs starting values (taken from the Poisson fit) to converge
p2 <- rr_glm(delirium ~ surg24 + age_c + female, poisson(link = "log"), d, TRUE)
l2 <- rr_glm(delirium ~ surg24 + age_c + female, binomial(link = "log"), d, start = coef(p2$fit))
canon("c2.rr_adj2_logbin", l2$est)
# R's glm uses the expected-information SE for the non-canonical log link (Stata's ML glm: observed)
canon("c2.rr_adj2_logbin.lo.r", l2$lo); canon("c2.rr_adj2_logbin.hi.r", l2$hi)
canon("c2.se_adj2_logbin.r", l2$se)                           # log-RR SE, adjusted log-binomial (expected information)
canon("c2.rr_adj2_poisson", p2$est)
canon("c2.rr_adj2_poisson.lo", p2$lo); canon("c2.rr_adj2_poisson.hi", p2$hi)   # modified Poisson, robust CI
canon("c2.se_adj2_poisson_naive", p2$se_naive)                # Poisson model-based log-RR SE, adjusted
canon("c2.se_adj2_poisson_robust", p2$se)                     # sandwich log-RR SE, adjusted
g2 <- rr_glm(delirium ~ surg24 + age_c + female, gaussian(link = "log"), d, TRUE, start = coef(p2$fit))
canon("c2.rr_adj2_gaussian", g2$est)                          # Gaussian log link, adjusted for age and sex
canon("c2.rr_adj2_gaussian.lo.r", g2$lo); canon("c2.rr_adj2_gaussian.hi.r", g2$hi)   # expected-information bread
# adjusted for age and frailty: the Poisson fit gives fitted risks above 1, so the log-binomial cannot start
paf <- rr_glm(delirium ~ surg24 + age_c + frail, poisson(link = "log"), d, TRUE)
canon("c2.rr_adjaf_poisson", paf$est)
canon("c2.rr_adjaf_poisson.lo", paf$lo); canon("c2.rr_adjaf_poisson.hi", paf$hi)
canon("c2.se_adjaf_poisson_naive", paf$se_naive)              # Poisson model-based log-RR SE, age and frailty
canon("c2.se_adjaf_poisson_robust", paf$se)                   # sandwich log-RR SE, age and frailty
canon("c2.adjaf_poisson_max_fitted", max(fitted(paf$fit)))    # largest fitted risk: above 1 means the log-binomial wall
lbaf <- tryCatch(glm(delirium ~ surg24 + age_c + frail, family = binomial(link = "log"), data = d, start = coef(paf$fit)),
                 error = function(e) { cat("NOTE log-binomial (age, frailty) stopped:", conditionMessage(e), "\n"); NULL })
canon_n("c2.adjaf_logbin_converged.r", !is.null(lbaf) && isTRUE(lbaf$converged))   # 1 = converged
ผลลัพธ์จากการรัน w1_sim_r.log
> p2 <- rr_glm(delirium ~ surg24 + age_c + female, poisson(link = "log"),
+     d, TRUE)

> l2 <- rr_glm(delirium ~ surg24 + age_c + female, binomial(link = "log"),
+     d, start = coef(p2$fit))

> canon("c2.rr_adj2_logbin", l2$est)
CANON w1.c2.rr_adj2_logbin 0.5196

> canon("c2.rr_adj2_logbin.lo.r", l2$lo)
CANON w1.c2.rr_adj2_logbin.lo.r 0.4928

> canon("c2.rr_adj2_logbin.hi.r", l2$hi)
CANON w1.c2.rr_adj2_logbin.hi.r 0.5479

> canon("c2.se_adj2_logbin.r", l2$se)
CANON w1.c2.se_adj2_logbin.r 0.0270

> canon("c2.rr_adj2_poisson", p2$est)
CANON w1.c2.rr_adj2_poisson 0.5179

> canon("c2.rr_adj2_poisson.lo", p2$lo)
CANON w1.c2.rr_adj2_poisson.lo 0.4911

> canon("c2.rr_adj2_poisson.hi", p2$hi)
CANON w1.c2.rr_adj2_poisson.hi 0.5463

> canon("c2.se_adj2_poisson_naive", p2$se_naive)
CANON w1.c2.se_adj2_poisson_naive 0.0315

> canon("c2.se_adj2_poisson_robust", p2$se)
CANON w1.c2.se_adj2_poisson_robust 0.0272

> g2 <- rr_glm(delirium ~ surg24 + age_c + female, gaussian(link = "log"),
+     d, TRUE, start = coef(p2$fit))

> canon("c2.rr_adj2_gaussian", g2$est)
CANON w1.c2.rr_adj2_gaussian 0.5294

> canon("c2.rr_adj2_gaussian.lo.r", g2$lo)
CANON w1.c2.rr_adj2_gaussian.lo.r 0.5021

> canon("c2.rr_adj2_gaussian.hi.r", g2$hi)
CANON w1.c2.rr_adj2_gaussian.hi.r 0.5582

> paf <- rr_glm(delirium ~ surg24 + age_c + frail, poisson(link = "log"),
+     d, TRUE)

> canon("c2.rr_adjaf_poisson", paf$est)
CANON w1.c2.rr_adjaf_poisson 0.6413

> canon("c2.rr_adjaf_poisson.lo", paf$lo)
CANON w1.c2.rr_adjaf_poisson.lo 0.6094

> canon("c2.rr_adjaf_poisson.hi", paf$hi)
CANON w1.c2.rr_adjaf_poisson.hi 0.6749

> canon("c2.se_adjaf_poisson_naive", paf$se_naive)
CANON w1.c2.se_adjaf_poisson_naive 0.0320

> canon("c2.se_adjaf_poisson_robust", paf$se)
CANON w1.c2.se_adjaf_poisson_robust 0.0260

> canon("c2.adjaf_poisson_max_fitted", max(fitted(paf$fit)))
CANON w1.c2.adjaf_poisson_max_fitted 1.1066

> lbaf <- tryCatch(glm(delirium ~ surg24 + age_c + frail,
+     family = binomial(link = "log"), data = d, start = coef(paf$fit)),
+     error = function(e) {
+         cat("NOTE log-binomial (age, frailty) stopped:", conditionMessage(e),
+             "\n")
+         NULL
+     })
NOTE log-binomial (age, frailty) stopped: cannot find valid starting values: please specify some

> canon_n("c2.adjaf_logbin_converged.r", !is.null(lbaf) &&
+     isTRUE(lbaf$converged))
CANON w1.c2.adjaf_logbin_converged.r 0
ข้อมูลจำลอง ผลลัพธ์จากโค้ดที่แสดง ส่วนนี้ตัดมาจากสคริปต์จำลองข้อมูลของชุดบทความนี้และไฟล์ผลลัพธ์ (log) ของมัน โดย rr_glm, canon และ canon_n เป็นฟังก์ชันช่วยที่นิยามไว้ก่อนหน้าในสคริปต์นั้น บรรทัดที่ขึ้นต้นด้วย CANON คือตัวช่วยบันทึกค่าของผู้เขียน ซึ่งพิมพ์ค่าประมาณ ช่วงเชื่อมั่น 95% หรือค่าคลาดเคลื่อนมาตรฐาน คำนำหน้าในบรรทัดเป็นเพียงป้ายกำกับภายใน การรัน R ส่วนนี้ไม่พิมพ์ตารางผลโมเดล ผลลัพธ์จึงอยู่ในบรรทัด CANON เมื่อใส่ความเปราะบาง ค่าเฉลี่ยของ Poisson ที่มากที่สุดเกิน 1 ดังนั้นการประมาณ log-binomial ของ R จึงหยุดด้วยข้อผิดพลาดก่อนการวนซ้ำครั้งแรก เพราะค่าเริ่มต้นที่ให้ไปทำให้ค่าเฉลี่ยที่แบบจำลองพอดีบางค่าเกิน 1 อยู่แล้ว และข้อความของมันขอค่าเริ่มต้นที่ใช้ได้ บรรทัด Gaussian ประมาณค่าเฉลี่ยบนสเกลลอการิทึมชุดเดียวกันด้วยฟังก์ชันความแปรปรวนแบบที่สามซึ่งเป็นค่าคงที่ และให้น้ำหนักส่วนเหลือแต่ละตัวเป็นสัดส่วนกับความเสี่ยงที่แบบจำลองพอดี ตอนที่ 3 ของชุดบทความนี้ใช้การประมาณนั้น

อายุและความเปราะบาง: ทะเบียนชนกำแพง

เมื่อใส่อายุและความเปราะบางในแบบจำลอง Poisson ดัดแปลงให้ risk ratio 0.6413 (ช่วงเชื่อมั่น 95% คือ 0.6094 ถึง 0.6749) ค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิชของ log risk ratio คือ 0.0260 เทียบกับ 0.0320 แบบอิงแบบจำลอง ค่าที่แบบจำลองพอดีสูงสุดคือ 1.1066 ในผู้ป่วยเปราะบางที่อายุมากที่สุดและไม่ได้ผ่าตัดเร็ว

การจำลองข้อมูลกำหนดให้ความเสี่ยงจริงของภาวะสับสนเฉียบพลันในทะเบียนนี้สูงถึง 0.991 แต่ไม่เกิน 1 ผลของอายุแบบเส้นตรงบนสเกลลอการิทึมไม่อาจแบนราบลงในแบบเดียวกัน ค่าที่แบบจำลองพอดีของผู้ป่วยเปราะบางที่อายุมากที่สุดจึงเกิน 1

แบบจำลอง log-binomial ที่เริ่มจากสัมประสิทธิ์ Poisson เหล่านี้ไม่ลู่เข้า Stata วนซ้ำจนถึงขีดจำกัดและเตือนว่ามีค่าเฉลี่ยที่เป็นไปไม่ได้ (inadmissible) คือค่าที่ความเสี่ยงเป็นไม่ได้ ส่วน glm ของ R หยุดด้วยข้อผิดพลาดก่อนการวนซ้ำครั้งแรก เพราะค่าเริ่มต้นทำให้ค่าเฉลี่ยที่แบบจำลองพอดีบางค่าเกิน 1 อยู่แล้ว

ขั้นต่อไปที่กำหนดไว้ล่วงหน้า คือการถอยจากแบบจำลอง log-binomial ไปยัง Poisson ดัดแปลงและวิธีอื่นต่อไป เป็นเรื่องของตอนที่ 3 ของชุดบทความนี้

Stata: อายุและความเปราะบาง จุดที่การประมาณ log-binomial ชนกำแพง

โค้ด Stata w1_sim.do (บรรทัด 458-470 จาก 719)
quietly glm delirium surg24 age_c frail, family(poisson) link(log)
scalar sc_pafn = _se[surg24]
glm delirium surg24 age_c frail, family(poisson) link(log) vce(robust)
matrix bpaf = e(b)
ciz c2.rr_adjaf_poisson surg24 exp
* model-based versus sandwich log-RR SE, age and frailty
canon c2.se_adjaf_poisson_naive scalar(sc_pafn)
canon c2.se_adjaf_poisson_robust _se[surg24]
predict double mu_af, mu
summarize mu_af
* largest fitted risk: above 1 means the log-binomial wall
canon c2.adjaf_poisson_max_fitted r(max)
capture noisily glm delirium surg24 age_c frail, family(binomial) link(log) from(bpaf) iterate(100)
ผลลัพธ์จากการรัน w1_sim.log
. quietly glm delirium surg24 age_c frail, family(poisson) link(log)

. scalar sc_pafn = _se[surg24]

. glm delirium surg24 age_c frail, family(poisson) link(log) vce(robust)

Iteration 0:  Log pseudolikelihood = -11571.438
Iteration 1:  Log pseudolikelihood = -11364.541
Iteration 2:  Log pseudolikelihood = -11364.358
Iteration 3:  Log pseudolikelihood = -11364.358

Generalized linear models                         Number of obs   =     20,000
Optimization     : ML                             Residual df     =     19,996
                                                  Scale parameter =          1
Deviance         =  10322.71624                   (1/df) Deviance =   .5162391
Pearson          =  12654.60943                   (1/df) Pearson  =    .632857

Variance function: V(u) = u                       [Poisson]
Link function    : g(u) = ln(u)                   [Log]

                                                  AIC             =   1.136836
Log pseudolikelihood = -11364.35812               BIC             =  -187707.4

------------------------------------------------------------------------------
             |               Robust
    delirium | Coefficient  std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
      surg24 |  -.4442503   .0260218   -17.07   0.000    -.4952521   -.3932485
       age_c |   .0323723   .0009141    35.41   0.000     .0305807     .034164
       frail |   1.152159   .0275096    41.88   0.000     1.098241    1.206077
       _cons |  -1.827827   .0254834   -71.73   0.000    -1.877774   -1.777881
------------------------------------------------------------------------------

. matrix bpaf = e(b)

. ciz c2.rr_adjaf_poisson surg24 exp
CANON w1.c2.rr_adjaf_poisson 0.6413
CANON w1.c2.rr_adjaf_poisson.lo 0.6094
CANON w1.c2.rr_adjaf_poisson.hi 0.6749

. * model-based versus sandwich log-RR SE, age and frailty
. canon c2.se_adjaf_poisson_naive scalar(sc_pafn)
CANON w1.c2.se_adjaf_poisson_naive 0.0320

. canon c2.se_adjaf_poisson_robust _se[surg24]
CANON w1.c2.se_adjaf_poisson_robust 0.0260

. predict double mu_af, mu

. summarize mu_af

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
       mu_af |     20,000      .31015    .2711498   .0390369   1.106572

. * largest fitted risk: above 1 means the log-binomial wall
. canon c2.adjaf_poisson_max_fitted r(max)
CANON w1.c2.adjaf_poisson_max_fitted 1.1066

. capture noisily glm delirium surg24 age_c frail, family(binomial) link(log) from(bpaf) iterate(100)

Iteration 0:  Log likelihood = -10777.424  (not concave)
Iteration 1:  Log likelihood = -10776.706  (not concave)
Iteration 2:  Log likelihood = -10776.648  (not concave)
Iteration 3:  Log likelihood = -10776.642  (not concave)
Iteration 4:  Log likelihood = -10776.642  (not concave)
Iteration 5:  Log likelihood = -10776.642  (not concave)
Iteration 6:  Log likelihood = -10776.642  (not concave)
Iteration 7:  Log likelihood = -10776.642  (not concave)
Iteration 8:  Log likelihood = -10776.642  (not concave)
Iteration 9:  Log likelihood = -10776.642  (not concave)
Iteration 10: Log likelihood = -10776.642  (not concave)
Iteration 11: Log likelihood = -10776.642  (not concave)
Iteration 12: Log likelihood = -10776.642  (not concave)
Iteration 13: Log likelihood = -10776.642  (not concave)
Iteration 14: Log likelihood = -10776.642  (not concave)
Iteration 15: Log likelihood = -10776.642  (not concave)
Iteration 16: Log likelihood = -10776.642  (not concave)
Iteration 17: Log likelihood = -10776.642  (not concave)
Iteration 18: Log likelihood = -10776.642  (not concave)
Iteration 19: Log likelihood = -10776.642  (not concave)
Iteration 20: Log likelihood = -10776.642  (not concave)
Iteration 21: Log likelihood = -10776.642  (not concave)
Iteration 22: Log likelihood = -10776.642  (not concave)
Iteration 23: Log likelihood = -10776.641  (not concave)
Iteration 24: Log likelihood = -10776.641  (not concave)
Iteration 25: Log likelihood = -10776.641  (not concave)
Iteration 26: Log likelihood = -10776.641  (not concave)
Iteration 27: Log likelihood = -10776.641  (not concave)
Iteration 28: Log likelihood = -10776.641  (not concave)
Iteration 29: Log likelihood = -10776.641  (not concave)
Iteration 30: Log likelihood = -10776.641  (not concave)
Iteration 31: Log likelihood = -10776.641  (not concave)
Iteration 32: Log likelihood = -10776.641  (not concave)
Iteration 33: Log likelihood = -10776.641  (not concave)
Iteration 34: Log likelihood = -10776.641  (not concave)
Iteration 35: Log likelihood = -10776.641  (not concave)
Iteration 36: Log likelihood = -10776.641  (not concave)
Iteration 37: Log likelihood = -10776.641  (not concave)
Iteration 38: Log likelihood = -10776.641  (not concave)
Iteration 39: Log likelihood = -10776.641  (not concave)
Iteration 40: Log likelihood = -10776.641  (not concave)
Iteration 41: Log likelihood = -10776.641  (not concave)
Iteration 42: Log likelihood = -10776.641  (not concave)
Iteration 43: Log likelihood = -10776.641  (not concave)
Iteration 44: Log likelihood = -10776.641  (not concave)
Iteration 45: Log likelihood = -10776.641  (not concave)
Iteration 46: Log likelihood = -10776.641  (not concave)
Iteration 47: Log likelihood = -10776.641  (not concave)
Iteration 48: Log likelihood = -10776.641  (not concave)
Iteration 49: Log likelihood = -10776.641  (not concave)
Iteration 50: Log likelihood = -10776.641  (not concave)
Iteration 51: Log likelihood = -10776.641  (not concave)
Iteration 52: Log likelihood = -10776.641  (not concave)
Iteration 53: Log likelihood =  -10776.64  (not concave)
Iteration 54: Log likelihood =  -10776.64  (not concave)
Iteration 55: Log likelihood =  -10776.64  (not concave)
Iteration 56: Log likelihood =  -10776.64  (not concave)
Iteration 57: Log likelihood =  -10776.64  (not concave)
Iteration 58: Log likelihood =  -10776.64  (not concave)
Iteration 59: Log likelihood =  -10776.64  (not concave)
Iteration 60: Log likelihood =  -10776.64  (not concave)
Iteration 61: Log likelihood =  -10776.64  (not concave)
Iteration 62: Log likelihood =  -10776.64  (not concave)
Iteration 63: Log likelihood =  -10776.64  (not concave)
Iteration 64: Log likelihood =  -10776.64  (not concave)
Iteration 65: Log likelihood =  -10776.64  (not concave)
Iteration 66: Log likelihood =  -10776.64  (not concave)
Iteration 67: Log likelihood =  -10776.64  (not concave)
Iteration 68: Log likelihood =  -10776.64  (not concave)
Iteration 69: Log likelihood =  -10776.64  (not concave)
Iteration 70: Log likelihood =  -10776.64  (not concave)
Iteration 71: Log likelihood =  -10776.64  (not concave)
Iteration 72: Log likelihood =  -10776.64  (not concave)
Iteration 73: Log likelihood =  -10776.64  (not concave)
Iteration 74: Log likelihood =  -10776.64  (not concave)
Iteration 75: Log likelihood =  -10776.64  (not concave)
Iteration 76: Log likelihood =  -10776.64  (not concave)
Iteration 77: Log likelihood =  -10776.64  (not concave)
Iteration 78: Log likelihood =  -10776.64  (not concave)
Iteration 79: Log likelihood =  -10776.64  (not concave)
Iteration 80: Log likelihood =  -10776.64  (not concave)
Iteration 81: Log likelihood =  -10776.64  (not concave)
Iteration 82: Log likelihood = -10776.639  (not concave)
Iteration 83: Log likelihood = -10776.639  (not concave)
Iteration 84: Log likelihood = -10776.639  (not concave)
Iteration 85: Log likelihood = -10776.639  (not concave)
Iteration 86: Log likelihood = -10776.639  (not concave)
Iteration 87: Log likelihood = -10776.639  (not concave)
Iteration 88: Log likelihood = -10776.639  (not concave)
Iteration 89: Log likelihood = -10776.639  (not concave)
Iteration 90: Log likelihood = -10776.639  (not concave)
Iteration 91: Log likelihood = -10776.639  (not concave)
Iteration 92: Log likelihood = -10776.639  (not concave)
Iteration 93: Log likelihood = -10776.639  (not concave)
Iteration 94: Log likelihood = -10776.639  (not concave)
Iteration 95: Log likelihood = -10776.639  (not concave)
Iteration 96: Log likelihood = -10776.639  (not concave)
Iteration 97: Log likelihood = -10776.639  (not concave)
Iteration 98: Log likelihood = -10776.639  (not concave)
Iteration 99: Log likelihood = -10776.639  (not concave)
Iteration 100: Log likelihood = -10776.639  (not concave)
convergence not achieved

Generalized linear models                         Number of obs   =     20,000
Optimization     : ML                             Residual df     =     19,998
                                                  Scale parameter =          1
Deviance         =  21553.27781                   (1/df) Deviance =   1.077772
Pearson          =  1.00000e+10                   (1/df) Pearson  =   500050.9

Variance function: V(u) = u*(1-u)                 [Bernoulli]
Link function    : g(u) = ln(u)                   [Log]

                                                  AIC             =   1.077864
Log likelihood   =  -10776.6389                   BIC             =  -176496.7

------------------------------------------------------------------------------
             |                 OIM
    delirium | Coefficient  std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
      surg24 |  -.4160061   .0221925   -18.75   0.000    -.4595027   -.3725096
       age_c |   .0323723   7.76e-10  4.2e+07   0.000     .0323723    .0323723
       frail |   1.152157   1.78e-08  6.5e+07   0.000     1.152157    1.152157
       _cons |  -1.827829          .        .       .            .           .
------------------------------------------------------------------------------
Warning: Parameter estimates produce inadmissible mean estimates in one or
         more observations.
Warning: Convergence not achieved.
ข้อมูลจำลอง ผลลัพธ์จากโค้ดที่แสดง ส่วนนี้ตัดมาจากสคริปต์จำลองข้อมูลของชุดบทความนี้และไฟล์ผลลัพธ์ (log) ของมัน ชื่อไฟล์และช่วงบรรทัดจึงบอกเพียงว่าตัดมาจากตรงไหน ส่วน ciz และ canon เป็นคำสั่งช่วยที่นิยามไว้ตอนต้นของสคริปต์นั้น การประมาณ Poisson ดัดแปลงให้ risk ratio และคอลัมน์ Max ของ summarize แสดงค่าเฉลี่ยที่แบบจำลองพอดีซึ่งเกิน 1 บรรทัดที่ขึ้นต้นด้วย CANON คือตัวช่วยบันทึกค่าของผู้เขียน ซึ่งพิมพ์ค่าประมาณและช่วงเชื่อมั่น 95% ไม่ใช่ผลลัพธ์ของโปรแกรม ให้อ่านตารางผลโมเดลด้านบน เมื่อเริ่มจากสัมประสิทธิ์เหล่านั้น การประมาณ log-binomial ไม่พบจุดยอดของภาวะน่าจะเป็น (likelihood) ที่ชัดเจนเลย Stata จึงพิมพ์ 'not concave' ในทุกการวนซ้ำ และจบโดยไม่ลู่เข้า พร้อมคำเตือนเรื่องค่าเฉลี่ยที่เป็นไปไม่ได้ สัมประสิทธิ์และค่าคลาดเคลื่อนมาตรฐานที่พิมพ์หลัง 'convergence not achieved' มาจากการประมาณที่ไม่ลู่เข้า และไม่ใช่ค่าประมาณที่ควรรายงาน

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

  • "family เพียงบอกชนิดของผลลัพธ์ ดังนั้นจะเลือกแบบใดก็ไม่สำคัญ"

    ในทะเบียน risk ratio แบบ log link ค่าเดียวกันคือ 0.3909 มีค่าคลาดเคลื่อนมาตรฐานของ log risk ratio เท่ากับ 0.0268 เมื่อใช้ binomial family และ 0.0304 เมื่อใช้ความแปรปรวนแบบอิงแบบจำลองของ Poisson

    วิธีแก้: family กำหนดฟังก์ชันความแปรปรวน ซึ่งเป็นตัวขับค่าคลาดเคลื่อนมาตรฐาน และในแบบจำลองที่ปรับตัวแปรร่วมก็ขับน้ำหนักของข้อสังเกต Poisson family กับผลลัพธ์แบบสองค่าต้องใช้ค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช

  • "robust standard error ช่วยแก้แบบจำลองที่ระบุผิด"

    Poisson ดัดแปลงต้องมีแบบจำลองค่าเฉลี่ยที่ถูกต้อง แซนด์วิชเพียงแทนที่ความแปรปรวนแบบ Poisson ซึ่งผิดสำหรับผลลัพธ์แบบสองค่า

    วิธีแก้: robust standard error ช่วยแก้ค่าคลาดเคลื่อนมาตรฐานเมื่อข้อสมมติเรื่องความแปรปรวนผิด แต่ไม่ได้แก้แบบจำลองค่าเฉลี่ยที่ผิด และสัมประสิทธิ์ที่ลำเอียงก็ยังคงลำเอียงอยู่

  • "risk ratio ของ log-binomial กับ Poisson ดัดแปลงที่ปรับแล้วต่างกัน แสดงว่าอันใดอันหนึ่งผิด"

    สองแบบถ่วงน้ำหนักผู้ป่วยด้วยฟังก์ชันความแปรปรวนต่างกัน ได้ 0.5196 และ 0.5179 หลังปรับด้วยอายุและเพศในทะเบียน

    วิธีแก้: ควรคาดว่ามีช่องว่างเล็กน้อย แต่อย่าอ่านว่าเป็นหลักฐานว่าแบบจำลองค่าเฉลี่ยถูกต้อง เพราะทั้งสองแบบใช้แบบจำลองนั้นร่วมกัน เมื่อช่องว่างมาก ให้ตรวจแบบจำลองค่าเฉลี่ย เช่นปฏิกิริยาสัมพันธ์ รูปร่างของตัวแปรร่วมต่อเนื่อง และค่าที่แบบจำลองพอดีสุดโต่ง ก่อนโทษวิธีใดวิธีหนึ่ง

  • "Poisson ดัดแปลงใช้ได้เฉพาะกับผลลัพธ์ที่พบน้อย"

    มันประมาณ risk ratio ได้กับผลลัพธ์ที่พบบ่อยด้วย เช่นภาวะสับสนเฉียบพลันในทะเบียน

    วิธีแก้: ความพบน้อยสำคัญกับคำถามอีกข้อหนึ่ง คือ odds ratio ใกล้เคียง risk ratio หรือไม่

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

อภิธานศัพท์

linear predictor (ตัวทำนายเชิงเส้น (linear predictor))
ผลรวมถ่วงน้ำหนักของตัวแปรร่วมของผู้ป่วย คือ $\eta$
link function (ฟังก์ชันเชื่อมโยง (link function))
ฟังก์ชัน $g(\cdot)$ ที่เชื่อมค่าเฉลี่ยของผลลัพธ์กับ $\eta$ และกำหนดมาตรวัดผล
family (family (การแจกแจงของผลลัพธ์))
การแจกแจงที่สมมติให้ผลลัพธ์ ซึ่งให้ฟังก์ชันความแปรปรวน
variance function (ฟังก์ชันความแปรปรวน (variance function))
$V(\mu)$ คือความแปรปรวนขึ้นกับค่าเฉลี่ยอย่างไร: $\mu(1-\mu)$ สำหรับ binomial และ $\mu$ สำหรับ Poisson
log-binomial model (แบบจำลอง log-binomial)
GLM แบบ binomial ที่ใช้ log link ให้ risk ratio
modified Poisson regression (Poisson ดัดแปลง (modified Poisson regression))
GLM แบบ Poisson ที่ใช้ log link และค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช ประมาณกับผลลัพธ์แบบสองค่า
boundary
ขอบของสัมประสิทธิ์ที่ยอมให้มีได้ สำหรับแบบจำลอง log-binomial คือความเสี่ยงที่แบบจำลองพอดีเท่ากับ 1
convergence
การลู่เข้า (convergence): จุดที่ค่าประมาณต่อเนื่องของขั้นตอนคำนวณหยุดเปลี่ยนแปลง
sandwich standard error (ค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช (robust standard error))
ค่าคลาดเคลื่อนมาตรฐานจากส่วนเหลือที่สังเกตได้ ใช้ได้เมื่อฟังก์ชันความแปรปรวนผิดแต่แบบจำลองค่าเฉลี่ยถูกต้อง

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

  1. Nelder JA, Wedderburn RWM. Generalized linear models. J R Stat Soc Ser A. 1972;135(3):370-384. doi:10.2307/2344614 https://doi.org/10.2307/2344614
  2. McCullagh P, Nelder JA. Generalized linear models. 2nd ed. London: Chapman and Hall; 1989. doi:10.1007/978-1-4899-3242-6 https://doi.org/10.1007/978-1-4899-3242-6
  3. Wacholder S. Binomial regression in GLIM: estimating risk ratios and risk differences. Am J Epidemiol. 1986;123(1):174-184. doi:10.1093/oxfordjournals.aje.a114212 https://doi.org/10.1093/oxfordjournals.aje.a114212
  4. Zou G. A modified Poisson regression approach to prospective studies with binary data. Am J Epidemiol. 2004;159(7):702-706. doi:10.1093/aje/kwh090 https://doi.org/10.1093/aje/kwh090
  5. Williamson T, Eliasziw M, Fick GH. Log-binomial models: exploring failed convergence. Emerg Themes Epidemiol. 2013;10:14. doi:10.1186/1742-7622-10-14 https://doi.org/10.1186/1742-7622-10-14
  6. Naimi AI, Whitcomb BW. Estimating risk ratios and risk differences using regression. Am J Epidemiol. 2020;189(6):508-510. doi:10.1093/aje/kwaa044 https://doi.org/10.1093/aje/kwaa044

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

  • link กำหนดมาตรวัดผล: identity ให้ผลต่างความเสี่ยง log ให้ risk ratio และ logit ให้ odds ratio
  • family กำหนดฟังก์ชันความแปรปรวน ซึ่งขับค่าคลาดเคลื่อนมาตรฐาน และเมื่อมีตัวแปรร่วม ขับน้ำหนักที่ผู้ป่วยแต่ละคนได้รับ
  • ในแบบจำลอง log-binomial ความเสี่ยงที่แบบจำลองพอดีจะไม่เกิน 1 ก็ต่อเมื่อ eta ไม่เกิน 0 ดังนั้น eta ของผู้ป่วยทุกคนต้องอยู่ในช่วงนั้น ใกล้กำแพงนั้นการประมาณ log-binomial จะไม่ลู่เข้าหรือหยุดบนขอบเขต
  • Poisson ดัดแปลงคง log link โดยไม่มีกำแพง และให้ risk ratio ที่คงเส้นคงวาเมื่อแบบจำลองค่าเฉลี่ยถูกต้อง พร้อมค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช
  • เมื่อมีตัวแปรสัมผัสแบบสองค่าตัวเดียว แบบจำลองทั้งสองให้ risk ratio เท่ากัน เมื่อมีตัวแปรร่วมทั้งสองถ่วงน้ำหนักผู้ป่วยต่างกันและให้ค่าต่างกันเล็กน้อย ซึ่งไม่ใช่ความผิดพลาด

อ่านต่อในวิกิ: [[risk-regression-models-epidemiology-th]] [[glm-families-effect-measures]]

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

ความคิดเห็น

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

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

Link และ Family: ตัวหนึ่งกำหนดมาตรวัดผล อีกตัวกำหนดค่าคลาดเคลื่อนมาตรฐาน — Uniqcret