เลือก vce() แบบไหนเมื่อใด: standard error แบบอิงแบบจำลอง แบบ robust หรือแบบ cluster-robust

Clinical Epidemiology ResearchMethodology and Research Design THUniqcret doctor knowledges TH
เลือก vce() แบบไหนเมื่อใด: standard error แบบอิงแบบจำลอง แบบ robust หรือแบบ cluster-robust
On this page

Read the English version

บทคัดย่อ

ค่าสัมประสิทธิ์การถดถอยกับค่าคลาดเคลื่อนมาตรฐานของมันมาจากการคำนวณคนละส่วน และออปชัน vce() ของ Stata เป็นตัวกำหนดส่วนหลัง ในข้อมูลจำลองของผู้ป่วย 600 คนจากโรงพยาบาล 40 แห่ง โรงพยาบาลครึ่งหนึ่งมีโปรแกรมติดตามผู้ป่วยหลังจำหน่าย อัตราส่วนอัตราอุบัติการณ์ (incidence rate ratio) ของการกลับมานอนโรงพยาบาลซ้ำที่สัมพันธ์กับโปรแกรมเท่ากับ 0.72 ไม่ว่าจะเลือกวิธีใด ค่าคลาดเคลื่อนมาตรฐานของลอการิทึมของอัตราส่วนนี้เท่ากับ 0.0686 เมื่อเชื่อความแปรปรวนแบบ Poisson, 0.0816 เมื่อใช้ vce(robust) และ 0.1721 เมื่อใช้ vce(cluster hospital) วิธี cluster-robust รวมส่วนที่ผู้ป่วยทุกคนของโรงพยาบาลเดียวกันมีต่อค่าประมาณเข้าด้วยกันก่อนยกกำลังสอง จึงยอมให้ผู้ป่วยในโรงพยาบาลเดียวกันสัมพันธ์กันได้ ช่วงความเชื่อมั่น 95% ของวิธีนี้ คือ 0.51 ถึง 1.01 เป็นช่วงที่สะท้อนโปรแกรมซึ่งจัดสรรตามโรงพยาบาล แบบจำลอง negative binomial ให้อัตราส่วนเกือบเท่ากัน แต่ยังถือว่าผู้ป่วยเป็นอิสระต่อกัน ตัวประมาณความแปรปรวนไม่มีตัวใดเปลี่ยนสิ่งที่ประมาณ หรือขจัดตัวกวนระดับโรงพยาบาลได้ บทความนี้ให้ตารางตัดสินใจสำหรับ vce() คำสั่ง R ที่เทียบเท่ากัน และประโยคสำหรับส่วนวิธีการและส่วนผลลัพธ์ของผลลัพธ์แบบนับและแบบสองค่า


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

ค่าคลาดเคลื่อนมาตรฐานสามค่าสำหรับโปรแกรมเดียว

ทีมคุณภาพของเครือข่ายโรงพยาบาลแห่งหนึ่งศึกษาการกลับมานอนโรงพยาบาลซ้ำ (readmission) คือจำนวนครั้งที่ผู้ป่วยแต่ละคนต้องนอนโรงพยาบาลในช่วงหนึ่งปีหลังจำหน่าย โรงพยาบาลครึ่งหนึ่งของเครือข่ายมีโปรแกรมติดตามผู้ป่วยหลังจำหน่าย ทีมต้องการทราบว่าผู้ป่วยของโรงพยาบาลเหล่านั้นกลับมานอนซ้ำน้อยกว่าหรือไม่ ข้อมูลในที่นี้เป็นข้อมูลจำลอง: ผู้ป่วย 600 คน จากโรงพยาบาล 40 แห่ง แห่งละ 15 คน

แผนการวิเคราะห์ระบุ vce(robust) ผู้ทบทวนร่างรายงานขอ vce(cluster hospital) และนักสถิติเสนอให้ใช้แบบจำลอง negative binomial แทน ซึ่งเป็นแบบจำลองข้อมูลนับที่ยอมให้มีความกระจายเกินกว่า Poisson อัตราส่วนอัตราอุบัติการณ์ (incidence rate ratio) ของโปรแกรม คืออัตราส่วนของจำนวนครั้งที่นอนโรงพยาบาลเฉลี่ยต่อผู้ป่วยในโรงพยาบาลที่มีโปรแกรมต่อค่านั้นในโรงพยาบาลอื่น แทบไม่ขยับระหว่างสามวิธี ส่วนช่วงความเชื่อมั่นขยับ: สองวิธีไม่ครอบคลุม 1 และอีกหนึ่งวิธีครอบคลุมค่านั้น

บทความนี้อธิบายว่า vce() ควบคุมอะไร แต่ละทางเลือกสมมติอะไร และเลือกจากการออกแบบการศึกษาอย่างไรก่อนเห็นผลใด ๆ จากนั้นจึงอธิบายวิธีรายงาน

vce() ควบคุมอะไร

คำสั่งถดถอยประมาณสองสิ่ง คือสัมประสิทธิ์ และความแปรปรวนของสัมประสิทธิ์เหล่านั้นข้ามการศึกษาซ้ำ สิ่งที่สองคือเมทริกซ์ความแปรปรวนและความแปรปรวนร่วม (variance-covariance matrix, VCE) ความแปรปรวนที่ประมาณได้ของสัมประสิทธิ์แต่ละตัวอยู่บนเส้นทแยงมุม และความแปรปรวนร่วมของสัมประสิทธิ์แต่ละคู่อยู่นอกเส้นทแยงมุม ค่าคลาดเคลื่อนมาตรฐานคือรากที่สองของเส้นทแยงมุม

ออปชัน vce() เลือกวิธีประมาณเมทริกซ์นี้ [1] มันไม่แตะต้องสัมประสิทธิ์ ค่าประมาณจุดจึงอยู่ที่เดิม สิ่งที่เปลี่ยนคือค่าคลาดเคลื่อนมาตรฐาน และเปลี่ยนช่วงความเชื่อมั่นกับ P value ทุกตัวที่สร้างจากมัน

ความแปรปรวนร่วมสำคัญเมื่อผลลัพธ์รวมสัมประสิทธิ์หลายตัว ความแปรปรวนของผลรวมของสัมประสิทธิ์สองตัว ตามที่ lincom คำนวณ รวมสองเท่าของความแปรปรวนร่วมของมันด้วย ส่วน nlcom ใช้เมทริกซ์ทั้งหมดสำหรับการรวมแบบไม่เป็นเชิงเส้น ทั้งสองจึงรับผลของ vce() ไปเต็ม ๆ

Stata: การประมาณแบบอิงแบบจำลองและ VCE ของมัน

โค้ด Stata g2_sim.do (บรรทัด 89-91 จาก 175)
* ---- 1. Model-based standard errors: vce(oim), the default -------------------------
poisson admissions i.program i.older, irr vce(oim) nolog
estat vce
ผลลัพธ์จากการรัน g2_sim.log
. * ---- 1. Model-based standard errors: vce(oim), the default -------------------------
. poisson admissions i.program i.older, irr vce(oim) nolog

Poisson regression                                      Number of obs =    600
                                                        LR chi2(2)    =  68.92
                                                        Prob > chi2   = 0.0000
Log likelihood = -957.42519                             Pseudo R2     = 0.0347

------------------------------------------------------------------------------
  admissions |        IRR   Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
   1.program |   .7189098   .0493347    -4.81   0.000     .6284364    .8224084
     1.older |    1.59639   .1112163     6.71   0.000     1.392637    1.829953
       _cons |   1.301232    .080132     4.28   0.000     1.153285    1.468159
------------------------------------------------------------------------------
Note: _cons estimates baseline incidence rate.

. estat vce

Covariance matrix of coefficients of poisson model

             | admissions
             |          1.          1.
        e(V) |    program       older       _cons
-------------+-----------------------------------
admissions   |
   1.program |  .00470929
     1.older | -.00006111   .00485354
       _cons |  -.0019389  -.00296885   .00379229
ข้อมูลจำลอง ทั้งสองส่วนเป็นข้อความที่ตัดมาจากสคริปต์จำลองเบื้องหลังชุดบทความนี้และผลลัพธ์ที่สคริปต์พิมพ์ออกมา ชื่อไฟล์และเลขบรรทัดบอกเพียงตำแหน่งของข้อความที่ตัดมาในสคริปต์นั้น และทุกอย่างที่ต้องใช้เพื่ออ่านก็แสดงไว้ครบแล้ว แบบจำลองนี้ประมาณด้วย vce(oim) ซึ่งเป็นค่าเริ่มต้นของ Stata โดยพิมพ์ไว้ให้เห็น เมื่อใช้ irr ตารางจะแสดงอัตราส่วนอัตราอุบัติการณ์และค่าคลาดเคลื่อนมาตรฐานบนมาตราอัตราส่วน ช่วงความเชื่อมั่นคำนวณบนมาตราลอการิทึมแล้วยกกำลังด้วยเลขชี้กำลัง จึงไม่สมมาตรรอบอัตราส่วน จากนั้น estat vce พิมพ์ VCE ของสัมประสิทธิ์บนมาตราลอการิทึม โดยค่าบนเส้นทแยงมุมของ 1.program คือกำลังสองของ 0.0686 ซึ่งเป็นค่าคลาดเคลื่อนมาตรฐานบนมาตราลอการิทึม

R: การประมาณเดียวกันและเมทริกซ์เดียวกัน

โค้ด R g2_sim_r.R (บรรทัด 80-85 จาก 172)
# ---- 1. Model-based standard errors (the inverse information, as Stata's vce(oim)) ----
fit <- glm(admissions ~ program + older, family = poisson, data = d)
print(summary(fit)$coefficients)
b <- coef(fit)
V_oim <- vcov(fit)
print(V_oim)
ผลลัพธ์จากการรัน g2_sim_r.log
> fit <- glm(admissions ~ program + older, family = poisson,
+     data = d)

