Vous êtes sur la page 1sur 15

Analyse statistique multivariée (logiciel R)

Modèles linéaires généralisés


Correction des exercices proposés

1 Données biomédicales
Les données doivent être importées à l’aide des commandes suivantes
data <- read.table("Smoking.txt", header=TRUE)
data$Smoke<-as.factor(data$Smoke)
attach(data)

1. La commande glm exploitée en précisant la famille binomiale permet d’obtenir l’output


suivant

A partir de cet output, on obtient le modèle estimé ci-dessous (dans lequel les fonctions
indicatices I(condition) prennent la valeur 1 si la condition est vérifiée, 0 sinon; par

1
ailleurs, la variable Bloodgroup est écrite plus simplement sous la forme BG):

logit(π) = 0.747 + 0.628 wbc − 0.257 bmi + 0.022 Age + 0.317 I(Sex = M)
−0.868 I(BG = AB) + 0.642 I(BG = B) − 0.998 I(BG = 0)

où π est la probabilité d’être fumeur puisque, par défaut, la première modalité par
ordre alphabétique, à savoir N, est associée à la valeur 0 - échec - et la deuxième, Y, à
la valeur 1 - succès.
Lorsque toutes les indicatrices s’annulent, le modèle estime (via le lien logit) la prob-
abilité d’être fumeur pour une femme de groupe sanguin A. Selon ce modèle, toute
autre caractéristique étant égale, il semble que le fait d’être un homme augmente la
probabilité de succès, de même que le fait d’être du groupe B plutôt que A (tandis que
c’est le contraire pour les groupes O et AB).

2. Pour déterminer la probabilité qu’un individu fume sachant que cet individu a les
mêmes caractéristiques que celles du premier individu de la base de données, il suffit
de calculer la valeur attendue pour la 1ère observation sous le modèle estimé (disponible
via l’output glm1$fitted). On obtient π̂ = 0.048, probabilité très faible (et en accord
avec le fait qu’il s’agit d’un individu non fumeur). Remarquons que l’individu n◦ 7 est
également une femme de 43 ans de wbc égal à 5.6. Par contre, son groupe sanguin est
AB (ce qui est favorable à la diminution de la probabilité estimée) et sa valeur de bmi est
moins élevée que celle du premier individu (ce qui correspond à une augmentation du
prédicteur linéaire, puisque le coefficient de bmi est négatif, et donc à une augmentation
de la probabilité). La probabilité estimée est cette fois de l’ordre de 0.29, ce qui est
nettement plus élevé que précédemment (mais toujours inférieur à 0.5 alors qu’il s’agit,
cette fois, d’un individu fumeur).

3. Pour s’assurer que le modèle (1) est globalement intéressant, il faut comparer la
déviance du modèle complet (8 paramètres) avec celle du modèle basé uniquement sur
l’intercept (1 paramètre). Les valeurs utiles au calcul sont disponibles dans l’output
ci-dessous. On a donc (en suivant la démarche détaillée au cours)
Modèle NULL: D0 = 95.607 avec 86 − 1 = n − 1 = 85 degrés de liberté
Modèle complet: D = 73.819 avec 86 − 8 = 78 degrés de liberté

Dans ce cas, D0 − D = 21.788 pour 7 degrés de liberté (= 85 − 78, ou la différence


entre les nombres de paramètres estimés pour chaque modèle). Sous H0 , c’est-à-dire
sous l’hypothèse que tous les paramètres soient égaux à 0, la valeur observée est une
valeur de la loi χ2 à 7 degrés de liberté, ce qui mène à une p-valeur inférieure à 0.05 et
donc au rejet de l’hypothèse nulle (ainsi que confirmé par l’application de la commande
anova aux deux modèles considérés, comme indiqué sur l’output ci-dessous; p-valeur
exacte= 0.0027). Le modèle a donc globablement un sens.

2
4. L’output de la procédure GLM donne les résultats des tests individuels

H0 : βi = 0 ←→ H1 : βi 6= 0

pour chaque variable. Seules deux p-valeurs sont inférieures à 0.05 (celles des tests
correspondant aux variables bmi et wbc) et permettent de rejeter l’hypothèse d’égalité
à 0. Les autres variables ne semblent pas avoir un effet suffisant sur la probabilité de
fumer pour être reprises dans le modèle. Néanmoins, procédons de façon systématique
par sélection descendante basée sur l’AIC (après avoir chargé la librairie MASS). On
obtient les étapes suivantes, qui mènent au final à la suppression des variables Age,
Sex et Bloodgroup du modèle.

