Vous êtes sur la page 1sur 13

TD – Régression logistique multinomiale

E – Régression logistique multinomiale

Exemple - cible

Une enseigne de grande surface propose à ses clients des formules de crédit (A, B et C).
Le conseiller doit être attentif pour proposer au client une formule adaptée.

L'objectif de l'étude est de cibler la formule que l'on doit proposer en priorité (variable
typecredit).à partir des variables suivantes:

- l'âge (quantitatif ),
- sexe (binaire, 1 = homme)
- revenu par personne du ménage (quantitatif ),

On dispose de n = 30 observations, les distributions sont équilibrées.

1. Construire des graphiques exploratoires permettant de visualiser les liaisons entre les
variables explicatives et la variable cible. Commenter ces liaisons.

2. Exécuter une régression logistique multinomiale de la variable typecredit en fonction


des variables age, sexe, revenu en utilisant les fonctions R adéquates ( on choisira le
niveau C
pour niveau de référence dans nnet).

. Fonction vglm package VGAM

. Fonction multinom package nnet

Interpréter les sorties estimations des coefficients pour les deux procédures.

Exécuter le test du rapport de vraisemblance pour évaluer globalement le modèle.

Calculer le R2 de Mac-Fadden.

3. On souhaite tester la significativité des coefficients associés à la variable revenu par


tête.

Exécuter les tests suivants en utilisant la procédure de test de Wald :

- Test de la significativité de la variable revenu dans le premier logit de revenu :

- Test de la significativité de la variable revenu dans tous les logit

- Test d’égalité des coefficients du revenu dans les deux logit

4. Analyse des prévisions du modèle

Classer l’individu A dans l’une des trois formes de crédit sur la base du modèle estimé.

Afficher en utilisant la fonction predict( ) les quantités suivantes:


- prévisions des probabilités d’appartenance aux groupes pour chaque individu
- prévisions de classement par resubstitution pour les individus de l’échantillon

Construire une matrice de confusion et estimer le taux de bien – mal classés par la
méthode de resubstitution.

1
Exemple cible

Une enseigne de grande surface propose à ses clients des formules de crédit revolving (A, B et
C). Le conseiller doit etre attentif lorsqu'il est face au client car s'il met en avant une formule
inadaptée, il risque de le décourager et de le voir partir. L'objectif de l'étude est de cibler, à partir
des données recueillies [l'âge (quantitatif ), le sexe (binaire, 1 = homme) et le revenu par tête du
ménage (quantitatif )], la formule que l'on doit proposer en priorité.

Les données reportent les valeurs des variables explicatives, la variable dépendante ou
typecredit qui indique la formule proposée. Les trois dernières colonnes reportent les indicatrices
de modalités de typecredit. On dispose de n=30 observations, les distributions sont équilibrées.

> drv<-read.table("revolver.txt",header=TRUE)
> attach(drv)
> drv[,"sexe"]<-factor(drv[ ,"sexe"])
> for (i in 4:7) drv[,i]<-factor(drv[,i])
> drv
age sexe revenu typecredit yA yB yC
1 29 0 7.09 A 1 0 0
2 27 0 2.25 A 1 0 0
3 24 1 4.47 A 1 0 0
4 18 1 4.66 A 1 0 0
5 21 0 6.47 A 1 0 0
6 30 1 9.18 A 1 0 0
7 26 0 8.96 A 1 0 0
8 23 1 5.68 A 1 0 0
9 22 1 7.39 A 1 0 0
10 20 1 9.93 A 1 0 0
11 49 1 13.60 B 0 1 0
12 47 0 21.53 B 0 1 0
13 50 0 11.41 B 0 1 0
14 51 0 8.27 B 0 1 0
15 54 1 11.62 B 0 1 0
16 49 1 14.28 B 0 1 0
17 44 1 12.51 B 0 1 0
18 46 0 9.45 B 0 1 0
19 48 0 7.85 B 0 1 0
20 52 0 11.21 B 0 1 0
21 39 0 6.50 C 0 0 1
22 37 1 7.84 C 0 0 1
23 30 0 7.40 C 0 0 1
24 29 0 10.10 C 0 0 1
25 27 1 8.43 C 0 0 1
26 34 1 9.19 C 0 0 1
27 30 1 12.31 C 0 0 1
28 21 1 14.13 C 0 0 1
29 52 1 10.04 C 0 0 1
30 50 0 8.90 C 0 0 1

