[R] multinom and contrasts

John Fox jfox at mcmaster.ca
Thu Apr 14 02:29:25 CEST 2005


Dear chip,

The difference is small and is due to computational error. 

Your example:

> max(abs(zz[1:10,] - yy[1:10,]))
[1] 2.207080e-05

Tightening the convergence tolerance in multinom() eliminates the
difference:

> options(contrasts=c('contr.treatment','contr.poly'))
> xx<-multinom(Type~Infl+Cont,data=housing[-c(1,10,11,22,25,30),],
reltol=1.0e-12)
# weights:  20 (12 variable)
initial  value 91.495428 
iter  10 value 91.124526
final  value 91.124523 
converged
> yy<-predict(xx,type='probs')
> options(contrasts=c('contr.helmert','contr.poly'))
> xx<-multinom(Type~Infl+Cont,data=housing[-c(1,10,11,22,25,30),],
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
> zz<-predict(xx,type='probs')
> max(abs(zz[1:10,] - yy[1:10,]))
[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 
-------------------------------- 

> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch 
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of array chip
> Sent: Wednesday, April 13, 2005 6:26 PM
> To: R-help at stat.math.ethz.ch
> Subject: [R] multinom and contrasts
> 
> 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
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html




More information about the R-help mailing list