Skip to content

multinom and contrasts

2 messages · array chip, John Fox

#
Hi,

I found that using different contrasts (e.g.
contr.helmert vs. contr.treatment) will generate
different fitted probabilities from multinomial
logistic regression using multinom(); while the fitted
probabilities from binary logistic regression seem to
be the same. Why is that? and for multinomial logisitc
regression, what contrast should be used? I guess it's
helmert?

here is an example script:

library(MASS)
library(nnet)

      #### multinomial logistic
options(contrasts=c('contr.treatment','contr.poly'))
xx<-multinom(Type~Infl+Cont,data=housing[-c(1,10,11,22,25,30),])
yy<-predict(xx,type='probs')
yy[1:10,]

options(contrasts=c('contr.helmert','contr.poly'))
xx<-multinom(Type~Infl+Cont,data=housing[-c(1,10,11,22,25,30),])
zz<-predict(xx,type='probs')
zz[1:10,]


      ##### binary logistic
options(contrasts=c('contr.treatment','contr.poly'))
obj.glm<-glm(Cont~Infl+Type,family='binomial',data=housing[-c(1,10,11,22,25,30),])
yy<-predict(xx,type='response')

options(contrasts=c('contr.helmert','contr.poly'))
obj.glm<-glm(Cont~Infl+Type,family='binomial',data=housing[-c(1,10,11,22,25,30),])
zz<-predict(xx,type='response')

Thanks
#
Dear chip,

The difference is small and is due to computational error. 

Your example:
[1] 2.207080e-05

Tightening the convergence tolerance in multinom() eliminates the
difference:
reltol=1.0e-12)
# weights:  20 (12 variable)
initial  value 91.495428 
iter  10 value 91.124526
final  value 91.124523 
converged
reltol=1.0e-12)
# weights:  20 (12 variable)
initial  value 91.495428 
iter  10 value 91.125287
iter  20 value 91.124523
iter  20 value 91.124523
iter  20 value 91.124523
final  value 91.124523 
converged
[1] 1.530021e-08

I hope this helps,
 John 

--------------------------------
John Fox
Department of Sociology
McMaster University
Hamilton, Ontario
Canada L8S 4M4
905-525-9140x23604
http://socserv.mcmaster.ca/jfox 
--------------------------------
1,10,11,22,25,30),])
1,10,11,22,25,30),])