วิธีดำเนินการ ols regression ใน r (พร้อมตัวอย่าง)


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

วิธีนี้ช่วยให้เราสามารถค้นหาสมการต่อไปนี้:

ŷ = ข 0 + ข 1 x

ทอง:

  • ŷ : ค่าตอบกลับโดยประมาณ
  • b 0 : ต้นกำเนิดของเส้นถดถอย
  • b 1 : ความชันของเส้นถดถอย

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

ตัวอย่างทีละขั้นตอนต่อไปนี้แสดงวิธีการดำเนินการถดถอย OLS ใน R

ขั้นตอนที่ 1: สร้างข้อมูล

สำหรับตัวอย่างนี้ เราจะสร้างชุดข้อมูลที่ประกอบด้วยตัวแปรสองตัวต่อไปนี้สำหรับนักเรียน 15 คน:

  • จำนวนชั่วโมงเรียนทั้งหมด
  • ผลสอบ

เราจะทำการถดถอย OLS โดยใช้ชั่วโมงเป็นตัวแปรทำนายและคะแนนสอบเป็นตัวแปรตอบสนอง

รหัสต่อไปนี้แสดงวิธีสร้างชุดข้อมูลปลอมใน R:

 #create dataset
df <- data. frame (hours=c(1, 2, 4, 5, 5, 6, 6, 7, 8, 10, 11, 11, 12, 12, 14),
                 score=c(64, 66, 76, 73, 74, 81, 83, 82, 80, 88, 84, 82, 91, 93, 89))

#view first six rows of dataset
head(df)

  hours score
1 1 64
2 2 66
3 4 76
4 5 73
5 5 74
6 6 81

ขั้นตอนที่ 2: แสดงภาพข้อมูล

ก่อนที่จะดำเนินการถดถอย OLS เรามาสร้างแผนภาพกระจายเพื่อแสดงภาพความสัมพันธ์ระหว่างชั่วโมงและคะแนนสอบ:

 library (ggplot2)

#create scatterplot
ggplot(df, aes(x=hours, y=score)) +
  geom_point(size= 2 )

หนึ่งใน สี่สมมติฐาน ของการถดถอยเชิงเส้นคือมีความสัมพันธ์เชิงเส้นระหว่างตัวทำนายและตัวแปรตอบสนอง

จากกราฟเราจะเห็นว่าความสัมพันธ์มีลักษณะเป็นเส้นตรง เมื่อจำนวนชั่วโมงเพิ่มขึ้น คะแนนก็มีแนวโน้มที่จะเพิ่มขึ้นเป็นเส้นตรงเช่นกัน

จากนั้นเราสามารถสร้าง boxplot เพื่อแสดงภาพการกระจายของผลการสอบและตรวจสอบค่าผิดปกติ

หมายเหตุ : R นิยามการสังเกตว่าเป็นค่าผิดปกติ หากมีค่าเป็น 1.5 เท่าของพิสัยระหว่างควอร์ไทล์เหนือควอไทล์ที่ 3 หรือ 1.5 เท่าของพิสัยระหว่างควอไทล์ที่ต่ำกว่าควอไทล์ที่ 1

หากการสังเกตนั้นผิดปกติ วงกลมเล็กๆ จะปรากฏขึ้นใน boxplot:

 library (ggplot2)

#create scatterplot
ggplot(df, aes(y=score)) +
  geom_boxplot() 

ไม่มีวงกลมเล็กๆ ใน boxplot ซึ่งหมายความว่าไม่มีค่าผิดปกติในชุดข้อมูลของเรา

ขั้นตอนที่ 3: ดำเนินการการถดถอย OLS

ต่อไป เราสามารถใช้ฟังก์ชัน lm() ใน R เพื่อดำเนินการถดถอย OLS โดยใช้ชั่วโมงเป็นตัวแปรทำนายและใช้คะแนนเป็นตัวแปรตอบสนอง:

 #fit simple linear regression model
model <- lm(score~hours, data=df)

#view model summary
summary(model)

Call:
lm(formula = score ~ hours)

Residuals:
   Min 1Q Median 3Q Max 
-5,140 -3,219 -1,193 2,816 5,772 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 65,334 2,106 31,023 1.41e-13 ***
hours 1.982 0.248 7.995 2.25e-06 ***
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.641 on 13 degrees of freedom
Multiple R-squared: 0.831, Adjusted R-squared: 0.818 
F-statistic: 63.91 on 1 and 13 DF, p-value: 2.253e-06

จากสรุปแบบจำลอง เราจะเห็นว่าสมการถดถอยที่ติดตั้งคือ:

คะแนน = 65.334 + 1.982*(ชั่วโมง)

ซึ่งหมายความว่าแต่ละชั่วโมงที่เรียนเพิ่มเติมจะสัมพันธ์กับคะแนนสอบเฉลี่ยที่เพิ่มขึ้น 1,982 คะแนน

ค่าเดิมที่ 65,334 บอกเราถึงคะแนนสอบโดยเฉลี่ยที่คาดหวังสำหรับนักเรียนที่เรียนเป็นเวลา 0 ชั่วโมง

นอกจากนี้เรายังสามารถใช้สมการนี้เพื่อค้นหาคะแนนสอบที่คาดหวังโดยพิจารณาจากจำนวนชั่วโมงที่นักเรียนเรียน

เช่น นักเรียนที่เรียน 10 ชั่วโมง ควรได้คะแนนสอบ 85.15 :

คะแนน = 65.334 + 1.982*(10) = 85.15