> str(drv)
'data.frame': 30 obs. of 7 variables:
$ age : int 29 27 24 18 21 30 26 23 22 20 ...
$ sexe : Factor w/ 2 levels "0","1": 1 1 2 2 1 2 1 2 2 2 ...
$ revenu : num 7.09 2.25 4.47 4.66 6.47 9.18 8.96 5.68 7.39 9.93 .
$ typecredit: Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
$ yA : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ yB : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ yC : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...

2
Graphiques exploratoires

Graphiques exploratoires des liaisons entre les variables explicatives et la variable cible.
On peut noter certaines préférences pour les crédits, A pour les plus jeunes, B pour les plus
agés, B pour les revenus les plus élevés…

Liaison entre type de crédit et age -revenu


> par(mfrow=c(2,2))
> boxplot(drv$age~drv$typecredit,xlab="typecredit",
+ ylab="age",col="red")
> boxplot(drv$revenu~drv$typecredit,xlab="typecredit",
+ ylab="revenu")
> plot(drv$age,drv$typecredit)
> plot(drv$revenu,drv$typecredit,col="red")

Liaison entre type de crédit et sexe

> plot(drv$sexe,drv$typecredit,col=c("red","blue","yellow"))

3
Régression logistique multinomiale

L'objectif de la régression logistique multinomiale est de modéliser (K−1) rapports de probabilités


(odds), K indiquant le nombre de modalités de la variable à expliquer. On choisit une modalité
comme référence et on exprime les logit par rapport à cette référence

Plusieurs fonctions permettent sur R d’exécuter une régression logistique multinomiale :


- Fonction vglm package VGAM
- Fonction multinom package nnet
- Fonction mlogit package mlogit

Un avantage de la fonction multinom est de fournir la matrice Hessienne pour développer les
tests de significativité. Il est possible changer la modalité de référence qui modifie la lecture et
l’interprétation des coefficients.

Estimation du modèle

- Package nnet – fonction multinom


> library(nnet)

Il faut préciser la modalité ou niveau de la variable à expliquer pris comme niveau de référence ;
on choisit ici le niveau C correspondant à une qualité médiocre.
Remarque: il faut abaisser les seuils de tolérance en argument.
> typecredit2<- relevel(drv$typecredit, ref = "C")
> mult.rv <- multinom(typecredit2 ~ drv$age+drv$sexe+drv$revenu,
Hess=T, abstol=1e-15,reltol=1e-15,maxit=1000)

# weights: 15 (8 variable)
initial value 32.958369
iter 10 value 10.686440
iter 20 value 9.212540
iter 30 value 9.194181
iter 40 value 9.191315
iter 50 value 9.190889
iter 60 value 9.190876
iter 70 value 9.190857
iter 80 value 9.190856
iter 90 value 9.190856
iter 100 value 9.190856
iter 110 value 9.190856
iter 120 value 9.190856
final value 9.190856
converged

> summary(mult.rv)
Call:
multinom(formula = typecredit2 ~ drv$age + drv$sexe + drv$revenu,
abstol = 1e-15, reltol = 1e-15, maxit = 1000)

Coefficients:
(Intercept) drv$age drv$sexe1 drv$revenu
A 21.16554 -0.4713515 0.170161 -0.935095
B -26.32654 0.2861745 -4.965935 1.565938

Std. Errors:
(Intercept) drv$age drv$sexe1 drv$revenu
A 10.8419 0.2632022 1.853307 0.5738308
B 14.8413 0.1532726 3.569188 1.0552729

Residual Deviance: 18.38171


AIC: 34.38171

4
- Package VGAM - fonction vglm

