บทนำ: ทำไมต้องใช้แบบจำลองเชิงเส้นนัยทั่วไป (GLMs)?
ยินดีต้อนรับ! หากคุณเชี่ยวชาญเรื่องการถดถอยเชิงเส้น (linear regression) มาแล้ว คุณจะรู้ว่ามันเป็นเครื่องมือที่ทรงพลังในการพยากรณ์ ตัวแปรตอบสนอง (response variable) อย่างไรก็ตาม ในโลกความเป็นจริง—โดยเฉพาะในงานด้านคณิตศาสตร์ประกันภัย—ข้อมูลมักไม่ได้มีการแจกแจงแบบ "ปกติ" (Normal distribution) ที่สวยงามเสมอไป ตัวอย่างเช่น จำนวนครั้งของการเคลม (claim counts) มักจะเป็นจำนวนเต็ม (การแจกแจงแบบ Poisson) และมูลค่าการเคลม (claim amounts) มักจะเป็นค่าบวกและมีความเบ้ (การแจกแจงแบบ Gamma) นี่คือจุดที่ แบบจำลองเชิงเส้นนัยทั่วไป หรือ Generalised Linear Models (GLMs) จะเข้ามาช่วยเรา!
ในบทนี้ เราจะเน้นไปที่ด้านการใช้งานจริงของ GLM โดยใช้โปรแกรม R เราจะได้เรียนรู้วิธีการบอกซอฟต์แวร์ว่าควรใช้ "ตระกูล" (family) ของการแจกแจงแบบใด วิธีการตีความผลลัพธ์ และวิธีตัดสินใจว่าโมเดลของเรานั้นดีจริงหรือไม่ ไม่ต้องกังวลนะถ้าคุณรู้สึกว่าทฤษฎีใน Paper A นั้นดูหนักเกินไป เพราะใน Paper B จะเน้นไปที่การ "อ่าน" ผลลัพธ์ (output) และการทำความเข้าใจความหมายของมันเป็นหลัก
หมายเหตุ: บทนี้ต่อยอดมาจากความรู้เรื่อง "การสร้างและการตีความผลลัพธ์ของการถดถอยเชิงเส้น" หากคุณคุ้นเคยกับรูปแบบคำสั่ง \(y \sim x\) แสดงว่าคุณมาได้ครึ่งทางแล้ว!
1. โครงสร้างของฟังก์ชัน glm()
ใน R เราจะสร้างโมเดล GLM โดยใช้ฟังก์ชัน glm() ซึ่งมีรูปแบบคำสั่งคล้ายกับ lm() มาก แต่มีส่วนที่เพิ่มเข้ามาซึ่งสำคัญมากคือ อาร์กิวเมนต์ family
โครงสร้างโค้ดพื้นฐาน:
my_model <- glm(response ~ explanatory_variables, family = distribution(link = "link_function"), data = my_data)
การเลือก Family และ Link
family จะบอก R ว่าตัวแปรตอบสนองมีการแจกแจงแบบใด และ link function จะบอก R ว่าค่าเฉลี่ยสัมพันธ์กับตัวพยากรณ์เชิงเส้น (linear predictor) อย่างไร ภายใต้หลักสูตร CS1 คุณควรคุ้นเคยกับคู่ที่พบบ่อยเหล่านี้:
- Normal (Gaussian):
family = gaussian(link = "identity")— จริง ๆ แล้วนี่ก็คือการถดถอยเชิงเส้นมาตรฐานนั่นเอง! - Poisson:
family = poisson(link = "log")— เหมาะอย่างยิ่งสำหรับจำนวนครั้งของการเคลม - Binomial:
family = binomial(link = "logit")— ใช้สำหรับผลลัพธ์แบบ "ใช่/ไม่ใช่" (เช่น กรมธรรม์จะขาดอายุหรือไม่?) - Gamma:
family = gamma(link = "inverse")หรือlink = "log"— ใช้สำหรับข้อมูลที่เป็นบวกและมีความเบ้ เช่น มูลค่าความเสียหายของการเคลม - Exponential: เป็นกรณีพิเศษของตระกูล Gamma
แนวคิดสำคัญ: The Canonical Link การแจกแจงแต่ละแบบจะมีฟังก์ชันเชื่อมโยงที่เป็น "ธรรมชาติ" ของมัน เรียกว่า canonical link สำหรับ Poisson คือ log และสำหรับ Binomial คือ logit ซึ่ง R จะใช้ค่าเหล่านี้เป็นค่าเริ่มต้น (default) หากคุณไม่ได้ระบุ link ลงไป
2. ทำความเข้าใจตัวพยากรณ์เชิงเส้น (Linear Predictor)
ตัวพยากรณ์เชิงเส้น (linear predictor) มักแทนด้วยสัญลักษณ์ \(\eta\) (eta) คือการรวมกันของตัวแปรต่าง ๆ ของคุณ:
\(\eta = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ...\)
ใน R เราสามารถรวมเทอมประเภทต่าง ๆ ได้ดังนี้:
- Variables (ตัวแปรต่อเนื่อง): ตัวเลขที่มีความต่อเนื่อง (เช่น อายุ, จำนวนเงินเอาประกันภัย)
- Factors (ตัวแปรกลุ่ม): ข้อมูลเชิงคุณภาพ (เช่น ภูมิภาค, เพศ) R จะสร้าง "ตัวแปรหุ่น" (dummy variables) ให้โดยอัตโนมัติ
- Interaction Terms (เทอมอันตรกิริยา): เขียนในรูป
x1:x2หรือx1*x2ใช้เมื่อผลกระทบของตัวแปรหนึ่งขึ้นอยู่กับระดับของอีกตัวแปรหนึ่ง
เคล็ดลับ: หากคุณเห็น RegionNorth ในผลลัพธ์ หมายความว่าโมเดลกำลังเปรียบเทียบภูมิภาค "North" กับภูมิภาคที่เป็น "ฐานเปรียบเทียบ" (Baseline/Reference level) ค่าประมาณ (estimate) จะแสดงความแตกต่างของตัวพยากรณ์เชิงเส้นเมื่อเทียบกับฐานเปรียบเทียบนั้น
3. การตีความผลลัพธ์จาก summary()
เมื่อคุณรันคำสั่ง summary(my_model) โปรแกรม R จะให้ข้อมูลมากมาย เรามาเจาะลึกส่วนที่สำคัญที่สุดสำหรับการสอบของคุณกัน
ตารางค่าสัมประสิทธิ์ (Coefficients Table)
สำหรับตัวแปรแต่ละตัว R จะแสดงค่าดังนี้:
- Estimate: ค่า \(\beta\) ที่คำนวณได้ ข้อควรระวัง: ค่าเหล่านี้อยู่ในสเกลของ link function! หากคุณใช้ log link ค่าที่ประมาณได้คือการเปลี่ยนแปลงของ log ของค่าเฉลี่ย
- Std. Error: ค่าความคลาดเคลื่อนมาตรฐานรอบ ๆ ค่าประมาณ
- z value: ค่าสถิติทดสอบ (\(Estimate \div Std. Error\))
- Pr(>|z|): ค่า p-value หากค่านี้น้อยกว่า 0.05 โดยทั่วไปจะถือว่าตัวแปรนั้นมีนัยสำคัญทางสถิติที่ระดับ 5%
Deviance และ Scaled Deviance
ใน GLM ค่า Deviance จะถูกนำมาใช้แทน "ผลรวมกำลังสอง" (Sum of Squares) ที่ใช้ในการถดถอยเชิงเส้น มันคือการวัด "ระยะห่าง" ระหว่างโมเดลของคุณกับโมเดลที่สมบูรณ์แบบ (saturated model)
- Null Deviance: วัดว่าโมเดลที่มี เพียง จุดตัดแกน (intercept) เพียงอย่างเดียว (ไม่มีตัวแปรอื่นเลย) พยากรณ์ได้ดีแค่ไหน
- Residual Deviance: วัดว่าโมเดล ของคุณ พยากรณ์ได้ดีแค่ไหน
หลักการง่าย ๆ: เราต้องการให้ Residual Deviance มีค่าน้อยที่สุดเท่าที่จะเป็นไปได้ หาก Residual Deviance น้อยกว่า Null Deviance มาก ๆ แสดงว่าตัวแปรของคุณทำงานได้ดี!
AIC (Akaike Information Criterion)
AIC เป็นตัววัดความเหมาะสมของโมเดลที่จะลงโทษคุณหากใส่ตัวแปรมากเกินไป ค่า AIC ยิ่งต่ำ = โมเดลยิ่งดี หากคุณกำลังเปรียบเทียบสองโมเดล โดยทั่วไปควรเลือกโมเดลที่มีค่า AIC ต่ำกว่า
4. การทดสอบทางสถิติเพื่อเลือกโมเดล
เราจะรู้ได้อย่างไรว่าการเพิ่มตัวแปรเข้าไปช่วยให้โมเดลดีขึ้นจริง ๆ? เราจะใช้การทดสอบหลัก ๆ สองวิธี:
การทดสอบอัตราส่วนภาวะน่าจะเป็น (Likelihood Ratio Test - LRT) / Analysis of Deviance
ใน Rเราใช้ฟังก์ชัน anova() เพื่อเปรียบเทียบโมเดลที่เป็น nested กัน (โมเดลหนึ่งเป็นเวอร์ชันที่ง่ายกว่าของอีกโมเดลหนึ่ง):
anova(model_simple, model_complex, test = "Chisq")
หากค่า p-value มีค่าน้อย (เช่น < 0.05) แสดงว่าโมเดลที่ซับซ้อนกว่านั้นดีกว่าอย่างมีนัยสำคัญ
การทดสอบไคสแควร์ของเพียร์สัน (Pearson’s Chi-square Test)
มักใช้เพื่อตรวจสอบ ความเหมาะสมของตัวแบบ (Goodness of Fit) เราจะเปรียบเทียบค่า Pearson residuals กับการแจกแจงแบบ \(\chi^2\) หากค่า p-value น้อยมาก แสดงว่าโมเดลนั้นอาจ ไม่ เหมาะสมกับข้อมูล
5. การตรวจสอบค่าคงเหลือ (Residuals)
แม้ว่าค่า p-value จะดูดี แต่คุณต้องตรวจสอบว่าข้อสมมติของโมเดลเป็นจริงหรือไม่ ใน GLM เราใช้ค่าคงเหลือหลัก ๆ สองประเภท:
- Pearson Residuals: คำนวณจากส่วนต่างระหว่างค่าที่สังเกตได้และค่าที่พยากรณ์ได้ ปรับสเกลด้วยส่วนเบี่ยงเบนมาตรฐาน
- Deviance Residuals: คำนวณจากส่วนแบ่งของแต่ละจุดข้อมูลที่มีต่อค่า deviance รวม
สิ่งที่ควรดูในกราฟ:
ใช้คำสั่ง plot(my_model) สิ่งที่คุณมองหาคือการกระจายตัวของจุดแบบสุ่ม หากคุณเห็นรูปแบบที่ชัดเจน (เช่น รูปทรงกรวยหรือเส้นโค้ง) โมเดลของคุณอาจขาดเทอมอันตรกิริยา (interaction term) หรือใช้ link function ที่ไม่ถูกต้อง
ข้อผิดพลาดที่พบบ่อยที่ควรหลีกเลี่ยง
- สับสนระหว่าง Link และ Response: จำไว้ว่าค่าสัมประสิทธิ์ของ GLM อยู่ในสเกลของ link หากต้องการได้ค่าพยากรณ์ในสเกลเดิม (เช่น จำนวนการเคลมจริง) คุณต้องใช้ฟังก์ชัน
predict(..., type = "response")ใน R - การใส่ตัวแปรมากเกินไป (Overfitting): การเพิ่มตัวแปรมากเกินไปจะทำให้ค่า deviance ลดลง แต่อาจทำให้โมเดลใช้งานไม่ได้กับข้อมูลใหม่ ให้ตรวจสอบค่า AIC เสมอ
- ละเลยตัวแปรกลุ่ม (Factors): หากตัวแปรกลุ่มมี 5 ระดับ R จะแสดงค่าสัมประสิทธิ์ 4 ค่า โดยระดับที่ 1 จะถูกซ่อนอยู่ใน "(Intercept)"
กล่องทบทวนด่วน
1. ฟังก์ชัน: glm(y ~ x, family = poisson, data = d)
2. นัยสำคัญ: ตรวจสอบ Pr(>|z|) ในตาราง summary
3. การเปรียบเทียบ: ค่า AIC และ Residual Deviance ที่ต่ำกว่าบ่งบอกถึงความเหมาะสมที่ดีกว่า
4. Nested Models: ใช้ anova(m1, m2, test = "Chisq") เพื่อดูว่าตัวแปรที่เพิ่มมานั้นคุ้มค่าหรือไม่
5. สเกล: ผลลัพธ์จะอยู่ใน link scale นอกจากคุณจะระบุ type = "response" ในการพยากรณ์
สรุปประเด็นสำคัญ
การสร้าง GLM คือการเลือกการแจกแจงความน่าจะเป็นที่เหมาะสมกับข้อมูลของคุณ และการใช้ link function เพื่อเชื่อมโยงมันเข้ากับตัวพยากรณ์ การตีความผลลัพธ์เกี่ยวข้องกับการดูค่า p-value ที่มีนัยสำคัญ การลดลงของ deviance จากโมเดลว่าง และการใช้ AIC เพื่อสร้างสมดุลระหว่างความแม่นยำและความเรียบง่ายของโมเดล