> print(summary(fit)$coefficients)
              Estimate Std. Error   z value     Pr(>|z|)
(Intercept)  0.2633118 0.06158143  4.275832 1.904251e-05
program     -0.3300193 0.06862416 -4.809084 1.516236e-06
older        0.4677449 0.06966719  6.713992 1.893708e-11

> b <- coef(fit)

> V_oim <- vcov(fit)

> print(V_oim)
             (Intercept)       program         older
(Intercept)  0.003792272 -1.938898e-03 -2.968830e-03
program     -0.001938898  4.709275e-03 -6.111248e-05
older       -0.002968830 -6.111248e-05  4.853517e-03
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์ R ของสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ ตารางสัมประสิทธิ์ของ glm() อยู่บนมาตราลอการิทึม แถว program จึงแสดงค่าคลาดเคลื่อนมาตรฐาน 0.0686 โดยตรง vcov(fit) พิมพ์เมทริกซ์เดียวกับ estat vce โดยมีจุดตัดแกนเป็นลำดับแรก

แบบอิงแบบจำลอง: เชื่อความแปรปรวนของแบบจำลอง

การถดถอยแบบ Poisson (Poisson regression) สร้างแบบจำลองให้ข้อมูลนับ: ลอการิทึมของค่าเฉลี่ยจำนวนนับของผู้ป่วยเป็นฟังก์ชันเชิงเส้นของตัวแปรร่วม และสมมติว่าความแปรปรวนของจำนวนนับเท่ากับค่าเฉลี่ย ค่าเริ่มต้นของ Stata สำหรับแบบจำลองนี้คือ vce(oim) ซึ่งกลับค่าเมทริกซ์สารสนเทศที่สังเกตได้ (observed information matrix) อันวัดว่าลอการิทึมของความควรจะเป็นโค้งแหลมเพียงใดรอบค่าประมาณ ความโค้งนั้นคำนวณราวกับว่าความแปรปรวนแบบ Poisson ถูกต้อง ผลที่ได้คือค่าคลาดเคลื่อนมาตรฐานแบบอิงแบบจำลอง: 0.0686 สำหรับสัมประสิทธิ์ของโปรแกรม ซึ่งคือลอการิทึมของอัตราส่วนอัตราอุบัติการณ์ของมัน

ข้อมูลนับทางคลินิกมักฝ่าฝืนข้อสมมติเรื่องความแปรปรวน เมื่อจำนวนนับแปรปรวนมากกว่าค่าเฉลี่ย เรียกว่าการกระจายเกินกว่าที่แบบจำลองกำหนด (overdispersion) ค่าคลาดเคลื่อนมาตรฐานแบบอิงแบบจำลองมักเล็กเกินไป เมื่อแปรปรวนน้อยกว่า เรียกว่าการกระจายน้อยกว่าที่แบบจำลองกำหนด (underdispersion) มักใหญ่เกินไป ตอนที่ 1 แสดงทั้งสองทิศทางด้วยตัวเลข

การตรวจอย่างเร็วคือสถิติ dispersion แบบ Pearson ซึ่งเทียบกำลังสองของส่วนเหลือกับความแปรปรวนแบบ Poisson และอยู่ใกล้ 1 เมื่อความแปรปรวนนั้นเหมาะสม ในที่นี้ค่าเท่ากับ 1.41 ดังที่ผลลัพธ์ Stata ด้านล่างแสดง ความกระจายส่วนเกินมีที่มาที่ทราบในการจำลองนี้: ผู้ป่วยของโรงพยาบาลเดียวกันร่วมรับอิทธิพลของโรงพยาบาลนั้นต่อจำนวนครั้งที่นอนโรงพยาบาล

Stata: สถิติ dispersion แบบ Pearson

โค้ด Stata g2_sim.do (บรรทัด 102-106 จาก 175)
* Pearson dispersion: sum of (y - mu)^2/mu over n - 3 (1 when the Poisson variance is right)
predict double mu, n
generate double pearson2 = (admissions - mu)^2/mu
quietly summarize pearson2
canon pearson_dispersion 4 r(sum)/(e(N) - 3)
ผลลัพธ์จากการรัน g2_sim.log
. * Pearson dispersion: sum of (y - mu)^2/mu over n - 3 (1 when the Poisson variance is right)
. predict double mu, n

. generate double pearson2 = (admissions - mu)^2/mu

. quietly summarize pearson2

. canon pearson_dispersion 4 r(sum)/(e(N) - 3)
CANON g2.pearson_dispersion 1.4052
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ ซึ่งรันต่อจากการประมาณแบบอิงแบบจำลองทันที predict เก็บค่าเฉลี่ยจำนวนนับที่ได้จากแบบจำลองของผู้ป่วยแต่ละคน ส่วนเหลือยกกำลังสองแต่ละตัวถูกหารด้วยค่าเฉลี่ยนั้น แล้วผลรวมถูกหารด้วย n - 3 คือจำนวนผู้ป่วยลบด้วยสัมประสิทธิ์สามตัว quietly ซ่อนตารางสรุป สถิตินี้จึงพิมพ์ออกมาเฉพาะในบรรทัด CANON ของสคริปต์เอง ฟังก์ชันช่วยเล็ก ๆ ในสคริปต์สะท้อนผลลัพธ์แต่ละค่าออกมา ให้อ่านตัวเลขท้ายบรรทัด ซึ่งเท่ากับ 1.41 เมื่อปัดเศษ

แบบ robust: ผู้ป่วยเป็นอิสระต่อกัน แต่ความแปรปรวนยังเป็นที่สงสัย

vce(robust) เก็บ bread จากแบบจำลองไว้ แต่เอา meat มาจากข้อมูล score contribution ของผู้ป่วยแต่ละคนเข้าสู่ meat เป็นกำลังสอง $K = \sum_i s_i s_i^{\top}$ และความแปรปรวนคือ sandwich $J^{-1} K J^{-1}$ ในตัวอย่างขนาดใหญ่ วิธีนี้ยังใช้ได้เมื่อข้อสมมติเรื่องความแปรปรวนผิด ตราบใดที่แบบจำลองค่าเฉลี่ยถูกต้องและผู้ป่วยเป็นอิสระต่อกัน [2]

ตอนที่ 1 คำนวณ bread และ meat เป็นตัวเลข รวมถึงตัวคูณ $n/(n - 1)$ ที่ Stata ใช้ โดย $n$ คือจำนวนหน่วยสังเกต รูปแบบเมทริกซ์และตัวแปรผัน HC0 ถึง HC3 อยู่ในบทความเรื่องrobust standard error

ในที่นี้ robust standard error ของลอการิทึมของอัตราส่วนอัตราอุบัติการณ์คือ 0.0816 เป็น 1.19 เท่าของค่าแบบอิงแบบจำลอง ช่วงความเชื่อมั่น 95% ของอัตราส่วนอัตราอุบัติการณ์กว้างขึ้นเล็กน้อย เป็น 0.61 ถึง 0.84 จาก 0.63 ถึง 0.82 วิธีนี้ยังถือว่าผู้ป่วย 600 คนเป็นอิสระต่อกัน ซึ่งข้อมูลเหล่านี้ไม่สนับสนุน

แบบ cluster-robust: โรงพยาบาลเป็นอิสระต่อกัน แต่ผู้ป่วยสัมพันธ์กัน

ผู้ป่วยของโรงพยาบาลเดียวกันใช้บุคลากร แนวปฏิบัติตอนจำหน่าย และพื้นที่รับผู้ป่วยร่วมกัน จำนวนครั้งที่นอนโรงพยาบาลของพวกเขาจึงมีแนวโน้มขึ้นลงไปด้วยกัน สหสัมพันธ์ภายในกลุ่ม (intraclass correlation, ICC) วัดสิ่งนี้ คือสหสัมพันธ์ระหว่างผลลัพธ์ของผู้ป่วยสองคนในกลุ่ม (cluster) เดียวกัน บทความเรื่องการทดลองแบบสุ่มเป็นกลุ่ม (cluster randomized trials) แสดงว่ามันกำหนดการออกแบบการศึกษาอย่างไร cluster-robust standard error ยอมให้มีสหสัมพันธ์แบบใดก็ได้เช่นนี้ โดยเปลี่ยนเฉพาะ meat

$$S_g = \sum_{i \in g} s_i$$

ขั้นแรก score contribution ของผู้ป่วยทุกคนในกลุ่ม $g$ ซึ่งในที่นี้คือโรงพยาบาลหนึ่งแห่ง ถูกบวกเป็นคะแนนของกลุ่มหนึ่งค่า $S_g$

$$K_{\text{cl}} = \sum_{g=1}^{G} S_g S_g^{\top}$$

จากนั้นสร้าง meat จากคะแนนของกลุ่ม $G$ ค่า หนึ่งค่าต่อโรงพยาบาล โดย $G$ คือจำนวนกลุ่ม ความแปรปรวนกลายเป็น $J^{-1} K_{\text{cl}} J^{-1}$ [3] การยกกำลังสองผลรวมเก็บผลคูณของคะแนนทุกคู่ที่มาจากโรงพยาบาลเดียวกันไว้ เมื่อโรงพยาบาลหนึ่งดันจำนวนนับของผู้ป่วยทุกคนขึ้นหรือลงพร้อมกัน ส่วนเหลือของพวกเขามีเครื่องหมายเดียวกัน และผลคูณเหล่านี้ทำให้ meat ใหญ่ขึ้น

