วิธีใช้ฟังก์ชัน optim ใน r (2 ตัวอย่าง)


คุณสามารถใช้ฟังก์ชัน optim ใน R เพื่อเพิ่มประสิทธิภาพทั่วไปได้

ฟังก์ชันนี้ใช้ไวยากรณ์พื้นฐานต่อไปนี้:

 optim(by, fn, data, ...)

ทอง:

  • โดย : ค่าเริ่มต้นของพารามิเตอร์ที่จะปรับให้เหมาะสม
  • fn : ฟังก์ชั่นเพื่อย่อหรือขยายให้ใหญ่สุด
  • data : ชื่อของวัตถุใน R ที่มีข้อมูล

ตัวอย่างต่อไปนี้แสดงวิธีการใช้ฟังก์ชันนี้ในสถานการณ์ต่อไปนี้:

1. ค้นหาค่าสัมประสิทธิ์ของแบบจำลองการถดถอยเชิงเส้น

2. ค้นหาค่าสัมประสิทธิ์ของแบบจำลองการถดถอยกำลังสอง

ไปกันเถอะ!

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

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

 #create data frame
df <- data.frame(x=c(1, 3, 3, 5, 6, 7, 9, 12),
                 y=c(4, 5, 8, 6, 9, 10, 13, 17))

#define function to minimize residual sum of squares
min_residuals <- function (data, par) {
                   with (data, sum((par[1] + par[2] * x - y)^2))
}

#find coefficients of linear regression model
optim(par=c(0, 1), fn=min_residuals, data=df)

$by
[1] 2.318592 1.162012

$value
[1] 11.15084

$counts
function gradient 
      79 NA 

$convergence
[1] 0

$message
NULL

การใช้ค่าที่ส่งคืนภายใต้ $par เราสามารถเขียนแบบจำลองการถดถอยเชิงเส้นแบบพอดีต่อไปนี้:

y = 2.318 + 1.162x

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

 #find coefficients of linear regression model using lm() function
lm(y ~ x, data=df)

Call:
lm(formula = y ~ x, data = df)

Coefficients:
(Intercept) x  
      2,318 1,162

ค่าสัมประสิทธิ์เหล่านี้สอดคล้องกับค่าที่เราคำนวณโดยใช้ฟังก์ชัน optim()

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

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

 #create data frame
df <- data. frame (x=c(6, 9, 12, 14, 30, 35, 40, 47, 51, 55, 60),
                 y=c(14, 28, 50, 70, 89, 94, 90, 75, 59, 44, 27))

#define function to minimize residual sum of squares
min_residuals <- function (data, par) {
                   with (data, sum((par[1] + par[2]*x + par[3]*x^2 - y)^2))
}

#find coefficients of quadratic regression model
optim(par=c(0, 0, 0), fn=min_residuals, data=df)

$by
[1] -18.261320 6.744531 -0.101201

$value
[1] 309.3412

$counts
function gradient 
     218 NA 

$convergence
[1] 0

$message
NULL

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

y = -18.261 + 6.744x – 0.101x 2

เราสามารถตรวจสอบได้ว่าสิ่งนี้ถูกต้องโดยใช้ฟังก์ชัน lm() ในตัวใน R:

 #create data frame
df <- data. frame (x=c(6, 9, 12, 14, 30, 35, 40, 47, 51, 55, 60),
                 y=c(14, 28, 50, 70, 89, 94, 90, 75, 59, 44, 27))

#create a new variable for x^2
df$x2 <- df$x^2

#fit quadratic regression model
quadraticModel <- lm(y ~ x + x2, data=df)

#display coefficients of quadratic regression model
summary(quadraticModel)$coef

               Estimate Std. Error t value Pr(>|t|)
(Intercept) -18.2536400 6.185069026 -2.951243 1.839072e-02
x 6.7443581 0.485515334 13.891133 6.978849e-07
x2 -0.1011996 0.007460089 -13.565470 8.378822e-07

ค่าสัมประสิทธิ์เหล่านี้สอดคล้องกับค่าที่เราคำนวณโดยใช้ฟังก์ชัน optim()

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

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

วิธีดำเนินการถดถอยเชิงเส้นอย่างง่ายใน R
วิธีดำเนินการถดถอยเชิงเส้นพหุคูณใน R
วิธีการตีความเอาต์พุตการถดถอยใน R

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

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