สัมประสิทธิ์เท่าเดิม แต่ standard error ต่างกัน: คำนวณ sandwich estimator ด้วยมือ

Clinical Epidemiology ResearchMethodology and Research Design THUniqcret doctor knowledges TH
สัมประสิทธิ์เท่าเดิม แต่ standard error ต่างกัน: คำนวณ sandwich estimator ด้วยมือ
On this page

Read the English version

บทคัดย่อ

การถดถอยแบบ Poisson ที่ประมาณสองครั้ง ครั้งแรกแบบปกติและครั้งที่สองด้วย robust standard error พิมพ์สัมประสิทธิ์หนึ่งค่าคู่กับ standard error สองค่า สัมประสิทธิ์มาจากแบบจำลองของค่าเฉลี่ย ส่วน standard error มาจากการคำนวณความแปรปรวนแยกต่างหาก ชุดข้อมูลตัวอย่างสองชุดที่คำนวณด้วยมือ ชุดละผู้ป่วยสี่คน ซึ่งน้อยเกินกว่าจะใช้อนุมานได้ มีค่าเฉลี่ยเท่ากันที่ 5 ครั้งของการนอนโรงพยาบาล แบบจำลอง Poisson ที่มีเฉพาะจุดตัดแกน (intercept-only) ให้สัมประสิทธิ์ ln 5 = 1.609 และ standard error แบบอิงแบบจำลอง 0.224 เท่ากันทั้งสองชุด ตัวประมาณแบบแซนด์วิช (sandwich estimator) อ่านความกระจายจากข้อมูลแทน ส่วน bread ของมันคือ J = 20 เท่ากันทั้งสองชุด ส่วน meat คือ K เท่ากับ 2 ในชุดหนึ่งและ 64 ในอีกชุดหนึ่ง standard error แบบ sandwich HC0 จึงเป็น 0.071 และ 0.400 ตัวประมาณแบบแซนด์วิชทำให้ standard error เล็กลงเมื่อจำนวนนับแปรปรวนน้อยกว่าที่สมมติไว้ และทำให้กว้างขึ้นเมื่อแปรปรวนมากกว่า vce(robust) ของ Stata ยังคูณความแปรปรวนด้วย n/(n - 1) จึงพิมพ์ค่าที่ใหญ่กว่า บทความนี้คำนวณทีละขั้นด้วยมือ ตรวจซ้ำด้วย Stata และ R และต่อไปยังผลลัพธ์แบบสองค่า


ภาพสรุป ตัวอย่างคำนวณด้วยมือ

แบบจำลองเดียว standard error สองค่า

ทีมเภสัชกรรมของโรงพยาบาลแห่งหนึ่งตรวจสอบจำนวนผู้ป่วยรับใหม่ทั่วเครือข่ายโรงพยาบาลในภูมิภาคเพื่อวางแผนคลังยา แฟ้มข้อมูลของทีมมีจำนวนผู้ป่วยรับใหม่หนึ่งวันของโรงพยาบาล 100 แห่ง จำนวนนับแกว่งตั้งแต่ 0 ถึง 10 รอบค่าเฉลี่ย 5 รายต่อวัน โรงพยาบาลเหล่านี้เป็นของสมมติและข้อมูลเป็นข้อมูลจำลอง

นักวิเคราะห์ประมาณการถดถอยแบบ Poisson (Poisson regression) ซึ่งเป็นแบบจำลองมาตรฐานสำหรับข้อมูลจำนวนนับ และสร้างแบบจำลองให้ลอการิทึมของค่าเฉลี่ยของจำนวนนับ เมื่อไม่มีตัวแปรร่วม สัมประสิทธิ์ตัวเดียวของมันคือลอการิทึมของค่าเฉลี่ย นักวิเคราะห์รันใน Stata สองครั้ง ครั้งแรกแบบปกติ และอีกครั้งด้วย option vce(robust) ซึ่งสั่งให้ Stata ประมาณความแปรปรวนแบบ robust (sandwich)

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

สัมประสิทธิ์เดียวกันกับ standard error สองค่า

ข้อมูลจำลอง โรงพยาบาล 100 แห่ง แห่งละหนึ่งวัน สัมประสิทธิ์และค่าเฉลี่ยไม่เปลี่ยนระหว่างสองรัน ส่วน standard error และช่วงเชื่อมั่นทั้งสองช่วงเปลี่ยน
ปริมาณรันแบบอิงแบบจำลองรันที่ใช้ vce(robust)
สัมประสิทธิ์ คือ ln(ค่าเฉลี่ยจำนวนผู้ป่วยรับใหม่ต่อวัน)1.60941.6094
standard error ของสัมประสิทธิ์0.04470.0853
ช่วงเชื่อมั่น 95% (CI) ของสัมประสิทธิ์1.5218 ถึง 1.69711.4423 ถึง 1.7766
ค่าเฉลี่ยจำนวนผู้ป่วยรับใหม่ต่อวัน exp(สัมประสิทธิ์)55
CI 95% ของค่าเฉลี่ย (จำนวนผู้ป่วยรับใหม่ต่อวัน)4.58 ถึง 5.464.23 ถึง 5.91

ความกระจายสองชนิด

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

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

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

ตัวอย่างคำนวณด้วยมือ: ข้อมูลสองชุดที่มีค่าเฉลี่ยเท่ากัน

ตัวอย่างคำนวณด้วยมือ ข้อมูลสองชุดบันทึกจำนวนครั้งการนอนโรงพยาบาลของผู้ป่วยสี่คนในช่วงเวลาเดียวกัน ชุด A มีจำนวนนับ 4, 5, 5 และ 6 ส่วนชุด B มี 1, 1, 9 และ 9 ทั้งสองชุดรวมกันได้ 20 ครั้ง ค่าเฉลี่ยจึงเป็น 5 เท่ากัน

ชุด A กระจุกตัวใกล้กัน ส่วนชุด B แยกเป็นสองคู่ที่ต่างกันมากความแปรปรวนเชิงประจักษ์ (empirical variance) วัดความกระจายนั้น คือค่าเฉลี่ยของระยะห่างกำลังสองจากค่าเฉลี่ย โดยหารด้วย $n$ ซึ่งเป็นจำนวนผู้ป่วย การหารด้วย $n$ แทน $n - 1$ ตรงกับสูตร sandwich ที่ใช้ด้านล่าง ในชุด A ระยะห่างกำลังสองจากค่าเฉลี่ยคือ 1, 0, 0 และ 1

$$\text{A: } (1 + 0 + 0 + 1)/4 = 0.5$$

