Comment utiliser la fonction optim dans R (2 exemples)
Vous pouvez utiliser la fonction optim dans R pour des optimisations générales.
Cette fonction utilise la syntaxe de base suivante :
optim(par, fn, data, ...)
où:
- par : Valeurs initiales des paramètres à optimiser sur
- fn : Une fonction à minimiser ou à maximiser
- data : Le nom de l’objet dans R qui contient les données
Les exemples suivants montrent comment utiliser cette fonction dans les scénarios suivants :
1. Trouvez les coefficients d’un modèle de régression linéaire.
2. Trouvez les coefficients d’un modèle de régression quadratique.
Allons-y !
Exemple 1 : Trouver des coefficients pour un modèle de régression linéaire
Le code suivant montre comment utiliser la fonction optim() pour trouver les coefficients d’un modèle de régression linéaire en minimisant la somme des carrés résiduelle :
#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)
$par
[1] 2.318592 1.162012
$value
[1] 11.15084
$counts
function gradient
79 NA
$convergence
[1] 0
$message
NULL
En utilisant les valeurs renvoyées sous $par , nous pouvons écrire le modèle de régression linéaire ajusté suivant :
y = 2,318 + 1,162x
Nous pouvons vérifier que cela est correct en utilisant la fonction lm() intégrée dans R pour calculer les coefficients de régression :
#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
Ces valeurs de coefficient correspondent à celles que nous avons calculées à l’aide de la fonction optim() .
Exemple 2 : Trouver des coefficients pour un modèle de régression quadratique
Le code suivant montre comment utiliser la fonction optim() pour trouver les coefficients d’un modèle de régression quadratique en minimisant la somme des carrés résiduelle :
#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)
$par
[1] -18.261320 6.744531 -0.101201
$value
[1] 309.3412
$counts
function gradient
218 NA
$convergence
[1] 0
$message
NULL
En utilisant les valeurs renvoyées sous $par , nous pouvons écrire le modèle de régression quadratique ajusté suivant :
y = -18,261 + 6,744x – 0,101x 2
Nous pouvons vérifier que cela est correct en utilisant la fonction lm() intégrée dans 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
Ces valeurs de coefficient correspondent à celles que nous avons calculées à l’aide de la fonction optim() .
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans R :
Comment effectuer une régression linéaire simple dans R
Comment effectuer une régression linéaire multiple dans R
Comment interpréter la sortie de régression dans R