วิธีนี้มีเงื่อนไขสองอย่าง กลุ่มต้องเป็นอิสระต่อกัน และต้องมีกลุ่มจำนวนมากพอ เพราะ meat ตอนนี้อาศัยคะแนนของกลุ่ม $G$ ค่า ไม่ใช่ผู้ป่วย $n$ คน [3] คำสั่ง poisson ของ Stata คูณความแปรปรวนนี้ด้วย $G/(G - 1)$ และโค้ด R ขอให้ vcovCL() ใช้ตัวคูณเดียวกัน ผลของทั้งสองภาษาด้านล่างจึงตรงกัน

สมการประมาณค่าวางนัยทั่วไป (generalized estimating equations, GEE) ใช้ meat ที่รวมตามกลุ่มแบบเดียวกัน รอบแบบจำลองที่สมมติรูปแบบสหสัมพันธ์อย่างง่ายระหว่างผู้ป่วยในกลุ่มเดียวกัน (เรียกว่าสหสัมพันธ์สำหรับทำงาน หรือ working correlation เป็นการคาดเดารูปแบบนั้นที่ไม่จำเป็นต้องถูกต้องทุกประการ) [3] คู่มือการวัดซ้ำอธิบายเรื่องนี้

ตัวอย่างที่ลงมือคำนวณ: หนึ่งโปรแกรม ค่าคลาดเคลื่อนมาตรฐานสามค่า

ข้อมูลจำลองนี้สร้างขึ้นโดยรู้ค่าจริง มีผู้ป่วย 600 คนใน 40 โรงพยาบาล โรงพยาบาลละ 15 คน โรงพยาบาลหมายเลขคู่มีโปรแกรม ผู้ป่วย 300 คนจึงอยู่ในโรงพยาบาลที่มีโปรแกรม ตัวแปรแบบใช่หรือไม่ใช่ระบุผู้ป่วย 302 คนที่อยู่ในกลุ่มอายุมาก

จำนวนครั้งที่ผู้ป่วยแต่ละคนนอนโรงพยาบาลตลอดหนึ่งปีเป็นไปตามการแจกแจงแบบ Poisson โรงพยาบาลแต่ละแห่งมีตัวคูณของตัวเอง $e^{u}$ โดย $u$ สุ่มจากการแจกแจงปกติที่มีค่าเฉลี่ย 0 และส่วนเบี่ยงเบนมาตรฐาน 0.4 ตัวคูณนี้คูณค่าเฉลี่ยของผู้ป่วยทุกคนในโรงพยาบาลนั้น ผู้ป่วยของโรงพยาบาลเดียวกันจึงคล้ายกัน

ในโรงพยาบาลที่ไม่มีโปรแกรมและมีตัวคูณเท่ากับ 1 ค่าเฉลี่ยของผู้ป่วยอายุน้อยคือ 1.2 ค่านี้ถูกคูณด้วย 0.75 เมื่อมีโปรแกรม และคูณด้วย 1.6 สำหรับผู้ป่วยอายุมาก เมื่อเฉลี่ยข้ามโรงพยาบาล ค่าเฉลี่ยทุกค่าสูงขึ้นเล็กน้อย เพราะตัวคูณมีค่าเฉลี่ยสูงกว่า 1 เล็กน้อย

ผู้ป่วยนอนโรงพยาบาลรวม 872 ครั้ง เฉลี่ย 1.45 ครั้งต่อคน โดยมีความแปรปรวน 2.34 ค่าเฉลี่ยคือ 1.22 ในโรงพยาบาลที่มีโปรแกรม และ 1.69 ในโรงพยาบาลอื่น ทุกแถวของตารางด้านล่างประมาณแบบจำลองเดียวกัน คือการถดถอยแบบ Poisson ของจำนวนครั้งที่นอนโรงพยาบาลบนโปรแกรมและกลุ่มอายุ มีเพียง vce() ที่เปลี่ยน

โปรแกรมภายใต้ตัวประมาณความแปรปรวนสามแบบ

ข้อมูลจำลอง ผู้ป่วย 600 คนใน 40 โรงพยาบาล Stata และ R ให้ค่าเท่ากัน อัตราส่วนอัตราอุบัติการณ์เท่ากับ 0.72 ในทุกแถว เทียบกับ 0.75 ที่ใช้สร้างข้อมูล ในตัวอย่างที่เลือกมาเพราะสองกลุ่มโรงพยาบาลมีตัวคูณของโรงพยาบาลใกล้เคียงกัน ค่าคลาดเคลื่อนมาตรฐานเป็นของลอการิทึมของอัตราส่วนอัตราอุบัติการณ์
วิธีสิ่งที่สมมติSE ลอการิทึมของอัตราส่วนอัตราอุบัติการณ์ช่วงความเชื่อมั่น 95% ของอัตราส่วนอัตราอุบัติการณ์SE เทียบกับแบบอิงแบบจำลอง
vce(oim) แบบอิงแบบจำลองผู้ป่วยเป็นอิสระต่อกัน และความแปรปรวนเท่ากับค่าเฉลี่ย0.06860.63 ถึง 0.82ค่าอ้างอิง
vce(robust)ผู้ป่วยเป็นอิสระต่อกัน และความแปรปรวนเป็นแบบใดก็ได้0.08160.61 ถึง 0.841.19
vce(cluster hospital)โรงพยาบาลเป็นอิสระต่อกัน และผู้ป่วยในโรงพยาบาลเดียวกันสัมพันธ์กันแบบใดก็ได้0.17210.51 ถึง 1.012.51

อ่านตาราง

อัตราส่วนอัตราอุบัติการณ์เท่ากับ 0.72 ในทุกแถว เพราะ vce() ไม่เคยขยับสัมประสิทธิ์ cluster-robust standard error เป็น 2.11 เท่าของ robust และ 2.51 เท่าของแบบอิงแบบจำลอง ช่วงความเชื่อมั่นของมัน 0.51 ถึง 1.01 ครอบคลุม 1 ขณะที่อีกสองวิธีไม่ครอบคลุม

เหตุผลอยู่ที่วิธีจัดสรรโปรแกรม ผู้ป่วยทุกคนในโรงพยาบาลหนึ่งมีสถานะโปรแกรมและตัวคูณของโรงพยาบาลเดียวกัน การเปรียบเทียบจึงอาศัยโรงพยาบาล 40 แห่ง ไม่ใช่ผู้ป่วยที่เป็นอิสระต่อกัน 600 คน มีเพียง cluster-robust standard error ที่นับข้อมูลแบบนี้

กลุ่มอายุให้ผลต่างออกไป: แต่ละโรงพยาบาลมีผู้ป่วยอายุมากและอายุน้อยในสัดส่วนใกล้เคียงกัน ตัวคูณร่วมของโรงพยาบาลยกหรือลดทั้งสองกลุ่มพร้อมกัน จึงตัดกันไปเป็นส่วนใหญ่ในการเปรียบเทียบระหว่างกลุ่มอายุ cluster-robust standard error ของกลุ่มอายุ 0.0697 จึงไม่ใหญ่กว่า robust standard error 0.0818 ในตัวอย่างนี้เป็น 0.85 เท่าของมัน การจัดกลุ่มมีราคาสูงที่สุดสำหรับตัวแปรร่วมที่เหมือนกันสำหรับทุกคนในกลุ่ม

เนื่องจากแบบจำลองไม่มีพจน์ของโรงพยาบาล 0.72 จึงประมาณอัตราส่วนที่เฉลี่ยข้ามโรงพยาบาล เมื่อใช้ log link และตัวคูณของโรงพยาบาลไม่เกี่ยวกับโปรแกรม อัตราส่วนที่เฉลี่ยแล้วนี้เท่ากับอัตราส่วนภายในโรงพยาบาล ข้อมูลถูกสร้างโดยกำหนดอัตราส่วนนั้นที่ 0.75 มีเพียงค่าคงที่ที่ดูดซับตัวคูณของโรงพยาบาล ซึ่งเป็นเหตุให้ผลลัพธ์ Stata ข้างต้นแสดงค่าคงที่สูงกว่า 1.2

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

ในตัวอย่างอื่น ค่าประมาณขยับไปราวกับที่ cluster-robust standard error บอกไว้ ช่วงที่แคบกว่าสองช่วงจะพลาด 0.75 บ่อยกว่าระดับ 95% ที่ระบุไว้มาก อัตราครอบคลุม (coverage) คือความถี่ที่ช่วงเช่นนี้ครอบคลุมค่าจริง ซึ่งตัดสินจากตัวอย่างจำนวนมาก ดังที่บทความเรื่อง robust standard error ทำด้วยการจำลอง

Stata: vce(robust)

โค้ด Stata g2_sim.do (บรรทัด 116-117 จาก 175)
* ---- 3. vce(robust): sandwich, each patient independent ----------------------------
poisson admissions i.program i.older, irr vce(robust) nolog
ผลลัพธ์จากการรัน g2_sim.log
. * ---- 3. vce(robust): sandwich, each patient independent ----------------------------
. poisson admissions i.program i.older, irr vce(robust) nolog

Poisson regression                                      Number of obs =    600
                                                        Wald chi2(2)  =  41.34
                                                        Prob > chi2   = 0.0000
Log pseudolikelihood = -957.42519                       Pseudo R2     = 0.0347

------------------------------------------------------------------------------
             |               Robust
  admissions |        IRR   std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
   1.program |   .7189098   .0586611    -4.04   0.000     .6126588    .8435876
     1.older |    1.59639   .1306192     5.72   0.000     1.359854     1.87407
       _cons |   1.301232   .0873629     3.92   0.000     1.140792    1.484237