3
5. En se focalisant uniquement sur les variables bmi et wbc (modèle suggéré par le critère
AIC), on obtient le modèle estimé suivant (repris à la fin de l’output de la procédure
de sélection automatique):

logit(π) = 0.557 − 0.209 bmi + 0.563 wbc

Ce modèle peut être défini dans R de manière explicite à l’aide de la commande


glm2< −glm(Smoke∼wbc+bmi,family="binomial").

(a) Dans le modèle estimé, le paramètre de bmi est négatif, tandis que celui de wbc est
positif. Cette constatation, ainsi que le fait que la fonction logistique est croissante
et enfin le fait que le succès est ici joué par la modalité Fumeur, permettent de
dire que

4
ˆ Pour obtenir une probabilité élevée d’être fumeur, il faut plutôt avoir une
valeur élevée de la variable wbc.
ˆ Pour obtenir une probabilité élevée d’être fumeur, il faut plutôt avoir une
valeur faible de la variable bmi.
(b) Pour représenter le graphique de la Figure 1, il suffit d’exploiter les outputs perme-
ttant d’obtenir les prédicteurs linéaires (glm2$linear.predictor) et les valeurs
ajustées (glm2$fitted) du modèle final. A l’aide de la commande identify,
les deux observations correspondant aux points représentés par les cercles pleins
peuvent être identifiées.
0.8

85
0.6
NewProba

0.4
0.2

20
0.0

−4 −3 −2 −1 0 1

Predicteur

Figure 1: Moyennes estimées en fonction des prédicteurs linéaires et


identification de deux observations (graphique obtenu par la commande
plot(glm2$linear.predictor,glm2$fitted))

(c) Sachant que le prédicteur linéaire prend la forme suivante

0.557 − 0.209 × bmi + 0.563 × wbc,

pour trouver la valeur correspondant à un individu de bmi égal à 30 et de wbc


égal à 6, il suffit de calculer la quantité suivante:

0.557 − 0.209 × 30 + 0.563 × 6 = −2.33

A partir de la Figure 1, on peut voir que les valeurs comprises en abscisse entre -3
et -2 correspondent à une ordonnée située aux alentours de 0.1. Plus précisément,
à l’aide de la forme explicite de la fonction logistique, on a
exp(−2.33)
π̂ = = 0.088.
1 + exp(−2.33)

5
(d) En définissant la nouvelle variable Classif à partir de la variable indicatrice
glm2$fitted >= 0.5 (où glm2 représente le modèle ajusté), on peut déterminer
la table de contingence suivante
Classification
Réalité Non Fumeur (= FALSE) Fumeur (=TRUE)
Non Fumeur 63 2
Fumeur 14 7
Parmi les non fumeurs, 2 ont été mal classés, tandis que parmi les fumeurs, le
nombre d’erreurs de classification est important: 14 mal classés sur 21 individus!
(e) Le pourcentage d’erreur de classification obtenu par cette méthode est de 16/86=
18.6%.

2 Données sur les amphibiens écrasés


1. En n’utilisant que la variable D.PARK comme variable explicative pour un GLM de
Poisson, on obtient l’output suivant:

A partir de celui-ci, on peut écrire le modèle suivant pour le logarithme de la moyenne


de la variable TOT.N, notée µ:
ln µ = 4.316 − 0.00011 D.PARK
ou encore, en passant à l’exponentielle
µ = 74.888 exp(−0.00011 D.PARK)
Afin d’ajouter le modèle estimé sur le graphique représentant, en abscisse, les valeurs
de D.PARK, et en ordonnée, celles de TOT.N, il faut d’abord commencer par représenter

6
le diagramme de dispersion des deux variables. Ensuite, on peut ajouter, à l’aide de
la commande lines, les valeurs ajustées du modèle obtenues grâce à la commande
glm1$fitted.values. Plus précisément, le graphique de la Figure 2 correspond aux
deux commandes suivantes:

plot(D.PARK,TOT.N)
lines(D.PARK,glm1$fitted.value,col="red")
100
80
60
TOT.N

40
20
0

0 5000 10000 15000 20000 25000

D.PARK