> library(VGAM)
> poly.drv <- vglm(drv$typecredit ~ drv$age+drv$sexe+drv$revenu,
+ family=multinomial())

> summary(poly.drv)
Call:
vglm(formula = typecredit ~ drv$age + drv$sexe + drv$revenu,
family = multinomial())

Pearson Residuals:
Min 1Q Median 3Q Max
log(mu[,1]/mu[,3]) -1.4379 -0.090237 -1.0413e-07 0.050910 2.0030
log(mu[,2]/mu[,3]) -2.6104 -0.024822 -1.4738e-06 0.052045 1.1605

Coefficients:
Value Std. Error t value
(Intercept):1 21.16539 10.84180 1.952203
(Intercept):2 -26.32673 14.84141 -1.773870
drv$age:1 -0.47135 0.26320 -1.790839
drv$age:2 0.28618 0.15327 1.867093
drv$sexe1:1 0.17016 1.85330 0.091815
drv$sexe1:2 -4.96597 3.56920 -1.391338
drv$revenu:1 -0.93509 0.57383 -1.629566
drv$revenu:2 1.56595 1.05528 1.483921

Number of linear predictors: 2


Names of linear predictors: log(mu[,1]/mu[,3]), log(mu[,2]/mu[,3])
Dispersion Parameter for multinomial family: 1
Residual Deviance: 18.38171 on 52 degrees of freedom
Log-likelihood: -9.19086 on 52 degrees of freedom
Number of Iterations: 9
Reference group is level 3 of the response

Les deux équations logit estimées pour les formules A et B s’écrivent :

C1= 21.165 - 0.471*age + 0.170*sexe - 0.935095*revenu


C2= -26.327 + 0.286*age - 4.966*sexe + 1.566*revenu

Ces relations permettent de faire les remarques suivantes, sous réserve de significativité des
coefficients (noter que la lecture doit se faire par rapport à la modalité de référence C) :

A versus C

- Plus le client est âgé moins il privilégie le crédit A (par rapport au C), autrement dit
les personnes qui prennent le crédit A sont moins âgés que ceux qui prennent le C.

- Les hommes ont plus tendance à prendre A (par rapport à C).

- Plus le revenu du client est élevé, moins il choisit le crédit A.

B versus C

- Une augmentation de l'âge incite à prendre B (par rapport à C)

- Les femmes ont plus tendance à prendre la formule B (par rapport à C)

- Plus le revenu du client est élevé, plus il choisira B (par rapport à C).

5
Modifier la modalité de référence

Le choix de la modalité de référence conditionne la lecture des coefficients. Dans l’exemple si on


souhaite comparer les modalités A versus B on doit relancer la régression en modifiant la
modalité de référence. On peut toutefois obtenir cette comparaison en exprimant le logit
correspondant :

Logit i,j = ln πi/ πj= ln(πi /πK )/ (πj/πK)= ln(πi/πK)− ln(πj/πK) = Ci − Cj

Il est donc possible par simple différenciation d’obtenir le logit entre 2 modalités quelconques de
la variable réponse. Le choix initial de la modalité de référence n'est pas restrictif.
Sur l’exemple on peut caractériser la modalité A par rapport à B par différenciation des logit :

logitA,B= C1 − C2
= (21.165+26.328) + (−0.471−0.286)* age + (0.170+4.966)* sexe+
(−0.935−1.566)* revenu
= 47.493 −0.758* age + 5.136* sexe − 2.501* revenu

Les effets sont plus marqués dans (A vs. B) par rapport (A vs. C) avec des coefficients de même
signe, mais sont plus élevés en valeur absolue :

- plus l'âge augmente, moins les clients choisissent A (par rapport à B) ;

- les hommes sont plus enclins à prendre la formule A (par rapport à B) ;

- les revenus élevés les dissuadent de prendre A (par rapport à B).

Test sur la significativité globale du modèle

Le test du rapport de vraisemblance sur le modèle est réalisé par comparaison avec le modèle
constant ne comportant aucune variable explicative.