ความแปรปรวนเชิงประจักษ์ของชุด A จึงเป็น 0.5 ในชุด B ทุกจำนวนนับอยู่ห่างจากค่าเฉลี่ย 4 ครั้ง ระยะห่างกำลังสองแต่ละค่าจึงเป็น 16

$$\text{B: } (16 + 16 + 16 + 16)/4 = 16$$

ความแปรปรวนเชิงประจักษ์ของชุด B จึงเป็น 16 สูงกว่า 0.5 ของชุด A มาก

สิ่งที่แบบจำลอง Poisson สมมติ

การถดถอยแบบ Poisson ที่มีเฉพาะจุดตัดแกน (intercept-only) คือไม่มีตัวแปรร่วม จะประมาณลอการิทึมของค่าเฉลี่ยของจำนวนนับ

$$\hat\beta_0 = \ln \bar y = \ln 5 = 1.609$$

ในที่นี้ $\bar y$ คือค่าเฉลี่ยของจำนวนนับ และ $\hat\beta_0$ คือจุดตัดแกนที่ประมาณได้ เครื่องหมายหมวก (hat) แสดงค่าประมาณ ข้อมูลทั้งสองชุดมีค่าเฉลี่ย 5 จึงได้สัมประสิทธิ์เดียวกัน ค่าเฉลี่ยที่แบบจำลองคาด $\hat\mu = 5$ เท่ากันสำหรับผู้ป่วยทุกคนในชุดข้อมูลหนึ่ง

แบบจำลอง Poisson ยังสมมติว่าความแปรปรวนของจำนวนนับเท่ากับค่าเฉลี่ยของมัน ในที่นี้คือ 5 ชุด A ซึ่งมีความแปรปรวนเชิงประจักษ์ 0.5 แสดงการกระจายน้อยกว่าที่แบบจำลองกำหนด (underdispersion) คือกระจายน้อยกว่าที่แบบจำลองสมมติ ชุด B ที่ 16 แสดงการกระจายเกินกว่าที่แบบจำลองกำหนด (overdispersion) คือกระจายมากกว่าที่แบบจำลองสมมติ

standard error แบบอิงแบบจำลอง

standard error แบบอิงแบบจำลอง (model-based standard error) คือค่าที่ได้จากความแปรปรวนซึ่งแบบจำลองสมมติไว้ สำหรับแบบจำลอง Poisson ที่มีเฉพาะจุดตัดแกน เมื่อมีผู้ป่วย $n$ คนและค่าเฉลี่ยที่แบบจำลองคาดคือ $\hat\mu$ ค่านี้คือ

$$\mathrm{SE}_{\text{model}} = \sqrt{1/(n\hat\mu)}$$

ในที่นี้ $n\hat\mu = 4 \times 5 = 20$ เป็นจำนวนนับรวมที่คาดไว้ standard error จึงเป็น $\sqrt{1/20} = \sqrt{0.05} = 0.224$ บนมาตรวัดลอการิทึม เท่ากันทั้งสองชุดข้อมูล สูตรนี้เห็นเพียง $n$ และ $\hat\mu$ จึงแยกชุด A ออกจากชุด B ไม่ได้

แซนด์วิช: bread และ meat

ตัวประมาณแบบแซนด์วิช (sandwich estimator) คงสัมประสิทธิ์ไว้ แต่คำนวณความแปรปรวนของมันใหม่จากข้อมูล [1, 2] standard error ของมันมักเรียกว่า robust standard error รูปแบบพื้นฐานที่ไม่มีตัวคูณปรับสำหรับตัวอย่างเล็กเรียกว่า HC0 สำหรับแบบจำลอง Poisson ที่มีเฉพาะจุดตัดแกน ทุกส่วนของแซนด์วิชเป็นตัวเลขตัวเดียว

score contribution ของแต่ละหน่วยสังเกต (score contribution) ของผู้ป่วยคนที่ $i$ คือ $s_i = y_i - \hat\mu$ จำนวนนับ $y_i$ ของผู้ป่วยลบด้วยค่าเฉลี่ยที่แบบจำลองคาด เมื่อมีตัวแปรร่วม ค่านี้คือส่วนตกค้างนั้นคูณค่าตัวแปรร่วมของผู้ป่วย ส่วนส่วน meat ของ sandwich estimator (meat) คือ $K$ ซึ่งรวมค่าเหล่านี้หลังยกกำลังสอง

$$K = \sum_i s_i^2 = \sum_i (y_i - \hat\mu)^2$$

ส่วน meat จึงอ่านจากข้อมูล ผู้ป่วยแต่ละคนเพิ่มระยะห่างกำลังสองจากค่าเฉลี่ยที่แบบจำลองคาด ส่วนส่วน bread ของ sandwich estimator (bread) คือ $J$ วัดว่าสมการประมาณค่า (estimating equation) เปลี่ยนแรงเพียงใดเมื่อสัมประสิทธิ์เปลี่ยน สมการนั้นคือสมการที่โปรแกรมแก้เพื่อหาสัมประสิทธิ์ สำหรับแบบจำลองนี้ bread คือ

$$J = n\hat\mu$$

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

$$\widehat{\mathrm{Var}}(\hat\beta_0) = J^{-1} K J^{-1} = K/J^2$$

รากที่สองของค่านี้คือ standard error แบบ HC0 ความแปรปรวนแบบอิงแบบจำลองคือส่วนผกผันของ bread เพียงอย่างเดียว $1/(n\hat\mu)$ หากจำนวนนับแปรปรวนตามที่แบบจำลอง Poisson สมมติ $K$ จะใกล้ $J$ และ standard error ทั้งสองแบบจะเกือบเท่ากัน เมื่อมีตัวแปรร่วม $J$ และ $K$ กลายเป็นเมทริกซ์ ดังที่บทความเรื่อง robust standard errorแสดงไว้

ตัวอย่างคำนวณด้วยมือ: bread และ meat เป็นตัวเลข

