การแปลงตัวแปร

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

Richie Cotton

Data Evangelist at DataCamp

ชุดข้อมูล Perch

library(dplyr)

perch <- fish %>%
  filter(species == "Perch")
species mass_g length_cm
Perch 5.9 7.5
Perch 32.0 12.5
Perch 40.0 13.8
Perch 51.5 15.0
Perch 70.0 15.7
... ... ...
การถดถอยใน R เบื้องต้น

ความสัมพันธ์ไม่เป็นเชิงเส้น

ggplot(perch, aes(length_cm, mass_g)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)

กราฟกระจายของมวล perch เทียบกับความยาว พร้อมเส้นแนวโน้ม โดยมวลเพิ่มขึ้นเร็วกว่าความสัมพันธ์เชิงเส้น ทำให้เส้นกราฟโค้งขึ้น

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

Bream กับ Perch

ปลา bream กำลังว่ายน้ำ ปลา bream มีลักษณะแบน

ปลา perch กำลังว่ายน้ำ ปลา perch มีลักษณะกลม

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

พล็อตมวล กับ ความยาวยกกำลังสาม

ggplot(perch, aes(length_cm ^ 3, mass_g)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)

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

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

สร้างโมเดลมวล กับ ความยาวยกกำลังสาม

mdl_perch <- lm(mass_g ~ I(length_cm ^ 3), data = perch)
Call:
lm(formula = mass_g ~ I(length_cm^3), data = perch)

Coefficients:
   (Intercept)  I(length_cm^3)  
       -0.1175          0.0168
การถดถอยใน R เบื้องต้น

พยากรณ์มวล กับ ความยาวยกกำลังสาม

explanatory_data <- tibble(
  length_cm = seq(10, 40, 5)
)
prediction_data <- explanatory_data %>%
  mutate(
    mass_g = predict(mdl_perch, explanatory_data)
  )
# A tibble: 7 x 2
  length_cm mass_g
      <dbl>  <dbl>
1        10   16.7
2        15   56.6
3        20  134. 
4        25  262. 
5        30  453. 
6        35  720. 
7        40 1075.
การถดถอยใน R เบื้องต้น

พล็อตมวล กับ ความยาวยกกำลังสาม

ggplot(perch, aes(length_cm ^ 3, mass_g)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  geom_point(data = prediction_data, color = "blue")

กราฟกระจายของมวล perch เทียบกับความยาวยกกำลังสาม พร้อมเส้นแนวโน้ม และจุดที่คำนวณจากฟังก์ชัน predict() โดยจุดเหล่านี้อยู่บนเส้นแนวโน้มพอดี

ggplot(perch, aes(length_cm, mass_g)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  geom_point(data = prediction_data, color = "blue")

กราฟกระจายของมวล perch เทียบกับความยาว พร้อมเส้นแนวโน้ม และจุดที่คำนวณจากฟังก์ชัน predict() จุดไม่ได้อยู่บนเส้นแนวโน้ม แต่เป็นไปตามรูปโค้งของข้อมูล

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

ชุดข้อมูลโฆษณา Facebook

การทำงานของโฆษณา

  1. จ่ายเงินให้ Facebook เพื่อแสดงโฆษณา
  2. ผู้ใช้เห็นโฆษณา ("impressions")
  3. บางคนที่เห็นโฆษณาจะคลิก

 

  • 936 แถว
  • แต่ละแถวแทน 1 โฆษณา
spent_usd n_impressions n_clicks
1.43 7350 1
1.82 17861 2
1.25 4259 1
1.29 4133 1
4.77 15615 3
... ... ...
การถดถอยใน R เบื้องต้น

กราฟแน่นเกินไป

ggplot(
  ad_conversion, 
  aes(spent_usd, n_impressions)
) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)

กราฟกระจายของจำนวน impressions เทียบกับงบโฆษณา พร้อมเส้นแนวโน้ม จุดข้อมูลส่วนใหญ่อัดกันอยู่ที่มุมล่างซ้ายของกราฟ

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

รากที่สอง กับ รากที่สอง

ggplot(
  ad_conversion, 
  aes(sqrt(spent_usd), sqrt(n_impressions))
) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)

กราฟกระจายของรากที่สองของจำนวน impressions เทียบกับรากที่สองของงบโฆษณา พร้อมเส้นแนวโน้ม ตอนนี้จุดข้อมูลกระจายตัวสม่ำเสมอมากขึ้นทั่วกราฟ

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

การสร้างโมเดลและการพยากรณ์

mdl_ad <- lm(
  sqrt(n_impressions) ~ sqrt(spent_usd), 
  data = ad_conversion
)
explanatory_data <- tibble(
  spent_usd = seq(0, 600, 100)
)
prediction_data <- explanatory_data %>% 
  mutate(
    sqrt_n_impressions = predict(
      mdl_ad, explanatory_data
    ),
    n_impressions = sqrt_n_impressions ^ 2
  )
# A tibble: 7 x 3
  spent_usd sqrt_n_impressions n_impressions
      <dbl>              <dbl>         <dbl>
1         0               15.3          235.
2       100              598.        357289.
3       200              839.        703890.
4       300             1024.       1048771.
5       400             1180.       1392762.
6       500             1318.       1736184.
7       600             1442.       2079202.
การถดถอยใน R เบื้องต้น

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

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

Preparing Video For Download...