How to predict with multinom() in R

user1172558 picture user1172558 · Jul 30, 2012 · Viewed 10k times · Source

I'm trying to calculate predicted probabilities using specific values, but R shows the following error:

Error in model.frame.default(Terms, newdata, na.action = na.omit, xlev = object$xlevels) : 
  variable lengths differ (found for 'x')
In addition: Warning message:
'newdata' had 1 rows but variable(s) found have 513 rows

This is what I was trying to do: x1 is a factor with 12 levels, and x2 is also a factor with 3 levels.

res4 <- multinom(y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 - 1, data=dta, Hess=T)

nd <- data.frame(x11=0.10331384, x12=0.07992203, x13=0.06237817, x14=0.03313840, x15=0.12280702, x16=0.07407407, x17=0.07407407, x18=0.10331384, x19=0.08966862, x110=0.07017544, x111=0.15009747, x112=0.03703704, x22=1, x23=0, x3=1, x4=1, x5=mean(x5), x6=mean(x6, na.rm=T), x7=mean(x7), x8=mean(x8), x9=mean(x9))

predict(res4, type="probs", newdata=nd)

Any help?

Answer

nograpes picture nograpes · Jul 30, 2012

You nd data.frame should have nine variables, one for each of your x's.

library(nnet)
dta=data.frame(replicate(10,runif(10)))
names(dta)=c('y',paste0('x',1:9))
res4 <- multinom(y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 - 1, data=dta, Hess=T)
nd <- data.frame(x1=0.10331384, x2=0.07992203, x3=0.06237817, x4=0.03313840, x5=0.12280702, x6=0.07407407, x7=0.07407407, x8=0.10331384, x9=0.08966862)
predict(res4, type="probs", newdata=nd)