ตัวอย่างคำนวณด้วยมือ ชุด A มีจำนวนนับ 4, 5, 5 และ 6 และชุด B มี 1, 1, 9 และ 9 แต่ละชุดมีผู้ป่วยสี่คนและค่าเฉลี่ยที่แบบจำลองคาดคือ $\hat\mu = 5$

  1. bread ซึ่งเท่ากันทั้งสองชุดข้อมูล

    \[ J = n\hat\mu = 4 \times 5 = 20 \]

    ค่านี้ขึ้นกับจำนวนผู้ป่วยและค่าเฉลี่ยที่แบบจำลองคาดเท่านั้น

  2. meat ของชุด A

    \[ K = (-1)^2 + 0^2 + 0^2 + 1^2 = 2 \]

    score contribution คือ -1, 0, 0 และ +1

  3. meat ของชุด B

    \[ K = 4 \times 16 = 64 \]

    score contribution แต่ละค่าเป็น -4 หรือ +4 จึงยกกำลังสองได้ 16

  4. bread ยกกำลังสอง

    \[ J^2 = 20^2 = 400 \]

    ค่านี้เท่ากันทั้งสองชุดข้อมูล

  5. ความแปรปรวนแบบแซนด์วิชของชุด A

    \[ K/J^2 = 2/400 = 0.005 \]

    meat ที่เล็กให้ความแปรปรวนที่เล็ก

  6. ความแปรปรวนแบบแซนด์วิชของชุด B

    \[ K/J^2 = 64/400 = 0.16 \]

    meat ที่ใหญ่ให้ความแปรปรวนที่ใหญ่

  7. standard error แบบ HC0 ของชุด A

    \[ \sqrt{0.005} = 0.071 \]

    ค่านี้ต่ำกว่า standard error แบบอิงแบบจำลองที่ 0.224

  8. standard error แบบ HC0 ของชุด B

    \[ \sqrt{0.16} = 0.400 \]

    ค่านี้สูงกว่า standard error แบบอิงแบบจำลองที่ 0.224

ผลลัพธ์: ข้อมูลทั้งสองชุดมีสัมประสิทธิ์ 1.609 และ standard error แบบอิงแบบจำลอง 0.224 เท่ากัน standard error แบบ HC0 ของทั้งสองชุดคือ 0.071 และ 0.400 ต่างกัน เพราะมีเพียง meat ที่เห็นว่าจำนวนนับกระจายอย่างไร

ทางลัดที่ใช้ได้กับแบบจำลองนี้เท่านั้น

สำหรับแบบจำลอง Poisson ที่มีเฉพาะจุดตัดแกน ขั้นตอนทั้งหมดยุบเหลือบรรทัดเดียว

$$\mathrm{SE}_{\text{HC0}} = \sqrt{K}/J = \sqrt{K}/(n\hat\mu)$$

สำหรับชุด B ได้ $\sqrt{64}/20 = 8/20 = 0.400$ ทางลัดนี้ใช้ได้กับแบบจำลองที่มีเฉพาะจุดตัดแกนเท่านั้น เพราะมีเพียงที่นั่นที่ bread เป็นตัวเลขตัวเดียว $n\hat\mu$ เมื่อมีตัวแปรร่วม standard error แต่ละค่ามาจากเส้นทแยงมุมของเมทริกซ์ $J^{-1} K J^{-1}$

ตัวอย่างคำนวณด้วยมือ แก้จำนวนนับของผู้ป่วยรับใหม่สี่ค่า หรือโหลดชุด A หรือชุด B ด้วยปุ่ม แผงจะคำนวณค่าเฉลี่ย ln(ค่าเฉลี่ย) bread $J$ meat $K$ standard error ทั้งสองแบบ และอัตราส่วนของทั้งสองใหม่ แผงเริ่มที่ชุด B จำนวนนับที่แปรปรวนใกล้เคียงกับค่าเฉลี่ยของมันจะทำให้ standard error ทั้งสองแบบเข้าใกล้กัน จำนวนนับสี่ค่าแสดงได้เพียงการคำนวณ จำนวนนับสี่ค่าที่เท่ากันหมดให้ standard error แบบ HC0 เป็น 0 ซึ่งเป็นสัญญาณว่าผู้ป่วยน้อยเกินไป ไม่ใช่ความแม่นยำสมบูรณ์

แซนด์วิชขยับไปทางไหน

ในแบบจำลองที่มีเฉพาะจุดตัดแกนนี้ meat หารด้วย $n$ คือความแปรปรวนเชิงประจักษ์ ส่วน bread หารด้วย $n$ คือความแปรปรวนที่แบบจำลองสมมติ ดังนั้นที่นี่ standard error แบบ HC0 จะเกิน standard error แบบอิงแบบจำลองพอดีเมื่อ $K$ เกิน $J$

ชุด A มี $K = 2$ เทียบกับ $J = 20$ แซนด์วิชจึงทำให้ standard error ของมันเล็กลง ชุด B มี $K = 64$ เทียบกับ $J = 20$ แซนด์วิชจึงทำให้ standard error กว้างขึ้น เมื่อมีตัวแปรร่วม $J$ และ $K$ เป็นเมทริกซ์ และการเปรียบเทียบเพียงครั้งเดียวระหว่างสองค่าตัดสินทิศทางไม่ได้ ทิศทางขึ้นกับว่าส่วนตกค้างขนาดใหญ่อยู่ที่ใด ดังที่บทความเรื่อง robust standard errorอธิบายไว้

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

การคำนวณเดียวกันใน Stata และ R

สคริปต์จำลองของชุดบทความนี้พิมพ์ข้อมูลทั้งสองชุดเป็นจำนวนนับคงที่ แล้วทำซ้ำแต่ละขั้นด้วยคำสั่งเมทริกซ์ ใน Stata คำสั่ง matrix accum สร้าง $J$ โดยถ่วงผู้ป่วยแต่ละคนด้วย $\hat\mu$ และสร้าง $K$ โดยถ่วงแต่ละคนด้วยส่วนตกค้างกำลังสอง แผงด้านล่างแสดงชุด B สำหรับชุด A บรรทัดเดียวกันพิมพ์ $J = 20$ $K = 2$ และความแปรปรวนแบบแซนด์วิช 0.005

Stata: แบบจำลองแบบอิงแบบจำลอง แล้วจึงถึง bread และ meat

