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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *