[R] Help please with error from nnet::multinom

Lars Bishop lars52r at gmail.com
Sun Jun 26 22:03:43 CEST 2016


Thanks, David. Sorry, do you mean this?

library(nnet)
set.seed(1)
ysim <- gl(3, 100)
y <- model.matrix(~ysim -1)
X <- matrix( 3 * runif(length(ysim)), nrow = 300, ncol = 3)
X_new <- matrix( 3 * runif(length(ysim)), nrow = 200, ncol = 3)
fit <- multinom(y ~ X, trace = FALSE)
pred <- predict(fit, setNames(data.frame(X_new),c("X1","X2","X3") ), type =
"probs")

Error in predict.multinom(fit, setNames(data.frame(X_new), c("X1", "X2",  :
                                                               NAs are not
allowed in subscripted assignments
                                                             In addition:
Warning message:
                                                               'newdata'
had 200 rows but variables found have 300 rows

On Sun, Jun 26, 2016 at 3:46 PM, David Winsemius <dwinsemius at comcast.net>
wrote:

>
> > On Jun 26, 2016, at 12:39 PM, Lars Bishop <lars52r at gmail.com> wrote:
> >
> > Many thanks David. That works. Looks then this error will always occur
> in predict.multinom whenever the data argument is missing in the mutlinom
> fit, but the data argument is optional as per documentation.
>
> I don't agree with that analysis. The problem occurs because of a mismatch
> of names in the new data argument. With your original code this runs
> without error:
>
> pred <- predict(fit, setNames(data.frame(X_new),c("X1","X2","X3") ), type
> = "probs")
>
> --
> David.
> >
> > Best,
> > Lars.
> >
> > On Sun, Jun 26, 2016 at 3:14 PM, David Winsemius <dwinsemius at comcast.net>
> wrote:
> >
> > > On Jun 26, 2016, at 11:32 AM, Lars Bishop <lars52r at gmail.com> wrote:
> > >
> > > Thanks Bert.
> > >
> > > But I it doesn't complain when predict is used on X instead of X_new
> > > (using nnet_7.3-12), which is even more puzzling to me:
> > >
> > > pred <- predict(fit, X, type = "probs")
> >
> > Indeed: There is a predict.multinom function and it does have 'probs' as
> an acceptable argument to type:
> >
> > I got success (or at least an absence of an error message) with:
> >
> > #----------
> >  X <- data.frame(matrix( 3 * runif(length(ysim)), nrow = 300, ncol = 3))
> >  X_new <- data.frame(matrix( 3 * runif(length(ysim)), nrow = 200, ncol =
> 3))
> >  str(X)
> >
> > 'data.frame':   300 obs. of  3 variables:
> >  $ X1: num  0.797 1.116 1.719 2.725 0.605 ...
> >  $ X2: num  0.797 1.116 1.719 2.725 0.605 ...
> >  $ X3: num  0.797 1.116 1.719 2.725 0.605 ...
> >
> >  fit <- multinom(y ~ ., data=X, trace = FALSE)
> >  pred <- predict(fit, setNames(X_new, names(X)), type = "probs")
> >
> > > head(pred)
> >       ysim1     ysim2     ysim3
> > 1 0.3519378 0.3517418 0.2963204
> > 2 0.3135513 0.3138573 0.3725915
> > 3 0.3603779 0.3600461 0.2795759
> > 4 0.3572297 0.3569498 0.2858206
> > 5 0.3481512 0.3480128 0.3038360
> > 6 0.3813310 0.3806118 0.2380572
> >
> > #------------
> >
> >
> > > head(pred)
> > > ysim1     ysim2     ysim3
> > > 1 0.3059421 0.3063284 0.3877295
> > > 2 0.3200219 0.3202551 0.3597230
> > > 3 0.3452414 0.3451460 0.3096125
> > > 4 0.3827077 0.3819603 0.2353320
> > > 5 0.2973288 0.2977994 0.4048718
> > > 6 0.3817027 0.3809759 0.2373214
> > >
> > > Thanks again,
> > > Lars.
> > >
> > >
> > > On Sun, Jun 26, 2016 at 1:05 PM, Bert Gunter <bgunter.4567 at gmail.com>
> wrote:
> > >
> > >> Well, for one thing, there is no "probs" method for predict.nnet, at
> > >> least in my version: nnet_7.3-12
> > >>
> > >> Cheers,
> > >> Bert
> > >>
> > >>
> > >> Bert Gunter
> > >>
> > >> "The trouble with having an open mind is that people keep coming along
> > >> and sticking things into it."
> > >> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
> > >>
> > >>
> > >> On Sun, Jun 26, 2016 at 9:27 AM, Lars Bishop <lars52r at gmail.com>
> wrote:
> > >>> Hello,
> > >>>
> > >>> I'd appreciate your help in spotting the reason for the error and
> warning
> > >>> messages below.
> > >>>
> > >>> library(nnet)
> > >>> set.seed(1)
> > >>> ysim <- gl(3, 100)
> > >>> y <- model.matrix(~ysim -1)
> > >>> X <- matrix( 3 * runif(length(ysim)), nrow = 300, ncol = 3)
> > >>> X_new <- matrix( 3 * runif(length(ysim)), nrow = 200, ncol = 3)
> > >>>
> > >>> fit <- multinom(y ~ X, trace = FALSE)
> > >>> pred <- predict(fit, X_new, type = "probs")
> > >>>
> > >>> Error in predict.multinom(fit, X_new, type = "probs") :
> > >>>  NAs are not allowed in subscripted assignments
> > >>> In addition: Warning message:
> > >>>  'newdata' had 200 rows but variables found have 300 rows
> > >>>
> > >>> Thanks,
> > >>> Lars.
> > >>>
> > >>>        [[alternative HTML version deleted]]
> > >>>
> > >>> ______________________________________________
> > >>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > >>> https://stat.ethz.ch/mailman/listinfo/r-help
> > >>> PLEASE do read the posting guide
> > >> http://www.R-project.org/posting-guide.html
> > >>> and provide commented, minimal, self-contained, reproducible code.
> > >>
> > >
> > >       [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> >
> > David Winsemius
> > Alameda, CA, USA
> >
> >
>
> David Winsemius
> Alameda, CA, USA
>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list