------------------------------------------------------------------------------
Note: _cons estimates baseline incidence rate.
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ อัตราส่วนอัตราอุบัติการณ์เป็นค่าเดียวกับการประมาณแบบอิงแบบจำลอง มีเพียงค่าคลาดเคลื่อนมาตรฐาน สถิติ z ค่า P และช่วงความเชื่อมั่นในตารางที่เปลี่ยน ในส่วนหัว การทดสอบอัตราส่วนความควรจะเป็นกลายเป็นการทดสอบ Wald และ log likelihood กลายเป็น log pseudolikelihood คอลัมน์ค่าคลาดเคลื่อนมาตรฐานอยู่บนมาตราอัตราส่วน บนมาตราลอการิทึม robust standard error คือ 0.0816 ช่วงความเชื่อมั่นของโปรแกรม ซึ่งสร้างบนมาตราลอการิทึมเช่นเดิม อยู่ที่ 0.61 ถึง 0.84

Stata: vce(cluster hospital)

โค้ด Stata g2_sim.do (บรรทัด 125-126 จาก 175)
* ---- 4. vce(cluster hospital): sandwich, hospitals independent ----------------------
poisson admissions i.program i.older, irr vce(cluster hospital) nolog
ผลลัพธ์จากการรัน g2_sim.log
. * ---- 4. vce(cluster hospital): sandwich, hospitals independent ----------------------
. poisson admissions i.program i.older, irr vce(cluster hospital) nolog

Poisson regression                                      Number of obs =    600
                                                        Wald chi2(2)  =  45.15
                                                        Prob > chi2   = 0.0000
Log pseudolikelihood = -957.42519                       Pseudo R2     = 0.0347

                              (Std. err. adjusted for 40 clusters in hospital)
------------------------------------------------------------------------------
             |               Robust
  admissions |        IRR   std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
   1.program |   .7189098   .1237477    -1.92   0.055     .5130444    1.007381
     1.older |    1.59639   .1112673     6.71   0.000      1.39255    1.830068
       _cons |   1.301232    .156567     2.19   0.029     1.027866    1.647302
------------------------------------------------------------------------------
Note: _cons estimates baseline incidence rate.
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ ส่วนหัวระบุว่าค่าคลาดเคลื่อนมาตรฐานถูกปรับสำหรับ 40 กลุ่มใน hospital อัตราส่วนอัตราอุบัติการณ์ไม่เปลี่ยน บนมาตราลอการิทึม ค่าคลาดเคลื่อนมาตรฐานของโปรแกรมเป็น 0.1721 และช่วงความเชื่อมั่นของมันอยู่ที่ 0.51 ถึง 1.01

R: robust และ cluster-robust standard error

โค้ด R g2_sim_r.R (บรรทัด 105-124 จาก 172)
# ---- 3. Robust: sandwich, each patient independent (HC0 times n/(n - 1), as Stata's vce(robust)) ----
V_rob <- sandwich(fit) * n / (n - 1)
se_rob <- sqrt(diag(V_rob))
canon("robust.se_program", se_rob[["program"]])
irr_ci("robust.irr_program", b[["program"]], se_rob[["program"]])
canon("robust.se_older", se_rob[["older"]])

# ---- 4. Cluster-robust: hospitals independent (HC0 with the G/(G - 1) factor, as Stata's vce(cluster)) ----
V_cl <- vcovCL(fit, cluster = ~hospital, type = "HC0", cadjust = TRUE)
se_cl <- sqrt(diag(V_cl))
canon("cluster.n_clusters", length(unique(d$hospital)), 0)
canon("cluster.irr_program", exp(b[["program"]]))
canon("cluster.se_program", se_cl[["program"]])
irr_ci("cluster.irr_program", b[["program"]], se_cl[["program"]])
canon("cluster.se_older", se_cl[["older"]])
irr_ci("cluster.irr_older", b[["older"]], se_cl[["older"]])
canon("ratio.cluster_robust_program", se_cl[["program"]] / se_rob[["program"]])
canon("ratio.cluster_oim_program", se_cl[["program"]] / se_oim[["program"]])
canon("ratio.robust_oim_program", se_rob[["program"]] / se_oim[["program"]])
canon("ratio.cluster_robust_older", se_cl[["older"]] / se_rob[["older"]])
ผลลัพธ์จากการรัน g2_sim_r.log
> V_rob <- sandwich(fit) * n/(n - 1)

> se_rob <- sqrt(diag(V_rob))

> canon("robust.se_program", se_rob[["program"]])
CANON g2.robust.se_program 0.0816

> irr_ci("robust.irr_program", b[["program"]], se_rob[["program"]])
CANON g2.robust.irr_program_lb 0.6127
CANON g2.robust.irr_program_ub 0.8436

> canon("robust.se_older", se_rob[["older"]])
CANON g2.robust.se_older 0.0818

> V_cl <- vcovCL(fit, cluster = ~hospital, type = "HC0",
+     cadjust = TRUE)

> se_cl <- sqrt(diag(V_cl))

> canon("cluster.n_clusters", length(unique(d$hospital)),
+     0)
CANON g2.cluster.n_clusters 40

> canon("cluster.irr_program", exp(b[["program"]]))
CANON g2.cluster.irr_program 0.7189

> canon("cluster.se_program", se_cl[["program"]])
CANON g2.cluster.se_program 0.1721

> irr_ci("cluster.irr_program", b[["program"]], se_cl[["program"]])
CANON g2.cluster.irr_program_lb 0.5130
CANON g2.cluster.irr_program_ub 1.0074

> canon("cluster.se_older", se_cl[["older"]])
CANON g2.cluster.se_older 0.0697

> irr_ci("cluster.irr_older", b[["older"]], se_cl[["older"]])
CANON g2.cluster.irr_older_lb 1.3926
CANON g2.cluster.irr_older_ub 1.8301

> canon("ratio.cluster_robust_program", se_cl[["program"]]/se_rob[["program"]])
CANON g2.ratio.cluster_robust_program 2.1095

> canon("ratio.cluster_oim_program", se_cl[["program"]]/se_oim[["program"]])
CANON g2.ratio.cluster_oim_program 2.5083

> canon("ratio.robust_oim_program", se_rob[["program"]]/se_oim[["program"]])
CANON g2.ratio.robust_oim_program 1.1890

> canon("ratio.cluster_robust_older", se_cl[["older"]]/se_rob[["older"]])
CANON g2.ratio.cluster_robust_older 0.8518
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์ R ของสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ sandwich(fit) คือ sandwich ที่ยังไม่ปรับ คูณด้วย n/(n - 1) ให้ตรงกับ vce(robust) ของ Stata vcovCL() ที่ใช้ cadjust = TRUE ใช้ตัวคูณ G/(G - 1) ของ vce(cluster) ใน Stata บรรทัดที่ขึ้นต้นด้วย CANON พิมพ์โดยฟังก์ชันช่วยเล็ก ๆ ในสคริปต์ที่สะท้อนผลลัพธ์แต่ละค่าออกมา ให้อ่านตัวเลขท้ายบรรทัดและไม่ต้องสนใจคำนำหน้า ค่าเหล่านี้ตรงกับผลลัพธ์ของ Stata

Poisson แบบ robust หรือ negative binomial: เป้าหมายสองแบบ

negative binomial regression เก็บแบบจำลองค่าเฉลี่ยของ Poisson ไว้ แล้วเพิ่มพารามิเตอร์ความกระจาย $\alpha$ จำนวนนับที่มีค่าเฉลี่ย $\mu$ จึงมีความแปรปรวน $\mu + \alpha\mu^2$ [4] มันสร้างแบบจำลองให้การแจกแจงทั้งหมดของจำนวนนับ ส่วน Poisson แบบ robust อ้างน้อยกว่า คือสร้างแบบจำลองเฉพาะค่าเฉลี่ย แล้วปล่อยให้ sandwich จัดการความแปรปรวน บทความเรื่องอัตราแบบ Poissonอธิบายแบบจำลองนี้เอง

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

ทั้งสองยังถ่วงน้ำหนักผู้ป่วยต่างกัน negative binomial ถ่วงส่วนเหลือของผู้ป่วยแต่ละคนด้วย $1/(1 + \alpha\mu)$ ผู้ป่วยที่คาดว่ามีจำนวนนับสูงจึงมีน้ำหนักน้อยลง ส่วน Poisson ถ่วงส่วนเหลือทุกตัวเท่ากัน

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

ในข้อมูลจำลอง nbreg ให้อัตราส่วนอัตราอุบัติการณ์ 0.72 โดยมีช่วงความเชื่อมั่น 95% ที่ 0.62 ถึง 0.84 ต่างจากอัตราส่วนแบบ Poisson เพียงทศนิยมตำแหน่งที่สาม เพราะน้ำหนักต่างกัน $\alpha$ ที่ประมาณได้คือ 0.23 และสถิติอัตราส่วนความควรจะเป็นสำหรับ $\alpha = 0$ คือ 34.41 จำนวนนับจึงกระจายเกินกว่าที่ Poisson กำหนด ค่าคลาดเคลื่อนมาตรฐานของลอการิทึมของอัตราส่วนอัตราอุบัติการณ์ 0.0795 ใกล้เคียงค่าของ Poisson แบบ robust ที่ 0.0816

ทั้งสองถือว่าผู้ป่วยเป็นอิสระต่อกัน ในที่นี้ความกระจายเกินและการจัดกลุ่มมีที่มาเดียวกัน คือตัวคูณของโรงพยาบาล และ negative binomial ดูดซับความแปรปรวนส่วนเกินโดยไม่รู้ว่าใครใช้ร่วมกัน เมื่อเพิ่ม vce(cluster hospital) ใน Stata ค่าคลาดเคลื่อนมาตรฐานของมันสูงขึ้นเป็น 0.1702 และช่วงความเชื่อมั่นเป็น 0.52 ถึง 1.01 ผลลัพธ์ Stata ชุดสุดท้ายในหัวข้อนี้แสดงการประมาณนั้น

