Heteroskedasticity: residual กระจายไม่เท่ากัน สิ่งที่เสี่ยงคือ Standard Error ไม่ใช่ Coefficient

Clinical Epidemiology ResearchMethodology and Research Design THUniqcret doctor knowledges TH
Heteroskedasticity: residual กระจายไม่เท่ากัน สิ่งที่เสี่ยงคือ Standard Error ไม่ใช่ Coefficient
On this page

Read the English version

บทคัดย่อ

Skedasticity คือความกว้างของ residual ใน regression คือดูว่าระยะห่างระหว่างค่าจริงกับค่าที่โมเดลทำนาย กระจายกว้างเท่ากันไหมในทุกระดับของค่าที่ทำนาย ถ้าความกว้างใกล้เคียงกันตลอด เช่น ทำนาย systolic blood pressure จากอายุแล้วคลาดไปประมาณ 10 mmHg ในทุกช่วงอายุ เรียกว่า error เป็น homoskedastic ถ้าความกว้างเพิ่มขึ้น เช่น ค่ารักษาประมาณ 500,000 บาท ทำนายคลาดได้ประมาณ 200,000 บาท แต่ค่ารักษาประมาณ 5,000 บาท คลาดแค่ 1,000 บาท residual plot จะบานออกเป็นรูปพัด และ error เป็น heteroskedastic Ordinary least squares มี assumption ว่า variance ของ error คงที่ การผิด assumption นี้ไม่ได้ทำให้ coefficient ผิดทันที แต่ทำให้ standard error แบบปกติผิด และพาให้ 95% confidence interval, P value และ hypothesis test ผิดตามไปด้วย เช่น slope เท่ากับ 2 อาจได้ standard error 0.5 ทั้งที่ค่าที่ถูกคือ 1.0 บทความนี้แสดงวิธีจำรูปแบบนี้ให้ได้ และเหตุผลที่คำตอบคือ heteroskedasticity-robust standard error


ภาพสรุป standard error แบบปกติที่ได้ 0.5 ทั้งที่ค่าที่ถูกคือ 1.0 ทำให้ slope เท่ากับ 2 ดูแม่นกว่าความจริง

โมเดลค่ารักษาที่ residual บานออกเป็นรูปพัด

ทีมโรงพยาบาลทีมหนึ่งสร้าง linear regression ทำนายค่ารักษาต่อการนอนโรงพยาบาลหนึ่งครั้ง จากอายุของผู้ป่วย จำนวนวันนอน และจำนวนหัตถการ coefficient ทุกตัวดูสมเหตุสมผลทางคลินิก จากนั้นมีคน plot residual เทียบกับ fitted value สำหรับ admission ที่ค่ารักษาถูก จุดเกาะอยู่ใกล้ศูนย์ แต่สำหรับ admission ที่แพงที่สุด จุดกระจายออกไปไกลทั้งด้านบนและด้านล่าง

คำถามสองเรื่องตามมาทันที coefficient ของจำนวนวันนอนผิดไปแล้วหรือเปล่า และทีมยังเชื่อ confidence interval กับ P value ของมันได้อยู่ไหม คำตอบของทั้งสองเรื่องเริ่มจากคำคำเดียว: skedasticity

Skedasticity: residual กระจายกว้างแค่ไหน

คำว่า skedasticity หมายถึงเรื่องของความกระจายของ error หรือ residual ใน regression พูดให้ง่ายที่สุด regression model แบ่งค่าผลลัพธ์ทุกค่าออกเป็นสองส่วน:

$$Y = \text{the model's predicted value} + \text{error}$$

ค่าที่โมเดลทำนายเรียกอีกชื่อว่า fitted value ส่วน residual คือระยะห่างระหว่างค่าจริงที่สังเกตได้กับค่าที่โมเดลทำนาย คือค่าจริงลบค่าที่ทำนาย

สิ่งที่ skedasticity สนใจคือคำถามเดียวเกี่ยวกับ residual เหล่านั้น:

residual กระจายกว้างเท่ากันไหม ในทุกระดับของค่าที่ทำนาย

Homoskedasticity: กระจายพอ ๆ กันทุกช่วง

สมมติโมเดลทำนาย systolic blood pressure (SBP) จากอายุ ที่อายุ 20 ปี ค่าที่ทำนายคลาดไปประมาณ ±10 mmHg ที่อายุ 40 ปี คลาดประมาณ ±10 mmHg และที่อายุ 70 ปี ก็คลาดประมาณ ±10 mmHg อีก variance ของ residual ค่อนข้างคงที่

แบบนี้เรียกว่า homoskedasticity ภาพในหัวคือ plot ของ residual เทียบกับ fitted value ที่เป็นแถบกว้างใกล้เคียงกันตลอดแนว เหมือนแผงซ้ายของภาพด้านล่าง

Homoskedasticity: ทำนาย SBP จากอายุ ความคลาดเคลื่อนโดยทั่วไปใกล้เคียงกันในทุกช่วงอายุ
อายุความคลาดเคลื่อนโดยทั่วไปของการทำนาย SBP
20 ปีประมาณ ±10 mmHg
40 ปีประมาณ ±10 mmHg
70 ปีประมาณ ±10 mmHg

Heteroskedasticity: ความกระจายเปลี่ยนไป

คราวนี้สมมติโมเดลทำนาย hospital cost คนที่ค่ารักษาประมาณ 5,000 บาท ค่าที่ทำนายอาจคลาดแค่ ประมาณ ±1,000 บาท แต่คนที่ค่ารักษาประมาณ 500,000 บาท อาจคลาดถึงประมาณ ±200,000 บาท

พอ fitted value สูงขึ้น residual ก็ยิ่งกระจายกว้าง บน residual plot จุดจะบานออกเป็นรูปกรวย หรือ fan shape เหมือนแผงขวาด้านล่าง แบบนี้เรียกว่า heteroskedasticity

Heteroskedasticity: ทำนาย hospital cost ความคลาดเคลื่อนโดยทั่วไปเพิ่มขึ้นตามค่ารักษาที่ทำนาย
ค่ารักษาที่ทำนายความคลาดเคลื่อนโดยทั่วไปของการทำนาย
ประมาณ 5,000 บาทประมาณ ±1,000 บาท
ประมาณ 500,000 บาทประมาณ ±200,000 บาท
residual plot แบบแผนผัง ซ้าย: homoskedasticity เป็นแถบกว้างเท่ากัน เหมือนตอนทำนาย SBP จากอายุ แล้วคลาดประมาณ ±10 mmHg ในทุกช่วงอายุ ขวา: heteroskedasticity เป็นรูปพัด เหมือนตอนทำนาย hospital cost แล้วคลาดประมาณ ±1,000 บาท ที่ราว 5,000 บาท แต่คลาดประมาณ ±200,000 บาท ที่ราว 500,000 บาท จุดในภาพเป็นเพียงภาพประกอบ ไม่ใช่ข้อมูล

ใช้แนวคิดนี้ที่ไหน: linear regression และ OLS

แนวคิดนี้ใช้หลัก ๆ ใน linear regression ที่ fit ด้วย ordinary least squares (OLS) ซึ่งเป็นวิธี fit ที่ใช้กันทั่วไป คือเลือก coefficient ที่ทำให้ผลรวมกำลังสองของ residual น้อยที่สุด สมมติว่าเราวิเคราะห์

$$\text{Blood pressure} = \beta_0 + \beta_1(\text{age}) + \beta_2(\text{BMI}) + \varepsilon$$

โดย BMI คือ body mass index และ $\varepsilon$ คือ error OLS มี assumption สำคัญเกี่ยวกับ error ตัวนี้ว่า

$$\mathrm{Var}(\varepsilon \mid X) = \sigma^2$$

ในที่นี้ $X$ แทน covariate คืออายุและ BMI ส่วน $\sigma^2$ คือ variance ค่าเดียวที่คงที่ แปลว่า เมื่อ $X$ เปลี่ยนไป variance ของ error ควรใกล้เคียงกัน

ถ้า variance ไม่คงที่ เราเรียกว่า error มี heteroskedasticity

ทำไมต้องสนใจ: coefficient อาจยังดี แต่ standard error อาจไม่ดี

จุดสำคัญที่สุดคือ heteroskedasticity ไม่ได้แปลว่า coefficient ผิดทันที ในโมเดล blood pressure ข้างบน estimate อย่าง

$$\hat\beta_{\text{BMI}} = 2.5$$

อาจยังเป็น estimate ที่ดีอยู่

แต่ปัญหาคือ standard error อาจคำนวณผิด สิ่งที่สร้างขึ้นบน standard error ก็อาจผิดตามไปด้วย:

assumption เรื่อง variance ของ error

ถ้าพูดให้เป็นทางการ skedasticity ใช้กับ assumption เรื่อง variance ของ residual หรือ error ใน regression โดยเฉพาะ linear regression ที่ fit ด้วย OLS assumption นั้นคือ

$$\mathrm{Var}(\varepsilon \mid X) = \sigma^2$$

แปลว่า เมื่อค่า $X$ เปลี่ยนไป ความแปรปรวนของ error ควรคงที่ นี่คือ homoskedasticity

ถ้า $\mathrm{Var}(\varepsilon \mid X)$ เปลี่ยนตาม $X$ หรือตาม fitted value เราเรียกว่า heteroskedasticity

ทำไม assumption นี้จำเป็น: OLS ให้สองเรื่องที่แยกกัน

OLS ให้สองเรื่องที่แยกกัน:

ถ้า mean model ถูกต้องและมี exogeneity (error มีค่าเฉลี่ยเป็นศูนย์ไม่ว่า $X$ จะเป็นค่าใด covariate จึงไม่มีข้อมูลอะไรเกี่ยวกับ error) coefficient ก็ยัง estimate ได้ดีแม้มี heteroskedasticity

แต่ standard error แบบปกติของ OLS จะไม่ถูกต้อง เพราะสูตรนั้นอาศัย assumption ว่า variance ของ error คงที่ ผลกระทบหลักคือ:

ตัวอย่างคำนวณด้วยมือ: slope เท่ากับ 2 ที่ดูแม่นกว่าความจริง

ตัวอย่างคำนวณด้วยมือ ใช้โมเดลที่ง่ายที่สุด มี covariate ตัวเดียวคือ $X$:

$$Y = \beta_0 + \beta_1 X + \varepsilon$$
  1. ค่า estimate

    \[ \hat\beta_1 = 2 \]

    สมมติ slope ที่ fit ได้คือ 2 heteroskedasticity โดยตัวมันเองไม่ได้เปลี่ยนตัวเลขนี้

  2. ถ้า error เป็น homoskedastic

    \[ SE = 0.5 \]

    เมื่อ variance ของ error คงที่ standard error แบบปกติของ OLS ถูกต้อง คือ 0.5

  3. ถ้า error เป็น heteroskedastic แต่ยังใช้ standard error แบบปกติ

    \[ SE_{\text{ordinary}} = 0.5 \quad \text{but it should be} \quad SE = 1.0 \]

    เมื่อความกระจายเป็นรูปพัด สูตรปกติอาจยังให้ 0.5 ทั้งที่ standard error จริง ๆ ควรเป็น 1.0

  4. 95% confidence interval จะอ้างว่าอะไร

    \[ 2 \pm 1.96 \times 0.5 = 1.02 \text{ to } 2.98 \quad \text{versus} \quad 2 \pm 1.96 \times 1.0 = 0.04 \text{ to } 3.96 \]

    ถ้าสร้างจาก standard error แบบปกติ interval จะกว้างแค่ครึ่งเดียวของที่ควรเป็น และ P value จะเล็กกว่าที่ควรเป็น

ผลลัพธ์: standard error แบบปกติบอก 0.5 ทั้งที่ควรเป็น 1.0 เราจึงอาจคิดว่า effect “แม่น” เกินจริง

รูปแบบเดียวกันใน cohort จำลอง

เรื่องเดียวกันเห็นได้ใน cohort จำลองของผู้ใหญ่ 2,000 คน อายุ 30 ถึง 80 ปี ที่ systolic blood pressure กระจายมากขึ้นตามอายุ: ความกระจายแบบสุ่มที่เติมให้ SBP ของแต่ละคนมี standard deviation 4 mmHg ที่อายุ 30 ปี 9 ที่อายุ 55 ปี และ 24 ที่อายุ 80 ปี residual จากเส้นตรงของ SBP ตามอายุจึงบานออกไปทางอายุมาก

regression เส้นตรงของ SBP ตามอายุให้ slope 0.66 mmHg ต่อปี ใกล้กับ slope เส้นตรง 0.67 ในประชากรจำลองขนาดใหญ่ที่ cohort นี้สุ่มมา standard error แบบปกติคือ 0.0215 เมื่อ fit ใหม่ด้วย heteroskedasticity-robust standard error คือ vce(robust) ของ Stata slope เท่าเดิมทุกประการ และ standard error เพิ่มเป็น 0.0243 คือ 1.13 เท่าของค่าปกติ

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

Stata: SBP ตามอายุ พร้อม standard error แบบปกติ

โค้ด Stata w6_sim.do (บรรทัด 278-279 จาก 440)
* Specification A: SBP on age (the high-leverage ages are the high-variance ages)
regress sbp age
ผลลัพธ์จากการรัน w6_sim.log
. * Specification A: SBP on age (the high-leverage ages are the high-variance ages)
. regress sbp age

      Source |       SS           df       MS      Number of obs   =     2,000
-------------+----------------------------------   F(1, 1998)      =    951.44
       Model |  189678.648         1  189678.648   Prob > F        =    0.0000
    Residual |  398321.189     1,998  199.359955   R-squared       =    0.3226
-------------+----------------------------------   Adj R-squared   =    0.3222
       Total |  587999.837     1,999  294.146992   Root MSE        =    14.119

------------------------------------------------------------------------------
         sbp | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         age |   .6644293   .0215406    30.85   0.000     .6221848    .7066737
       _cons |   88.26957   1.232598    71.61   0.000     85.85226    90.68689
------------------------------------------------------------------------------
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์การจำลองเบื้องหลังชุดบทความนี้และผลลัพธ์ที่มันพิมพ์ออกมา ชื่อไฟล์และเลขบรรทัดเพียงบันทึกว่าข้อความที่ตัดมาอยู่ตรงไหน regression เส้นตรงของ SBP ตามอายุให้ slope 0.6644 mmHg ต่อปี โดยมี standard error แบบปกติ (model-based) 0.0215

Stata: fit เดิมพร้อม heteroskedasticity-robust standard error

โค้ด Stata w6_sim.do (บรรทัด 286-286 จาก 440)
regress sbp age, vce(robust)
ผลลัพธ์จากการรัน w6_sim.log
. regress sbp age, vce(robust)

Linear regression                               Number of obs     =      2,000
                                                F(1, 1998)        =     750.63
                                                Prob > F          =     0.0000
                                                R-squared         =     0.3226
                                                Root MSE          =     14.119

------------------------------------------------------------------------------
             |               Robust
         sbp | Coefficient  std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
         age |   .6644293   .0242514    27.40   0.000     .6168686    .7119899
       _cons |   88.26957   1.203478    73.35   0.000     85.90937    90.62978
------------------------------------------------------------------------------
ข้อมูลจำลอง ข้อความที่ตัดมาจากสคริปต์การจำลองของชุดบทความนี้และผลลัพธ์ของมัน fit SBP ตามอายุแบบเดิมด้วย vce(robust): slope ไม่เปลี่ยน ส่วน standard error ของมันเพิ่มจาก 0.0215 เป็น 0.0243

อ่านรูปแบบนี้: ค่าเฉลี่ยโอเค แต่ variance ไม่โอเค

รูปแบบนี้มักถูกสรุปไว้ในประโยคเดียว ในการทบทวนระเบียบวิธีหรือในรายงานทางสถิติ:

The mean structure is appropriate, but the residual variance changes with the fitted values.

ประโยคนี้แปลว่า coefficient model ไม่ได้ผิด แต่ variance assumption ผิด coefficient จึงอยู่ที่เดิม ที่เปลี่ยนมีแค่วิธีคำนวณ uncertainty ของมัน:

Use heteroskedasticity-robust standard errors.

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

  • "residual บานออกเป็นรูปพัด แปลว่า coefficient ผิด"

    Heteroskedasticity เป็นเรื่องของ variance ของ error ไม่ใช่ค่าเฉลี่ยของมัน ถ้า mean model ถูกต้อง coefficient อย่าง estimate ของผลของ BMI ที่เท่ากับ 2.5 ก็ยังเป็น estimate ที่ดีได้

    วิธีแก้: เก็บ coefficient ไว้ แล้วซ่อม uncertainty ของมัน: รายงาน heteroskedasticity-robust standard error

  • "heteroskedasticity แปลว่าเส้น regression โค้ง"

    เส้นโค้งหรือไม่เป็นคำถามของ mean model ส่วน heteroskedasticity ถามอีกเรื่องหนึ่ง คือความกระจายรอบเส้นกว้างเท่ากันตลอดแนวหรือไม่

    วิธีแก้: ดูความกว้างของแถบใน plot ของ residual เทียบกับ fitted value ไม่ใช่ดูรูปทรงของมัน

  • "coefficient ดูดี standard error ที่พิมพ์ออกมาก็ต้องดีด้วย"

    standard error แบบปกติของ OLS สร้างบน assumption ว่า variance ของ error คงที่ เมื่อความกระจายเป็นรูปพัด มันอาจบอก 0.5 ทั้งที่ค่าที่ถูกคือ 1.0

    วิธีแก้: เมื่อความกระจายไม่เท่ากัน ให้อ่าน robust standard error และ confidence interval กับ P value ที่สร้างจากมัน

  • "ความกระจายไม่เท่ากัน แปลว่าต้องสร้างโมเดลใหม่ทั้งหมด"

    เมื่อ mean structure เหมาะสม และมีแค่ residual variance ที่เปลี่ยนตาม fitted value สมการค่าเฉลี่ยไม่ใช่ปัญหา ปัญหาคือ variance assumption

    วิธีแก้: เก็บ mean model ไว้ และใช้ heteroskedasticity-robust standard errors

อภิธานศัพท์

skedasticity
ความกระจาย หรือความกว้าง ของ residual รอบค่าที่ regression ทำนาย และดูว่าความกว้างนั้นเท่ากันในทุกค่าที่ทำนายหรือไม่
homoskedasticity
residual กระจายกว้างพอ ๆ กันในทุกระดับของ fitted value คือ variance ของ error คงที่
heteroskedasticity (ความแปรปรวนไม่คงที่)
variance ของ residual ที่เปลี่ยนไปตาม covariate หรือ fitted value มักเห็นเป็นรูปพัดใน residual plot
residual
ค่าที่สังเกตได้ลบด้วยค่าที่โมเดลทำนาย
fitted value
ค่าที่ regression model ทำนายให้แต่ละคนจาก covariate ของคนนั้น
ordinary least squares (OLS)
วิธีปกติในการ fit linear regression คือเลือก coefficient ที่ทำให้ผลรวมกำลังสองของ residual น้อยที่สุด
exogeneity
error มีค่าเฉลี่ยเป็นศูนย์ไม่ว่า covariate จะเป็นค่าใด covariate จึงไม่มีข้อมูลเกี่ยวกับ error
model-based standard error (standard error แบบอิงแบบจำลอง)
standard error แบบปกติจากสูตรของโมเดลเอง ใน OLS มันสมมติว่า variance ของ error มีค่าเดียวคงที่
robust (sandwich) standard error (ค่าคลาดเคลื่อนมาตรฐานแบบแซนด์วิช)
standard error ที่สร้างจาก residual ยกกำลังสองของแต่ละคน จึงไม่พึ่ง assumption ว่า variance คงที่ ตัว coefficient ไม่เปลี่ยน

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

  1. 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

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

  • Skedasticity คือความกว้างของ residual: homo แปลว่า variance เท่ากันในทุก fitted value ส่วน hetero แปลว่า variance ต่างกัน
  • Heteroskedasticity ไม่ได้ถามว่าเส้น regression โค้งไหม แต่ถามว่าความกระจายรอบเส้นกว้างเท่ากันตลอดหรือไม่ และลายเซ็นของมันคือรูปพัดใน plot ของ residual เทียบกับ fitted value
  • OLS มี assumption ว่า variance ของ error คงที่ เมื่อ assumption นี้ผิด coefficient ไม่ได้ผิดโดยอัตโนมัติ
  • สิ่งที่ผิดคือ standard error แบบปกติ และ 95% confidence interval, P value และ test ที่ตามมา: standard error 0.5 ทั้งที่ค่าที่ถูกคือ 1.0 ทำให้ effect ดูแม่นกว่าความจริง
  • เมื่อ mean structure เหมาะสม แต่ residual variance เปลี่ยนตาม fitted value สิ่งที่ผิดคือ variance assumption ไม่ใช่ mean model: ใช้ heteroskedasticity-robust standard errors

อ่านต่อในวิกิ: [[risk-regression-models-epidemiology-th]] [[repeated-measures-modeling-guide-th]]

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

ความคิดเห็น

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

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