โค้ด Stata g1_sim.do (บรรทัด 57-70 จาก 257)
    * model-based standard error: the Poisson model assumes variance = mean
    poisson admissions if dataset == `d', nolog
    canon `k'.b0 4 _b[_cons]
    canon `k'.se_model 4 _se[_cons]
    * bread and meat by hand (one column, the constant)
    predict double mu if dataset == `d', n
    generate double r2 = (admissions - mu)^2 if dataset == `d'
    matrix accum J = one if dataset == `d' [iweight = mu], noconstant
    matrix accum K = one if dataset == `d' [iweight = r2], noconstant
    matrix Ji = invsym(J)
    matrix V = Ji*K*Ji
    matrix list J
    matrix list K
    matrix list V
ผลลัพธ์จากการรัน g1_sim.log
Poisson regression                                      Number of obs =      4
                                                        LR chi2(0)    =   0.00
                                                        Prob > chi2   =      .
Log likelihood = -13.414897                             Pseudo R2     = 0.0000

------------------------------------------------------------------------------
  admissions | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
       _cons |   1.609438   .2236068     7.20   0.000     1.171177    2.047699
------------------------------------------------------------------------------
CANON g1.b.b0 1.6094
CANON g1.b.se_model 0.2236
(4 missing values generated)
(4 missing values generated)
(obs=20)
(obs=64)

symmetric J[1,1]
     one
one   20

symmetric K[1,1]
     one
one   64

symmetric V[1,1]
     one
one  .16
ข้อมูลตัวอย่างคำนวณด้วยมือ ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ของสคริปต์ ชื่อไฟล์และเลขบรรทัดบอกเพียงตำแหน่งของข้อความที่ตัดมา บรรทัดเหล่านี้รันหนึ่งครั้งต่อชุดข้อมูล และผลลัพธ์ที่แสดงเป็นของชุด B ผลลัพธ์ให้ standard error แบบอิงแบบจำลอง 0.2236 แล้วจึง $J = 20$ $K = 64$ และเมทริกซ์ V ซึ่งเป็นความแปรปรวนแบบแซนด์วิช 0.16 ในโค้ด Ji คือส่วนผกผันของ $J$ (obs=20) และ (obs=64) คือผลรวมถ่วงน้ำหนัก $J$ และ $K$ บรรทัดที่เป็น missing values สองบรรทัดปรากฏเพราะ predict และ generate เติมเฉพาะแถวของชุดข้อมูลปัจจุบัน บรรทัดที่ขึ้นต้นด้วย CANON มาจากตัวช่วยเล็ก ๆ ในสคริปต์ที่สะท้อนผลแต่ละค่า ให้อ่านตัวเลขที่ท้ายบรรทัด

R: การประมาณเดียวกัน bread และ meat และ vcovHC()

โค้ด R g1_sim_r.R (บรรทัด 55-74 จาก 205)
  # model-based standard error: the Poisson model assumes variance = mean
  fit <- glm(admissions ~ 1, family = poisson, data = s)
  print(summary(fit)$coefficients)
  canon(paste0(k, ".b0"), coef(fit)[[1]])
  canon(paste0(k, ".se_model"), sqrt(vcov(fit)[1, 1]))
  # bread and meat by hand (one column, the constant)
  bm <- bread_meat(matrix(1, n, 1), y, fitted(fit))
  print(bm)
  canon(paste0(k, ".bread"), bm$J[1, 1])
  canon(paste0(k, ".meat"), bm$K[1, 1])
  canon(paste0(k, ".v_model"), bm$Ji[1, 1], 6)
  canon(paste0(k, ".v_hc0"), bm$V[1, 1], 6)
  canon(paste0(k, ".se_hc0"), sqrt(bm$V[1, 1]))
  # Stata's robust standard error: the sandwich package's HC0 times n/(n - 1)
  canon(paste0(k, ".se_robust"), sqrt(sandwich(fit)[1, 1] * n / (n - 1)))
  canon(paste0(k, ".robust_factor"), n / (n - 1))
  # the same HC0 variance from sandwich::vcovHC() (for a GLM it equals sandwich(fit) and the hand value above)
  V_hc0 <- sandwich::vcovHC(fit, type = "HC0")
  print(V_hc0)
  stopifnot(isTRUE(all.equal(V_hc0[1, 1], bm$V[1, 1])))
ผลลัพธ์จากการรัน g1_sim_r.log
            Estimate Std. Error  z value     Pr(>|z|)
(Intercept) 1.609438  0.2236067 7.197629 6.126851e-13
CANON g1.b.b0 1.6094
CANON g1.b.se_model 0.2236
$J
     [,1]
[1,]   20

$K
     [,1]
[1,]   64

$Ji
     [,1]
[1,] 0.05

$V
     [,1]
[1,] 0.16

CANON g1.b.bread 20.0000
CANON g1.b.meat 64.0000
CANON g1.b.v_model 0.050000
CANON g1.b.v_hc0 0.160000
CANON g1.b.se_hc0 0.4000
CANON g1.b.se_robust 0.4619
CANON g1.b.robust_factor 1.3333
            (Intercept)
(Intercept)        0.16
ข้อมูลตัวอย่างคำนวณด้วยมือ ข้อความที่ตัดมาจากสคริปต์จำลองฉบับ R ของชุดบทความนี้และผลลัพธ์สำหรับชุด B บรรทัดเหล่านี้รันหนึ่งครั้งต่อชุดข้อมูลภายในลูป s เก็บสี่แถวของชุดข้อมูลหนึ่งชุด ฟังก์ชัน bread_meat() ซึ่งนิยามไว้ก่อนหน้าในสคริปต์ คืนค่า $J$ $K$ ส่วนผกผันของ bread คือ Ji และความแปรปรวนแบบแซนด์วิช V จากนั้น sandwich::vcovHC(fit, type = "HC0") พิมพ์ความแปรปรวน HC0 ค่าเดียวกัน 0.16 หากไม่ใส่ type = "HC0" แล้ว vcovHC() จะคืนรุ่นปรับสำหรับตัวอย่างเล็กอีกรุ่นหนึ่ง บรรทัดที่ขึ้นต้นด้วย CANON มาจากตัวช่วยเล็ก ๆ ที่สะท้อนผลแต่ละค่า สำหรับบรรทัด robust สคริปต์คูณ HC0 ด้วย $n/(n - 1)$ ให้ตรงกับ Stata ดังที่หัวข้อถัดไปอธิบาย

ทำไม Stata พิมพ์ robust standard error ที่ใหญ่กว่า

ประมาณชุด B ด้วย vce(robust) แล้ว Stata พิมพ์ standard error 0.4619 ไม่ใช่ 0.400 option นี้สั่งให้ Stata ประมาณความแปรปรวนแบบ robust (sandwich) [3] สำหรับคำสั่งที่ประมาณด้วยวิธีภาวะน่าจะเป็นสูงสุด (maximum likelihood) เช่น poisson หรือ logistic Stata คูณความแปรปรวนนั้นด้วย $n/(n - 1)$ ค่าที่คำนวณด้วยมือข้างต้นจึงเรียกว่า HC0 คือแซนด์วิชที่ไม่มีตัวคูณนั้น

เมื่อมีผู้ป่วยสี่คน ตัวคูณนี้ใหญ่

$$n/(n - 1) = 4/3 = 1.333$$

ความแปรปรวนเพิ่มขึ้นด้วยตัวคูณ 1.333 standard error เพิ่มขึ้นด้วยรากที่สองของตัวคูณนั้น

$$\sqrt{4/3} = 1.155$$

standard error จึงเพิ่มขึ้นด้วยตัวคูณ 1.155 ชุด A กลายเป็น $0.071 \times 1.155 = 0.082$ และชุด B กลายเป็น $0.400 \times 1.155 = 0.462$ ค่าเหล่านี้คือค่าที่ Stata พิมพ์ ปัดเป็นทศนิยมสามตำแหน่ง การรันจึงยืนยันตัวคูณนี้ เมื่อมีโรงพยาบาล 100 แห่ง ตัวคูณนี้สูงกว่า 1 เพียงเล็กน้อย

Stata: การประมาณเดียวกันด้วย vce(robust)

โค้ด Stata g1_sim.do (บรรทัด 76-77 จาก 257)
    * Stata's robust standard error: the same sandwich times n/(n - 1)
    poisson admissions if dataset == `d', vce(robust) nolog