On peut calculer la log vraisemblance et la déviance du modèle constant avec l’instruction :


> typecredit2<- relevel(drv$typecredit, ref = "C")
> mult.rv0 <- multinom(typecredit2 ~ 1)

> summary(mult.rv0)
Call: multinom(formula = typecredit2 ~ 1)

Coefficients:
(Intercept)
A 3.885781e-15
B 3.330669e-16

Std. Errors:
(Intercept)
A 0.4472136
B 0.4472136

Residual Deviance: 65.91674


AIC: 69.91674

Le test du rapport de vraisemblance consiste à comparer les deux déviances du modèle étudié
et modèle constant.

Dans l’exemple on obtient :


LR=65.917-18.382=47.535 (loi du chi-deux à (3-1)*3 =6ddl)

La P value est inférieure à 0.0001, le modèle est très significatif.

6
Remarque- Pseudo-R2 de McFadden
Le pseudo-R2 déterminé à partir des vraisemblances précédentes varie entre 0 (modèle pas
meilleur que le trivial) et 1 (modèle saturé). Dans l’exemple, le modèle apparait bon :

R2M F = 1-(-9.191/-32.958)=0.721

Tests sur les coefficients de la régression multinomiale


Les tests sur les coefficients sont plus complexes que pour la régression logistique binaire.

On peut tester ici la nullité de q coefficients dans un logit, dans un ensemble de logit ou dans les
K-1 logit. Les conclusions ne seront pas les mêmes.

- Si une variable n'est pas significative dans l'ensemble des logit, on peut l’exclure du modèle.

- Si une variable est significative dans un logit au moins, on ne peut l’exclure car elle joue un rôle
dans la caractérisation d'une des modalités de la variable dépendante. La variable ne peut pas
être exclue.

- On peut également tester l'égalité des coefficients pour plusieurs (ou l'ensemble ) équations
logit. Si l'hypothèse est vérifiée, on peut conclure que la variable joue un rôle identique dans
la caractérisation des différentes modalités de la variable dépendante.

Les outils sont identiques à ceux de la régression logistique binomiale :


- la statistique du rapport de vraisemblance basée sur la comparaison des déviances des
deux modèles sous H0 et H1 qui suit une loi du χ2 sous l'hypothèse nulle. Les degrés de
liberté sont obtenus par différenciation du nombre de paramètres estimés.

- la statistique de Wald basée sur la normalité asymptotique des estimateurs. Il faut déterminer
dans ce cas la matrice de variance - covariance des coefficients.

Estimation de la matrice de variance – covariance


La matrice de variance covariance correspond à l’inverse de la matrice Hessienne qui est
accessible à partir d’un des arguments de la fonction multinom( ) du package nnet de R.

> H<- mult.rv$Hessian


> H
A:(Intercept) A:drv$age A:drv$sexe1 A:drv$revenu
A:(Intercept) 1.499519493 41.7847454 0.665774360 13.22194584
A:drv$age 41.784745421 1186.3640995 17.759538980 362.01405787
A:drv$sexe1 0.665774360 17.7595390 0.665774360 6.52490175
A:drv$revenu 13.221945842 362.0140579 6.524901747 122.02695054
B:(Intercept) -0.018178274 -0.4870071 -0.005392233 -0.19914821
B:drv$age -0.487007149 -13.3356540 -0.117729386 -5.20649781
B:drv$sexe1 -0.005392233 -0.1177294 -0.005392233 -0.07504923
B:drv$revenu -0.199148211 -5.2064978 -0.075049226 -2.26152924

B:(Intercept) B:drv$age B:drv$sexe1 B:drv$revenu


A:(Intercept) -0.018178274 -0.4870071 -0.005392233 -0.19914821
A:drv$age -0.487007149 -13.3356540 -0.117729386 -5.20649781
A:drv$sexe1 -0.005392233 -0.1177294 -0.005392233 -0.07504923
A:drv$revenu -0.199148211 -5.2064978 -0.075049226 -2.26152924
B:(Intercept) 1.360593827 63.2295191 0.596302334 13.51433342
B:drv$age 63.229519070 3013.4194485 27.712261371 620.89649966
B:drv$sexe1 0.596302334 27.7122614 0.596302334 6.91414580
B:drv$revenu 13.514333418 620.8964997 6.914145801 138.74540159

