Comment effectuer une régression linéaire avec des variables catégorielles dans R



La régression linéaire est une méthode que nous pouvons utiliser pour quantifier la relation entre une ou plusieurs variables prédictives et une variable de réponse .

Souvent, vous souhaiterez peut-être ajuster un modèle de régression en utilisant une ou plusieurs variables catégorielles comme variables prédictives.

Ce didacticiel fournit un exemple étape par étape de la façon d’effectuer une régression linéaire avec des variables catégorielles dans R.

Exemple : régression linéaire avec des variables catégorielles dans R

Supposons que nous ayons le bloc de données suivant dans R qui contient des informations sur trois variables pour 12 joueurs de basket différents :

  • points marqués
  • heures passées à pratiquer
  • programme de formation utilisé
#create data frame
df <- data.frame(points=c(7, 7, 9, 10, 13, 14, 12, 10, 16, 19, 22, 18),
                 hours=c(1, 2, 2, 3, 2, 6, 4, 3, 4, 5, 8, 6),
                 program=c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3))

#view data frame
df

   points hours program
1       7     1       1
2       7     2       1
3       9     2       1
4      10     3       1
5      13     2       2
6      14     6       2
7      12     4       2
8      10     3       2
9      16     4       3
10     19     5       3
11     22     8       3
12     18     6       3

Supposons que nous souhaitions adapter le modèle de régression linéaire suivant :

points = β 0 + β 1 heures + β 2 programme

Dans cet exemple, les heures sont une variable continue mais le programme est une variable catégorielle qui peut prendre trois catégories possibles : programme 1, programme 2 ou programme 3.

Afin d’ajuster ce modèle de régression et de dire à R que la variable « programme » est une variable catégorielle, nous devons utiliser as.factor() pour la convertir en facteur, puis ajuster le modèle :

#convert 'program' to factor
df$program <- as.factor(df$program)

#fit linear regression model
fit <- lm(points ~ hours + program, data = df)

#view model summary
summary(fit)

Call:
lm(formula = points ~ hours + program, data = df)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.5192 -1.0064 -0.3590  0.8269  2.4551 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   6.3013     0.9462   6.660 0.000159 ***
hours         0.9744     0.3176   3.068 0.015401 *  
program2      2.2949     1.1369   2.019 0.078234 .  
program3      6.8462     1.5499   4.417 0.002235 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.403 on 8 degrees of freedom
Multiple R-squared:  0.9392,	Adjusted R-squared:  0.9164 
F-statistic: 41.21 on 3 and 8 DF,  p-value: 3.276e-05

À partir des valeurs de la colonne Estimation , nous pouvons écrire le modèle de régression ajusté :

points = 6,3013 + 0,9744 (heures) + 2,2949 (programme 2) + 6,8462 (programme 3)

Voici comment interpréter les valeurs des coefficients dans le résultat :

  • heures : Pour chaque heure supplémentaire passée à pratiquer, les points marqués augmentent en moyenne de 0,9744, en supposant que le programme reste constant.
    • La valeur p est de 0,015, ce qui indique que les heures passées à pratiquer sont un prédicteur statistiquement significatif des points marqués au niveau α = 0,05.
  • programme2 : les joueurs qui ont utilisé le programme 2 ont marqué en moyenne 2,2949 points de plus que les joueurs qui ont utilisé le programme 1, en supposant que les heures restent constantes.
    • La valeur p est de 0,078, ce qui indique qu’il n’y a pas de différence statistiquement significative dans les points marqués par les joueurs ayant utilisé le programme 2 par rapport aux joueurs ayant utilisé le programme 1, au niveau α = 0,05.
  • programme3 : les joueurs qui ont utilisé le programme 3 ont marqué en moyenne 2,2949 points de plus que les joueurs qui ont utilisé le programme 1, en supposant que les heures restent constantes.
    • La valeur p est de 0,002, ce qui indique qu’il existe une différence statistiquement significative dans les points marqués par les joueurs ayant utilisé le programme 3 par rapport aux joueurs ayant utilisé le programme 1, au niveau α = 0,05.

À l’aide du modèle de régression ajusté, nous pouvons prédire le nombre de points marqués par un joueur en fonction du nombre total d’heures passées à s’entraîner et du programme qu’il a utilisé.

Par exemple, nous pouvons utiliser le code suivant pour prédire les points marqués par un joueur qui s’est entraîné pendant 5 heures et a utilisé le programme d’entraînement 3 :

#define new player
new <- data.frame(hours=c(5), program=as.factor(c(3)))

#use the fitted model to predict the points for the new player
predict(fit, newdata=new)

       1 
18.01923 

Le modèle prédit que ce nouveau joueur marquera 18,01923 points.

Nous pouvons confirmer que cela est correct en insérant les valeurs du nouveau joueur dans l’équation de régression ajustée :

  • points = 6,3013 + 0,9744 (heures) + 2,2949 (programme 2) + 6,8462 (programme 3)
  • points = 6,3013 + 0,9744(5) + 2,2949(0) + 6,8462(1)
  • points = 18,019

Cela correspond à la valeur que nous avons calculée à l’aide de la fonction prédire() dans R.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans R :

Comment effectuer une régression linéaire simple dans R
Comment effectuer une régression linéaire multiple dans R
Comment créer un tracé résiduel dans R

Ajouter un commentaire

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