การวัดความพอดีของโมเดล

การถดถอยใน R เบื้องต้น

Richie Cotton

Data Evangelist at DataCamp

โมเดล bream และ perch

Bream

กราฟกระจายของมวล bream เทียบกับความยาว พร้อมเส้นแนวโน้มที่แสดงไว้ก่อนหน้า

Perch

กราฟกระจายของมวล perch เทียบกับความยาว พร้อมเส้นแนวโน้มที่แสดงไว้ก่อนหน้า

การถดถอยใน R เบื้องต้น

สัมประสิทธิ์การตัดสินใจ

บางครั้งเรียกว่า "r-squared" หรือ "R-squared"

สัดส่วนของความแปรปรวนในตัวแปรตอบสนองที่สามารถทำนายได้จากตัวแปรอธิบาย

  • 1 หมายถึงความพอดีสมบูรณ์แบบ
  • 0 หมายถึงความพอดีที่แย่ที่สุด
การถดถอยใน R เบื้องต้น

summary()

ดูที่ค่าชื่อ "Multiple R-Squared"

mdl_bream <- lm(mass_g ~ length_cm, data = bream)
summary(mdl_bream)
# Some lines of output omitted

Residual standard error: 74.15 on 33 degrees of freedom
Multiple R-squared:  0.8781,    Adjusted R-squared:  0.8744 
F-statistic: 237.6 on 1 and 33 DF,  p-value: < 2.2e-16
การถดถอยใน R เบื้องต้น

glance()

library(broom)
library(dplyr)
mdl_bream %>% 
  glance()
# A tibble: 1 × 12
  r.squared adj.r.squared sigma statistic  p.value    df logLik   AIC   BIC
      <dbl>         <dbl> <dbl>     <dbl>    <dbl> <dbl>  <dbl> <dbl> <dbl>
1     0.878         0.874  74.2      238. 1.22e-16     1  -199.  405.  409.
# ... with 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
mdl_bream %>% 
  glance() %>% 
  pull(r.squared)
0.8780627
การถดถอยใน R เบื้องต้น

คือค่าสหสัมพันธ์ยกกำลังสองนั่นเอง

bream %>% 
  summarize(
    coeff_determination = cor(length_cm, mass_g) ^ 2
  )
  coeff_determination
1           0.8780627
การถดถอยใน R เบื้องต้น

ค่าความคลาดเคลื่อนมาตรฐาน (RSE)

ความแตกต่าง "ทั่วไป" ระหว่างค่าที่ทำนายกับค่าตอบสนองที่สังเกตได้จริง

มีหน่วยเดียวกับตัวแปรตอบสนอง

การถดถอยใน R เบื้องต้น

summary() อีกครั้ง

ดูที่ค่าชื่อ "Residual standard error"

summary(mdl_bream)
# Some lines of output omitted

Residual standard error: 74.15 on 33 degrees of freedom
Multiple R-squared:  0.8781,    Adjusted R-squared:  0.8744 
F-statistic: 237.6 on 1 and 33 DF,  p-value: < 2.2e-16
การถดถอยใน R เบื้องต้น

glance() อีกครั้ง

library(broom)
library(dplyr)
mdl_bream %>% 
  glance()
# A tibble: 1 x 11
  r.squared adj.r.squared sigma statistic  p.value    df logLik   AIC   BIC deviance df.residual
      <dbl>         <dbl> <dbl>     <dbl>    <dbl> <int>  <dbl> <dbl> <dbl>    <dbl>       <int>
1     0.878         0.874  74.2      238. 1.22e-16     2  -199.  405.  409.  181452.          33
mdl_bream %>% 
  glance() %>% 
  pull(sigma)
74.15224
การถดถอยใน R เบื้องต้น

การคำนวณ RSE: ค่าความคลาดเคลื่อนยกกำลังสอง

bream %>% 
  mutate(
    residuals_sq = residuals(mdl_bream) ^ 2
  )
  species mass_g length_cm residuals_sq
1   Bream    242      23.2     138.9571
2   Bream    290      24.0     260.7586
3   Bream    340      23.9    5126.9926
4   Bream    363      26.3    1318.9197
5   Bream    430      26.5     390.9743
6   Bream    450      26.8     547.9380
...
การถดถอยใน R เบื้องต้น

การคำนวณ RSE: ผลรวมของค่าความคลาดเคลื่อนยกกำลังสอง

bream %>% 
  mutate(
    residuals_sq = residuals(mdl_bream) ^ 2
  ) %>% 
  summarize(
    resid_sum_of_sq = sum(residuals_sq)
  )
  resid_sum_of_sq
1        181452.3
การถดถอยใน R เบื้องต้น

การคำนวณ RSE: degrees of freedom

Degrees of freedom เท่ากับจำนวนการสังเกตลบด้วยจำนวนสัมประสิทธิ์ของโมเดล

bream %>% 
  mutate(
    residuals_sq = residuals(mdl_bream) ^ 2
  ) %>% 
  summarize(
    resid_sum_of_sq = sum(residuals_sq),
    deg_freedom = n() - 2
  )
  resid_sum_of_sq deg_freedom
1        181452.3          33
การถดถอยใน R เบื้องต้น

การคำนวณ RSE: รากที่สองของอัตราส่วน

bream %>% 
  mutate(
    residuals_sq = residuals(mdl_bream) ^ 2
  ) %>% 
  summarize(
    resid_sum_of_sq = sum(residuals_sq),
    deg_freedom = n() - 2,
    rse = sqrt(resid_sum_of_sq / deg_freedom)
  )
  resid_sum_of_sq deg_freedom      rse
1        181452.3          33 74.15224
การถดถอยใน R เบื้องต้น

การตีความ RSE

mdl_bream มี RSE เท่ากับ 74

ความแตกต่างระหว่างมวล bream ที่ทำนายได้กับที่สังเกตจริงโดยทั่วไปอยู่ที่ประมาณ 74 กรัม

การถดถอยใน R เบื้องต้น

Root-mean-square error (RMSE)

Residual standard error

bream %>% 
  mutate(
    residuals_sq = residuals(mdl_bream) ^ 2
  ) %>% 
  summarize(
    resid_sum_of_sq = sum(residuals_sq),
    deg_freedom = n() - 2,
    rse = sqrt(resid_sum_of_sq / deg_freedom)
  )

Root-mean-square error

bream %>% 
  mutate(
    residuals_sq = residuals(mdl_bream) ^ 2
  ) %>% 
  summarize(
    resid_sum_of_sq = sum(residuals_sq),
    n_obs = n(),
    rmse = sqrt(resid_sum_of_sq / n_obs)
  )
การถดถอยใน R เบื้องต้น

มาฝึกกันเถอะ!

การถดถอยใน R เบื้องต้น

Preparing Video For Download...