Stata: negative binomial regression

โค้ด Stata g2_sim.do (บรรทัด 140-141 จาก 175)
* ---- 5. Negative binomial: another model for the variance, still one patient at a time ----
nbreg admissions i.program i.older, irr nolog
ผลลัพธ์จากการรัน g2_sim.log
. * ---- 5. Negative binomial: another model for the variance, still one patient at a time ----
. nbreg admissions i.program i.older, irr nolog

Negative binomial regression                            Number of obs =    600
                                                        LR chi2(2)    =  48.68
Dispersion: mean                                        Prob > chi2   = 0.0000
Log likelihood = -940.21983                             Pseudo R2     = 0.0252

------------------------------------------------------------------------------
  admissions |        IRR   Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
   1.program |   .7226321   .0574734    -4.08   0.000     .6183271    .8445322
     1.older |   1.590514   .1276263     5.78   0.000      1.35905      1.8614
       _cons |    1.30083   .0918756     3.72   0.000     1.132665    1.493962
-------------+----------------------------------------------------------------
    /lnalpha |  -1.455862   .2286047                     -1.903919   -1.007805
-------------+----------------------------------------------------------------
       alpha |   .2331992   .0533104                      .1489836    .3650192
------------------------------------------------------------------------------
Note: Estimates are transformed only in the first equation to incidence-rate ratios.
Note: _cons estimates baseline incidence rate.
LR test of alpha=0: chibar2(01) = 34.41                Prob >= chibar2 = 0.000
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ อัตราส่วนอัตราอุบัติการณ์อ่านได้เหมือนตารางของ Poisson แถว alpha คือพารามิเตอร์ความกระจาย และบรรทัดสุดท้ายคือการทดสอบอัตราส่วนความควรจะเป็นของ alpha = 0 ซึ่งเทียบแบบจำลองนี้กับการถดถอยแบบ Poisson ค่าคลาดเคลื่อนมาตรฐานเหล่านี้เป็นแบบอิงแบบจำลอง มาจากความควรจะเป็นของ negative binomial

R: glm.nb จากแพ็กเกจ MASS

โค้ด R g2_sim_r.R (บรรทัด 126-128 จาก 172)
# ---- 5. Negative binomial: another model for the variance, still one patient at a time ----
nb <- glm.nb(admissions ~ program + older, data = d)
print(summary(nb))
ผลลัพธ์จากการรัน g2_sim_r.log
> nb <- glm.nb(admissions ~ program + older, data = d)

> print(summary(nb))

Call:
glm.nb(formula = admissions ~ program + older, data = d, init.theta = 4.288179278,
    link = log)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  0.26300    0.07037   3.737 0.000186 ***
program     -0.32486    0.07953  -4.085 4.41e-05 ***
older        0.46406    0.08024   5.783 7.32e-09 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for Negative Binomial(4.2882) family taken to be 1)

    Null deviance: 703.84  on 599  degrees of freedom
Residual deviance: 652.94  on 597  degrees of freedom
AIC: 1888.4

Number of Fisher Scoring iterations: 1


              Theta:  4.288
          Std. Err.:  0.980

 2 x log-likelihood:  -1880.440
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์ R ของสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ glm.nb() รายงาน theta ซึ่งคือ 1/alpha และสัมประสิทธิ์บนมาตราลอการิทึมที่ตรงกับอัตราส่วนอัตราอุบัติการณ์ของ Stata เมื่อยกกำลังด้วยเลขชี้กำลัง บรรทัดที่บอกว่าพารามิเตอร์ความกระจายถือเป็น 1 หมายถึงตัวคูณมาตราของ GLM ไม่ใช่ alpha ส่วนตัวเลขภายใน Negative Binomial() คือ theta ค่าคลาดเคลื่อนมาตรฐานของโปรแกรมตรงกับค่าบนมาตราลอการิทึมของ Stata ถึงทศนิยมสี่ตำแหน่ง

Stata: negative binomial ร่วมกับ vce(cluster hospital)

โค้ด Stata g2_sim.do (บรรทัด 153-155 จาก 175)
* negative binomial with a cluster-robust standard error (Stata only)
nbreg admissions i.program i.older, irr vce(cluster hospital) nolog
canon nb_cluster.se_program.stata 4 _se[1.program]
ผลลัพธ์จากการรัน g2_sim.log
. * negative binomial with a cluster-robust standard error (Stata only)
. nbreg admissions i.program i.older, irr vce(cluster hospital) nolog

Negative binomial regression                            Number of obs =    600
                                                        Wald chi2(2)  =  44.64
Dispersion: mean                                        Prob > chi2   = 0.0000
Log pseudolikelihood = -940.21983                       Pseudo R2     = 0.0252

                              (Std. err. adjusted for 40 clusters in hospital)
------------------------------------------------------------------------------
             |               Robust
  admissions |        IRR   std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
   1.program |   .7226321   .1229716    -1.91   0.056     .5176864    1.008713
     1.older |   1.590514   .1109611     6.65   0.000     1.387248    1.823564
       _cons |    1.30083   .1573644     2.17   0.030     1.026239    1.648892
-------------+----------------------------------------------------------------
    /lnalpha |  -1.455862   .3898306                     -2.219916   -.6918084
-------------+----------------------------------------------------------------
       alpha |   .2331992   .0909082                      .1086182    .5006699
------------------------------------------------------------------------------
Note: Estimates are transformed only in the first equation to incidence-rate ratios.
Note: _cons estimates baseline incidence rate.

. canon nb_cluster.se_program.stata 4 _se[1.program]
CANON g2.nb_cluster.se_program.stata 0.1702
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ ส่วนหัวระบุว่าค่าคลาดเคลื่อนมาตรฐานถูกปรับสำหรับ 40 กลุ่มใน hospital อัตราส่วนอัตราอุบัติการณ์และ alpha เป็นค่าเดียวกับการประมาณ negative binomial แบบอิงแบบจำลอง คอลัมน์ค่าคลาดเคลื่อนมาตรฐานอยู่บนมาตราอัตราส่วน ช่วงความเชื่อมั่นของโปรแกรม ซึ่งสร้างบนมาตราลอการิทึม อยู่ที่ 0.52 ถึง 1.01 ค่าคลาดเคลื่อนมาตรฐานบนมาตราลอการิทึม 0.1702 พิมพ์ออกมาเฉพาะในบรรทัด CANON ของสคริปต์เอง ฟังก์ชันช่วยเล็ก ๆ ในสคริปต์สะท้อนผลลัพธ์แต่ละค่าออกมา ให้อ่านตัวเลขท้ายบรรทัด

การเลือก vce(): เริ่มจากการออกแบบ

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

ตรรกะการออกแบบ ไม่ใช่ผลจากข้อมูลจำลอง คำสั่ง R ตามสคริปต์จำลองหรือแพ็กเกจ sandwich โดย n คือจำนวนหน่วยสังเกต วิธีสำหรับกรณีที่มีกลุ่มน้อยและวิธีสุ่มซ้ำถูกระบุไว้ในที่นี้ และไม่ได้รันในสคริปต์จำลอง
โครงสร้างข้อมูลStataRสิ่งที่ต้องระวัง
ผู้ป่วยเป็นอิสระต่อกัน ความแปรปรวนน่าเชื่อถือ เช่นสถิติ dispersion อยู่ใกล้ 1vce(oim) ซึ่งเป็นค่าเริ่มต้นvcov(fit)อาศัยความแปรปรวนของแบบจำลองทั้งหมด
ผู้ป่วยเป็นอิสระต่อกัน จำนวนนับกระจายเกินหรือน้อยกว่าที่แบบจำลองกำหนดvce(robust)sandwich(fit) * n / (n - 1)แบบจำลองค่าเฉลี่ยยังต้องถูกต้อง
ผู้ป่วยเป็นอิสระต่อกัน ผลลัพธ์แบบใช่หรือไม่ใช่ ต้องการอัตราส่วนความเสี่ยง: Poisson ดัดแปลง (modified Poisson regression) คือแบบจำลอง Poisson ที่ประมาณกับผลลัพธ์ 0 หรือ 1poisson y x, irr vce(robust)glm(y ~ x, family = poisson) ร่วมกับ sandwich()ต้องใช้ sandwich ไม่ใช่ทางเลือกเสริม
ผู้ป่วยจับกลุ่มอยู่ในโรงพยาบาล หรือมีหลายแถวต่อผู้ป่วยหนึ่งคนvce(cluster unit) เช่น vce(cluster hospital) หรือ vce(cluster patient)vcovCL(fit, cluster = ~unit, type = "HC0", cadjust = TRUE) เช่น ~hospitalจัดกลุ่มตามหน่วยที่ถูกสุ่มเลือกหรือถูกจัดสรร และกลุ่มต้องเป็นอิสระต่อกัน เมื่อผู้ป่วยซ้อนอยู่ในโรงพยาบาล ให้จัดกลุ่มตามโรงพยาบาลซึ่งเป็นหน่วยชั้นนอก หรือสร้างแบบจำลองให้การจัดกลุ่มเอง (GEE หรือแบบจำลองผสมที่มีพจน์ของแต่ละโรงพยาบาล) ตามที่คู่มือการวัดซ้ำอธิบาย
มีกลุ่มน้อยvce(jackknife, cluster(hospital)) หรือ cluster-robust standard error ที่ตัดสินด้วยการแจกแจง tsandwich::vcovJK(fit, cluster = ~hospital)cluster-robust standard error แบบธรรมดามักเล็กเกินไป
สุ่มซ้ำแทนการใช้สูตรvce(bootstrap, cluster(hospital)) หรือ vce(jackknife, cluster(hospital))bootstrap ที่สุ่มโรงพยาบาลซ้ำ หรือ sandwich::vcovJK(fit, cluster = ~hospital)สุ่มซ้ำทั้งกลุ่ม ไม่สุ่มซ้ำทีละแถว