ต่อไปนี้เป็นวิธีการตีความสรุปแบบจำลองที่เหลือ:

  • Pr(>|t|): นี่คือค่า p ที่เกี่ยวข้องกับค่าสัมประสิทธิ์แบบจำลอง เนื่องจากค่า p สำหรับ ชั่วโมง (2.25e-06) น้อยกว่า 0.05 อย่างมีนัยสำคัญ เราจึงสามารถพูดได้ว่ามีความสัมพันธ์ที่มีนัยสำคัญทางสถิติระหว่าง ชั่วโมง และ คะแนน
  • ค่า R-squared หลายตัว: ตัวเลขนี้บอกเราว่าเปอร์เซ็นต์ของความแปรผันของคะแนนสอบสามารถอธิบายได้ด้วยจำนวนชั่วโมงที่เรียน โดยทั่วไป ยิ่งค่า R-squared ของแบบจำลองการถดถอยมีค่ามากเท่าใด ตัวแปรทำนายก็จะทำนายค่าของตัวแปรตอบสนองได้ดีขึ้นเท่านั้น ในกรณีนี้ 83.1% ของความแปรผันของคะแนนสามารถอธิบายได้ด้วยจำนวนชั่วโมงที่ศึกษา
  • ข้อผิดพลาดมาตรฐานที่เหลือ: นี่คือระยะห่างเฉลี่ยระหว่างค่าที่สังเกตได้และเส้นการถดถอย ยิ่งค่านี้ต่ำลง เส้นการถดถอยก็จะยิ่งสอดคล้องกับข้อมูลที่สังเกตได้มากขึ้นเท่านั้น ในกรณีนี้ คะแนนเฉลี่ยที่สังเกตได้ในการสอบจะเบี่ยงเบนไป 3,641 คะแนน จากคะแนนที่ทำนายด้วยเส้นถดถอย
  • สถิติ F และค่า p: สถิติ F ( 63.91 ) และค่า p ที่สอดคล้องกัน ( 2.253e-06 ) บอกเราถึงความสำคัญโดยรวมของแบบจำลองการถดถอย กล่าวคือ ตัวแปรตัวทำนายในแบบจำลองนั้นมีประโยชน์ในการอธิบายการเปลี่ยนแปลงหรือไม่ . ในตัวแปรตอบสนอง เนื่องจากค่า p ในตัวอย่างนี้น้อยกว่า 0.05 แบบจำลองของเราจึงมีนัยสำคัญทางสถิติ และ ชั่วโมง จึงถือว่ามีประโยชน์ในการอธิบายความแปรผันของ คะแนน

ขั้นตอนที่ 4: สร้างแปลงที่เหลือ

สุดท้าย เราจำเป็นต้องสร้างแปลงที่เหลือเพื่อตรวจสอบสมมติฐานของ การรักร่วมเพศ และ ความเป็นปกติ

ข้อสันนิษฐานของ โฮโมสซิดาสติกซิตี คือ ส่วนที่เหลือ ของแบบจำลองการถดถอยมีความแปรปรวนเท่ากันโดยประมาณในแต่ละระดับของตัวแปรทำนาย

เพื่อตรวจสอบว่าเป็นไปตามสมมติฐานนี้ เราสามารถสร้าง พล็อตของค่าคงเหลือเทียบกับค่าพอดี ได้

แกน x จะแสดงค่าที่พอดี และแกน y จะแสดงค่าคงเหลือ ตราบใดที่ส่วนที่เหลือปรากฏว่ามีการกระจายแบบสุ่มและสม่ำเสมอทั่วทั้งกราฟรอบๆ ค่าศูนย์ เราสามารถสรุปได้ว่าความเป็นเนื้อเดียวกันจะไม่ถูกละเมิด:

 #define residuals
res <- resid(model)

#produce residual vs. fitted plot
plot(fitted(model), res)

#add a horizontal line at 0 
abline(0,0)

ส่วนที่เหลือดูเหมือนจะกระจัดกระจายแบบสุ่มรอบๆ ศูนย์ และไม่มีรูปแบบที่เห็นได้ชัดเจน ดังนั้นจึงเป็นไปตามสมมติฐานนี้

สมมติฐานภาวะ ปกติ ระบุว่า ส่วนที่เหลือ ของแบบจำลองการถดถอยมีการกระจายตามปกติโดยประมาณ

เพื่อตรวจสอบว่าเป็นไปตามสมมติฐานนี้หรือไม่ เราสามารถสร้าง พล็อต QQ หากจุดลงจุดอยู่ตามแนวเส้นตรงประมาณ 45 องศา ข้อมูลก็จะมีการกระจายตามปกติ:

 #create QQ plot for residuals
qqnorm(res)

#add a straight diagonal line to the plot
qqline(res) 

สารตกค้างเบี่ยงเบนไปจากเส้น 45 องศาเล็กน้อย แต่ไม่มากพอที่จะทำให้เกิดความกังวลร้ายแรง เราสามารถสรุปได้ว่าเป็นไปตามสมมติฐานปกติ

เนื่องจากส่วนที่เหลือมีการกระจายตามปกติและเป็นโฮโมสเคดาสติก เราจึงตรวจสอบได้ว่าเป็นไปตามสมมติฐานของแบบจำลองการถดถอย OLS

ดังนั้นผลลัพธ์ของแบบจำลองของเราจึงมีความน่าเชื่อถือ

หมายเหตุ : หากไม่เป็นไปตามสมมติฐานตั้งแต่หนึ่งข้อขึ้นไป เราอาจพยายาม แปลง ข้อมูลของเรา

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานทั่วไปอื่นๆ ใน R:

วิธีดำเนินการถดถอยเชิงเส้นพหุคูณใน R
วิธีดำเนินการถดถอยเอ็กซ์โปเนนเชียลใน R
วิธีดำเนินการถดถอยกำลังสองน้อยที่สุดแบบถ่วงน้ำหนักใน R

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *