บทนำ: ทำไมต้องใช้แบบจำลองเชิงเส้นนัยทั่วไป (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 เราใช้ค่าคงเหลือหลัก ๆ สองประเภท:

  1. Pearson Residuals: คำนวณจากส่วนต่างระหว่างค่าที่สังเกตได้และค่าที่พยากรณ์ได้ ปรับสเกลด้วยส่วนเบี่ยงเบนมาตรฐาน
  2. 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 เพื่อสร้างสมดุลระหว่างความแม่นยำและความเรียบง่ายของโมเดล