ผลลัพธ์จากการรัน g1_sim.log
Poisson regression                                      Number of obs =      4
                                                        Wald chi2(0)  =      .
                                                        Prob > chi2   =      .
Log pseudolikelihood = -13.414897                       Pseudo R2     = 0.0000

------------------------------------------------------------------------------
             |               Robust
  admissions | Coefficient  std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
       _cons |   1.609438   .4618802     3.48   0.000     .7041693    2.514706
------------------------------------------------------------------------------
ข้อมูลตัวอย่างคำนวณด้วยมือ ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์สำหรับชุด B สัมประสิทธิ์ไม่เปลี่ยน robust standard error 0.4619 คือค่า HC0 0.400 คูณรากที่สองของ 4/3

ช่วงเชื่อมั่น: ศูนย์กลางเดียวกัน ความกว้างต่างกัน

กลับไปที่โรงพยาบาล 100 แห่งในตารางตอนต้น จำนวนนับของพวกเขาแปรปรวนตั้งแต่ 0 ถึง 10 โดยมีความแปรปรวนเชิงประจักษ์ 18 เทียบกับค่าเฉลี่ย 5 ส่วน meat $K$ คือ 1,800 เทียบกับ bread $J$ ที่ 500 แซนด์วิชจึงทำให้ standard error กว้างขึ้น standard error แบบ HC0 คือ $\sqrt{1800}/500 = 0.0849$

vce(robust) ของ Stata เพิ่มตัวคูณ $n/(n - 1)$ และพิมพ์ 0.0853 ซึ่งเป็น 1.91 เท่าของค่าแบบอิงแบบจำลอง 0.0447 ช่วงเชื่อมั่น 95% ทั้งสองช่วงมีศูนย์กลางที่สัมประสิทธิ์เดียวกัน 1.6094 และช่วงแบบ robust กว้างเป็น 1.91 เท่า บนมาตรวัดลอการิทึม ช่วงนี้ไปตั้งแต่ 1.4423 ถึง 1.7766 เทียบกับ 1.5218 ถึง 1.6971 การยกกำลังด้วยเลขชี้กำลังกับขีดจำกัดทั้งสองให้ขีดจำกัดของจำนวนนับเฉลี่ย ซึ่งยังคงเป็น 5 ครั้งต่อวัน

กลุ่มโรงพยาบาลที่คงที่อีก 100 แห่งมีค่าเฉลี่ยเท่ากัน แต่จำนวนนับมีเพียง 4, 5 หรือ 6 ความแปรปรวนเชิงประจักษ์ของกลุ่มนี้คือ 0.5 ช่วงเชื่อมั่นแบบ robust ของมันคือ 1.5816 ถึง 1.6373 จึงแคบกว่าช่วงแบบอิงแบบจำลองของมันเอง

แบบจำลองเดียวสามารถรวมทั้งสองกลุ่มได้ โดยมีตัวบ่งชี้ (indicator) สำหรับกลุ่มที่แปรปรวน สัมประสิทธิ์ของตัวบ่งชี้คือลอการิทึมของอัตราส่วนอัตราอุบัติการณ์ (rate ratio) คืออัตราส่วนของจำนวนนับเฉลี่ยต่อวันของสองกลุ่ม เมื่อค่าเฉลี่ยเท่ากัน rate ratio เป็น 1.00 และมีเพียงความกว้างของช่วงที่ขึ้นกับ standard error ช่วงแบบ robust ของมันกว้างกว่า เพราะความกระจายส่วนเกินของกลุ่มที่แปรปรวนมากกว่าส่วนที่ขาดของกลุ่มที่คงที่

ช่วงเชื่อมั่นแบบอิงแบบจำลองและแบบ robust ในโรงพยาบาลสองกลุ่ม

ข้อมูลจำลอง โรงพยาบาลสองกลุ่ม กลุ่มละ 100 แห่ง แห่งละหนึ่งวัน ค่าเฉลี่ย 5 รายต่อวันเท่ากันทั้งสองกลุ่ม ค่าประมาณไม่เปลี่ยน มีเพียงช่วงเชื่อมั่น 95% ที่เปลี่ยน
ปริมาณค่าประมาณCI 95% แบบอิงแบบจำลองCI 95% แบบ robust
กลุ่มที่แปรปรวน สัมประสิทธิ์ ln(ค่าเฉลี่ย)1.60941.5218 ถึง 1.69711.4423 ถึง 1.7766
กลุ่มที่คงที่ สัมประสิทธิ์ ln(ค่าเฉลี่ย)1.60941.5218 ถึง 1.69711.5816 ถึง 1.6373
กลุ่มที่คงที่ ค่าเฉลี่ยจำนวนผู้ป่วยรับใหม่ต่อวัน54.58 ถึง 5.464.86 ถึง 5.14
กลุ่มที่แปรปรวนเทียบกับกลุ่มที่คงที่ ลอการิทึมของ rate ratio0-0.1240 ถึง 0.1240-0.1690 ถึง 0.1690
กลุ่มที่แปรปรวนเทียบกับกลุ่มที่คงที่ rate ratio1.000.88 ถึง 1.130.84 ถึง 1.18

Stata: กลุ่มที่แปรปรวน แบบอิงแบบจำลองและแบบ robust

โค้ด Stata g1_sim.do (บรรทัด 112-129 จาก 257)
    poisson admissions if volatile == `g', nolog
    scalar sc_b = _b[_cons]
    scalar sc_sm = _se[_cons]
    canon `k'.b0 4 _b[_cons]
    canon `k'.se_model 4 _se[_cons]
    predict double mu if volatile == `g', n
    generate double r2 = (admissions - mu)^2 if volatile == `g'
    matrix accum J = one if volatile == `g' [iweight = mu], noconstant
    matrix accum K = one if volatile == `g' [iweight = r2], noconstant
    matrix Ji = invsym(J)
    matrix V = Ji*K*Ji
    canon `k'.bread 4 el(J, 1, 1)
    canon `k'.meat 4 el(K, 1, 1)
    canon `k'.v_model 6 el(Ji, 1, 1)
    canon `k'.v_hc0 6 el(V, 1, 1)
    canon `k'.se_hc0 4 sqrt(el(V, 1, 1))
    canon `k'.ratio_hc0_model 4 sqrt(el(V, 1, 1))/scalar(sc_sm)
    poisson admissions if volatile == `g', vce(robust) nolog
