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 + bruitNB : 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")