La régression linéaire multiple

Un fichier de données

Travaillons sur une enquête de satisfactions dans un hôpital, récupéré lors d’un cours de FUN (France Unité Numérique). Les fichiers sont disponibles ici.

Par la suite, ces données seront stockées dans la variable satis .

Dans ces données comme souvent, les observations sont en lignes et les variables en colonnes.

Présentation

On cherche à expliquer une variable quantitative Y par des variables quantitatives ou catégorielles. Ces dernières seront par le logiciel codées en plusieurs variables binaires.

Y=a+b \times X_1 + c \times X_2 + \cdots + bruit

NB : le bruit devra avoir une distribution normale.

Un exemple

Cherchons à expliquer le score de relation avec les variables suivantes :
– âge
– sexe
– score.information
– profession

Les variables catégorielles

Il faudra faire très attention à bien convertir les variables catégorielles pour qu’elles ne soient pas interprétées comme des variables quantitatives.

satis$sexe.cat<-factor(satis$sexe,labels=c("H","F")) 
satis$profession.cat<-factor(satis$profession) 
satis$service.cat<-factor(satis$service)

Dans le logiciel, la première catégorie servira de référence. Par exemple, pour le sexe codé (“H”,”F”), “H” sera la référence. On cherchera donc à savoir si le fait d’être une femme modifie le score de relation.

Pour changer cette référence, on peut le faire de la sorte :

satis$sexe.cat <- relevel(satis$sexe.cat,ref="F")

La régression multiple

mod.sr.m<-lm(score.relation~age+sexe.cat+score.information+profession.cat,data=satis) 
summary(mod.sr.m)


Call:
lm(formula = score.relation ~ age + sexe.cat + score.information +
profession.cat, data = satis)

Residuals:
Min 1Q Median 3Q Max
-19.9512 -2.0524 0.7879 2.5011 8.9167

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 22.02989 4.36455 5.047 7.67e-07 ***
age 0.04289 0.01534 2.795 0.00551 **
sexe.catF -0.67479 0.47778 -1.412 0.15886
score.information 0.31210 0.03473 8.987 < 2e-16 *** profession.cat2 1.95365 4.21957 0.463 0.64369 profession.cat3 0.66762 4.16591 0.160 0.87278 profession.cat4 0.85505 4.16932 0.205 0.83764 profession.cat5 2.30864 4.17398 0.553 0.58059 profession.cat6 0.70852 4.20634 0.168 0.86635 profession.cat7 0.87308 4.27127 0.204 0.83817 profession.cat8 1.93984 4.21116 0.461 0.64538
— –
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 4.127 on 308 degrees of freedom
(215 observations deleted due to missingness)
Multiple R-squared: 0.2311, Adjusted R-squared: 0.2061
F-statistic: 9.257 on 10 and 308 DF, p-value: 2.068e-13

On voit les différentes variables qui ont été créées :
– sexe.catF
– profession.cat2
– profession.cat3
– profession.cat4
– profession.cat5
– profession.cat6
– profession.cat7
– profession.cat8

Pour voir apparaître les valeurs de p par variable :

drop1(mod.sr.m,.~.,test="F")


Single term deletions


Model:
score.relation ~ age + sexe.cat + score.information + profession.cat
Df Sum of Sq RSS AIC F value Pr(>F)
5246.0 915.21
age 1 133.08 5379.1 921.20 7.8134 0.005512 **
sexe.cat 1 33.98 5280.0 915.27 1.9947 0.158856
score.information 1 1375.56 6621.6 987.50 80.7605 < 2.2e-16 ***
profession.cat 7 136.28 5382.3 909.39 1.1430 0.335906


— -
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Cette fois-ci, pour l’âge, on a une valeur de p faible (0.00551) et b=0.04289.

Les autres critères étant inchangés, chaque augmentation de l’âge de 10 ans augmentera le score de relation de 0.4289.

On peut le voir en faisant deux prédictions.

predict(mod.sr.m,data=satis,data.frame(age=30,sexe.cat="F",score.information=4,profession.cat="5"))


1
26.19871

predict(mod.sr.m,data=satis,data.frame(age=40,sexe.cat="F",score.information=4,profession.cat="5"))


1
26.62757

Calculons la différence :

26.62757-26.19871


[1] 0.42886

Validité du modèle

hist(resid(mod.sr.m),col="brown")

histo_resid_03.png