TP5 Correction
TP5 Correction
TP5 Correction
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)
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é
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):
(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
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%.
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
D.PARK
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
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
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:
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:
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)
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.
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.
plot(residuals(glm2,type="pearson"))
plot(residuals(glm3,type="pearson"))
6 12
8
4
5
18
10
19
residuals(glm2, 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