La matrice de variance – covariance reporte :


- la variance des coefficients pour chaque équation logit,
- les covariances entre coefficients de la même équation logit,
- les covariances des coefficients relatives à des équations logit différentes.
On lit les variances des coefficients pour chaque équation logit sur la diagonale principale.

7
Il faut au préalable inverser la matrice Hessienne avec la fonction solve( ) :

> H<- mult.rv$Hessian


> round(solve(H),3)
A:(Intercept) A:drv$age A:drv$sexe1 A:drv$revenu

A:(Intercept) 117.547 -2.649 1.946 -4.984


A:drv$age -2.649 0.069 0.005 0.081
A:drv$sexe1 1.946 0.005 3.435 -0.409
A:drv$revenu -4.984 0.081 -0.409 0.329

B:(Intercept) -1.964 0.028 -0.462 0.184


B:drv$age 0.035 0.000 0.007 -0.003
B:drv$sexe1 -0.015 0.000 -0.004 0.004
B:drv$revenu 0.023 -0.001 0.011 -0.002

B:(Intercept) B:drv$age B:drv$sexe1 B:drv$revenu

A:(Intercept) -1.964 0.035 -0.015 0.023


A:drv$age 0.028 0.000 0.000 -0.001
A:drv$sexe1 -0.462 0.007 -0.004 0.011
A:drv$revenu 0.184 -0.003 0.004 -0.002

B:(Intercept) 220.264 -2.008 41.744 -14.547


B:drv$age -2.008 0.023 -0.314 0.106
B:drv$sexe1 41.744 -0.314 12.739 -3.296
B:drv$revenu -14.547 0.106 -3.296 1.114

Les variances des coefficients pour chaque équation logit se lisent sur la diagonale principale.
En prenant la racine carré on retrouve les écarts types fournies par les fonctions.

- variance intercept logit1


10.8419^2 = 117.5468

- covariances des coefficients intra-logit


ccov(a1,age; a1,sexe) = 0.005

- covariances des coefficients inter-logit


ccov(a1,age; a2,rev.tete) = −0.001
qui est différent de :
ccov(a1,rev.tete; a2,age) = −0.003

Significativité d’un coefficient dans un logit – Test de Wald

Si un coefficient dans un logit n’est pas significatif, on peut supprimer la variable associée dans
le logit concerné. On ne peut rien conclure pour les autres logit et on ne peut exclure la variable
de l’étude. La statistique de Wald est formée par le rapport entre le carré du coefficient estimé et
sa variance et suit une loi du chi deux à 1 ddl.

Exemple - Test de la significativité de la variable revenu dans le 1er logit


beta=-0.935
var (beta)= 0.329
On retrouve l’écart type 0.574 affiché par R : (0.574)^2=0.329

La statistique de test vaut :


W=(-0.935)^2/0.329 =2.65
La p value associée pour un chi deux (1) est de 0.103 ; on est proche de la valeur critique mais
on ne peut rejetter l’hypothèse nulle.

8
Significativité d’un coefficient dans tous les logit – Test de Wald

Ce test permet de savoir si les coefficients d’une variable explicative sont simultanément nuls
dans l’ensemble des logit. Si l’hypothèse H0 est acceptée la variable peut être retirée du modèle.
La statistique du test de Wald suit une loi du chi deux à K-1 ddl (K indiquant le nombre de
modalités de la variable à expliquer).

Exemple - Test de la significativité de la variable revenu

Les estimations correspondent au vecteur de coefficients estimés t(b)=(-0.935,1.566) et la


matrice de variance covariance V de ces coefficients s’écrit:

V=( 0.329 -0.002 )


( -0.002 1.114)

La valeur statistique de Wald W= t(b).inv(V). b = 4.845 conduit à rejetter H0.

