Documentos de Académico
Documentos de Profesional
Documentos de Cultura
on Logstica
Multinomial
Introducci
on
En este tema se considera un modelo de regresion logstica donde la variable dependiente tiene mas de dos categoras. La respuesta puede o bien ser nominal o bien ordinal.
A su vez, las variables explicativas pueden ser categoricas o cuantitativas.
En los modelos de regresion multinomial se asume que los recuentos de las categoras de Y tienen una distribucion multinomial. Esta distribucion es, a su vez, una
generalizacion de la distribucion binomial.
La ecuacion general logit con respecto a la categora base J determina tambien los logits para cualquier pareja de categoras. As, si consideramos dos categoras cualesquiera
a y b,
a
a /J
a
b
log
= log
= log
log
=
b
b /J
J
J
(a + a x) (b + b x) = (a b ) + (a b )x
De este modo, la ecuacion para las categoras a y b tiene tambien la forma + x donde
= (a b ) y = (a b ).
Ejemplo
Se analizan los datos sobre 59 caimanes en diversas zonas de Florida (USA). La
variable respuesta es la eleccion del tipo de comida principal que se encuentra en el
estomago de los animales, con cinco posibles categoras: peces, invertebrados, reptiles,
pajaros y otros. Como variables predictoras se consideran:
1. El lago en donde se captura al animal (L);
2. Su sexo (G);
3. el tama
no S (si es menor o igual a 2.3 metros o mayor que este valor).
library ( MASS )
library ( nnet )
comen.labs = factor ( c ( " peces " ," invert " ," reptiles " ," pajaritos " ,
" otros " ) , levels = c ( " peces " ," invert " ," reptiles " ,
" pajaritos " ," otros " ))
tamano.labs = factor ( c ( " <2 .3 " , " >2 .3 " ) ,
levels = c ( " >2 .3 " , " <2 .3 " ))
sexo.labs = factor ( c ( " m " , " f " ) , levels = c ( " m " ," f " ))
charca.labs = factor ( c ( " hancock " , " oklawaha " ,
" trafford " , " george " ) ,
levels = c ( " george " ," hancock " ," oklawaha " ," trafford " ))
tabla = expand.grid ( comen = comen.labs , tamano = tamano.labs ,
sexo = sexo.labs , charca = charca.labs )
temp = c (7 , 1 , 0 , 0 , 5 , 4 , 0 , 0 , 1 , 2 , 16 , 3 , 2 , 2 , 3 , 3 , 0 ,
1 , 2 , 3 , 2 , 2 , 0 , 0 , 1 , 13 , 7 , 6 , 0 , 0 , 3 , 9 , 1 , 0 , 2 , 0 , 1 ,
0, 1, 0, 3, 7, 1, 0, 1, 8, 6, 6, 3, 5, 2, 4, 1, 1, 4, 0, 1,
0 , 0 , 0 , 13 , 10 , 0 , 2 , 2 , 9 , 0 , 0 , 1 , 2 , 3 , 9 , 1 , 0 ,
1 , 8 , 1 , 0 , 0 , 1)
Call :
multinom ( formula = comen tamano , data = tabla )
Coefficients :
( Intercept ) tamano <2 .3
invert
-1 .034070 0 .9489120
reptiles
-1 .241705 -0 .8583649
pajaritos
-1 .727214 -0 .5551882
otros
-1 .241709 0 .2943162
Std. Errors :
( Intercept ) tamano <2 .3
invert
0 .2910708 0 .3568648
reptiles
0 .3148729 0 .5349960
pajaritos
0 .3836949 0 .6063277
otros
0 .3148735 0 .4149523
Residual Deviance : 589 .2134
AIC : 605 .2134
=
=
=
=
=
=
multinom ( comen
multinom ( comen
multinom ( comen
multinom ( comen
multinom ( comen
multinom ( comen
deviance ( fit0 ) deviance ( fit1 ) deviance ( fit2 ) deviance ( fit3 ) deviance ( fit4 ) deviance ( fit5 ) deviance ( fitS2 ) -
1 , data = tabla )
charca , data = tabla )
tamano , data = tabla )
sexo , data = tabla )
charca + tamano , data = tabla )
charca + tamano + sexo , data = tabla )
deviance ( fitS )
deviance ( fitS )
deviance ( fitS )
deviance ( fitS )
deviance ( fitS )
deviance ( fitS )
deviance ( fitS )
- deviance ( fitS )
- deviance ( fitS )
- deviance ( fitS )
- deviance ( fitS )
- deviance ( fitS )
- deviance ( fitS )
predict ( fit4 , type = " probs " , newdata = data.frame ( tamano = " >2 .3 " ,
charca = " hancock " ))
peces
invert
reptiles pajaritos
otros
0 .57018414 0 .02307664 0 .07182898 0 .14089666 0 .19401358
Tambien se pueden estimar las probabilidades de cada una de las categoras para
distintos valores de las variables explicativas.
predictions = predict ( fit4 , type = " probs " ,
newdata = expand.grid ( tamano = tamano.labs , charca = charca.labs ))
cbind ( expand.grid ( tamano = tamano.labs , charca = charca.labs ) ,
predictions )
1
2
3
4
5
6
7
8
tamano
<2 .3
>2 .3
<2 .3
>2 .3
<2 .3
>2 .3
<2 .3
>2 .3
charca
hancock
hancock
oklawaha
oklawaha
trafford
trafford
george
george
peces
0 .5352844
0 .5701841
0 .2581899
0 .4584248
0 .1843017
0 .2957471
0 .4521217
0 .6574619
invert
0 .09311221
0 .02307664
0 .60188004
0 .24864187
0 .51682297
0 .19296047
0 .41284675
0 .13968167
reptiles
0 .04745855
0 .07182898
0 .07723295
0 .19484367
0 .08877041
0 .20240167
0 .01156715
0 .02389991
pajaritos
0 .070402770
0 .140896661
0 .008820525
0 .029424141
0 .035897986
0 .108228505
0 .029664777
0 .081046951
otros
0 .25374209
0 .19401358
0 .05387663
0 .06866547
0 .17420698
0 .20066229
0 .09379957
0 .09790956
P (Y j)
logit [P (Y j)] = log
=
1 P (Y j)
#
"
Pj
i
1 + + j
log
= log PJ i=1
j+1 + + J
i=j+1 i
para j = 1, . . . , J 1.
El modelo logit de odds proporcionales, cuando se consideran d variables explicaticativas x = (x1 , . . . , xd ), se puede expresar como
logit [P (Y j|x)] = j +
d
X
i xi
i=1
para j = 1, . . . , J 1.
Cada variable independiente tiene un solo coeficiente que no depende del valor j. La
dependencia con respecto al valor j aparece solo en el coeficiente o constante j .
Teniendo en cuenta que si j 0 < j entonces
logit [P (Y j 0 |x)] logit [P (Y j|x)]
se tiene que verificar que j j 0 , es decir, los valores de j aumentan junto con los
valores de j.
Si se toman dos vectores de variables independientes
x1 = (x11 , . . . , x1d )0
x2 = (x21 , . . . , x2d )0
entonces
logit [P (Y j|x1 )] logit [P (Y j|x2 )] =
d
X
i (x1i x2i ) .
i=1
j|x1 )
> j|x1 )
j|x2 )
> j|x2 )
P (Y j|x1 )
d
P (Y > j|x1 ) X
i (x1i x2i ) .
log
=
P (Y j|x2 )
i=1
P (Y > j|x2 )
La parte izquierda de la ecuacion es el llamado cociente de odds acumulado.
De este modo, los odds para un valor de respuesta menor o igual que j para x = x1
P
d
(x
x
)
veces los odds para x = x2 y esta proporcionalidad
es igual a exp
1i
2i
i=1 i
no depende del valor de j. Es por esto que al modelo se le denomina tambien modelo
de odds proporcionales.
Supongamos que los vectores x1 y x2 son iguales salvo en la componente i-esima.
Es decir, ambos individuos coinciden en todos los valores salvo en dicha componente y
supongamos, ademas, que difieren en una unidad en la i-esima componente. Se tiene,
bajo estas hipotesis, la siguiente ecuacion:
P (Y
P (Y
P (Y
P (Y
j|x1 )
> j|x1 )
= ei (x1i x2i ) = ei .
j|x2 )
> j|x2 )
As, manteniendo todas las demas variables constantes, el cambio de los odds de la
funcion de distribucion de Y condicionada a x1 y a x2 es igual a ei .
Call :
polr ( formula = mental I ( - estatus ) + I ( - sucesos ) , data = dat )
Coefficients :
Value Std. Error t value
I ( - estatus ) 1 .1112
0 .6109
1 .819
I ( - sucesos ) -0 .3189
0 .1210 -2 .635
Intercepts :
Value
Std. Error t value
Well | Mild
-0 .2819 0 .6423
-0 .4389
Mild | Moderate
1 .2128 0 .6607
1 .8357
Moderate | Impaired 2 .2094 0 .7210
3 .0644
Residual Deviance : 99 .0979
AIC : 109 .0979
# Intervalos de confianza
>( ci = confint ( fit ) )
2 .5 %
97 .5 %
I ( - estatus ) -0 .06410162 2 .34715412
I ( - sucesos ) -0 .57185762 -0 .09203235
># Exponencial de los parametros e IC
> exp ( coef ( fit ) )
I ( - estatus ) I ( - sucesos )
3 .0380960
0 .7269764
> exp ( cbind ( OR = coef ( fit ) , ci ) )
OR
2 .5 %
97 .5 %
I ( - estatus ) 3 .0380960 0 .9379097 10 .4557715
I ( - sucesos ) 0 .7269764 0 .5644759 0 .9120756
> # Seleccionas los de estatus 1 y mas de 5 sucesos
> que = subset ( dat , estatus ==1 & sucesos >5)
> # Prediccion para el grupo anterior
> cbind ( que , predict ( fit , data.frame ( que ) , type = " probs " ) )
estado estatus sucesos
mental
Well
Mild Moderate
2
1
1
9
Well 0 .1150236 0 .2518325 0 .2439856
10
1
1
7
Well 0 .1973878 0 .3255946 0 .2251307
17
2
1
8
Mild 0 .1516700 0 .2918553 0 .2399334
21
2
1
9
Mild 0 .1150236 0 .2518325 0 .2439856
29
3
1
6 Moderate 0 .2527800 0 .3485130 0 .2020681
32
4
1
8 Impaired 0 .1516700 0 .2918553 0 .2399334
34
4
1
7 Impaired 0 .1973878 0 .3255946 0 .2251307
38
4
1
8 Impaired 0 .1516700 0 .2918553 0 .2399334
Impaired
0 .3891584
0 .2518869
0 .3165413
0 .3891584
0 .1966389
0 .3165413
0 .2518869
0 .3165413
Otra opcion es usar la funcion lrm. Esta funcion esta en la librera rms. Se utiliza, en
este caso, las variables con sus signos originales. Tambien hay que reordenar los niveles
y que sea el mejor estado el que tenga el valor mas alto.
dat $ mental.rev = ordered ( dat $ estado , levels =4:1 ,
labels = c ( " impaired " , " moderate " , " mild " , " well " ))
library ( rms )
fit.lrm <- lrm ( mental.rev estatus + sucesos , data = dat )
fit.lrm
Obs
40
max | deriv | 8e -10
mild
12
well
12
Model Likelihood
Ratio Test
LR chi2
9 .94
d.f.
2
Pr ( > chi2 ) 0 .0069
Coef
S.E.
Wald Z
y >= moderate 2 .2094 0 .7210 3 .06
y >= mild
1 .2128 0 .6607 1 .84
y >= well
-0 .2819 0 .6423 -0 .44
estatus
1 .1112 0 .6109 1 .82
sucesos
-0 .3189 0 .1210 -2 .64
Discr iminati on
Indexes
R2
0 .236
g
1 .116
gr
3 .053
gp
0 .234
Brier
0 .197
Pr ( >| Z |)
0 .0022
0 .0664
0 .6607
0 .0689
0 .0084
10
Rank Discrim.
Indexes
C
0 .705
Dxy
0 .409
gamma
0 .425
tau - a
0 .310
estado
Total
Frequency
1
2
3
4
12
12
7
9
DF
Value
Log Likelihood
Full Log Likelihood
AIC ( smaller is better )
AICC ( smaller is better )
BIC ( smaller is better )
Value / DF
-49 .5489
-49 .5489
109 .0979
110 .8626
117 .5423
Parameter
Intercept1
Intercept2
Intercept3
DF
Estimate
Standard
Error
1
1
1
-0 .2819
1 .2128
2 .2094
0 .6423
0 .6607
0 .7210
11
Likelihood Ratio 95 %
Confidence Limits
-1 .5615
-0 .0507
0 .8590
0 .9839
2 .5656
3 .7123
sucesos
estatus
Scale
1
1
0
-0 .3189
1 .1112
1 .0000
0 .1210
0 .6109
0 .0000
-0 .5718
-0 .0641
1 .0000
Parameter
Wald
Chi - Square
Pr > ChiSq
0 .19
3 .37
9 .39
6 .95
3 .31
0 .6607
0 .0664
0 .0022
0 .0084
0 .0689
Intercept1
Intercept2
Intercept3
sucesos
estatus
Scale
Source
sucesos
estatus
DF
Chi Square
Pr > ChiSq
1
1
7 .78
3 .43
0 .0053
0 .0641
12
-0 .0920
2 .3471
1 .0000
Ejemplo
Se tiene una muestra de 735 personas a los que se pregunta por sus preferencias en
cuanto a tres ramas (brands) de algunos productos. Se considera ademas el genero y la
edad de las personas de la encuesta.
Los datos (en formato SAS) se pueden descargar en
http://www.ats.ucla.edu/stat/sas/dae/mlogit.sas7bdat
La variable dependiente es brand. La variable female se codifica como 0 para hombres
y 1 para mujeres.
library ( sas7bdat )
lacosa = read.sas7bdat (
" http : / / www.ats.ucla.edu / stat / sas / dae / mlogit.sas7bdat " )
colnames ( lacosa ) = c ( " brand " ," female " ," age " )
attach ( lacosa )
head ( lacosa )
# Se considera un analisis descriptivo
table ( brand )
table ( female )
summary ( age )
sd ( age )
xtabs ( female + brand )
brand
1
2
3
207 307 221
> table ( female )
female
0
1
269 466
> summary ( age )
Min. 1 st Qu. Median
24 .0
32 .0
32 .0
> sd ( age )
[1] 2 .333195
> xtabs ( female + brand )
brand
female
1
2
3
0 92 99 78
1 115 208 143
Mean 3 rd Qu.
32 .9
34 .0
Max.
38 .0
13
14
En los resultados anteriores se obtienen los coeficientes y sus p-valores. Cada variable
independiente y el intercept aparecen dos veces, una para cada una de las categoras
denominadas alt2 y alt3. Corresponden a dos ecuaciones:
P (brand = 2)
log
= b10 + b11 female + b12 age
P (brand = 1
log
P (brand = 3)
P (brand = 1
= b20 + b21 female + b22 age
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
age female
pred.1
pred.2
pred.3
24
0 0 .99808046 1 .110408e -05 0 .001908436
25
0 0 .99620671 1 .108323e -05 0 .003782206
26
0 0 .99250704 1 .104207e -05 0 .007481915
27
0 0 .98524197 1 .096124e -05 0 .014747066
28
0 0 .97112746 1 .080421e -05 0 .028861737
29
0 0 .94426773 1 .050539e -05 0 .055721769
30
0 0 .89511069 9 .958493e -06 0 .104879355
31
0 0 .81125518 9 .025564e -06 0 .188735793
32
0 0 .68402002 7 .610018e -06 0 .315972375
33
0 0 .52159109 5 .802926e -06 0 .478403104
34
0 0 .35446313 3 .943555e -06 0 .645532931
35
0 0 .21663631 2 .410173e -06 0 .783361283
36
0 0 .12225171 1 .360103e -06 0 .877746930
37
0 0 .06554790 7 .292487e -07 0 .934451367
38
0 0 .03412247 3 .796272e -07 0 .965877149
24
1 0 .99694362 1 .872735e -05 0 .003037650
25
1 0 .99396789 1 .867145e -05 0 .006013440
26
1 0 .98811173 1 .856145e -05 0 .011869713
27
1 0 .97668612 1 .834682e -05 0 .023295535
28
1 0 .95476547 1 .793505e -05 0 .045216598
29
1 0 .91403272 1 .716989e -05 0 .085950112
30
1 0 .84265232 1 .582903e -05 0 .157331848
31
1 0 .72953100 1 .370407e -05 0 .270455296
32
1 0 .57599833 1 .081999e -05 0 .423990849
33
1 0 .40624216 7 .631164e -06 0 .593750205
34
1 0 .25627545 4 .814074e -06 0 .743719733
35
1 0 .14788119 2 .777913e -06 0 .852116036
36
1 0 .08037836 1 .509889e -06 0 .919620131
37
1 0 .04216364 7 .920341e -07 0 .957835567
38
1 0 .02168904 4 .074236e -07 0 .978310551
Se pueden presentar graficamente las predicciones. Por ejemplo, se dibujan las probabilidades predichas de que una persona seleccione brand = 1 en funcion de la variable
age, cuando es hombre (female = 0, en azul), y cuando es mujer (female = 1 , en rojo).
win.graph ()
plot ( p $ pred.1 [ p $ female ==0]p $ age [ p $ female ==0] , type = " l " , col = " blue " ,
lwd =1 , ylab = " Probabilidad predicha para Brand = 1 " , xlab = " Edad " )
lines ( p $ pred.1 [ p $ female ==1]p $ age [ p $ female ==1] , col = " red " , lwd =1)
legend (33 .5 , .93 , c ( " Hombres " ," Mujeres " ) , col = c ( " blue " ," red " ) , lwd = c (1 ,1))
16
17
18
- - - - - - - - - - - - - - - - - - - - - - - - - - - - brand =2 - - - - - - - - - - - - - - - - - - - - - - - - - - - Variable
N
Mean
Std Dev
Minimum
--------------------------------------------------------------age
307
32 .8436482
1 .8243945
28 .0000000
female
307
0 .6775244
0 .4681870
0
--------------------------------------------------------------Variable
Maximum
-----------------------age
38 .0000000
female
1 .0000000
------------------------
- - - - - - - - - - - - - - - - - - - - - - - - - - - - brand =3 - - - - - - - - - - - - - - - - - - - - - - - - - - - Variable
N
Mean
Std Dev
Minimum
--------------------------------------------------------------age
221
34 .3031674
2 .3478111
27 .0000000
female
221
0 .6470588
0 .4789695
0
--------------------------------------------------------------Variable
Maximum
-----------------------age
38 .0000000
female
1 .0000000
------------------------
brand
Total
Frequency
1
2
3
1
2
3
207
307
221
19
Criterion
AIC
SC
-2 Log L
Intercept
Only
Intercept
and
Covariates
1595 .792
1604 .991
1591 .792
1417 .941
1445 .541
1405 .941
Chi - Square
DF
Pr > ChiSq
185 .8502
163 .9538
129 .7966
4
4
4
< .0001
< .0001
< .0001
Effect
DF
Wald
Chi - Square
Pr > ChiSq
female
age
2
2
7 .6704
123 .3880
0 .0216
< .0001
Parameter
brand
Intercept
Intercept
female
female
age
age
2
3
2
3
2
3
DF
Estimate
Standard
Error
Wald
Chi - Square
Pr > ChiSq
1
1
1
1
1
1
-11 .7746
-22 .7214
0 .5238
0 .4659
0 .3682
0 .6859
1 .7746
2 .0580
0 .1942
0 .2261
0 .0550
0 .0626
44 .0239
121 .8897
7 .2719
4 .2472
44 .8133
119 .9541
< .0001
< .0001
0 .0070
0 .0393
< .0001
< .0001
Effect
brand
female
female
age
age
2
3
2
3
Point
Estimate
1 .688
1 .594
1 .445
1 .986
20
95 % Wald
Confidence Limits
1 .154
1 .023
1 .297
1 .756
2 .471
2 .482
1 .610
2 .245
As, se obtiene que las variables female y age son significativas en los dos modelos.
Las mujeres parecen preferir brand igual a 2 o igual a 3 en comparacion con brand igual
a 1. Por otro lado, cuanto mayor es una persona es mas probable que prefiera brand
igual a 2 o a 3 que brand igual a 1.
Se observa que con el cambio en una unidad en la variable age (un a
no mayor), se
espera que la razon de odds entre elegir brand = 2 respecto de brand = 1 se incrementa
en exp(0,3682) = 1,45.
En el caso del sexo de las personas, female, la razon de odds de elegir brand = 2
respecto de 1 se incrementa en exp(0,5238) = 1,69.
21