ผลลัพธ์จากการรัน g1_sim.log
Poisson regression                                      Number of obs =    100
                                                        LR chi2(0)    =   0.00
                                                        Prob > chi2   =      .
Log likelihood = -365.2899                              Pseudo R2     = 0.0000

------------------------------------------------------------------------------
  admissions | Coefficient  Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
       _cons |   1.609438   .0447214    35.99   0.000     1.521786     1.69709
------------------------------------------------------------------------------
CANON g1.volatile.b0 1.6094
CANON g1.volatile.se_model 0.0447
(100 missing values generated)
(100 missing values generated)
(obs=500)
(obs=1800)
CANON g1.volatile.bread 500.0000
CANON g1.volatile.meat 1800.0000
CANON g1.volatile.v_model 0.002000
CANON g1.volatile.v_hc0 0.007200
CANON g1.volatile.se_hc0 0.0849
CANON g1.volatile.ratio_hc0_model 1.8974

Poisson regression                                      Number of obs =    100
                                                        Wald chi2(0)  =      .
                                                        Prob > chi2   =      .
Log pseudolikelihood = -365.2899                        Pseudo R2     = 0.0000

------------------------------------------------------------------------------
             |               Robust
  admissions | Coefficient  std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
       _cons |   1.609438   .0852803    18.87   0.000     1.442292    1.776584
------------------------------------------------------------------------------
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์สำหรับกลุ่มที่แปรปรวน บรรทัดเหล่านี้รันหนึ่งครั้งต่อกลุ่มโรงพยาบาล 100 แห่ง ตารางแรกพิมพ์ช่วงเชื่อมั่นแบบอิงแบบจำลอง 1.5218 ถึง 1.6971 ที่ทศนิยมสี่ตำแหน่ง ตารางที่สองพิมพ์ช่วงแบบ robust 1.4423 ถึง 1.7766 ระหว่างสองตาราง (obs=500) และ (obs=1800) คือ bread และ meat และบรรทัดที่ขึ้นต้นด้วย CANON มาจากตัวช่วยเล็ก ๆ ที่สะท้อนผลแต่ละค่า

ผลลัพธ์แบบใช่หรือไม่ใช่: Poisson ดัดแปลง

การคำนวณแบบเดียวกันอธิบายทางเลือกที่พบบ่อยสำหรับผลลัพธ์แบบสองค่า ผลลัพธ์แบบใช่หรือไม่ใช่ที่มีความเสี่ยง $p$ มีความแปรปรวนแบบ Bernoulli (Bernoulli variance) เท่ากับ $p(1 - p)$ ในขณะที่แบบจำลอง Poisson สมมติว่าเท่ากับ $p$ ซึ่งคือค่าเฉลี่ย ที่ $p = 0.40$ ความแปรปรวนแบบ Bernoulli คือ $0.40 \times 0.60 = 0.24$ เทียบกับ Poisson ที่ 0.40 สำหรับความเสี่ยงใดก็ตามระหว่าง 0 ถึง 1 ค่า $p(1 - p)$ ต่ำกว่า $p$

แบบจำลอง Poisson จึงประเมินความแปรปรวนของผลลัพธ์แบบสองค่าสูงเกินไป standard error แบบอิงแบบจำลองของมันมักใหญ่เกินไป และแซนด์วิชอ่านความกระจายที่เล็กกว่านั้นจากข้อมูลPoisson ดัดแปลง (modified Poisson regression) ใช้คู่นี้พอดี [4] วิธีนี้ประมาณแบบจำลอง Poisson ที่มี log link สำหรับ risk ratio และเอา standard error จากแซนด์วิช

ชุดข้อมูลจำลองมีทารกแรกเกิด 200 คน ครึ่งหนึ่งได้รับการฝากครรภ์ (antenatal care, ANC) ไม่เพียงพอ ภาวะเจ็บป่วยของทารกแรกเกิดภายในสี่สัปดาห์หลังคลอดมีความเสี่ยง 0.40 หลังได้รับ ANC ไม่เพียงพอ และ 0.20 หลังได้รับ ANC เพียงพอ การประมาณแบบ Poisson ทั้งสองแบบให้ risk ratio 2.00 คือสัมประสิทธิ์ 0.6931 บนมาตรวัดลอการิทึม standard error แบบอิงแบบจำลองคือ 0.2739 ส่วนแซนด์วิชให้ 0.2345 แบบ HC0 และ 0.2351 จาก vce(robust)

ในกรณีนี้ robust standard error เป็นค่าที่เล็กกว่า ตรงตามที่การคำนวณแบบ Bernoulli ทำนายไว้ แบบจำลอง log-binomial (log-binomial model) สร้างแบบจำลองให้ลอการิทึมของความเสี่ยงและมีความแปรปรวนแบบ Bernoulli อยู่ในตัว มันให้ risk ratio เดียวกันคือ 2.00 และ standard error 0.2345 ซึ่งเป็นค่า HC0 บนมาตรวัดลอการิทึม ช่วงเชื่อมั่น 95% ของสัมประสิทธิ์ Poisson แคบลงจาก 0.1564 ถึง 1.2299 (แบบอิงแบบจำลอง) เป็น 0.2323 ถึง 1.1540 (แบบ robust)

การถดถอยโลจิสติกให้ odds ratio 2.67 แทน เพราะสร้างแบบจำลองให้ log odds ทั้งสองอัตราส่วนเป็นการเปรียบเทียบที่ไม่ได้ปรับของทารกแรกเกิด 200 คนกลุ่มเดียวกัน odds ratio อยู่ห่างจาก 1 มากกว่าเพราะผลลัพธ์พบบ่อย ไม่ใช่เพราะตัวกวนบทความเรื่อง risk ratio เมื่อผลลัพธ์พบบ่อยอธิบายว่าเมื่อใดควรเลือก Poisson ดัดแปลง และควรลองอะไรก่อน

ผลลัพธ์แบบสองค่าหนึ่งตัว แบบจำลองสามแบบ