Test d’égalité d’un coefficient dans tous les logit – Test de Wald

On teste ici si les coefficients d’une variable Xj sont identiques d’un logit à l’autre ce qui est
équivalent à dire que la variable a le même effet dans tous les logit.

Exemple – Test d’égalité des coefficients pour la variable revenu

L'hypothèse nulle du test H0 :


a1,revenu = a2,revenu

La quantité drevenu = a1,revenu − a2,revenu est :


- d'espérance nulle sous H0,
- de variance :
V (drevenu)=V (a1,revenu)+V (a2,revenu)−2×Cov (a1,revenue, a2,revenu)

La statistique de test (drevenu )^2 / V(drevenu) suit une loi du χ2 (1 ddl).

On obtient après calcul :


drevenu= −0.935−1.566 =−2.501
V (drevenu)= 0.329 +1.114−2×(−0.002) =1.446
(d revenu)^2 / V (drevenu)= (−2.501)^2 / 1.446= 4.326

La valeur critique du χ2(1), conduit à une p-value de 0.0375.

On peut rejetter l'égalité des coefficients de la variable revenu dans l'ensemble des logit.

Interprétation des coefficients – odds ratios


Les odds ratios peuvent être déterminés sur les tableaux de contingence et sur les modèles à
partir des coefficients estimés comme dans le cas de régression logistique binomiale. Toutefois
dans la régression multinomiale une variable peut être présente plusieurs fois avec des valeurs
différentes dans k-1 équations.

Dans le cas de variables qualitatives, l’interprétation relative à l’augmentation d’une unité de ce


type de variable est identique au cas de la régression logistique binomiale.

L’interprétation des odds ratios en termes de modification du risque reste identique, toujours par
rapport à la modalité de référence.

9
Note : Il est possible d’aborder une régression logistique multinomiale en s’appuyant sur les
régressions logistiques binaires sur deux des K modalités ; ce qui permet de disposer d’outils
d’interprétation simple.

Classement – Prévision
Prévision de classement (K modalités)
Pour classer un nouvel individu ω, on calcule les probabilités a posteriori prédites πk(ω) pour
chaque modalité k de la variable dépendante.

Exemple - individu n01 (age=29;sexe=0;revenu=7.09), on détermine les deux logit :


C1=0.87,
C2=−6.93
ce qui donne pour probabilités estimées: π1=0.70, π2=0.00, π3=0.30
La prévision estimée du modèle est donc y1 = A puisque c'est la modalité qui maximise la
probabilité d'appartenance au groupe.

Prévision des probabilités d’appartenance aux groupes pour chaque individu

> #Predicted category probabilities – vglm


> predict(poly.drv, type="response")
A B C
1 7.038150e-01 2.908278e-04 2.958941e-01
2 9.982301e-01 5.015114e-10 1.769933e-03
3 9.971093e-01 7.826568e-11 2.890734e-03
4 9.997953e-01 1.340242e-12 2.046975e-04
5 9.946058e-01 2.034614e-07 5.394023e-03
….

> #Predicted category probabilities - multinom


> predict(mult.rv,drv, type="probs")
C A B
1 2.958925e-01 7.038166e-01 2.908417e-04
2 1.769858e-03 9.982301e-01 5.015495e-10
3 2.890621e-03 9.971094e-01 7.827266e-11
….

#Predicted categories - vglm


> fitted(mult.rv, outcome=FALSE)
C A B
1 2.958925e-01 7.038166e-01 2.908417e-04
2 1.769858e-03 9.982301e-01 5.015495e-10
3 2.890621e-03 9.971094e-01 7.827266e-11
……

Prévision de classement par resubstitution pour les individus de l’échantillon


Matrice de confusion.

#Predicted categories - vglm


> PhatCateg <- predict(poly.drv, type="response")
> levels(drv$typecredit)[max.col(PhatCateg)]
[1] "A" "A" "A" "A" "A" "C" "A" "A" "A" "A" "B" "B" "B" "B" "B" "B"
[17] "B" "B" "C" "B" "C" "C" "A" "C" "A" "C" "C" "C" "C" "B"

