What’s up friends! บทความนี้แอดจะมาอธิบายความสัมพันธ์ของค่าสถิติสำคัญสามตัวคือ covariance, correlation และ r-squared รวมถึงการแปลผลอย่างถูกต้อง พร้อมวิธีทำง่ายๆใน Excel/ R
นักสถิตินิยมใช้สถิติสามตัวนี้ในการหาความสัมพันธ์ระหว่างตัวแปรสองตัว ตัวอย่างวันนี้เราจะมาลองสร้าง linear morel ง่ายๆทำนายค่าโดยสารรถแท๊กซี่ y = f(x) = constant + slope*x โดยที่ y = taxi fare และ x = distance ดาวน์โหลดไฟล์ Excel (18.8KB) สำหรับ tutorial นี้ได้ที่นี่
ภาษาไทยเราเรียก y = ตัวแปรตาม (dependent) และ x = ตัวแปรต้น (independent) ข้อมูลที่แอดสร้างขึ้นมามี 2 columns, 20 rows ข้อมูลสะอาดไม่มี missing value มาลองคำนวณ summary statistics ง่ายๆกันก่อน

Excel ใช้ฟังชั่น =AVERAGE() สำหรับหาค่าเฉลี่ย และฟังชั่น = STDEV.S() สำหรับหาส่วนเบี่ยงเบนมาตรฐานของกลุ่มตัวอย่าง สังเกตว่าฟังชั่น STDEV นั้นมี .S ต่อท้ายด้วย (i.e. S ย่อมากจาก sample)
## mean of distance
=AVERAGE(A2:A21)
## standard deviation of distance
=STDEV.S(A2:A21)
To Do – ค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานของ taxi fare (column B) มีค่าเท่าไหร่?
Covariance
มาเริ่มกันที่สถิติตัวแรก Covariance คำนวณด้วยสูตรด้านล่าง ใช้แค่บวกลบคูณหารง่ายๆ
Formulacov(x, y) = sum( (x - mean_x) * (y - mean_y) ) * (1/ (n-1))
Covariance คือค่าสถิติที่ใช้วัดความสัมพันธ์ของตัวแปรสองตัว (เกิดจากคำว่า Co + Variance) เรียกสั้นๆว่า cov มีค่าเป็นได้ทั้งบวกและลบ โดยเครื่องหมาย +/- ในทางสถิติแค่บอกทิศทางความสัมพันธ์
- Positive covariance แปลว่า x ↑ y ↑ (หรือ x ↓ y ↓ เปลี่ยนแปลงในทิศทางเดียวกัน)
- Negative covariance แปลว่า x ↑ y ↓ (หรือ x ↓ y ↑ เปลี่ยนแปลงในทิศทางตรงข้ามกัน)
การอธิบายผล cov จะทำได้ค่อนข้างยากนิดนึง เพราะว่าค่า cov ไม่มี limit (i.e. no lower, upper bound) แปลว่าข้อมูลบางชุดเราอาจคำนวณ cov ได้เท่ากับ 100, 2500, 30000 หรือ -350000 ก็เป็นไปได้ นักสถิติจึงทำการ normalize covariance ให้มีค่าอยู่ระหว่าง [-1, +1] และเรียกสถิติตัวใหม่นี้ว่า Correlation เริ่มคุ้น!
Excel ใช้สูตร =COVARIANCE.S(distance, fare) เท่ากับ 183.6495 มีค่าเป็นบวกแปลว่าตัวแปรสองตัวเคลื่อนที่ในทิศทางเดียวกัน ระยะทางมากขึ้น ค่าโดยสารก็จะสูงขึ้น make sense!
Correlation
Correlation coefficient คือ covariance ที่ถูก normalized แล้ว เรียกสั้นๆว่า cor (นักสถิติใช้ตัวย่อว่า r) ไม่ว่าข้อมูลที่นำมาใช้คำนวณจะอยู่บน scale แบบใดก็ตาม cor จะมีค่าอยู่ในช่วง [-1, +1] เสมอ นักสถิติจึงนิยมใช้ค่า correlation สรุปผลข้อมูลมากกว่า covariance ชื่อเต็มของ correlation คือ “Pearson Product Moment Correlation Coefficient” ชื่อมึงจะยาวไปไหน 555+ (ตั้งชื่อตาม Karl Pearson ผู้สร้างค่าสถิตินี้)
Formulacor(x, y) = cov(x, y) / (sd_x * sd_y)
จากสูตรด้านบนจะเห็นว่า correlation = covariance / (sd_x * sd_y) เวลาได้ยินคำว่า normalization เทคนิคที่นักสถิตินิยมใช้คือการหาตัวหาร (i.e. denominator) ที่ทำให้ค่าสถิตินั้นๆอยู่ในช่วงที่เราต้องการ กรณีของ covariance ตัวหารที่เราต้องการคือ (sd_x * sd_y) เพื่อใช้ปรับค่า cov ให้อยู่ระหว่าง [-1, +1]
วิธีการอ่านค่า correlation ก็จะคล้ายๆกับ covariance เพราะมันคิดมาจากสูตรเดียวกัน
- Positive correlation (r > 0) ตัวแปร x และ y เคลื่อนที่ในทิศทางเดียวกัน
- Negative correlation (r < 0) ตัวแปร x และ y เคลื่อนที่ในทิศทางตรงข้ามกัน
- No correlation (r = 0) ตัวแปร x และ y ไม่มีความสัมพันธ์กันเลย i.e. ไม่มี pattern ที่โดดเด่น ข้อมูลกระจายตัวแบบสุ่ม
นอกจากทิศทางความสัมพันธ์ +/- เรายังสามารถบอกระดับความสัมพันธ์ได้อีกด้วย i.e. ตัวแปรสองตัวมีความสัมพันธ์กันมากหรือน้อย ภาษาอังกฤษเราใช้คำว่า magnitude หรือ strength ยิ่งค่า correlation มีค่าเข้าใกล้ |1| มากเท่าไหร่ (i.e. absolute) ความสัมพันธ์จะยิ่งสูงมากขึ้นเท่านั้น ในกรณีที่ r = |1| เราเรียกว่า “perfect correlation” มาลองดูเกณฑ์การวัดระดับค่า r ที่นักสถิตินิยมใช้ในตารางด้านล่าง
Absolute r | Interpretation |
0.1 – 0.3 | small |
0.3 – 0.5 | medium |
0.5 – 1.0 | large |
Excel ใช้สูตร =CORREL(distance, fare) เท่ากับ .9864 มีค่าเป็นบวกแปลว่าตัวแปรสองตัวเคลื่อนที่ในทิศทางเดียวกัน แปลผลเหมือนกับ covariance โดยค่าที่คำนวณได้อยู่ในเกณฑ์สูงมาก i.e. very strong correlation
สำคัญมาก! ทั้ง covariance และ correlation ใช้วัดความสัมพันธ์ของตัวแปร (x, y) แบบ numeric/ continuous (i.e. สามารถคำนวณค่า mean, sd ได้) และความสัมพันธ์ของทั้งสองตัวแปรต้องเป็นแบบ linear เท่านั้น