OPG การสุ่มซ้ำ และกรณีที่มีกลุ่มน้อย

มีออปชันหนึ่งที่ดูเหมือน sandwich แต่ไม่ใช่ vce(opg) หรือ outer product of the gradients กลับค่า meat อย่างเดียว เหมือน vce(oim) จึงใช้ได้เฉพาะเมื่อความแปรปรวนของแบบจำลองถูกต้อง ในที่นี้ให้ 0.0595 ซึ่งเล็กกว่าค่าแบบอิงแบบจำลอง 0.0686 เสียอีก ผลลัพธ์ Stata ท้ายหัวข้อนี้แสดงการประมาณนั้น

bootstrap และ jackknife ประมาณแบบจำลองใหม่บนข้อมูลที่สุ่มซ้ำ [1] ทั้งสองคำนึงถึงการจัดกลุ่มก็ต่อเมื่อสุ่มโรงพยาบาลซ้ำทั้งแห่ง ซึ่งใน Stata เกิดขึ้นเมื่อให้ cluster(hospital) ภายใน vce() เท่านั้น [1]

cluster-robust standard error พึ่งพากลุ่มจำนวนมาก เมื่อมีกลุ่มน้อย ค่านี้มักเล็กเกินไป และการแก้สำหรับตัวอย่างขนาดเล็ก โดยตัดสินนัยสำคัญกับการแจกแจง t อาจเหมาะกว่า คู่มือการวัดซ้ำอธิบายไว้ ควรรายงานจำนวนกลุ่มคู่กับผลแบบ cluster-robust ทุกครั้ง

โรงพยาบาล 40 แห่งในที่นี้ ซึ่งครึ่งหนึ่งมีโปรแกรม มักถือว่าเพียงพอสำหรับ cluster-robust standard error แบบธรรมดา การแก้สำหรับตัวอย่างขนาดเล็กจะทำให้ช่วงกว้างขึ้นบ้าง และอาจรายงานเป็นการวิเคราะห์ความไว (sensitivity analysis)

Stata: vce(opg)

โค้ด Stata g2_sim.do (บรรทัด 109-111 จาก 175)
* ---- 2. vce(opg): the outer product of the scores alone ---------------------------
poisson admissions i.program i.older, irr vce(opg) nolog
canon opg.se_program 4 _se[1.program]
ผลลัพธ์จากการรัน g2_sim.log
. * ---- 2. vce(opg): the outer product of the scores alone ---------------------------
. poisson admissions i.program i.older, irr vce(opg) nolog

Poisson regression                                      Number of obs =    600
                                                        LR chi2(2)    =  68.92
                                                        Prob > chi2   = 0.0000
Log likelihood = -957.42519                             Pseudo R2     = 0.0347

------------------------------------------------------------------------------
             |                 OPG
  admissions |        IRR   std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
   1.program |   .7189098   .0427671    -5.55   0.000     .6397901     .807814
     1.older |    1.59639   .0975423     7.66   0.000     1.416215    1.799488
       _cons |   1.301232   .0741003     4.62   0.000      1.16381    1.454881
------------------------------------------------------------------------------
Note: _cons estimates baseline incidence rate.

. canon opg.se_program 4 _se[1.program]
CANON g2.opg.se_program 0.0595
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ อัตราส่วนอัตราอุบัติการณ์เป็นค่าเดียวกับการประมาณแบบอิงแบบจำลอง และหัวตารางระบุค่าคลาดเคลื่อนมาตรฐานว่า OPG คอลัมน์ค่าคลาดเคลื่อนมาตรฐานอยู่บนมาตราอัตราส่วน ช่วงความเชื่อมั่นของโปรแกรม ซึ่งสร้างบนมาตราลอการิทึมเช่นเดิม แคบกว่าช่วงแบบอิงแบบจำลอง ค่าคลาดเคลื่อนมาตรฐานบนมาตราลอการิทึมของสัมประสิทธิ์ของโปรแกรม 0.0595 พิมพ์ออกมาเฉพาะในบรรทัด CANON ของสคริปต์เอง ฟังก์ชันช่วยเล็ก ๆ ในสคริปต์สะท้อนผลลัพธ์แต่ละค่าออกมา ให้อ่านตัวเลขท้ายบรรทัด
ตรรกะการตัดสินใจแบบคงที่ ไม่มีตัวเลขจากข้อมูลจำลอง เลือกชนิดของผลลัพธ์ ว่าหน่วยสังเกตเป็นอิสระต่อกันหรือไม่ และมีกลุ่มประมาณเท่าใด แผงจะแสดงออปชัน vce() คำสั่ง R และประโยครายงานที่ตรงกัน แผงนี้เข้ารหัสตรรกะเดียวกับตารางการตัดสินใจข้างต้น และไม่คำนวณค่าคลาดเคลื่อนมาตรฐานใด ๆ

สิ่งที่ vce() เปลี่ยนไม่ได้

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

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

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

ตัวประมาณความแปรปรวนก็ไม่เปลี่ยนสิ่งที่ตัวอย่างหนึ่งประมาณได้ การเพิ่ม vce(robust) ให้แบบจำลอง Poisson ดัดแปลงที่ประมาณกับตัวอย่างแบบผู้ป่วย-กลุ่มควบคุม (case-control) ไม่ได้เปลี่ยนค่าประมาณให้เป็นอัตราส่วนความเสี่ยง วิธีสุ่มกลุ่มควบคุมเป็นตัวกำหนดมาตรวัด ดังที่บทความเรื่องการสุ่มกลุ่มควบคุมแสดง

การรายงาน: ประโยคสำหรับส่วนวิธีการและส่วนผลลัพธ์

ส่วนวิธีการควรระบุตัวประมาณความแปรปรวน เหตุผลที่ใช้ และจำนวนกลุ่ม ส่วนผลลัพธ์ควรบอกว่ารายงานช่วงความเชื่อมั่นแบบใด

สำหรับผลลัพธ์แบบใช่หรือไม่ใช่ คือการกลับมานอนโรงพยาบาลซ้ำภายในหนึ่งปี อัตราส่วนความเสี่ยงมาจาก Poisson ดัดแปลง (modified Poisson regression) คือแบบจำลอง Poisson ที่ใช้ log link ประมาณกับผลลัพธ์ 0 หรือ 1 ร่วมกับความแปรปรวนแบบ sandwich [5] ต้องใช้ sandwich เพราะความแปรปรวนแบบ Poisson ซึ่งคือความเสี่ยง $p$ เอง มากกว่าความแปรปรวนแบบ Bernoulli (Bernoulli variance) ของผลลัพธ์แบบใช่หรือไม่ใช่ ซึ่งคือ $p(1 - p)$ Zou และ Donner ขยายวิธีนี้ไปยังข้อมูลสองค่าที่จับกลุ่มกัน โดยใช้ความแปรปรวนแบบ cluster-robust [6] ขั้นตอนที่นำไปสู่แบบจำลองนี้อยู่ในบทความเรื่องอัตราส่วนความเสี่ยงสำหรับผลลัพธ์ที่พบบ่อย

ในข้อมูลจำลอง ความเสี่ยงของการกลับมานอนโรงพยาบาลซ้ำ ซึ่งพิมพ์ไว้ในผลลัพธ์ Stata ชุดแรกด้านล่าง คือ 0.667 ในโรงพยาบาลที่มีโปรแกรม และ 0.763 ในโรงพยาบาลอื่น หลังปรับกลุ่มอายุ อัตราส่วนความเสี่ยงคือ 0.87 โดยมีช่วงความเชื่อมั่นแบบ robust ที่ 0.79 ถึง 0.96 ช่วงความเชื่อมั่นแบบ cluster-robust ซึ่งเป็นช่วงที่ควรรายงานเพราะโปรแกรมถูกจัดสรรตามโรงพยาบาล คือ 0.75 ถึง 1.01 อัตราส่วนความเสี่ยงนี้เฉลี่ยข้ามโรงพยาบาลด้วย และสมมติอัตราส่วนเดียวสำหรับทั้งสองกลุ่มอายุ การจำลองไม่ได้กำหนดอัตราส่วนความเสี่ยงที่แท้จริงไว้

Stata: ความเสี่ยงของการกลับมานอนโรงพยาบาลซ้ำในแต่ละกลุ่ม

โค้ด Stata g2_sim.do (บรรทัด 84-87 จาก 175)
quietly summarize any_admission if program == 1
canon any.risk_program 4 r(mean)
quietly summarize any_admission if program == 0
canon any.risk_control 4 r(mean)
ผลลัพธ์จากการรัน g2_sim.log
. quietly summarize any_admission if program == 1

. canon any.risk_program 4 r(mean)
CANON g2.any.risk_program 0.6667

. quietly summarize any_admission if program == 0

. canon any.risk_control 4 r(mean)
CANON g2.any.risk_control 0.7633
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ ตัวแปร any_admission มีค่า 1 สำหรับผู้ป่วยที่นอนโรงพยาบาลอย่างน้อยหนึ่งครั้ง และ 0 สำหรับผู้ป่วยอื่น ค่าเฉลี่ยในแต่ละกลุ่มจึงเป็นความเสี่ยงของการกลับมานอนโรงพยาบาลซ้ำ quietly ซ่อนตารางสรุป ความเสี่ยงแต่ละค่าจึงพิมพ์ออกมาเฉพาะในบรรทัด CANON ของสคริปต์เอง ฟังก์ชันช่วยเล็ก ๆ ในสคริปต์สะท้อนผลลัพธ์แต่ละค่าออกมา ให้อ่านตัวเลขท้ายแต่ละบรรทัด: 0.667 ในโรงพยาบาลที่มีโปรแกรม และ 0.763 ในโรงพยาบาลอื่น

