Simple Linear Regression กับ Lab R

Tossapon Nuanchuay
ntossapo
Published in
3 min readNov 14, 2016

ผมกำลังเรียน Machine Learning ใน Udacity กับ Probability & Statistic แล้วพยายามค้นคว้าเพิ่มเติม ได้อ่านบทความ Simple Linear Regression จาก https://www.r-bloggers.com/simple-linear-regression-2/

ในการทำ Supervised Learning เป็นการเรียนรู้โดยใช้ข้อมูลที่มีอยู่ก่อน มาเรียนู้โดยใช้วิธีต่าง ๆ เช่น การอุปนัย (induction) การให้เหตุผล และอื่นๆ เช่น ถ้าบอกว่า
“วันนี้ฝนตก พรุ่งนี้ฝนตก วันที่ 3 ฝนตก ดังนั้น ทุกวันฝนจะตก” (induction) นอกจากนี้ยังมีเรื่อง deduction และ induction อีกด้วย ถือเป็นพื้นฐานที่สำคัญ

Regression ถือเป็นวิถีนิยมทางสถิติที่ใช้ในการหาความสัมพันธ์ระหว่างตัวแปร อันได้แก่ ตัวแปรต้น(ตัวแปรอิสระ และอีกหลาย ๆ ชื่อ) และตัวแปรตาม(ซึ่งอาจจะเป็นเซตของหลายๆตัวแปร) เช่น เวลากับจำนวนคนที่เป็นโรคเอดส์

หากเรานำเอาเวลาเป็นตัวแปรต้น แทนสัญลักษณ์ X และ จำนวนคนที่เป็นโรคเอดส์เป็นตัวแปรตาม แทนสัญลักษณ์ Y เราจะได้แผนภาพการกระจายที่บอกว่า เดือนนี้ ปีนี้ มีคนเป็นเอดส์กี่คน เราอาจจะเห็นและคาดเดาได้ว่า ยิ่งเวลาผ่านไป จะมีคนเป็นเอดส์มากขึ้นหรือน้อยลง จากการดูแนวโน้ม(หรือทำตาหรี่ๆ แล้วมันจะกลายเป็นเส้นตรง) แล้วมันเพิ่มขึ้นหรือลดลงเท่าไหรละ ?

คำตอบที่จะตอบคำถามนี้คือการใช้ Regression

พื้นฐานของ Regression คือ การทำให้แผนภาพกระจาย (Scatter plot) กลายเป็นสมการเชิงเส้น (Linear) ความชันจะบอกเราว่า มันเพิ่มขึ้นหรือลดลงเท่าไหร เมื่อเป็นความสัมพันธ์แบบเส้นตรงอย่างง่าย (เอาเส้นตรงอย่างง่ายก่อน ฟังก์ชันรูปแบบอื่นจะมี parameter จำนวนมาก)

จากสมการเส้นตรง Y = mX + c

หาความชันหรอ m= (y2-y1)/(x2–x1) ได้ไหม สูตร ม.ต้นเลย

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

เพราะฉนั้นแล้วให้มันเป็นไปในทิศทางเดียวกันการที่จะให้ได้มาซึ่งความชันคือการเฉลี่ยค่าความชัน จะได้ดังรูปนี้

Gradient and Intersection when x = 0

โดย Beta1 หมายถึง ความชัน และ Beta0(ใช้ ybar กับ xbar นะ) หมายถึงจุดตัดแกน Y อันเราจะเขียนสมการเส้นตรงในรูปใหม่ได้ว่า

Simple Linear Regression Equation

หมายเหตุ ค่า e คือค่าผลต่างจากค่าจริงและค่าที่ได้จากสมการซึ่งให้ตัดตรงนี้ออกไปก่อน

ตรงตามทฤษฎีเป๊ะ… มีทั้งความชัน และจุดตัดแกน Y

ทดลองสร้าง Regression ง่าย ๆ โดยใช้ dataset เวลากับจำนวนผู้ป่วยโรคเอดส์

Dataset ยังค่อนข้างแปลกๆ อยู่ ข้อมูลปีอยู่ในรูปแบบ ปี:ควอเตอร์ ผมจะทำการปรับเป็นจำนวนเดือนตั้งแต่ปี 1982

ขั้นตอนแรก ผมจะทำการ Load ข้อมูลเข้าไปใน ตัวแปรจำนวนคนที่เป็นเอดส์ไปอยู่ในโปรแกรมก่อน

จากนั้นทำการสร้างตัวแปรเดือนตามที่ได้ออกแบบไว้ข้างต้น

สร้าง dataframe ออกมาก็จะ

จากนั้นลองสั่งคำสั่ง
plot(
count ~ month
, aidsrelation
, main = “AIDS between 1st quater 1982 to 1st quater 1988”
)

จะได้กราฟ แผนภาพกระจายตัว (Scatter plot) ดังรูป

AIDS Simple Scatter plot

ต่อไปเราจะลองสร้าง Linear Model ขึ้นมา โดยการใช้คำสั่ง lm แล้วใช้คำสั่ง summary มาดูว่าเกิดอะไรขึ้น

R จะช่วยเราหาค่า parameter ต่างๆที่สำคัญเมื่อเราบอกกับโปรแกรมว่า Dataset นี้เป็นแบบ Linear เช่น Residuals, ANOVA, Coefficients เป็นต้น

จากข้อมูลด้านบน จะได้สมการง่าย ๆ จากการทำ Regression ว่า

จำนวนผู้เป็นโรคเอดส์ = 86.546 * เดือน-1138.668
หรือ ถ้ามอง จำนวนเป็น Y และ เวลา เป็น X จะได้ว่า
Y = (86.546X) -1138.668 นั้นเอง

จากนั้นลองดูกราฟ Regression ด้วยคำสั่ง abline

จะได้ผลลัพธ์ดังรูปนี้ ซึ่ง กราฟเส้นตรงเป็นกราฟที่มาตจากการคำนวณ Regression โดยใช้สูตรคำนวณตามที่ได้อธิบายไว้ด้านบน

ถ้าหากต้องการทำ Prediction จะต้องใช้คำสั่ง predict() ตัวอย่างเช่น เราต้องการทำนายว่าเดือนที่ 22 มีคนเป็นโรคเอดส์กี่คน

ทำนายว่าจะมีผู้ป่วยเป็นโรคเอดส์ 765.335 คน ปัดเป็น 766 คน ซึ่งเมื่อมาตรวจสอบค่าก็ให้ความใกล้เคียง

การทำ Regression คือการนำข้อมูลที่มีอยู่เพื่อมาดูอัตราระหว่างตัวแปรต้นและตัวแปรตาม นำเสนอออกมาในรูปแบบสมการ เชิงเส้น เมื่อได้สมการสามารถแทนค่าและหาค่าตัวแปรตามเมื่อข้อมูลไม่มีข้อมูลตัวแปรต้นนั้นๆ หรือกลับกัน สามารถแทนค่าตัวแปรตาม เพื่อหาตัวแปรต้น อย่างไรก็ดี การทำนายก็เหมือนการเดา อย่างมีหลักการ มักจะมีค่า error ค่าที่ทำนายได้ ไม่ถูกต้องเสียทีเดียว

Reference

--

--