ข้อมูลจำลอง ทารกแรกเกิด 200 คน การประมาณแบบ Poisson ใช้สัมประสิทธิ์เดียวกัน และแซนด์วิชทำให้ช่วงเชื่อมั่นแคบลง การถดถอยโลจิสติกประมาณ odds ratio ซึ่งเป็นมาตรวัดคนละชนิด
แบบจำลองมาตรวัดค่าประมาณstandard error ของสัมประสิทธิ์CI 95%
Poisson แบบอิงแบบจำลองRisk ratio2.000.27391.17 ถึง 3.42
Poisson แซนด์วิช HC0 ด้วยคำสั่งเมทริกซ์Risk ratio2.000.23451.26 ถึง 3.17
Poisson ดัดแปลง vce(robust)Risk ratio2.000.23511.26 ถึง 3.17
การถดถอยโลจิสติกOdds ratio2.670.32271.42 ถึง 5.02

Stata: Poisson ดัดแปลงด้วย vce(robust)

โค้ด Stata g1_sim.do (บรรทัด 240-241 จาก 257)
* modified Poisson: the same coefficient with Stata's robust (sandwich) standard error
poisson morbidity inadequate_anc, irr vce(robust) nolog
ผลลัพธ์จากการรัน g1_sim.log
. * modified Poisson: the same coefficient with Stata's robust (sandwich) standard error
. poisson morbidity inadequate_anc, irr vce(robust) nolog

Poisson regression                                      Number of obs =    200
                                                        Wald chi2(1)  =   8.69
                                                        Prob > chi2   = 0.0032
Log pseudolikelihood = -128.84039                       Pseudo R2     = 0.0257

--------------------------------------------------------------------------------
               |               Robust
     morbidity |        IRR   std. err.      z    P>|z|     [95% conf. interval]
---------------+----------------------------------------------------------------
inadequate_anc |          2   .4702186     2.95   0.003      1.26155    3.170702
         _cons |         .2   .0401004    -8.03   0.000     .1350089    .2962767
--------------------------------------------------------------------------------
Note: _cons estimates baseline incidence rate.
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ เมื่อใช้ irr Stata พิมพ์อัตราส่วน คือ 2 คอลัมน์ standard error อ้างถึงตัวอัตราส่วนเอง คือ robust standard error ของสัมประสิทธิ์ 0.2351 คูณ 2 หัวตารางเขียน IRR ซึ่งเป็นป้ายของ Stata สำหรับ incidence rate ratio เมื่อผลลัพธ์เป็นแบบสองค่าและติดตามเท่ากัน อัตราส่วนนั้นคือ risk ratio แถว _cons คือ 0.2 เป็นความเสี่ยงหลังได้รับ ANC เพียงพอ ไม่ว่าหมายเหตุของ Stata ใต้ตารางจะเรียกว่าอะไร

Stata: การถดถอยโลจิสติกเพื่อเปรียบเทียบ

โค้ด Stata g1_sim.do (บรรทัด 248-249 จาก 257)
* logistic regression for contrast: an odds ratio, not a risk ratio
logistic morbidity inadequate_anc, nolog
ผลลัพธ์จากการรัน g1_sim.log
. * logistic regression for contrast: an odds ratio, not a risk ratio
. logistic morbidity inadequate_anc, nolog

Logistic regression                                     Number of obs =    200
                                                        LR chi2(1)    =   9.66
                                                        Prob > chi2   = 0.0019
Log likelihood = -117.34141                             Pseudo R2     = 0.0395

--------------------------------------------------------------------------------
     morbidity | Odds ratio   Std. err.      z    P>|z|     [95% conf. interval]
---------------+----------------------------------------------------------------
inadequate_anc |   2.666666   .8606626     3.04   0.002     1.416591    5.019872
         _cons |   .2500001      .0625    -5.55   0.000      .153158    .4080755
--------------------------------------------------------------------------------
Note: _cons estimates baseline odds.
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์จำลองของชุดบทความนี้และผลลัพธ์ ผลลัพธ์และสิ่งสัมผัสเดียวกันให้ odds ratio 2.67 ซึ่งเป็นมาตรวัดคนละชนิดกับ risk ratio 2.00

สิ่งที่แซนด์วิชแก้ได้ และสิ่งที่จะตามมา

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

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

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

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

  • "robust standard error ใหญ่กว่าเสมอ"

    สำหรับผลลัพธ์แบบสองค่าในทารกแรกเกิด 200 คน robust standard error 0.2351 ต่ำกว่าค่าแบบอิงแบบจำลอง 0.2739 ตัวอย่างคำนวณด้วยมือก็ชี้ไปทางเดียวกัน standard error แบบ HC0 ของชุด A คือ 0.071 เทียบกับ 0.224 แต่ผู้ป่วยสี่คนแสดงได้เพียงการคำนวณ

    วิธีแก้: แซนด์วิชขยับ standard error ได้ทั้งสองทาง ในที่นี้ค่าจะเล็กลงเมื่อจำนวนนับแปรปรวนน้อยกว่าที่แบบจำลอง Poisson สมมติ และใหญ่ขึ้นเมื่อแปรปรวนมากกว่า

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

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

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

  • "vce(robust) ของ Stata พิมพ์แซนด์วิช HC0"

    สำหรับคำสั่งภาวะน่าจะเป็นสูงสุด เช่น poisson Stata คูณความแปรปรวนแบบ HC0 ด้วย n/(n - 1) เมื่อมีผู้ป่วยสี่คน ตัวคูณนี้ทำให้ standard error เพิ่มขึ้นด้วยตัวคูณ 1.155

    วิธีแก้: ติดป้ายค่าที่คำนวณด้วยมือว่า HC0 หลังคำสั่งภาวะน่าจะเป็นสูงสุด เช่น poisson ให้คาดว่า robust standard error ของ Stata จะใหญ่กว่า ตัวคูณคือรากที่สองของ n/(n - 1)

  • "IRR จาก Poisson ดัดแปลงคือ incidence rate ratio"

    Stata ติดป้ายคอลัมน์ว่า IRR เพราะ option irr เมื่อผลลัพธ์เป็นแบบสองค่าและทุกคนติดตามเท่ากัน ค่าสัมประสิทธิ์ที่ยกกำลังด้วยเลขชี้กำลังคือ risk ratio

    วิธีแก้: เรียกชื่อมาตรวัดของผลจากผลลัพธ์และตัวหารเวลาของมัน ไม่ใช่จากชื่อ option

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

อภิธานศัพท์