Stata: Poisson ดัดแปลง แบบ robust และ cluster-robust

โค้ด Stata g2_sim.do (บรรทัด 159-165 จาก 175)
* ---- 6. Binary outcome (any admission): modified Poisson for the risk ratio ------------
poisson any_admission i.program i.older, irr vce(robust) nolog
canon any.rr_program 4 exp(_b[1.program])
canon any.se_robust 4 _se[1.program]
canon any.rr_lb_robust 4 exp(_b[1.program] - invnormal(0.975)*_se[1.program])
canon any.rr_ub_robust 4 exp(_b[1.program] + invnormal(0.975)*_se[1.program])
poisson any_admission i.program i.older, irr vce(cluster hospital) nolog
ผลลัพธ์จากการรัน g2_sim.log
. * ---- 6. Binary outcome (any admission): modified Poisson for the risk ratio ------------
. poisson any_admission i.program i.older, irr vce(robust) nolog

Poisson regression                                      Number of obs =    600
                                                        Wald chi2(2)  =  23.03
                                                        Prob > chi2   = 0.0000
Log pseudolikelihood = -569.62054                       Pseudo R2     = 0.0058

-------------------------------------------------------------------------------
              |               Robust
any_admission |        IRR   std. err.      z    P>|z|     [95% conf. interval]
--------------+----------------------------------------------------------------
    1.program |   .8709482   .0446817    -2.69   0.007     .7876326     .963077
      1.older |   1.231833   .0645076     3.98   0.000     1.111672    1.364982
        _cons |   .6845157   .0322619    -8.04   0.000     .6241162    .7507604
-------------------------------------------------------------------------------
Note: _cons estimates baseline incidence rate.

. canon any.rr_program 4 exp(_b[1.program])
CANON g2.any.rr_program 0.8709

. canon any.se_robust 4 _se[1.program]
CANON g2.any.se_robust 0.0513

. canon any.rr_lb_robust 4 exp(_b[1.program] - invnormal(0.975)*_se[1.program])
CANON g2.any.rr_lb_robust 0.7876

. canon any.rr_ub_robust 4 exp(_b[1.program] + invnormal(0.975)*_se[1.program])
CANON g2.any.rr_ub_robust 0.9631

. poisson any_admission i.program i.older, irr vce(cluster hospital) nolog

Poisson regression                                      Number of obs =    600
                                                        Wald chi2(2)  =  25.91
                                                        Prob > chi2   = 0.0000
Log pseudolikelihood = -569.62054                       Pseudo R2     = 0.0058

                               (Std. err. adjusted for 40 clusters in hospital)
-------------------------------------------------------------------------------
              |               Robust
any_admission |        IRR   std. err.      z    P>|z|     [95% conf. interval]
--------------+----------------------------------------------------------------
    1.program |   .8709482   .0657274    -1.83   0.067     .7511992    1.009787
      1.older |   1.231833   .0558421     4.60   0.000     1.127106    1.346291
        _cons |   .6845157   .0400294    -6.48   0.000     .6103887    .7676449
-------------------------------------------------------------------------------
Note: _cons estimates baseline incidence rate.
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ Stata ใช้ป้ายคอลัมน์ว่า IRR แต่เมื่อผลลัพธ์เป็นแบบใช่หรือไม่ใช่และทุกคนมีช่วงติดตามหนึ่งปีเท่ากัน ค่าที่ยกกำลังด้วยเลขชี้กำลังคืออัตราส่วนความเสี่ยง การประมาณครั้งแรกใช้ vce(robust) และครั้งที่สองใช้ vce(cluster hospital) อัตราส่วนเหมือนกัน มีเพียงช่วงความเชื่อมั่นที่เปลี่ยน บรรทัดที่ขึ้นต้นด้วย CANON พิมพ์โดยฟังก์ชันช่วยเล็ก ๆ ในสคริปต์ที่สะท้อนผลลัพธ์แต่ละค่าออกมา ให้อ่านตัวเลขท้ายบรรทัดและไม่ต้องสนใจคำนำหน้า

ประโยคสำหรับนำไปปรับใช้

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

ส่วนวิธีการ ผลลัพธ์แบบใช่หรือไม่ใช่: ประมาณอัตราส่วนความเสี่ยงของการกลับมานอนโรงพยาบาลซ้ำภายในหนึ่งปีด้วย Poisson ดัดแปลงที่ปรับกลุ่มอายุ โดยใช้ cluster-robust standard error และถือโรงพยาบาล 40 แห่งเป็นกลุ่ม เพราะโปรแกรมถูกจัดสรรตามโรงพยาบาล

ส่วนผลลัพธ์ ผลลัพธ์แบบใช่หรือไม่ใช่: พบการกลับมานอนโรงพยาบาลซ้ำในผู้ป่วย 66.7% ของโรงพยาบาลที่มีโปรแกรม และ 76.3% ของโรงพยาบาลอื่น (อัตราส่วนความเสี่ยงที่ปรับแล้ว 0.87, ช่วงความเชื่อมั่น 95% 0.75 ถึง 1.01 จาก cluster-robust standard error)

ส่วนวิธีการ ผลลัพธ์แบบนับ: ประมาณอัตราส่วนอัตราอุบัติการณ์ของจำนวนครั้งที่นอนโรงพยาบาลในหนึ่งปีหลังจำหน่ายด้วยการถดถอยแบบ Poisson ที่ปรับกลุ่มอายุ โดยใช้ cluster-robust standard error และถือโรงพยาบาล 40 แห่งเป็นกลุ่ม เพราะโปรแกรมถูกจัดสรรตามโรงพยาบาล negative binomial regression ที่จัดกลุ่มแบบเดียวกันเป็นการวิเคราะห์ความไว

ส่วนผลลัพธ์ ผลลัพธ์แบบนับ: ผู้ป่วยในโรงพยาบาลที่มีโปรแกรมนอนโรงพยาบาลเฉลี่ย 1.22 ครั้ง เทียบกับ 1.69 ครั้งในโรงพยาบาลอื่น (อัตราส่วนอัตราอุบัติการณ์ที่ปรับแล้ว 0.72, ช่วงความเชื่อมั่น 95% 0.51 ถึง 1.01 จาก cluster-robust standard error; negative binomial ที่จัดกลุ่มแบบเดียวกัน 0.72, ช่วงความเชื่อมั่น 95% 0.52 ถึง 1.01)

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

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

  • "vce(cluster) แก้ตัวกวนระดับโรงพยาบาลได้"

    ในที่นี้อัตราส่วนอัตราอุบัติการณ์เท่ากับ 0.72 ภายใต้ vce() ทุกแบบ ความลำเอียงจากโรงพยาบาลใด ๆ จึงยังอยู่ครบในทุกแบบ

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

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

    sandwich ปกป้องค่าคลาดเคลื่อนมาตรฐานจากข้อสมมติเรื่องความแปรปรวนที่ผิด และไม่มากไปกว่านั้น แบบจำลองค่าเฉลี่ยที่พลาดเส้นโค้งหรือปฏิกิริยาสัมพันธ์กำลังตอบคำถามอีกแบบหนึ่ง

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

  • "เลือก vce() ที่ให้ค่า P ดูดีที่สุด"

    ในที่นี้ช่วงความเชื่อมั่นแบบอิงแบบจำลองไม่ครอบคลุม 1 แต่ช่วงแบบ cluster-robust ครอบคลุมค่านั้น การเลือกหลังเห็นผลจึงเท่ากับเลือกข้อสรุป

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

  • "negative binomial จัดการเรื่องการจัดกลุ่มให้แล้ว"

    แบบจำลองนี้จำลองความแปรปรวนส่วนเกิน แต่ยังถือว่าผู้ป่วยเป็นอิสระต่อกัน ค่าคลาดเคลื่อนมาตรฐานของมันในที่นี้คือ 0.0795 เทียบกับ 0.1721 สำหรับ Poisson แบบ cluster-robust

    วิธีแก้: เลือก negative binomial หรือ Poisson แบบ robust ตามเป้าหมาย แล้วจัดกลุ่มค่าคลาดเคลื่อนมาตรฐานตามโรงพยาบาลในแบบจำลองใดก็ได้

  • "ตัวระบุใดก็ใช้เป็นตัวแปรกลุ่มได้"

    การจัดกลุ่มตามตัวระบุผู้ป่วยเมื่อผู้ป่วยแต่ละคนมีแถวเดียวให้ robust standard error และเพิกเฉยต่อโรงพยาบาล เมื่อมีกลุ่มน้อยเกินไป ค่าคลาดเคลื่อนมาตรฐานมักเล็กเกินไป

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

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

อภิธานศัพท์