Figure 2: Diagramme de dispersion de TOT.N en fonction de D.PARK, avec le modèle GLM-


Poisson tel qu’ajusté sur ces données

On constate que le nombre d’amphibiens écrasés sur la route diminue comme la distance
entre le tronçon de route et le parc augmente, ce qui parait logique. Le caractère
décroissant de la relation est bien visible sur les données brutes et est clairement
illustrée par le modèle de Poisson. Grâce à l’exponentielle, la moyenne estimée est
positive pour toute valeur de la variable en abscisse.

2. La transformation proposée par les auteurs se justifie par le fait que ces variables
présentent des variations importantes entre des valeurs très petites observées sur un
grand nombre de tronçons (notamment des valeurs nulles) et quelques valeurs net-
tement plus grandes (observées plus rarement). Afin de limiter cette variation, une
transformation en échelle logarithmique serait une option classique (en appliquant la
transformation ln(variable + 1) puisque ces variables présentent des valeurs nulles)
mais une transformation à l’aide de la racine carrée permet également de réduire les
grandes valeurs.
Les commandes suivantes permettent de transformer chaque variable:

7
POLIC 2<-sqrt(POLIC)
WAT.RES 2<-sqrt(WAT.RES)
URBAN 2<-sqrt(URBAN)
OLIVE 2<-sqrt(OLIVE)
L.P.ROAD 2<-sqrt(L.P.ROAD)
SHRUB 2<-sqrt(SHRUB)
D.WAT.COUR 2<-sqrt(D.WAT.COUR)
3. Rappelons que seules les variables décrites dans le tableau de la feuille d’énoncé sont
considérées dans l’analyse (cela élimine les colonnes 1, 2, 3, 4 et 6 de la base de
données). Plus précisément et afin de faciliter l’encodage des commandes, une matrice
de données, notée x et de dimension 52 ×17, a été définie dans R comme suit:
x< −cbind(OPEN.L,OLIVE 2,MONT.S,MONT,POLIC 2,SHRUB 2,URBAN 2,WAT.RES 2,
L.WAT.C,L.D.ROAD,L.P.ROAD 2,D.WAT.RES,D.WAT.COUR 2,D.PARK,N.PATCH,P.EDGE,L.SDI)
Stratégie 1:

D.WAT.COUR_2
L.P.ROAD_2
WAT.RES_2

D.WAT.RES
L.D.ROAD
SHRUB_2
URBAN_2

N.PATCH
POLIC_2
OLIVE_2

L.WAT.C
MONT.S

P.EDGE
D.PARK
OPEN.L

MONT

L.SDI
1
OPEN.L
OLIVE_2 0.8
MONT.S
MONT 0.6

POLIC_2
0.4
SHRUB_2
URBAN_2
0.2
WAT.RES_2
L.WAT.C 0
L.D.ROAD
-0.2
L.P.ROAD_2
D.WAT.RES
-0.4
D.WAT.COUR_2
D.PARK -0.6
N.PATCH
P.EDGE -0.8

L.SDI
-1

Figure 3: Résultat de la commande corrplot(cor(x)) où x est la matrice construite sur


les 17 variables d’intérêt

Avant d’effectuer une analyse en composantes principales sur les 17 variables explica-
tives d’intérêt (sous la forme transformée pour celles listées à la question 2), il convient
de déterminer s’il est adéquat de travailler avec la matrice de variances-covariances ou
s’il est préférable d’utiliser la matrice de corrélation. Or, il y a plusieurs unités de
mesure exploitées (ha, m...) et les ordres de grandeur des variances sont extrêmement
différents (avec par exemple, une variance égale à 0.0484 pour L.SDI et à 53687725
pour D.PARK). Il est impératif d’effectuer l’ACP sur la matrice de corrélation. Celle-ci
est illustrée à l’aide de l’output de la commande corrplot de la librairie du même nom
à la Figure 3.
On y repère quelques corrélations intéressantes dont l’interprétation n’est pas aisée vu
le peu d’information disponible sur les variables.
L’analyse en composantes principales sur la matrice x donne le screeplot représenté
à la Figure 4 (l’option npcs a été fixée à 17 car par défaut, seules les 10 premières

8
composantes principales sont représentées). On peut apercevoir un coude à la 3ème
composante (la part cumulée de variance expliquée par les trois premières composantes
principales est égale à 56.7%). Les composantes 4, 5 et 6 contiennent cependant encore
de l’information potentiellement non négligeable, avec des parts de variance expliquée
de l’ordre de 7-8% (les valeurs propres correspondantes étant toutes supérieures à 1).
En conservant 6 composantes principales, 79% de la variabilité serait expliquée, ce
qui parait un bon compromis sachant que la dimension du problème passerait tout de
même de 17 à 6. Cela parait être un choix intéressant.
ScreePlot
5
4
Variances