Tip – วิธีการดีที่สุดที่เราใช้ตรวจสอบความสัมพันธ์ของตัวแปร numeric สองตัวคือการสร้าง scatter plot ใน Excel เลือกข้อมูล (x, y) ที่เราต้องการ ไปที่ Insert > Charts > Scatter Plot และดูความชัน (slope) ของกราฟ
R-Squared
Correlation บอกทิศทางและระดับความสัมพันธ์ แต่ไม่ได้บอกว่าตัวแปรทั้งสองตัวแชร์ variance กันเท่าไหร่ หรือพูดง่ายๆคือ x อธิบาย y ได้กี่ %? เราสามารถตอบคำถามนี้ได้ด้วยค่า r-squared ซึ่งก็คือค่า correlation ยกกำลังสอง! (i.e. เราใช้ r แทนค่า correlation ส่วนการยกกำลังสองในทางคณิตศาสตร์เรียกว่า squared)
Formulacorrelation ** 2
r-squared หรือ r2 ใน context นี้เรียกว่า “explained variance” (หรือชื่อทางการในวิชาสถิติคือ Coefficient of Determination) โดยค่า r-squared จะมีค่าอยู่ระหว่าง [0, 1] ยิ่งเข้าใกล้ 1 แปลว่าตัวแปรสองตัวมีความสัมพันธ์กันสูง และเราสามารถใช้ x อธิบายหรือทำนาย y ได้ค่อนข้างดี
correlation (r) | r-squared (r2) |
0.2 | 0.04 |
0.5 | 0.25 |
0.9 | 0.81 |
จากตารางด้านบน จะเห็นว่ายิ่งค่า correlation สูงขึ้นมากเท่าไหร่ เช่น r = .9 ตัวแปรสองตัวยิ่งแชร์ความแปรปรวน (variance) กันมากขึ้นเท่านั้น explained variance = .9 * .9 = .81 หรือสรุปว่าตัวแปร y ถูกอธิบายด้วยตัวแปร x ได้ประมาณ 81% (ที่เหลืออีก 19% ของค่า y ที่ยังไม่ถูกอธิบายด้วย x เรียกว่า unexplained variance)
## simple linear model taxi fare as a function of distance
y = 37.895 + 5.2471*x
r-squared = 0.9731
วิธีคำนวณ r-squared ใน Excel ทำได้หลายแบบ วิธีที่ง่ายที่สุดคือใช้ฟังชั่น =RSQ(A2:A21, B2:B21) หรือจะสร้าง scatter plot เสร็จแล้วคลิกขวาที่กราฟเพิ่ม linear trend line (i.e. Simple Linear Regression) และเรียกดูสมการ y = constant + slope*x และ r-squared บนกราฟได้เลย (ตัวอย่างอยู่ในไฟล์ Excel)
Note – สำหรับการอ่านค่า R2 ของโมเดล multiple linear regression y = f(x1, x2, x3, …) เวลาเรามีตัวแปรต้นมากกว่าหนึ่งตัว จะแตกต่างจาก simple model นิดนึง ไว้แอดมาเขียนสรุปให้อ่านในบทความต่อไป
Summary