variance-covariance matrix (VCE) (เมทริกซ์ความแปรปรวนและความแปรปรวนร่วม)
เมทริกซ์ที่เก็บความแปรปรวนที่ประมาณได้ของสัมประสิทธิ์แต่ละตัวไว้บนเส้นทแยงมุม และความแปรปรวนร่วมระหว่างสัมประสิทธิ์ไว้นอกเส้นทแยงมุม ค่าคลาดเคลื่อนมาตรฐานคือรากที่สองของเส้นทแยงมุม
Poisson regression
แบบจำลองสำหรับข้อมูลนับ ซึ่งลอการิทึมของค่าเฉลี่ยจำนวนนับเป็นฟังก์ชันเชิงเส้นของตัวแปรร่วม และสมมติว่าความแปรปรวนเท่ากับค่าเฉลี่ย
incidence rate ratio
อัตราส่วนของอัตราการเกิดเหตุการณ์สองค่า เมื่อทุกคนมีช่วงติดตามเท่ากัน คืออัตราส่วนของจำนวนนับเฉลี่ยต่อคน
observed information matrix (OIM)
ความโค้งของลอการิทึมของความควรจะเป็น ณ ค่าประมาณ อินเวอร์สของมันคือ VCE แบบอิงแบบจำลองที่ vce(oim) รายงาน
model-based standard error (standard error แบบอิงแบบจำลอง)
ค่าคลาดเคลื่อนมาตรฐานที่ได้จากความแปรปรวนซึ่งแบบจำลองสมมติ เช่นความแปรปรวนเท่ากับค่าเฉลี่ยในการถดถอยแบบ Poisson
sandwich estimator
สูตรความแปรปรวนที่วาง meat ไว้ระหว่าง bread ที่กลับค่าแล้วสองชุด ความแปรปรวนจึงมาจากข้อมูลแทนที่จะมาจากข้อสมมติเรื่องความแปรปรวนของแบบจำลอง
robust (sandwich) standard error (ค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช)
ค่าคลาดเคลื่อนมาตรฐานจาก sandwich estimator ในตัวอย่างขนาดใหญ่ยังใช้ได้เมื่อข้อสมมติเรื่องความแปรปรวนผิด หากแบบจำลองค่าเฉลี่ยถูกต้องและหน่วยสังเกตเป็นอิสระต่อกัน
bread (ส่วน bread ของ sandwich estimator)
ตัวประกอบชั้นนอกของ sandwich เขียนเป็น J คือสมการประมาณค่าเปลี่ยนไปอย่างฉับพลันเพียงใดตามสัมประสิทธิ์ ปรากฏเป็นค่ากลับสองข้างของ meat
meat (ส่วน meat ของ sandwich estimator)
ตัวประกอบตรงกลางของ sandwich เขียนเป็น K คือผลรวมของกำลังสองของ score contribution ซึ่งอ่านจากข้อมูล
score contribution (score contribution ของแต่ละหน่วยสังเกต)
ส่วนของสมการประมาณค่าที่มาจากหน่วยสังเกตหนึ่งหน่วย เขียนเป็น s_i ในการถดถอยแบบ Poisson คือค่าตัวแปรร่วมคูณค่าส่วนเหลือ
overdispersion (การกระจายเกินกว่าที่แบบจำลองกำหนด)
ความกระจายของข้อมูลนับมากกว่าที่แบบจำลอง Poisson สมมติ: ความแปรปรวนมากกว่าค่าเฉลี่ย
underdispersion (การกระจายน้อยกว่าที่แบบจำลองกำหนด)
ความกระจายของข้อมูลนับน้อยกว่าที่แบบจำลอง Poisson สมมติ: ความแปรปรวนน้อยกว่าค่าเฉลี่ย
cluster-robust standard error
sandwich standard error ที่ meat รวม score contribution ภายในแต่ละกลุ่มก่อนยกกำลังสอง หน่วยสังเกตในกลุ่มเดียวกันจึงสัมพันธ์กันได้ ต้องมีกลุ่มที่เป็นอิสระต่อกันจำนวนมาก
intraclass correlation (ICC)
สหสัมพันธ์ระหว่างผลลัพธ์ของสมาชิกสองคนในกลุ่มเดียวกัน
generalized estimating equations (GEE) (สมการประมาณค่าวางนัยทั่วไป)
วิธีสำหรับข้อมูลที่สัมพันธ์กัน ซึ่งประมาณแบบจำลองค่าเฉลี่ยที่สมมติรูปแบบสหสัมพันธ์อย่างง่ายระหว่างสมาชิกในกลุ่มเดียวกัน (เรียกว่าสหสัมพันธ์สำหรับทำงาน หรือ working correlation เป็นการคาดเดารูปแบบนั้นที่ไม่จำเป็นต้องถูกต้องทุกประการ) และใช้ sandwich ที่รวมตามกลุ่มสำหรับค่าคลาดเคลื่อนมาตรฐาน
coverage
ความถี่ที่ช่วงซึ่งสร้างด้วยวิธีเดียวกันครอบคลุมค่าจริงเมื่อดูตัวอย่างจำนวนมาก ช่วงความเชื่อมั่น 95% ควรครอบคลุมค่าจริง 95% ของครั้งทั้งหมด
negative binomial regression
แบบจำลองข้อมูลนับที่มีโครงสร้างค่าเฉลี่ยแบบ Poisson บวกพารามิเตอร์ความกระจาย ความแปรปรวนจึงมากกว่าค่าเฉลี่ยได้
outer product of the gradients (OPG)
ตัวประมาณความแปรปรวนที่กลับค่า meat อย่างเดียว เหมือนตัวประมาณแบบอิงแบบจำลอง จึงใช้ได้เฉพาะเมื่อความแปรปรวนของแบบจำลองถูกต้อง
estimand
ปริมาณที่การวิเคราะห์ตั้งใจประมาณ ถูกกำหนดโดยคำถาม ได้แก่ประชากร ผลลัพธ์ การเปรียบเทียบ และตัวสรุป ตัวประมาณความแปรปรวนไม่เปลี่ยนมัน
marginal (population-averaged) rate ratio
อัตราส่วนอัตราอุบัติการณ์ที่เฉลี่ยข้ามกลุ่ม ในที่นี้คือโรงพยาบาล ไม่ใช่อัตราส่วนที่เปรียบเทียบผู้ป่วยภายในโรงพยาบาลเดียวกัน
modified Poisson regression (Poisson ดัดแปลง)
การถดถอยแบบ Poisson ที่ใช้ log link ประมาณกับผลลัพธ์แบบใช่หรือไม่ใช่ ร่วมกับ sandwich standard error เพื่อประมาณอัตราส่วนความเสี่ยง
Bernoulli variance (ความแปรปรวนแบบ Bernoulli)
ความแปรปรวนของผลลัพธ์แบบใช่หรือไม่ใช่ที่มีความน่าจะเป็น p คือ p(1 - p) ซึ่งต่ำกว่าค่าแบบ Poisson คือ p เมื่อ p อยู่ระหว่าง 0 กับ 1

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

  1. StataCorp. Stata Base Reference Manual: [R] vce_option. Stata documentation at stata.com (PDF); release and year not stated. Accessed 2026-10-11. https://www.stata.com/manuals/rvce_option.pdf
  2. StataCorp. Stata User's Guide: [U] 20.22, Obtaining robust variance estimates. Stata documentation at stata.com (PDF); release and year not stated. Accessed 2026-10-11. https://www.stata.com/manuals/u20.pdf
  3. Liang KY, Zeger SL. Longitudinal data analysis using generalized linear models. Biometrika. 1986;73:13-22. doi:10.1093/biomet/73.1.13 https://doi.org/10.1093/biomet/73.1.13
  4. Gardner W, Mulvey EP, Shaw EC. Regression analyses of counts and rates: Poisson, overdispersed Poisson, and negative binomial models. Psychol Bull. 1995;118(3):392-404. doi:10.1037/0033-2909.118.3.392 https://doi.org/10.1037/0033-2909.118.3.392
  5. 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
  6. Zou GY, Donner A. Extension of the modified Poisson regression model to prospective studies with correlated binary data. Stat Methods Med Res. 2013;22(6):661-670. doi:10.1177/0962280211427759 https://doi.org/10.1177/0962280211427759

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

  • ออปชัน vce() เปลี่ยนเมทริกซ์ความแปรปรวนและความแปรปรวนร่วมและค่าคลาดเคลื่อนมาตรฐาน ช่วงความเชื่อมั่น และค่า P ทุกตัวที่สร้างจากมัน แต่ไม่เปลี่ยนสัมประสิทธิ์: อัตราส่วนอัตราอุบัติการณ์ของโปรแกรมเท่ากับ 0.72 ภายใต้ทุกวิธี
  • จัดกลุ่มตามหน่วยที่ถูกสุ่มเลือกหรือถูกจัดสรร เมื่อโปรแกรมถูกจัดสรรตามโรงพยาบาล cluster-robust standard error เป็น 2.51 เท่าของแบบอิงแบบจำลอง และช่วงความเชื่อมั่นของมันครอบคลุม 1
  • Poisson แบบ robust กับ negative binomial ใช้แบบจำลองค่าเฉลี่ยร่วมกัน แต่ต่างกันที่เป้าหมายและวิธีถ่วงน้ำหนักผู้ป่วย และทั้งสองยังไม่จัดการเรื่องการจัดกลุ่ม จนกว่าจะจัดกลุ่มค่าคลาดเคลื่อนมาตรฐานของมัน
  • robust standard error ช่วยแก้ค่าคลาดเคลื่อนมาตรฐานเมื่อข้อสมมติเรื่องความแปรปรวนผิด แต่ไม่ได้แก้แบบจำลองค่าเฉลี่ยที่ผิด และสัมประสิทธิ์ที่ลำเอียงก็ยังคงลำเอียงอยู่
  • เลือกตัวประมาณความแปรปรวนจากการออกแบบการศึกษาก่อนเห็นผล และรายงานแบบจำลอง มาตรวัด ตัวประมาณ และจำนวนกลุ่มในประโยคเดียวของส่วนวิธีการ

อ่านต่อในวิกิ: [[sandwich-standard-error-worked-by-hand-th]] [[heteroskedasticity-robust-standard-errors-th]] [[repeated-measures-modeling-guide-th]] [[poisson-regression-rates-lambda]] [[cluster-randomized-trials-design-ethics]]

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

ความคิดเห็น

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

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