3
2
1
0

Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8 Comp.9 Comp.11 Comp.13 Comp.15 Comp.17

Figure 4: Scree plot obtenu par la commande plot(princomp(x,cor=TRUE))

Stratégie 2:
Afin de calculer les variance inflation factors entre les variables explicatives, il serait
possible d’ajuster 17 modèles de régression multiple de manière à obtenir, l’un après
l’autre, les coefficients R2 de tous ces ajustements, en vue de calculer les vif. Par
exemple, l’output ci-dessous correspond au modèle de régression multiple consistant à
expliquer la variable OPEN.L en fonction de toutes les autres. Le coefficient R2 étant
égal à 0.9938, le vif de cette variable vaut 1/(1 − R2 ) = 161.29, valeur clairement
problématique.

9
Il est possible de simplifier le calcul des valeurs vif en exploitant la commande vif de
la librairie car, sur un modèle fictif de régression multiple (pour rappel, les vif ne se
calculent qu’à l’aide des variables explicatives). Par exemple, on peut procéder comme
indiqué sur l’output ci-dessous:

NB: La valeur du vif de la variable OPEN.L est légèrement différente de la valeur


obtenue à partir de l’output de la régression multiple. Cette différence s’explique
par l’exploitation d’arrondis différents pour le R2 . Si seules les dix variables dont les
vifs sont les plus petits doivent être conservées, on garde les variables suivantes (classées
dans l’ordre croissant des vif): WAT.RES 2, D.WAT.RES, D.WAT.COUR 2, D.PARK,
SHRUB 2, L.P.ROAD 2, L.WAT.C, POLIC 2, MONT.S et L.D.ROAD. Toutes les variables
conservées ont des vifs raisonnables.

4. La procédure de sélection descendante basée sur l’AIC va être exploitée dans les deux
cas.
Stratégie 1: après avoir défini les composantes principales Y1 , . . . , Y6 comme suit

10
res<-princomp(x,cor=TRUE)
Y1<-res$scores[,1]
Y2<-res$scores[,2]
Y3<-res$scores[,3]
Y4<-res$scores[,4]
Y5<-res$scores[,5]
Y6<-res$scores[,6]
on peut exploiter ces composantes dans un modèle GLM et effectuer la sélection au-
tomatique des variables. On obtient l’output suivant

Le modèle final garde les cinq premières composantes principales et élimine la 6ème.
Il correspond au modèle estimé suivant:

ln µ = 3.106 + 0.074Y1 − 0.316Y2 − 0.054Y3 − 0.091Y4 − 0.122Y5 . (1)

Ce modèle est décrit dans l’output de la sélection AIC mais peut aussi être affiché dans
R à l’aide des commandes

glm2< −glm(TOT.N∼Y1+Y2+Y3+Y4+Y5,family=poisson)
summary(glm2)

Afin de pouvoir interpréter le modèle, il serait cependant intéressant de pouvoir le


ré-exprimer en fonction des variables initiales, ce qui est possible puisque chaque com-
posante principale est une combinaison linéaire de ces variables. Afin de retrouver

11
les variables initiales dans le modèle, il suffit de remplacer dans le modèle (1) chaque
composante principale par la combinaison linéaire la caractérisant (dont les coeffi-
cients se trouvent dans les outputs loadings de l’ACP). Par exemple, sachant que
res$loadings[,1] correspond aux composantes suivantes:
OPEN.L OLIVE 2 MONT.S MONT POLIC 2 SHRUB 2
0.048 0.350 -0.025 -0.266 0.262 0.214
URBAN 2 WAT.RES 2 L.WAT.C L.D.ROAD L.P.ROAD 2 D.WAT.RES
0.329 0.032 0.193 0.202 0.222 -0.065
D.WAT.COUR 2 D.PARK N.PATCH P.EDGE L.SDI
-0.122 -0.072 0.392 0.394 0.347
En multipliant ces composantes par le coefficient de Y1 du modèle estimé (à savoir
0.074), on obtient une première contribution de chaque variable à l’estimation de ln µ.
En répétant l’opération pour chaque CP et en additionnant les résultats, on a la possi-
bilité de déterminer la contribution globale (via chaque CP) de chaque variable initiale
sur l’estimation de la moyenne.
Par exemple, en tapant la ligne de commande suivante (qui multiplie chaque com-
posante principale par son coefficient, tel que disponible dans l’output $coefficient
de la procédure glm, avant d’additionner le tout),
res$loadings[,1]*glm2$coefficient[2]+res$loadings[,2]*glm2$coefficient[3]
+res$loadings[,3]*glm2$coefficient[4]+res$loadings[,4]*glm2$coefficient[5]
+res$loadings[,5]*glm2$coefficient[6]
l’output ci-dessous est obtenu.