#Predicted categories - multinom


> predict(mult.rv,drv,type="class")
[1] A A A A A C A A A A B B B B B B B B C B C C A C A C C C C B
Levels: C A B

10
> predict(mult.rv)
[1] A A A A A C A A A A B B B B B B B B C B C C A C A C C C C B
Levels: C A B

Matrice de confusion
Les prévisions précédentes sont à comparer avec les valeurs observées sur l’échantillon.
> drv$typecredit
[1] A A A A A A A A A A B B B B B B B B B B C C C C C C C C C C
Levels: A B C

On peut construire une matrice de confusion ou tableau de contingence croisant observations et


prévisions, qui permet d’estimer les taux de bien – mal classés:
> table(drv$typecredit,levels(drv$typecredit)[max.col(PhatCateg)])

A B C
A 9 0 1
B 0 9 1
C 2 1 7

>cTab<-table(drv$typecredit,levels(drv$typecredit)[max.col(PhatCateg)])
> addmargins(cTab)

A B C Sum
A 9 0 1 10
B 0 9 1 10
C 2 1 7 10
Sum 11 10 9 30

Taux de bien classés


> sum(diag(cTab)) / sum(cTab)
[1] 0.8333333

Annexe
#Déviance - log vraisemblance - critère AIC
deviance(modelfit)
logLik(modelfit)
AIC(modelfit)

#pseudo R2 - Mac Fadden


vglm0 <- vglm(Ycateg ~ 1, family=multinomial(refLevel=1), data=data)
LLf <- logLik(modelfit)
LL0 <- logLik(modelfit)
as.vector(1 - (LLf / LL0))

11
Script

drv<-read.table("revolver.txt",header=TRUE)
drv
drv[,"sexe"]<-factor(drv[ ,"sexe"])
for (i in 4:7) drv[,i]<-factor(drv[,i])
str(drv)

#Graphiques#
par(mfrow=c(2,2))
boxplot(drv$age~drv$typecredit,xlab="typecredit",
ylab="age",col="red")
boxplot(drv$revenu~drv$typecredit,xlab="typecredit",
ylab="revenu",col="red")
plot(drv$age,drv$typecredit)
plot(drv$revenu,drv$typecredit)
plot(drv$sexe,drv$typecredit,col=c("red","blue","yellow"))

#Régression logistique multinomiale#


#package nnet – fonction multinom#
library(nnet)
typecredit2<- relevel(drv$typecredit, ref = "C")
mult.rv <- multinom(typecredit2 ~ drv$age+drv$sexe+drv$revenu,
Hess=T, abstol=1e-15,reltol=1e-15,maxit=1000)
summary(mult.rv)

#Régression logistique multinomiale#


#package VGAM - fonction vglm #
library(VGAM)
poly.drv <- vglm(drv$typecredit ~ drv$age+drv$sexe+drv$revenu,
family=multinomial())
summary(poly.drv)

#Test du rapport de vraisemblance#


typecredit2<- relevel(drv$typecredit, ref = "C")
mult.rv0 <- multinom(typecredit2 ~ 1)
summary(mult.rv0)

#Tests sur les coefficients de la régression polynomiale#


Matrice de variance covariance des coefficients
H<- mult.rv$Hessian
solve(H)

#Prévisions
#Predicted category probabilities – vglm
predict(poly.drv, type="response")
#Predicted category probabilities - multinom
predict(mult.rv,drv, type="probs")
fitted(mult.rv, outcome=FALSE)
#Predicted categories - vglm
PhatCateg <- predict(poly.drv, type="response")
levels(drv$typecredit)[max.col(PhatCateg)]
#Predicted categories - multinom
predict(mult.rv,drv,type="class")
predict(mult.rv)

#Matrice de confusion

12
cTab<-table(drv$typecredit,levels(drv$typecredit)[max.col(PhatCateg)])
addmargins(cTab)
#Taux de bien classés
sum(diag(cTab)) / sum(cTab)

13

Vous aimerez peut-être aussi