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") 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]]
> 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
Thanks, David. That is very interesting, because ?multinom says that the value is: "A nnet object with additional components: ..." Of course I could have checked methods(predict), but I just took the Help file at its word. Should it not be revised to say explicitly: "An object of class 'multinom', which is a nnet object ... " ?? 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 12: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 >
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. 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 > >[[alternative HTML version deleted]]