On en déduit le modèle suivant:

ln µ = 3.106 − 0.159 OPEN.L + 0.015 OLIVE2 + 0.060 MONT.S − 0.118 MONT − 0.049 POLIC2
+0.113 SHRUB2 − 0.014 URBAN2 + 0.100 WAT.RES2 − 0.051 L.WAT.C + 0.059 L.D.ROAD
−0.040 L.P.ROAD2 − 0.123 D.WAT.RES + 0.061 D.WAT.COUR2 − 0.167 D.PARK
+0.047 N.PATCH + 0.052 P.EDGE + 0.058 L.SDI

Stratégie 2:
La procédure automatique de sélection des variables est décrite dans l’output ci-
dessous. Seule la variable L.D.ROAD est éliminée du modèle.

12
Ce modèle est appelé, dans la suite, le modèle glm3, dont l’output complet est repris
ci-dessous:

13
Comparaison
Il n’est pas trivial de comparer les deux modèles obtenus puisque le premier, estimé
via les composantes principales, contient les 17 variables, alors que le deuxième n’en
compte plus que 9.

5. Afin d’analyser les résidus (standardisés puisque l’hypothèse d’homoscédasticité n’est


pas imposée), des index-plot sont a priori utiles. Les deux graphiques de la Figure 5
ont été obtenus à l’aide des commandes

plot(residuals(glm2,type="pearson"))
plot(residuals(glm3,type="pearson"))

6 12

8
4
5
18
10

19
residuals(glm2, type = "pearson")

residuals(glm3, type = "pearson")

2
5

0
-2
0

-4

1
2
-5

0 10 20 30 40 50 0 10 20 30 40 50

Index Index

Figure 5: Index-plot des résidus standardisés pour le modèle glm2 à gauche et pour le modèle
glm3 à droite

On constate que les résidus du modèle glm3 sont plus petits que ceux calculés à partir
du modèle glm2. Par ailleurs, les résidus les plus importants sous ce modèle restent
raisonnables et s’expliquent pas des combinaisons spécifiques de valeurs prises pour
certaines variables. Les quatre observations repérées sur le premier graphique corre-
spondent aux quatre tronçons les plus meurtriers, avec un nombre d’amphibiens écrasés
assez important que le modèle n’arrive pas, à partir des CP, à estimer de façon fiable.

6. (a) Choisissons le modèle présentant les résidus les plus réduits, le modèle glm3. En
considérant la variable TOT.N plus en détails, on constate qu’effectivement, celle-ci
présente une grande différence entre moyenne et variance (26 amphibiens écrasés
par tronçon en moyenne, pour une variance égale à 589). L’exploitation du modèle
de Poisson de base, pour lequel l’égalité entre moyenne et variance est supposée
vraie, est potentiellement problématique.

14
A partir de l’output complet de glm3, repris ci-dessus,
la mesure proposée dans l’énoncé peut être calculée avec n = 52 et k = 10. On a
Dk 249.38
= = 5.93
n−k 42
Les données présentent une sur-dispersion assez importante, ce qui peut expliquer
le caractère fortement significatif de certains tests individuels repris dans l’output.
(b) En modifiant la famille de distribution dans l’appel à la procédure glm comme
indiqué dans l’énoncé (family=quasipoisson), on obtient l’output suivant:

On voit que les estimations des paramètres restent inchangées, mais les erreurs
standards sont plus grandes. Cela implique une perte de significativité pour
plusieurs variables incorporées dans le modèle.

15

Vous aimerez peut-être aussi