Poisson regression (การถดถอยแบบ Poisson)
การถดถอยสำหรับข้อมูลจำนวนนับ ซึ่งสร้างแบบจำลองให้ลอการิทึมของจำนวนนับเฉลี่ย และสมมติว่าความแปรปรวนเท่ากับค่าเฉลี่ย
empirical variance (ความแปรปรวนเชิงประจักษ์)
ค่าเฉลี่ยของระยะห่างกำลังสองของหน่วยสังเกตจากค่าเฉลี่ยของมัน โดยหารด้วย n แทน n - 1
overdispersion (การกระจายเกินกว่าที่แบบจำลองกำหนด)
ความกระจายของจำนวนนับที่มากกว่าที่แบบจำลอง Poisson สมมติ คือความแปรปรวนเกินค่าเฉลี่ย
underdispersion (การกระจายน้อยกว่าที่แบบจำลองกำหนด)
ความกระจายของจำนวนนับที่น้อยกว่าที่แบบจำลอง Poisson สมมติ คือความแปรปรวนต่ำกว่าค่าเฉลี่ย
model-based standard error (standard error แบบอิงแบบจำลอง)
standard error ที่ได้จากความแปรปรวนซึ่งแบบจำลองสมมติไว้ เช่นความแปรปรวนเท่ากับค่าเฉลี่ยในการถดถอยแบบ Poisson
sandwich estimator (ตัวประมาณแบบแซนด์วิช)
การประมาณความแปรปรวนที่คงสัมประสิทธิ์ไว้ แต่อ่านความกระจายจากข้อมูล คือส่วนผกผันของ bread, meat, ส่วนผกผันของ bread standard error ของมันคือ robust standard error
HC0 (HC0)
แซนด์วิชพื้นฐานที่ไม่มีตัวคูณปรับสำหรับตัวอย่างเล็ก สำหรับคำสั่งภาวะน่าจะเป็นสูงสุด vce(robust) ของ Stata คูณความแปรปรวนของมันด้วย n/(n - 1)
score contribution (score contribution ของแต่ละหน่วยสังเกต)
ส่วนของหน่วยสังเกตหนึ่งในสมการประมาณค่า ในแบบจำลอง Poisson ที่มี log link คือค่าตัวแปรร่วมคูณส่วนตกค้าง เมื่อมีเฉพาะจุดตัดแกน ก็คือส่วนตกค้างนั้นเอง
bread (ส่วน bread ของ sandwich estimator)
ตัวประกอบด้านนอกของแซนด์วิช J คือสมการประมาณค่าเปลี่ยนแรงเพียงใดตามสัมประสิทธิ์ ในที่นี้คือ n คูณค่าเฉลี่ยที่แบบจำลองคาด
meat (ส่วน meat ของ sandwich estimator)
ตัวประกอบตรงกลางของแซนด์วิช K คือผลรวมของ score contribution กำลังสอง ซึ่งอ่านจากข้อมูล
Bernoulli variance (ความแปรปรวนแบบ Bernoulli)
ความแปรปรวน p(1 - p) ของผลลัพธ์แบบใช่หรือไม่ใช่ที่มีความน่าจะเป็น p ซึ่งต่ำกว่าค่า Poisson คือ p เสมอเมื่อ p อยู่ระหว่าง 0 ถึง 1
log-binomial model (แบบจำลอง log-binomial)
การถดถอยสำหรับผลลัพธ์แบบใช่หรือไม่ใช่ที่สร้างแบบจำลองให้ลอการิทึมของความเสี่ยง โดยมีความแปรปรวนแบบ Bernoulli อยู่ในตัว และประมาณ risk ratio ได้โดยตรง
modified Poisson regression (Poisson ดัดแปลง)
การถดถอยแบบ Poisson ของผลลัพธ์แบบสองค่าที่ใช้ standard error แบบแซนด์วิช ใช้ประมาณ risk ratio
rate ratio (อัตราส่วนอัตราอุบัติการณ์)
อัตราส่วนของจำนวนนับเฉลี่ยต่อหน่วยเวลาสองค่า Stata ติดป้ายว่า IRR ซึ่งย่อจาก incidence rate ratio

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

  1. Huber PJ. The behavior of maximum likelihood estimates under nonstandard conditions. In: Proceedings of the Fifth Berkeley Symposium on Mathematical Statistics and Probability, Vol. 1. University of California Press; 1967. p. 221-233. https://projecteuclid.org/euclid.bsmsp/1200512988
  2. White H. A heteroskedasticity-consistent covariance matrix estimator and a direct test for heteroskedasticity. Econometrica. 1980;48(4):817-838. doi:10.2307/1912934 https://doi.org/10.2307/1912934
  3. StataCorp. Stata User's Guide: [U] 20.22. Stata documentation at stata.com (PDF). Accessed 2026-10-11. https://www.stata.com/manuals/u20.pdf
  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. Freedman DA. On the so-called 'Huber sandwich estimator' and 'robust standard errors'. Am Stat. 2006;60(4):299-302. doi:10.1198/000313006X152207 https://doi.org/10.1198/000313006X152207

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

  • robust standard error ไม่เปลี่ยนสัมประสิทธิ์ มีเพียง standard error และช่วงเชื่อมั่นที่ขยับ
  • สำหรับแบบจำลอง Poisson ที่มีเฉพาะจุดตัดแกน bread คือ n คูณค่าเฉลี่ยที่แบบจำลองคาด และ meat คือผลรวมของส่วนตกค้างกำลังสอง ความแปรปรวนแบบ HC0 คือ meat หารด้วย bread ยกกำลังสอง
  • แซนด์วิชทำให้ standard error เล็กลงหรือใหญ่ขึ้นได้ ในตัวอย่างคำนวณด้วยมือได้ 0.071 และ 0.400 เทียบกับค่าแบบอิงแบบจำลอง 0.224 ผู้ป่วยสี่คนแสดงได้เพียงการคำนวณ และน้อยเกินกว่าจะเชื่อ standard error เหล่านี้
  • สำหรับคำสั่งภาวะน่าจะเป็นสูงสุด vce(robust) ของ Stata คูณความแปรปรวนแบบ HC0 ด้วย n/(n - 1) จึงควรติดป้ายค่าที่คำนวณด้วยมือว่า HC0
  • robust standard error ช่วยแก้ค่าคลาดเคลื่อนมาตรฐานเมื่อข้อสมมติเรื่องความแปรปรวนผิด แต่ไม่ได้แก้แบบจำลองค่าเฉลี่ยที่ผิด และสัมประสิทธิ์ที่ลำเอียงก็ยังคงลำเอียงอยู่

อ่านต่อในวิกิ: [[heteroskedasticity-robust-standard-errors-th]] [[risk-regression-models-epidemiology-th]] [[choosing-vce-robust-cluster-standard-errors-th]]

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

ความคิดเห็น

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

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