ทำความเข้าใจ VCE: Robust Standard Error, Sandwich Estimator และ vce(cluster id)

On this page
Read the English version
บทคัดย่อ
Regression coefficient กับความไม่แน่นอนของมันมาจากการคำนวณสองส่วนที่แยกกัน และออปชัน vce() ของ Stata เปลี่ยนเฉพาะส่วนที่สอง Standard Error ไม่ใช่ความกระจายของข้อมูล: เมื่อ Variance เท่ากับ 18 จากโรงพยาบาล 100 แห่ง Standard Error ของค่าเฉลี่ยเท่ากับ 0.4243 Stata ประมาณ Variance-Covariance Matrix หรือ VCE โดย Standard Error คือรากที่สองของค่าบนแนวทแยง และต้องใช้ Covariance ในนั้นทุกครั้งที่รวม coefficients เข้าด้วยกัน Model-based VCE เชื่อ Variance ของ Model ส่วน Robust Sandwich วาง Meat ที่สร้างจาก Squared residuals ไว้ระหว่าง Bread ที่กลับค่าแล้วสองชุด เมื่อคำนวณด้วยมือสำหรับโรงพยาบาล 100 แห่ง Intercept-only Poisson Model ให้ Model-based SE เท่ากับ 0.0447 และ Robust SE เท่ากับ 0.0849 โดย coefficient เท่าเดิม ใน Modified Poisson Regression สำหรับ Binary outcome Robust SE อาจเป็นค่าที่เล็กกว่า บทความนี้ยังเปรียบเทียบ vce(robust) กับ vce(cluster id) แสดงสิ่งที่ Robust SE แก้ไม่ได้ และให้ประโยคสำหรับส่วน Methods และ Results
Coefficient เท่าเดิม แต่ความไม่แน่นอนต่างกัน
ทีมวิจัยทีมหนึ่งนับจำนวนผู้ป่วยที่ Admit ต่อวันในโรงพยาบาล 100 แห่ง แล้ว Fit Poisson Model ใน Stata พร้อม vce(robust) เพราะงานครั้งก่อนก็ใช้แบบนี้ อีก Dataset หนึ่งติดตามผู้ป่วยกลุ่มเดิมผ่านการ Admit หลายครั้ง และโค้ดของมันเขียนว่า vce(cluster patient_id) หลายคนเข้าใจทั้งสองคำสั่งเพียงว่าเป็นคำสั่งสำหรับปรับ Standard Error โดยไม่ทราบว่าทำไมต้องปรับ หรือเกิดอะไรขึ้นภายใน Model
บทความนี้จะอธิบายตั้งแต่ Variance, Standard Error, Variance-Covariance Estimator (VCE), Model-based SE, Robust SE และ Sandwich Estimator ไปจนถึงการประยุกต์กับ Poisson Regression, Modified Poisson Regression และ Clustered Data
ทำไมเราต้องมี Standard Error
สมมติว่าเราต้องการศึกษาจำนวนผู้ป่วยที่ Admit ต่อวันในโรงพยาบาล 100 แห่ง เมื่อเก็บข้อมูลครบแล้ว พบว่าจำนวน Admit เฉลี่ยเท่ากับ 5 คนต่อวัน
$$\bar Y = 5$$แต่ค่าเฉลี่ยเพียงค่าเดียวไม่ได้บอกว่าข้อมูลของแต่ละโรงพยาบาลแตกต่างกันมากแค่ไหน ลองพิจารณาข้อมูลสองชุดที่มี Mean เท่ากัน Dataset A กระจายตัวน้อย: Mean 5, Variance 1 ส่วน Dataset B กระจายตัวมาก: Mean 5, Variance 16 รูปที่ 1 ซึ่งแสดงเป็นตัวเลขในตารางด้านล่าง แสดงโรงพยาบาลชุดละแปดแห่ง เพื่อให้เห็นรูปแบบการกระจาย
ถ้าเราเก็บข้อมูลใหม่จากโรงพยาบาลอีก 100 แห่ง ค่าเฉลี่ยที่ประมาณได้จากประชากรแบบ B มีแนวโน้มเปลี่ยนแปลงระหว่างตัวอย่างมากกว่าประชากรแบบ A ภายใต้สมมติฐานว่าหน่วยข้อมูลเป็นอิสระและมีการแจกแจงเหมือนกันภายในแต่ละประชากร นี่คือเหตุผลที่ต้องมี Standard Error
รูปที่ 1: Mean เท่ากัน แต่ความกระจายต่างกัน
| Dataset | จำนวน Admit ต่อวัน แสดงแปดโรงพยาบาล | Mean | Variance |
|---|---|---|---|
| A กระจายตัวน้อย | 4, 6, 4, 6, 4, 6, 4, 6 | 5 | 1 |
| B กระจายตัวมาก | 1, 9, 1, 9, 1, 9, 1, 9 | 5 | 16 |
Variance ต่างจาก Standard Error อย่างไร
Variance ใช้อธิบายความกระจายของข้อมูล ส่วน Standard Error (SE) ใช้อธิบายความไม่แน่นอนของค่าประมาณจากการสุ่มตัวอย่างซ้ำ ตัวอย่างเช่น หากมี $n$ observations ที่เป็นอิสระกัน และแต่ละตัวมี Variance เท่ากับ $\sigma^2$ Variance ของค่าเฉลี่ยคือ
$$Var(\bar Y) = \frac{\sigma^2}{n}$$ดังนั้น
$$\boxed{SE(\bar Y) = \sqrt{\frac{\sigma^2}{n}}}$$สมมติว่าจำนวน Admit ของโรงพยาบาล 100 แห่งมี Mean เท่ากับ 5 และ Variance เท่ากับ 18
$$SE(\bar Y) = \sqrt{\frac{18}{100}} = 0.4243$$ความหมายคือ ค่าเฉลี่ยที่ประมาณได้มี Sampling uncertainty ประมาณ 0.4243 ซึ่งวัดบน scale เดียวกับจำนวน Admit ค่า 0.4243 ไม่ใช่ Standard Deviation ของโรงพยาบาลแต่ละแห่ง แต่เป็น Standard Error ของ estimated mean
ทีนี้ให้ Variance เท่าเดิมที่ 18 แต่เพิ่มจำนวนโรงพยาบาลจาก 100 เป็น 400
$$SE(\bar Y) = \sqrt{\frac{18}{400}} = 0.2121$$SE ลดลงประมาณครึ่งหนึ่ง เพราะจำนวน observations เพิ่มขึ้นสี่เท่า จึงต้องแยกให้ได้ว่า จำนวนข้อมูล (sample size) กับความกระจายของข้อมูล (variance) ต่างก็มีผลต่อ Standard Error
VCE คืออะไร
VCE ย่อมาจาก Variance-Covariance Estimator คือวิธีการที่ใช้ประมาณ Variance และ Covariance ของค่าประมาณทางสถิติ ใน Stata เมื่อเราเขียน
poisson admissions treatment age, vce(robust)คำว่า vce(robust) หมายถึง ให้ใช้ Robust Variance-Covariance Estimator ในการประมาณความไม่แน่นอนของ Regression coefficients [1]
สิ่งที่ Stata คำนวณไม่ใช่ SE เพียงค่าเดียว แต่เป็น Variance-Covariance Matrix ของ Regression coefficients ทั้งหมด
ทำไมต้องเป็น Matrix
สมมติเรามี Regression Model
$$g\big(E(Y_i \mid X_i)\big) = \beta_0 + \beta_1 X_i$$โดย $\beta_0$ คือ Intercept และ $\beta_1$ คือ Regression coefficient ของ $X$ จากการวิเคราะห์ เราได้
$$\hat{\boldsymbol\beta} = \begin{pmatrix} \hat\beta_0 \\ \hat\beta_1 \end{pmatrix}$$ค่าประมาณทั้งสองมีความไม่แน่นอนของตัวเอง และยังอาจเปลี่ยนแปลงร่วมกันเมื่อสุ่มข้อมูลใหม่ด้วย VCE จึงต้องประมาณ Matrix ที่มีหน้าตาแบบนี้
$$\boxed{\widehat V = \begin{pmatrix} \widehat{Var}(\hat\beta_0) & \widehat{Cov}(\hat\beta_0, \hat\beta_1) \\ \widehat{Cov}(\hat\beta_1, \hat\beta_0) & \widehat{Var}(\hat\beta_1) \end{pmatrix}}$$| ตำแหน่ง | ความหมาย |
|---|---|
| ซ้ายบน | Estimated variance ของ $\hat\beta_0$ |
| ขวาล่าง | Estimated variance ของ $\hat\beta_1$ |
| นอกแนวทแยง | Estimated covariance ระหว่าง coefficient ทั้งสอง |
จาก VCE สู่ Standard Error
สมมติ Regression ให้ Estimated VCE ดังนี้
$$\widehat V = \begin{pmatrix} 0.040 & -0.010 \\ -0.010 & 0.010 \end{pmatrix}$$เราคำนวณ Standard Error ได้โดยถอดรากของค่าบนแนวทแยง
-
SE ของ Intercept
\[ SE(\hat\beta_0) = \sqrt{0.040} = 0.20 \]
ค่าซ้ายบนคือ Variance ของ Intercept
-
SE ของ coefficient
\[ SE(\hat\beta_1) = \sqrt{0.010} = 0.10 \]
ค่าขวาล่างคือ Variance ของ coefficient ของ X
-
สูตรทั่วไป
\[ \boxed{SE(\hat\beta_j) = \sqrt{\widehat V_{jj}}} \]
SE แต่ละตัวคือรากที่สองของค่าบนแนวทแยงของตัวเอง ค่านอกแนวทแยงไม่ได้ใช้ในขั้นนี้
ผลลัพธ์: SE เท่ากับ 0.20 สำหรับ Intercept และ 0.10 สำหรับ coefficient คือรากที่สองของค่าบนแนวทแยงของ VCE
ทำไมเราต้องเก็บ Covariance ด้วย
สมมติเราต้องการประมาณผลรวมของ coefficients สองตัว $\hat\theta = \hat\beta_0 + \hat\beta_1$ Variance ของผลรวมไม่ใช่การบวก Variance สองตัวอย่างเดียว แต่ต้องรวม Covariance ด้วย
-
Variance ของผลรวม
\[ Var(\hat\theta) = Var(\hat\beta_0) + Var(\hat\beta_1) + 2Cov(\hat\beta_0, \hat\beta_1) \]
พจน์ Covariance ปรากฏสองเท่า
-
แทนค่าจาก Matrix ด้านบน
\[ = 0.040 + 0.010 + 2(-0.010) = 0.030 \]
Covariance ที่ติดลบทำให้ผลรวมผันผวนน้อยกว่าที่ Variance สองตัวบอก
-
SE ของผลรวม
\[ SE(\hat\theta) = \sqrt{0.030} = 0.1732 \]
รากที่สองของ Variance ของผลรวม
ผลลัพธ์: SE ของผลรวมเท่ากับ 0.1732
ถ้าเรามีแค่ SE ของแต่ละ coefficient โดยไม่มี Covariance ก็ไม่สามารถคำนวณ Standard Error ของผลรวมนี้ได้อย่างถูกต้อง นี่คือเหตุผลว่าทำไม Stata ต้องเก็บ Matrix ทั้งหมด ไม่ใช่เก็บ Standard Error แยกกันอย่างเดียว
VCE อยู่ตรงไหนใน Stata
หลังจาก Fit Regression Model แล้ว Stata จะเก็บผลสำคัญไว้ใน object ตามตารางด้านล่าง สามารถเรียกดูได้ด้วยคำสั่ง
matrix list e(b)
matrix list e(V)
estat vceถ้า Model มี 4 coefficients รวม Intercept แล้ว e(b) จะมีขนาด 1 × 4 ขณะที่ e(V) มีขนาด 4 × 4 รายละเอียดนี้เป็นโครงสร้างมาตรฐานของ Stata estimation results [1]
| Stata object | ความหมาย |
|---|---|
e(b) | Vector ของ estimated coefficients |
e(V) | Estimated Variance-Covariance Matrix |
_b[varname] | Estimated coefficient ของตัวแปรที่ระบุ |
_se[varname] | Estimated Standard Error ของ coefficient นั้น |
estat vce | แสดง Variance-Covariance Matrix |
VCE เกี่ยวข้องกับ Confidence Interval และ P-value อย่างไร
ให้สมมติว่าการทำ Regression ได้ $\hat\beta_1 = 0.40$ และ Standard Error เท่ากับ 0.10 เราสามารถคำนวณ Wald 95% Confidence Interval บน coefficient scale ด้วย Normal approximation
$$95\%\ CI = \hat\beta_1 \pm 1.96\,SE(\hat\beta_1)$$$$= 0.40 \pm 1.96(0.10)$$$$\boxed{95\%\ CI = (0.204,\ 0.596)}$$ถ้าปรับมาใช้ Robust VCE แล้ว SE เปลี่ยนเป็น 0.19 โดย coefficient ยังคงเป็น 0.40
$$95\%\ CI = 0.40 \pm 1.96(0.19)$$$$\boxed{95\%\ CI = (0.028,\ 0.772)}$$รูปที่ 2: coefficient เดียวกัน สองช่วง
| ผลลัพธ์ | Model-based | Robust |
|---|---|---|
| Coefficient | 0.40 | 0.40 |
| SE | 0.10 | 0.19 |
| 95% CI | 0.204 ถึง 0.596 | 0.028 ถึง 0.772 |
| Wald $z = \hat\beta / SE$ | 4.00 | 2.11 |
| Two-sided P-value โดยประมาณ | 0.00006 | 0.035 |
Model-based VCE คืออะไร
ใน Regression Model ทั่วไป Software ต้องมีวิธีประมาณ Variance ของ coefficients วิธีมาตรฐานที่พบบ่อยใน Maximum Likelihood Estimation คือ Model-based VCE ซึ่งใช้ข้อมูลจาก Likelihood และสมมติฐานของ Model รากที่สองของค่าบนแนวทแยงของมันคือ Model-based SE ในหลาย Model เราสามารถประมาณจาก Inverse ของ Observed Information Matrix หรือ Negative Hessian
$$\boxed{\widehat V_{\text{model}} = A^{-1}}$$โดย
$$A = -\frac{\partial^2 \ell(\boldsymbol\beta)}{\partial\boldsymbol\beta\,\partial\boldsymbol\beta^{\top}}\bigg|_{\boldsymbol\beta = \hat{\boldsymbol\beta}}$$นี่เป็นสูตรของ observed-information VCE ไม่ใช่สูตรที่ใช้แทน VCE ทุกชนิดได้โดยไม่มีเงื่อนไข
เพื่อเข้าใจง่ายขึ้น ให้มองว่า Hessian เป็นข้อมูลที่บอกว่า Likelihood เปลี่ยนเร็วเพียงใดเมื่อเราเปลี่ยนค่า Regression coefficient ถ้า Likelihood มีความโค้งมากในบริเวณค่าที่ประมาณได้ ก็มักหมายความว่า coefficient ถูกระบุได้ค่อนข้างแม่นยำ แต่ถ้า Likelihood ค่อนข้างแบน ค่าประมาณ coefficient จะมีความไม่แน่นอนมากขึ้น
ตัวอย่างใน Poisson Regression
สมมติเราสร้าง Poisson Regression Model
$$Y_i \mid X_i \sim \text{Poisson}(\mu_i)$$โดยกำหนด
$$\log(\mu_i) = X_i^{\top}\boldsymbol\beta$$หรือเทียบเท่ากับ $\mu_i = \exp(X_i^{\top}\boldsymbol\beta)$ Poisson distribution มีคุณสมบัติสำคัญคือ
$$\boxed{Var(Y_i \mid X_i) = E(Y_i \mid X_i) = \mu_i}$$แปลว่า Conditional variance เท่ากับ Conditional mean ถ้า Model คาดว่าโรงพยาบาลหนึ่งแห่งมีจำนวน Admit เฉลี่ย 5 คน $E(Y_i \mid X_i) = 5$ Poisson Model ก็จะใช้ $Var(Y_i \mid X_i) = 5$ สำหรับการคำนวณ Model-based uncertainty ภายใต้สมมติฐาน Poisson
แล้วถ้าข้อมูลจริงมี Variance = 18?
กรณีนี้ Conditional variance สูงกว่าค่าเฉลี่ยตาม Poisson assumption
$$Var(Y_i \mid X_i) = 18 > 5$$เรียกว่า Overdispersion เมื่อ Poisson Model ใช้ Variance = 5 แต่ความผันผวนจริงสูงกว่า การคำนวณ Model-based SE อาจประเมินความไม่แน่นอนต่ำเกินไป
ต้องระวังว่า การเปรียบเทียบ Mean และ Variance ของข้อมูลรวมทั้ง Dataset ยังไม่ใช่การพิสูจน์ Conditional Overdispersion เมื่อ Model มี predictors หลายตัว เพราะความแตกต่างของค่าเฉลี่ยระหว่างกลุ่มก็ทำให้ Overall variance สูงขึ้นได้ สิ่งที่เราต้องประเมินคือ Variance ภายใต้เงื่อนไขของ predictors ที่ระบุไว้ใน Model
Robust VCE คืออะไร
Robust VCE เป็นวิธีประมาณ Variance-Covariance Matrix ที่ลดการพึ่งพาสมมติฐานบางส่วนของ Model โดยเฉพาะสมมติฐานเกี่ยวกับ Variance วิธีที่ใช้กันแพร่หลายคือ Huber-White Sandwich Variance Estimator และรากที่สองของค่าบนแนวทแยงของมันคือ Robust (Sandwich) SE [2]
ใน Poisson Regression หาก Conditional mean model ถูกต้อง แต่ Conditional variance ไม่เป็นไปตาม Poisson distribution เรายังสามารถประมาณ Regression coefficients ด้วย Poisson estimating equations และใช้ Robust VCE สำหรับ Statistical inference ได้ แนวคิดนี้เป็นพื้นฐานของ Poisson Pseudo-Maximum Likelihood และ Modified Poisson Regression
เปรียบเทียบ Model-based กับ Robust VCE
| ประเด็น | Model-based Poisson VCE | Robust VCE |
|---|---|---|
| ประมาณอะไร | Variance ของ coefficients | Variance ของ coefficients |
| ใช้ coefficient เดิมหรือไม่ | ใช่ | ใช่ |
| อาศัย $Var(Y \mid X) = \mu$ หรือไม่ | ใช่ | ไม่จำเป็น |
| ใช้ข้อมูล Residual หรือ Score หรือไม่ | ใช้ข้อมูล Model Information | ใช้ Empirical score contributions ด้วย |
| รองรับ Variance misspecification | จำกัด | ได้ภายใต้เงื่อนไขที่เหมาะสม |
| รองรับ observations ที่สัมพันธ์กันโดยอัตโนมัติ | ไม่ | ไม่ ต้องพิจารณา Cluster-robust VCE หรือวิธีอื่น |
Sandwich Estimator คำนวณอย่างไร
เมื่อเข้าใจแล้วว่าเราต้องประมาณ Variance ของ coefficients ขั้นต่อไปคือทำความเข้าใจวิธีคำนวณ Sandwich Estimator มีสูตรพื้นฐานว่า
$$\boxed{\widehat{Var}_{\text{robust}}(\hat{\boldsymbol\beta}) = A^{-1} B A^{-1}}$$สูตรนี้เป็นรูปแบบพื้นฐานสำหรับ independent observations และยังไม่รวม finite-sample correction มันถูกเรียกว่า Sandwich เพราะมีองค์ประกอบสามส่วน
- Bread $A^{-1}$ ด้านซ้าย
- Meat $B$ ตรงกลาง
- Bread $A^{-1}$ ด้านขวา
Bread คืออะไร
สำหรับ Poisson Regression ที่มี Log link
$$A = \sum_{i=1}^{n} \hat\mu_i X_i X_i^{\top}$$โดย $X_i$ คือ Vector ของ predictors รวม Intercept Bread ทำหน้าที่เชื่อมความผันผวนของ Estimating equations เข้ากับความผันผวนของ Estimated coefficients มันสะท้อนความไวของสมการที่ใช้ประมาณ coefficient ต่อการเปลี่ยนแปลงของค่า coefficient นั้น
Meat คืออะไร
ก่อนอื่นต้องรู้จัก Score contribution ของ Observation แต่ละตัว สำหรับ Poisson Regression
$$s_i = X_i(Y_i - \hat\mu_i)$$โดย $Y_i - \hat\mu_i$ คือ Raw residual หรือความแตกต่างระหว่างค่าที่สังเกตได้กับค่าที่ Model ทำนาย จากนั้นนำ Score contribution ของแต่ละ Observation มาสร้าง Meat
$$B = \sum_{i=1}^{n} s_i s_i^{\top}$$แทนสูตร Score ของ Poisson ลงไป
$$\boxed{B = \sum_{i=1}^{n} X_i X_i^{\top}(Y_i - \hat\mu_i)^2}$$สังเกตว่าสูตรนี้ใช้ Squared residual ของแต่ละ observation ดังนั้นหากข้อมูลมีความผันผวนมาก Score contributions ก็สามารถสะท้อนความผันผวนนั้นใน Meat ได้
ทำไม Model-based กับ Robust VCE จึงต่างกัน
ถ้า Poisson variance assumption ถูกต้อง
$$E\big((Y_i - \mu_i)^2 \mid X_i\big) = \mu_i$$ดังนั้นในเชิงค่าคาดหมาย Meat จะสอดคล้องกับ Bread
$$E(B \mid X) \approx A$$Sandwich VCE จึงใกล้เคียงกับ
$$A^{-1} A A^{-1} = A^{-1}$$ซึ่งก็คือ Model-based VCE แต่ถ้า Conditional variance ไม่เป็นไปตาม Poisson assumption
$$E\big((Y_i - \mu_i)^2 \mid X_i\big) \ne \mu_i$$Meat กับ Bread จะไม่จำเป็นต้องเท่ากันอีกต่อไป จึงทำให้
$$A^{-1} B A^{-1} \ne A^{-1}$$นี่คือเหตุผลทางคณิตศาสตร์ว่าทำไม Robust SE จึงแตกต่างจาก Model-based SE Stata ใช้หลักการ Huber-White Sandwich ใน vce(robust) และขยายแนวคิดนี้ไปสู่ Cluster-robust VCE ได้เช่นกัน
Worked Example: คำนวณ Robust SE ด้วยมือทีละขั้น
| จำนวน Admit ต่อวัน ($Y$) | จำนวนโรงพยาบาล | $n_Y(Y - 5)^2$ |
|---|---|---|
| 0 | 20 | 500 |
| 1 | 25 | 400 |
| 5 | 10 | 0 |
| 9 | 25 | 400 |
| 10 | 20 | 500 |
| รวม | 100 | 1,800 |
ห้าขั้นจากตารางสู่ SE สองค่า
Model ที่ใช้คือ Intercept-only Poisson Model ทุก observation จึงมี $X_i = 1$ และ Bread กับ Meat เป็นตัวเลขค่าเดียว
-
Step 1. คำนวณ Mean
\[ \bar Y = \frac{\sum_i Y_i}{n} = 5 \]
ผลรวมคือ 20(0) + 25(1) + 10(5) + 25(9) + 20(10) หารด้วยจำนวนโรงพยาบาล 100 แห่ง
-
Step 2. คำนวณ Empirical Variance
\[ \hat\sigma^2_{\text{empirical}} = \frac{1800}{100} = 18 \]
เพื่อให้ตรงกับสูตร Sandwich แบบยังไม่ปรับ small sample เราจะใช้ Variance ที่หารด้วย n ถ้าใช้ sample variance แบบ unbiased ที่หารด้วย n - 1 จะได้ 1800/99 = 18.1818 ดังนั้นตัวเลข Variance ที่ Stata แสดงจาก summarize อาจไม่เท่ากับ 18 พอดี
-
Step 3. Fit Intercept-only Poisson Model
\[ \hat\beta_0 = \log(5) = 1.6094 \]
Model คือ log(mu_i) = beta_0 เพราะมีเฉพาะ Intercept จึงได้ fitted mean เท่ากับ 5 สำหรับทุกโรงพยาบาล
-
Step 4a. Bread
\[ A = \sum_{i=1}^{n} \hat\mu_i = 100(5) = 500 \]
สำหรับ Intercept-only Poisson Model Bread คือผลรวมของ fitted means
-
Step 4b. Model-based VCE
\[ \widehat V_{\text{model}} = \frac{1}{500} = 0.002 \]
Model-based VCE คือ Inverse ของ Bread
-
Step 4c. Model-based SE
\[ SE_{\text{model}} = \sqrt{0.002} = 0.0447 \]
ถอดราก
-
Step 5a. Meat
\[ B = \sum_{i=1}^{n} (Y_i - \hat\mu)^2 = 1800 \]
เมื่อ X_i = 1 Meat ลดรูปเหลือผลรวมของ Squared residuals ซึ่งก็คือผลรวมของคอลัมน์สุดท้ายในตาราง
-
Step 5b. Sandwich VCE
\[ \widehat V_{\text{robust}} = \frac{B}{A^2} = \frac{1800}{500^2} = 0.0072 \]
Bread, Meat, Bread: A^-1 B A^-1 ในรูปตัวเลขค่าเดียว
-
Step 5c. Robust SE
\[ SE_{\text{robust}} = \sqrt{0.0072} = 0.0849 \]
ถอดราก
-
ตรวจสอบอัตราส่วน
\[ \frac{SE_{\text{robust}}}{SE_{\text{model}}} = \sqrt{\frac{18}{5}} \approx 1.90 \]
Robust SE สูงกว่า Model-based SE ประมาณ 1.90 เท่า: Variance จริงเท่ากับ 18 เทียบกับ Variance 5 ที่ Poisson Model สมมติ
ผลลัพธ์: Model-based SE เท่ากับ 0.0447 และ Robust SE เท่ากับ 0.0849 ทั้งสองวิธียังคงมี Coefficient เท่ากับ 1.6094 ที่เปลี่ยนคือ Estimated variance ของ Coefficient จาก 0.002 เป็น 0.0072
ข้อควรระวัง: ตัวเลข 0.0849 เป็น Uncorrected Sandwich SE ที่ใช้แสดงการคำนวณ ส่วน Stata อาจใช้ Finite-sample multiplier เพิ่มเติม ใน Intercept-only Example นี้ multiplier 100/99 จะทำให้ SE เพิ่มเป็นประมาณ 0.0853 ความแตกต่างนี้ไม่ได้เกิดจากการเปลี่ยน Model แต่เกิดจากการปรับ Variance estimator สำหรับ sample size จำกัด
ทดลองคำนวณด้วย Stata
เราสามารถสร้าง Dataset เดียวกันและทดลองใน Stata ได้โดยไม่ต้องใช้ข้อมูลผู้ป่วยจริง คำสั่งของตัวอย่างคำนวณด้วยมือมีดังนี้
* Create synthetic admission count data
clear
input admissions frequency
0 20
1 25
5 10
9 25
10 20
end
* Expand to 100 independent observations
expand frequency
drop frequency
* Examine the data
count
summarize admissions, detail
* Model 1: Conventional Poisson
poisson admissions
estimates store poisson_model
display "Coefficient = " _b[_cons]
display "Model-based SE = " _se[_cons]
* Model 2: Robust Poisson
poisson admissions, vce(robust)
estimates store poisson_robust
display "Coefficient = " _b[_cons]
display "Robust SE = " _se[_cons]
* Inspect coefficients and VCE
matrix list e(b)
matrix list e(V)
estat vce
* Compare the two models
estimates table poisson_model poisson_robust, b seเมื่อรันแล้วให้สังเกตผลสำคัญตามตารางด้านล่าง
| ผลลัพธ์ | Poisson ปกติ | Robust Poisson |
|---|---|---|
| Estimated log mean | 1.6094 | 1.6094 |
| SE โดยประมาณ | 0.0447 | 0.0853 |
| VCE method | Model-based | Sandwich |
| Predicted mean | 5 | 5 |
Stata: โรงพยาบาล 100 แห่ง แบบ Model-based และ Robust
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
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
------------------------------------------------------------------------------
(obs=500) คือ Bread A และ (obs=1800) คือ Meat B ตารางที่สองใช้ vce(robust): coefficient เท่าเดิม และ SE 0.0853 ซึ่งคือค่าที่คำนวณด้วยมือ 0.0849 หลังคูณ multiplier 100/99 บรรทัดที่ขึ้นต้นด้วย CANON สะท้อนผลลัพธ์แต่ละค่า ให้อ่านตัวเลขท้ายบรรทัดModified Poisson Regression: ทำไมจึงต้องใช้ Robust SE
นี่คืออีกหนึ่งการประยุกต์ที่สำคัญมากใน Clinical Epidemiology คือการประมาณ Risk Ratio (RR) จาก Binary outcome ด้วย Modified Poisson Regression ซึ่งเป็น Log-link Poisson Model ที่ Fit กับ outcome ที่มีค่า 0 หรือ 1 สมมติเราศึกษาความสัมพันธ์ระหว่าง Inadequate Antenatal Care (ANC) กับ Neonatal Morbidity ภายใน 28 วัน Outcome เป็น Binary variable
$$Y_i = \begin{cases} 1 & \text{morbidity} \\ 0 & \text{no morbidity} \end{cases}$$Binary outcome มี Variance เท่าไร
สำหรับ Binary outcome ที่มีโอกาสเกิดเหตุการณ์เท่ากับ $p$
$$E(Y) = p$$แต่ Variance ของมัน คือ Bernoulli variance
$$\boxed{Var(Y) = p(1 - p)}$$ต่างจาก Poisson ที่กำหนด $Var(Y) = p$ ตัวอย่างเช่น หาก Risk เท่ากับ 0.40
| Distribution | Mean | Variance |
|---|---|---|
| Bernoulli | 0.40 | 0.24 |
| Poisson working variance | 0.40 | 0.40 |
ตัวอย่างคำนวณ RR จากข้อมูล Binary
| ANC | Morbidity | No morbidity | Total |
|---|---|---|---|
| Inadequate | 40 | 60 | 100 |
| Adequate | 20 | 80 | 100 |
Risk, Risk Ratio และ Odds Ratio
-
Risk ของ Inadequate ANC
\[ p_1 = \frac{40}{100} = 0.40 \]
ทารก 40 จาก 100 คนเกิด morbidity
-
Risk ของ Adequate ANC
\[ p_0 = \frac{20}{100} = 0.20 \]
ทารก 20 จาก 100 คนเกิด morbidity
-
Risk Ratio
\[ \boxed{RR = \frac{0.40}{0.20} = 2.00} \]
อัตราส่วนของ Risk สองค่า
-
Odds Ratio
\[ \boxed{OR = \frac{40/60}{20/80} = 2.67} \]
อัตราส่วนของ Odds สองค่า เพื่อเปรียบเทียบ
ผลลัพธ์: RR 2.00 และ OR 2.67: RR และ OR ไม่ใช่ค่าเดียวกัน
Model-based SE กับ Robust SE ของ log RR ต่างกันอย่างไร
ในตัวอย่างที่มีเพียง Binary exposure และ independent observations นี้ SE ทั้งสองแบบของ log RR มีสูตรคำนวณโดยตรง
-
Poisson model-based SE
\[ SE_{\text{Poisson}}(\log RR) = \sqrt{\frac{1}{40} + \frac{1}{20}} \]
หนึ่งส่วนจำนวน events ของแต่ละกลุ่ม
-
ค่าที่ได้
\[ \boxed{SE_{\text{Poisson}} = 0.2739} \]
ค่านี้เชื่อ Poisson variance ซึ่งคือ p
-
Robust SE: สูตร
\[ SE_{\text{robust}}(\log RR) \approx \sqrt{\frac{1 - p_1}{n_1 p_1} + \frac{1 - p_0}{n_0 p_0}} \]
สูตรสำหรับ Binary Risk Ratio
-
แทนค่า Risk
\[ = \sqrt{\frac{0.60}{100(0.40)} + \frac{0.80}{100(0.20)}} \]
p1 = 0.40 และ p0 = 0.20 โดยมีทารกกลุ่มละ 100 คน
-
รวมสองพจน์
\[ = \sqrt{0.015 + 0.040} \]
สองพจน์ของผลรวม
-
ค่าที่ได้
\[ \boxed{SE_{\text{robust}} = 0.2345} \]
ครั้งนี้ Robust SE กลับมีค่าน้อยกว่า Model-based SE ที่ 0.2739
-
Robust 95% Confidence Interval
\[ 95\%\ CI_{RR} = \exp\big(\log(2) \pm 1.96(0.2345)\big) \]
สร้างบน log scale แล้วยกกำลังด้วย exp
ผลลัพธ์: RR 2.00, 95% CI 1.26 ถึง 3.17 เมื่อใช้ Robust SE ในที่นี้ Robust SE 0.2345 น้อยกว่า Poisson model-based SE 0.2739
นี่แสดงว่า Robust SE ไม่จำเป็นต้องสูงกว่า Conventional SE เสมอไป เพราะใน Binary example นี้ Bernoulli variance ต่ำกว่า Poisson working variance Sandwich จึงทำให้ SE เล็กลง ค่าทั้งหมดเป็นตัวอย่างสมมติ ไม่ใช่ผลการศึกษาจริง
คำสั่ง Stata สำหรับ Modified Poisson
* Binary outcome: 0 = No morbidity, 1 = Morbidity
* Independent observations
poisson morbidity28 i.inadequate_anc ///
i.age_group i.low_ses i.coverage_gap, ///
irr vce(robust)แม้ Stata จะแสดงหัวตารางว่า IRR ซึ่งย่อมาจาก Incidence Rate Ratio เพราะเป็นคำสั่ง poisson, irr แต่ถ้า Outcome เป็น Binary และ Model กำลังประมาณ Risk ภายใน Follow-up horizon เดียวกัน โดยไม่มี Person-time offset ค่า $\exp(\hat\beta)$ จะถูกตีความเป็น RR ภายใต้ Log-risk mean model ชื่อ IRR ที่ Stata แสดงไม่ได้ทำให้ค่าประมาณกลายเป็น Incidence Rate Ratio โดยอัตโนมัติ
หากใส่ exposure(tmorbidity28) เพื่อใช้ Person-time เป็น denominator โครงสร้าง Mean model จะเปลี่ยนไปเป็น Rate model ซึ่งต้องตีความ effect measure ใหม่
อีกเรื่องที่ต้องระวังคือ Log-link Risk Model อาจทำนายค่าความน่าจะเป็นสูงกว่า 1 ในบาง Covariate profiles ได้ Robust SE ไม่ได้แก้ปัญหานี้
vce(robust) หรือ vce(cluster patient_id)?
จนถึงตอนนี้เรากำลังสมมติว่า Observations ทุกตัวเป็นอิสระจากกัน แต่ข้อมูลทางคลินิกหลายประเภทไม่ได้เป็นอิสระจริง ตัวอย่างเช่น เราศึกษาจำนวน Hospital Admissions ของผู้ป่วย 100 คน โดยผู้ป่วยแต่ละคนมีข้อมูลติดตามหลายครั้ง Observations จากผู้ป่วยคนเดียวกันอาจมีความสัมพันธ์กัน
ถ้าใช้ vce(robust) ธรรมดาโดยปฏิบัติต่อทุกแถวเสมือนเป็น Independent observation เราอาจประเมินความไม่แน่นอนผิด จึงต้องพิจารณา Cluster-robust VCE และ Cluster-robust SE ที่ได้จากมัน
Cluster-robust VCE ทำงานอย่างไร
สำหรับ Robust VCE ปกติ Meat ใช้ Score contribution ของ observation แต่ละตัว
$$B_{\text{robust}} = \sum_{i=1}^{n} s_i s_i^{\top}$$แต่ถ้ามีผู้ป่วยหลายคน และแต่ละคนมีข้อมูลหลายแถว เราจะรวม Score contributions ภายในผู้ป่วยคนเดียวกันก่อน กำหนดให้ $g$ เป็น Cluster ในที่นี้คือ Patient
$$S_g = \sum_{i \in g} s_i$$จากนั้นสร้าง Cluster-level Meat
$$\boxed{B_{\text{cluster}} = \sum_{g=1}^{G} S_g S_g^{\top}}$$จึงได้
$$\widehat V_{\text{cluster}} = A^{-1} B_{\text{cluster}} A^{-1}$$โดยยังไม่ได้แสดง finite-sample corrections แนวคิดนี้ช่วยรองรับความสัมพันธ์ของ Observations ภายใน Cluster โดยมีเงื่อนไขสำคัญสองอย่าง คือ Clusters ต้องมีความเป็นอิสระระหว่างกัน และโดยทั่วไปต้องมีจำนวน Independent clusters มากเพียงพอ [5] วิธีนี้ได้รับการประยุกต์กับ Modified Poisson Regression สำหรับ correlated binary outcomes ด้วย [4]
คำสั่ง Stata
* Independent observations
poisson admissions i.treatment c.age, vce(robust)
* Repeated observations within each patient
poisson admissions i.treatment c.age, ///
vce(cluster patient_id)vce(cluster patient_id) ไม่ได้หมายความว่า Software จะสร้าง Matched pairs, แก้ Confounding หรือเพิ่ม Patient fixed effects มันเปลี่ยนวิธีประมาณ Variance โดยใช้ Cluster เป็นหน่วยอิสระในการคำนวณ Score variability
ถ้าจำนวน Clusters น้อย Cluster-robust SE แบบมาตรฐานอาจให้ Confidence Interval และ P-value ที่ไม่น่าเชื่อถือ ต้องพิจารณา Small-sample adjustments หรือวิธีการอนุมานที่เหมาะสมกับจำนวน Clusters
Stata มี VCE กี่ประเภท
Stata รองรับ VCE หลายรูปแบบ โดยแบบที่ใช้ได้จริงขึ้นอยู่กับ Estimation command [1]
| VCE option | วิธีคิด | ใช้เมื่อใด |
|---|---|---|
vce(oim) | Inverse observed information matrix | Likelihood variance assumptions เหมาะสม |
vce(opg) | Inverse outer product of gradients | Model-based alternative ภายใต้ Information equality |
vce(robust) | Sandwich VCE | ต้องการรองรับ Variance misspecification ใน Independent observations |
vce(cluster id) | Cluster-robust Sandwich VCE | Observations อาจสัมพันธ์กันภายใน Cluster |
vce(bootstrap) | ประมาณ Sampling variability ผ่าน resampling | ต้องการ Bootstrap-based VCE ตาม Design ที่เหมาะสม |
vce(jackknife) | ประมาณ Variance ผ่านการละหน่วยข้อมูลออกทีละหน่วย | ใช้เมื่อ Jackknife เหมาะกับ Estimator และ Design |
OPG, bootstrap และ jackknife
vce(opg) ไม่ได้เท่ากับ Robust Sandwich VCE แม้จะใช้ Score information เช่นกัน เพราะ Robust Sandwich ใช้ทั้ง Bread และ Meat
ส่วน vce(bootstrap) และ vce(jackknife) ไม่ได้เหนือกว่า Robust SE ในทุกกรณี หากใช้กับ Clustered data ก็ต้องกำหนด Resampling unit ให้สอดคล้องกับการออกแบบการศึกษา
ตารางตัดสินใจสำหรับ Clinical Research
| Research question / Data structure | วิธีที่ควรพิจารณา |
|---|---|
| Count outcome, independent patients | Poisson model-based หรือ Robust VCE ตาม Variance assumption และเป้าหมายการอนุมาน |
| Count outcome with overdispersion | Poisson with Robust VCE หรือ Negative Binomial Regression ตามเป้าหมายของการวิเคราะห์ |
| Binary outcome, ต้องการ RR | Modified Poisson with Robust VCE |
| Repeated observations per patient | Cluster-robust VCE หรือ Longitudinal model ที่เหมาะสม |
| Patients sampled from multiple hospitals | พิจารณา Cluster structure ที่เกิดจาก Study design |
| Complex survey sampling | Survey-design-based VCE ผ่าน svy |
| Very few clusters | Small-sample-adjusted inference หรือวิธีอื่นที่เหมาะกับ Model |
Robust SE ทำอะไรไม่ได้
ประเด็นนี้ต้องเข้าใจให้ชัดเจน เพราะ Robust SE ถูกนำไปใช้ผิดวัตถุประสงค์ได้ง่าย ตารางด้านล่างแสดงว่าปัญหาใดที่ Robust SE แก้ได้และแก้ไม่ได้
| ปัญหา | Robust SE แก้ได้หรือไม่? | เหตุผล |
|---|---|---|
| Conditional variance ไม่ตรงกับ Model | ได้ภายใต้เงื่อนไข | Sandwich VCE ประมาณส่วนนี้จากข้อมูล |
| Heteroskedasticity | ได้ภายใต้เงื่อนไข | ไม่จำเป็นต้องสมมติ Variance คงที่ |
| Correlation ภายใน Patient | robust ธรรมดาไม่ได้ | ต้องพิจารณา Cluster-robust VCE |
| Wrong Conditional mean model | ไม่ได้ | Coefficient อาจไม่ประมาณค่าที่ต้องการ |
| Unmeasured confounding | ไม่ได้ | เป็นปัญหา Bias ไม่ใช่เพียง SE |
| Selection bias | ไม่ได้ | VCE ไม่แก้ Sampling bias |
| Missing data bias | ไม่ได้ | ไม่ได้แก้ Missingness mechanism |
| Small-sample bias | ไม่รับประกัน | Sandwich ใช้หลัก Large-sample asymptotics |
| Excess zeros หรือ Count distribution ผิดรูปแบบ | ไม่ได้โดยตรง | ต้องประเมิน Data-generating mechanism และ Model fit |
Robust SE ไม่ได้ทำให้ Model ถูกต้องทุกอย่าง
สมมติ Conditional mean ที่แท้จริงคือ
$$E(Y \mid X) = \exp(\beta_0 + \beta_1 X + \beta_2 X^2)$$แต่เรากลับ Fit Model ที่ไม่ใส่ $X^2$
$$E(Y \mid X) = \exp(\beta_0 + \beta_1 X)$$แม้จะใช้
poisson outcome x, vce(robust)เราก็ยังไม่สามารถสรุปได้ว่า coefficient ของ $X$ เป็นค่าที่ถูกต้องสำหรับความสัมพันธ์ตาม Model ที่แท้จริง Robust VCE อาจให้ความไม่แน่นอนของ Pseudo-true coefficient ซึ่งคือค่าที่ coefficient ของ Model ที่ระบุผิดลู่เข้าหา แต่ไม่ได้ทำให้ Coefficient นั้นกลายเป็น Parameter ทางคลินิกหรือ Causal effect ที่เราต้องการโดยอัตโนมัติ
เช่นเดียวกัน หากเรานำ Case-control sample ที่สุ่ม Cases และ Controls ในสัดส่วนที่ไม่สะท้อนประชากรต้นทางไป Fit Modified Poisson แล้วรายงาน RR โดยไม่คำนึงถึง Sampling design การเพิ่ม vce(robust) ก็ไม่ได้แก้ปัญหานี้ บทความเรื่องการสุ่มกลุ่มควบคุมแสดงว่าการออกแบบเป็นตัวกำหนด effect measure อย่างไร
Robust Poisson หรือ Negative Binomial?
หากศึกษา Count outcome และพบ Overdispersion เราอาจใช้ได้ทั้ง Robust Poisson และ Negative Binomial Regression แต่ทั้งสองวิธีไม่ได้มีเป้าหมายเหมือนกันทุกกรณี
Robust Poisson กำหนด Conditional mean
$$E(Y_i \mid X_i) = \exp(X_i^{\top}\boldsymbol\beta)$$และใช้ Sandwich VCE โดยไม่จำเป็นต้องกำหนด Poisson variance ให้ถูกต้อง หาก Conditional mean ถูกต้องและ Independence assumptions เหมาะสม Poisson Pseudo-Maximum Likelihood สามารถให้ Consistent coefficient estimates ได้ แม้ Conditional variance จะต่างจาก Conditional mean
Negative Binomial Regression เป็นอีก Model ที่กำหนด Mean-Variance relationship อย่างชัดเจน เช่นรูปแบบ NB2
$$Var(Y_i \mid X_i) = \mu_i + \alpha\mu_i^2$$โดย $\alpha$ เป็น Overdispersion parameter [6] ถ้า Distribution และ Variance structure ของ Negative Binomial เหมาะสม Model อาจมีประสิทธิภาพสูงกว่าในการประมาณ Parameters บางชนิด และมีประโยชน์ในการจำลองหรือพยากรณ์ Count distribution แต่ไม่ได้หมายความว่า Negative Binomial จะดีกว่า Robust Poisson เสมอไป
ควรเลือกจากวัตถุประสงค์ของการศึกษา ความเหมาะสมของ Mean model และ Distribution assumptions ไม่ใช่เลือกจากการพบ Overdispersion เพียงอย่างเดียว บทความเรื่องอัตราแบบ Poisson (บทความภาษาอังกฤษ) อธิบาย Count model เหล่านี้โดยตรง
ตัวอย่างการรายงานผลในงานวิจัย
Methods สำหรับ Modified Poisson Regression:
Adjusted risk ratios and 95% confidence intervals were estimated using modified Poisson regression with a log link and robust sandwich variance estimation. The analysis assumed independent observations and a correctly specified conditional mean model.
ถ้าข้อมูลมี Clustering ภายในโรงพยาบาล และใช้ Cluster-robust VCE จริง ควรเปลี่ยนเป็น
Adjusted risk ratios and 95% confidence intervals were estimated using modified Poisson regression with a log link and cluster-robust sandwich variance estimation, accounting for within-hospital correlation.
สองข้อความนี้มีความหมายต่างกัน และไม่ควรนำไปใช้แทนกันโดยไม่ตรวจสอบ Study design
Results: สมมติผลวิเคราะห์ได้ $aRR = 2.00$, 95% CI 1.26 ถึง 3.17 สามารถรายงานว่า
Inadequate antenatal care was associated with a higher risk of neonatal morbidity within 28 days (adjusted RR 2.00, 95% CI 1.26 to 3.17).
ตัวเลขนี้เป็นตัวอย่างสำหรับการเขียนเท่านั้น ไม่ใช่ผลการวิเคราะห์จาก Dataset จริง และหากนำไปใส่ Manuscript จะต้องใช้ตัวเลขจาก Adjusted model ที่รันจริง
สรุปสิ่งที่ต้องเข้าใจ
| Concept | สิ่งที่ต้องจำ |
|---|---|
| Variance of outcome | ความกระจายของข้อมูล $Y$ |
| Sampling variance | ความแปรปรวนของค่าประมาณเมื่อสุ่มตัวอย่างซ้ำ |
| VCE | วิธีประมาณ Variance-Covariance Matrix ของ Estimated parameters |
| Standard Error | รากที่สองของ Estimated variance ของ coefficient |
| Model-based VCE | ใช้ Information จาก Model และอาศัย Assumptions ของ Model |
| Robust VCE | ใช้ Sandwich approach เพื่อรองรับ Variance misspecification บางรูปแบบ |
| Cluster-robust VCE | รวม Score contributions ภายใน Cluster ก่อนคำนวณ Meat |
| Modified Poisson | ใช้ Poisson log-link estimating model กับ Binary outcome เพื่อประมาณ RR พร้อม Robust VCE |
| Negative Binomial | ใช้ Count distribution ที่ยอมให้ Variance สูงกว่า Mean ผ่าน Dispersion parameter |
ความเข้าใจผิดที่พบบ่อยและวิธีแก้
-
"vce(robust) เป็นแค่คำสั่งที่ปรับ Standard Error"
มันเลือกวิธีประมาณ Variance-Covariance Matrix ทั้งหมดของ coefficients ส่วน SE, Confidence Interval และ P-value ตามมาจาก Matrix นั้น
วิธีแก้: อ่าน vce() ว่าเป็นการเลือก Variance-Covariance Estimator ที่ต้องมีเหตุผลรองรับ คือ Variance assumption หรือ Independence structure
-
"Covariance ใน VCE คือ Covariance ระหว่างตัวแปรต้นสองตัว"
มันคือ Covariance ระหว่างค่าประมาณของ coefficients สองตัวเมื่อสุ่มตัวอย่างซ้ำ
วิธีแก้: ใช้มันทุกครั้งที่คำนวณผลรวมหรือผลต่างของ coefficients เพราะ Variance ของผลรวมมีสองเท่าของ Covariance อยู่ด้วย
-
"Robust SE สูงกว่าเสมอ"
ใน Binary example Robust SE ของ log RR เท่ากับ 0.2345 น้อยกว่า Poisson model-based SE ที่ 0.2739
วิธีแก้: คาดได้ทั้งสองทิศทาง: Sandwich ตาม Variance จริง ซึ่งอาจสูงหรือต่ำกว่าที่ Model สมมติ
-
"Modified Poisson ต้องใช้ Sandwich เพราะ Overdispersion"
เมื่อ Risk เท่ากับ 0.40 Bernoulli variance เท่ากับ 0.24 ต่ำกว่า Poisson working variance ที่ 0.40
วิธีแก้: ต้องใช้ Sandwich เพราะ Poisson variance assumption ไม่ตรงกับ Binary data
-
"Mean และ Variance ของข้อมูลทั้งชุดพิสูจน์ Overdispersion ได้"
ความแตกต่างของค่าเฉลี่ยระหว่างกลุ่มก็ทำให้ Overall variance สูงขึ้นได้
วิธีแก้: ประเมิน Variance ภายใต้เงื่อนไขของ predictors ที่อยู่ใน Model
-
"vce(cluster patient_id) จับคู่หรือปรับผู้ป่วยให้"
มันไม่ได้สร้าง Matched pairs, แก้ Confounding หรือเพิ่ม Patient fixed effects
วิธีแก้: ถือว่าเป็นการเปลี่ยน Variance estimator เท่านั้น: Cluster กลายเป็นหน่วยอิสระในการคำนวณ Score variability
-
"vce(opg) คือ Sandwich และ bootstrap ดีกว่าเสมอ"
OPG ใช้ Score information แต่ไม่ได้ใช้ Bread และ Meat ร่วมกัน ส่วน resampling ก็ไม่ได้ดีกว่าในทุกกรณี
วิธีแก้: ใช้ vce(robust) หรือ vce(cluster id) เมื่อต้องการ Sandwich และ resample หน่วยเดียวกับที่การออกแบบสุ่มมา
-
"Stata เขียนว่า IRR ก็ต้องเป็น Incidence Rate Ratio"
เมื่อ Outcome เป็น Binary มี Follow-up horizon เดียว และไม่มี Person-time offset ค่า exponentiated coefficient คือ Risk Ratio
วิธีแก้: ตั้งชื่อ effect measure จาก Outcome และ Model ไม่ใช่จากหัวคอลัมน์
-
"Negative Binomial ดีกว่า Robust Poisson เสมอ"
อาจมีประสิทธิภาพสูงกว่าเมื่อ Distribution ของมันเหมาะสม แต่ตอบเป้าหมายคนละแบบ
วิธีแก้: เลือกจากเป้าหมายของการศึกษาและ Mean model ไม่ใช่จากการพบ Overdispersion เพียงอย่างเดียว
อภิธานศัพท์
- variance-covariance matrix (VCE) (เมทริกซ์ความแปรปรวนและความแปรปรวนร่วม)
- Matrix ที่มี Estimated variance ของ coefficients อยู่บนแนวทแยง และ Covariance ของมันอยู่นอกแนวทแยง ออปชัน vce() ของ Stata เลือกวิธีประมาณ Matrix นี้ และ Standard Error คือรากที่สองของค่าบนแนวทแยง
- model-based standard error (standard error แบบอิงแบบจำลอง)
- Standard Error จาก Model-based VCE ซึ่งอาศัย Variance assumption ของ Model เอง ใน Maximum Likelihood มักเป็น Inverse ของ Observed information
- observed information matrix (OIM)
- Negative Hessian ของ Log-likelihood ณ ค่าประมาณ Inverse ของมันคือ Model-based VCE ที่ vce(oim) รายงาน
- Poisson regression
- Model สำหรับข้อมูลนับ (count) ที่ log ของ Mean เป็นเชิงเส้นตาม predictors และ Conditional variance เท่ากับ Conditional mean
- overdispersion (การกระจายเกินกว่าที่แบบจำลองกำหนด)
- Conditional variance สูงกว่า Mean ที่ Poisson Model สมมติ Model-based SE จึงอาจเล็กเกินไป
- robust (sandwich) standard error (ค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช)
- Standard Error จาก Huber-White Sandwich VCE ยอมให้ Variance assumption ผิดได้ เมื่อ Mean model ถูกต้องและ observations เป็นอิสระต่อกัน
- sandwich estimator
- สูตร Variance A^-1 B A^-1: Meat B อยู่ระหว่าง Bread A ที่กลับค่าแล้วสองชุด
- bread (ส่วน bread ของ sandwich estimator)
- A ซึ่งใน Poisson Regression คือผลรวมของ fitted mean คูณ X_i X_i' ทำหน้าที่เชื่อมความผันผวนของ Estimating equations กับความผันผวนของ coefficients
- meat (ส่วน meat ของ sandwich estimator)
- B คือผลรวมของ s_i s_i' ซึ่งใน Poisson Regression คือผลรวมของ X_i X_i' คูณ Squared residual ของแต่ละ observation
- score contribution (score contribution ของแต่ละหน่วยสังเกต)
- ส่วนของ Estimating equation ที่มาจาก observation หนึ่งตัว เขียนเป็น s_i ใน Poisson Regression คือ X_i คูณ Raw residual Y_i ลบ fitted mean
- modified Poisson regression (Poisson ดัดแปลง)
- Log-link Poisson Model ที่ Fit กับ outcome ที่มีค่า 0 หรือ 1 ร่วมกับ Robust VCE เพื่อประมาณ Risk Ratio
- Bernoulli variance (ความแปรปรวนแบบ Bernoulli)
- Variance ของ Binary outcome ที่มีความน่าจะเป็น p คือ p(1 - p) ต่ำกว่า Poisson working variance ซึ่งคือ p
- incidence rate ratio
- อัตราส่วนของ Event rate สองค่า และเป็นป้ายที่ Stata พิมพ์หลัง poisson, irr ไม่ว่า Outcome จะเป็นชนิดใด
- cluster-robust standard error
- Sandwich SE ที่ Meat รวม Score contributions ภายในแต่ละ Cluster ก่อนยกกำลังสอง ต้องมี Clusters ที่เป็นอิสระต่อกันและมีจำนวนมากพอ
- outer product of the gradients (OPG)
- Model-based VCE จาก Score information อย่างเดียว ไม่ใช่ Robust Sandwich ซึ่งใช้ทั้ง Bread และ Meat
- pseudo-true coefficient
- ค่าที่ coefficient ของ Model ที่ระบุผิดลู่เข้าหา Robust VCE อธิบายความไม่แน่นอนของมันได้ โดยไม่ได้ทำให้มันกลายเป็น Parameter ที่ต้องการ
- negative binomial regression
- Count model ที่กำหนด Mean-Variance relation อย่างชัดเจน เช่น NB2, Var = mu + alpha mu^2 โดย alpha คือ Overdispersion parameter
เอกสารอ้างอิง
- 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
- 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
- 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
- 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
- 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
- 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
ประเด็นสำคัญ
- การประมาณ coefficient กับการประมาณความไม่แน่นอนของมันเป็นคนละกระบวนการ: vce() เลือก Variance-Covariance Matrix โดย Standard Error คือรากที่สองของค่าบนแนวทแยง และต้องใช้ Covariance ทุกครั้งที่รวม coefficients เข้าด้วยกัน
- Standard Error ไม่ใช่ความกระจายของข้อมูล: เมื่อ Variance เท่ากับ 18 จากโรงพยาบาล 100 แห่ง Standard Error ของค่าเฉลี่ยเท่ากับ 0.4243 และจะลดลงเมื่อ sample ใหญ่ขึ้น
- Robust Sandwich A^-1 B A^-1 แทน Variance ของ Model ด้วย Squared residuals: สำหรับโรงพยาบาล 100 แห่งได้ 0.0849 เทียบกับ Model-based 0.0447 โดย coefficient 1.6094 ไม่เปลี่ยน
- Robust SE ไม่ได้สูงกว่าเสมอ: สำหรับ Binary Risk Ratio ได้ 0.2345 เทียบกับ Poisson 0.2739 เพราะ Bernoulli variance ต่ำกว่า Poisson working variance
- vce(cluster id) รวม Score contributions ภายในแต่ละ Cluster ก่อนยกกำลังสอง ต้องมี Clusters ที่เป็นอิสระต่อกันและมีจำนวนมากพอ และเช่นเดียวกับ vce(robust) มันแก้ Mean model ที่ผิด Confounding หรือ Selection ไม่ได้
อ่านต่อในวิกิ: [[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]]