ค่าสถิติทั้งสามตัวใช้วัดความสัมพันธ์ของตัวแปรสองตัว (x, y) เวลาที่ความสัมพันธ์ค่อนข้างเป็นเส้นตรง (i.e. approximately linear) ถ้าเรารู้ค่า covariance เราสามารถ derive correlation และ r-squared ได้ง่ายๆ หรือจะคิดจาก r-squared กลับไปเป็น covariance ก็ได้ ทำไมมันง่ายอย่างนี้ 😛
## easy formula
covariance = sum((x - mean_x) * (y - mean_y)) * (1/(n-1))
correlation = covariance/ (sd_x * sd_y)
r-squared = correlation ** 2
## values for our tutorial
covariance = 183.6495
correlation = 0.9864
r-squared = 0.9731
Example R Code
สำหรับเพื่อนๆที่เขียน R เป็นแล้ว สามารถนำโค้ดนี้ไปรันเพื่อสร้าง data frame คำนวณ cov, cor, r-squared ใน RStudio ได้เลย ใครยังเขียนไม่เป็น ลองดูคอร์สฟรีของเรา Data Analyst with R ได้ที่นี่
ตัวแปร y (line 3) ที่แอดสร้างขึ้นมาใช้สมการนี้ y = 35 + 5.5*x + random noise (จากฟังชั่น rnorm line 7) ตอนสร้างกราฟ scatter plot ข้อมูลดิบจะได้ไม่เป็นเส้นตรงเป๊ะๆ
## create example data | |
x <- 1:20 | |
y <- 35 + 5.5*x | |
## add some random noise to y | |
set.seed(99) | |
y <- y + rnorm(n = 20, mean = 2, sd = 5) | |
## create a data frame of xy | |
df <- data.frame(distance = x, fare = y) | |
summary(df) | |
## create a scatter plot | |
plot(x, y, pch=16, type="b", | |
main = "Taxi Fare Prediction", | |
xlab = "Distance (km)", ylab = "Fare (THB)") | |
abline(coef(lm(fare ~ distance, data = df)), col = "red", lty = "dashed") | |
## export csv file | |
write.csv(df, "taxi.csv", row.names = FALSE) | |
## covariance | |
cov(x,y) | |
sum((x - mean(x)) * (y-mean(y))) * 1/(length(x)-1) | |
## correlation | |
cor(x,y) | |
cov(x,y) / (sd(x) * sd(y)) | |
## r-squared | |
cor(x,y) ** 2 | |
summary(lm(y ~ x, data = df))$r.squared |
References
อ่านเพิ่มเติมเกี่ยวกับค่าสถิติทั้งหมดได้ที่ wikipedia covariance, correlation, r-squared
กราบบบบบ เห็นภาพเลยฮับพี่
ขอบคุณ content ดีๆมากๆค่า
ขอบคุณมากเลยคะ เห็นภาพชัดขึ้นมาก
จากชุดข้อมูลเดียวกัน ค่า R-Square ที่แสดงว่าค่า x สามารถอธิบาย y ได้มากเท่าไหร่ จะเท่ากับ ค่า y สามารถอธิบาย x มั้ยครับ
ถ้ามีตัวแปรสองตัวแค่ x y ได้ผลเหมือนกันครับ แต่ถ้ามี x มากกว่าหนึ่งตัว จะทำไม่ได้นะครับ
ขอบคุณมากครับ