Fox, John
2019-Sep-04 22:32 UTC
[R] [effects] allEffects does not accept integer value for xlevels
Dear Rolf, Thanks for trying to help. The bug wasn't in AnalyzeModel(). There was a bug in Effect.lm(), Effect.multinom(), and Effect.polr() in how xlevels=n (e.g., xlevels=4) was handled, now fixed in the development version of the effects package on R-Forge, from which it can be installed via install.packages("effects", repos="http://R-Forge.R-project.org"). Despite my implication to the contrary, xlevels=n works properly in predictorEffect() in the version of effects currently on CRAN. I'll wait for a decent interval before updating effects again on CRAN. Best, John> -----Original Message----- > From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Rolf > Turner > Sent: Wednesday, September 4, 2019 5:39 PM > To: Fox, John <jfox at mcmaster.ca> > Cc: r-help at r-project.org; sandy at umn.edu > Subject: Re: [R] [effects] allEffects does not accept integer value for > xlevels > > > I'm obviously not understanding something here, but it seems to me that > the conjecture > > >>> It appears to me that the cause is buried in effects:::Analyze.model > >>> > >>> in or close to the the lines > >>> > >>> if (is.numeric(xlevels) & length(xlevels) == 1L) { > >>> levs <- xlevels > >>> for (name in focal.predictors) xlevels[[name]] <- levs > >>> } > >>> > >>> > >>> > >>> where xlevels -- while not being a list in this case -- is > >>> subscripted by xlevels[[name]]. > > is not correct. There is no problem with using [[...]] to extract entries > from vectors. E.g.: > > x <- 1:3 > names(x) <- c("mung","gorp","clyde") > x[["gorp"]] > > produces > > [1] 2 > > cheers, > > Rolf > > On 5/09/19 2:19 AM, Fox, John wrote: > > Dear Gerrit, > > > > Yes, that appears to be a bug in Effect() -- too bad that it wasn't > discovered earlier because a new version of the package was submitted > yesterday, but thank you for the bug report. > > > > We'll fix the bug, but until then a work-around is to specify the > > number of levels for each numeric predictor, as in > > > > allEffects(mod.cowles, xlevels=list(neuroticism=4, extraversion=4)) > > > > I used 4 levels here to verify that this works correctly, since 5 is the > default. > > > > As well, although unrelated to this bug, you might take a look at > predictorEffects(), which we recommend in preference to allEffects(). > > > > Best, > > John > > > > -------------------------------------- > > John Fox, Professor Emeritus > > McMaster University > > Hamilton, Ontario, Canada > > Web: socialsciences.mcmaster.ca/jfox/ > > > > > > > >> -----Original Message----- > >> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of > >> Gerrit Eichner > >> Sent: Wednesday, September 4, 2019 9:25 AM > >> To: r-help at r-project.org > >> Subject: [R] [effects] allEffects does not accept integer value for > >> xlevels > >> > >> Dear list, > >> > >> citing from allEffects' help page (of package effects 4.1-2): > >> "If xlevels=n is an integer, then each numeric predictor is > >> represented by n equally spaced values rounded to 'nice' numbers." > >> > >> > >> However, adapting the first example from allEffects' help page throws > >> an an error: > >> > >> mod.cowles <- glm(volunteer ~ sex + neuroticism*extraversion, > >> data=Cowles, family=binomial) > >> allEffects(mod.cowles, > >> xlevels=5) Error in xlevels[[name]] : subscript out of bounds > >> > >> > >> It appears to me that the cause is buried in effects:::Analyze.model > >> > >> in or close to the the lines > >> > >> if (is.numeric(xlevels) & length(xlevels) == 1L) { > >> levs <- xlevels > >> for (name in focal.predictors) xlevels[[name]] <- levs > >> } > >> > >> > >> > >> where xlevels -- while not being a list in this case -- is > >> subscripted by xlevels[[name]]. > >> > >> Is anyone aware of a workaround (without having to specify all > >> numeric predictors of the used model explicitly in a list and giving > >> it to xlevels when calling allEffects), and without having to write > >> my own Analyze.model function? ;-) > >> > >> > >> Thx in advance and best regards -- Gerrit > >> > >> > >> > >> PS: sessionInfo() > >> > >> R version 3.6.1 (2019-07-05) > >> Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 > >> x64 (build 18362) > >> > >> Matrix products: default > >> > >> Random number generation: > >> RNG: Mersenne-Twister > >> Normal: Inversion > >> Sample: Rounding > >> > >> locale: > >> [1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252 [3] > >> LC_MONETARY=German_Germany.1252 LC_NUMERIC=C [5] > >> LC_TIME=German_Germany.1252 > >> > >> attached base packages: > >> [1] stats graphics grDevices utils datasets methods base > >> > >> other attached packages: > >> [1] effects_4.1-2 carData_3.0-2 > >> > >> loaded via a namespace (and not attached): > >> [1] Rcpp_1.0.2 lattice_0.20-38 MASS_7.3-51.4 grid_3.6.1 > >> > >> [5] DBI_1.0.0 nlme_3.1-141 survey_3.36 > >> estimability_1.3 > >> [9] minqa_1.2.4 nloptr_1.2.1 Matrix_1.2-17 boot_1.3- > 23 > >> > >> [13] splines_3.6.1 lme4_1.1-21.9001 survival_2.44-1.1 > compiler_3.6.1 > >> [17] colorspace_1.4-1 mitools_2.4 nnet_7.3-12 > >> > >> > >> --------------------------------------------------------------------- > >> Dr. Gerrit Eichner Mathematical Institute, Room 212 > >> gerrit.eichner at math.uni-giessen.de Justus-Liebig-University Giessen > >> Tel: +49-(0)641-99-32104 Arndtstr. 2, 35392 Giessen, Germany > >> http://www.uni-giessen.de/eichner > >> > >> ______________________________________________ > >> 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. > > > > ______________________________________________ > > 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. > > > > > -- > Honorary Research Fellow > Department of Statistics > University of Auckland > Phone: +64-9-373-7599 ext. 88276 > > ______________________________________________ > 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.
Gerrit Eichner
2019-Sep-05 08:14 UTC
[R] [effects] allEffects does not accept integer value for xlevels
Dear John, thank you for the quick response and fix! Sorry, that I didn't detect the bug earlier, but everything had run smoothly sofar. ;-) (I am aware of predictorEffects. I have in fact switched to it recently. Excellent functionality; thx a lot for it! Actually, experimenting with its ...levels arguments lead me to the respective attempts with allEffects out of curiosity.) Dear Rolf, my conjecture was not about a "problem with using [[...]] to *extract* entries from vectors", but about assigning a value to a list component of an object which is not a list. I was referring to xlevels[[name]] <- levs where xlevels is an integer. (But that doesn't matter anymore because my conjecture pointed to the wrong function anyway.) Best regards -- Gerrit --------------------------------------------------------------------- Dr. Gerrit Eichner Mathematical Institute, Room 212 gerrit.eichner at math.uni-giessen.de Justus-Liebig-University Giessen Tel: +49-(0)641-99-32104 Arndtstr. 2, 35392 Giessen, Germany http://www.uni-giessen.de/eichner --------------------------------------------------------------------- Am 05.09.2019 um 00:32 schrieb Fox, John:> Dear Rolf, > > Thanks for trying to help. The bug wasn't in AnalyzeModel(). > > There was a bug in Effect.lm(), Effect.multinom(), and Effect.polr() in how xlevels=n (e.g., xlevels=4) was handled, now fixed in the development version of the effects package on R-Forge, from which it can be installed via install.packages("effects", repos="http://R-Forge.R-project.org"). Despite my implication to the contrary, xlevels=n works properly in predictorEffect() in the version of effects currently on CRAN. > > I'll wait for a decent interval before updating effects again on CRAN. > > Best, > John > >> -----Original Message----- >> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Rolf >> Turner >> Sent: Wednesday, September 4, 2019 5:39 PM >> To: Fox, John <jfox at mcmaster.ca> >> Cc: r-help at r-project.org; sandy at umn.edu >> Subject: Re: [R] [effects] allEffects does not accept integer value for >> xlevels >> >> >> I'm obviously not understanding something here, but it seems to me that >> the conjecture >> >>>>> It appears to me that the cause is buried in effects:::Analyze.model >>>>> >>>>> in or close to the the lines >>>>> >>>>> if (is.numeric(xlevels) & length(xlevels) == 1L) { >>>>> levs <- xlevels >>>>> for (name in focal.predictors) xlevels[[name]] <- levs >>>>> } >>>>> >>>>> >>>>> >>>>> where xlevels -- while not being a list in this case -- is >>>>> subscripted by xlevels[[name]]. >> >> is not correct. There is no problem with using [[...]] to extract entries >> from vectors. E.g.: >> >> x <- 1:3 >> names(x) <- c("mung","gorp","clyde") >> x[["gorp"]] >> >> produces >> >> [1] 2 >> >> cheers, >> >> Rolf >> >> On 5/09/19 2:19 AM, Fox, John wrote: >>> Dear Gerrit, >>> >>> Yes, that appears to be a bug in Effect() -- too bad that it wasn't >> discovered earlier because a new version of the package was submitted >> yesterday, but thank you for the bug report. >>> >>> We'll fix the bug, but until then a work-around is to specify the >>> number of levels for each numeric predictor, as in >>> >>> allEffects(mod.cowles, xlevels=list(neuroticism=4, extraversion=4)) >>> >>> I used 4 levels here to verify that this works correctly, since 5 is the >> default. >>> >>> As well, although unrelated to this bug, you might take a look at >> predictorEffects(), which we recommend in preference to allEffects(). >>> >>> Best, >>> John >>> >>> -------------------------------------- >>> John Fox, Professor Emeritus >>> McMaster University >>> Hamilton, Ontario, Canada >>> Web: socialsciences.mcmaster.ca/jfox/ >>> >>> >>> >>>> -----Original Message----- >>>> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of >>>> Gerrit Eichner >>>> Sent: Wednesday, September 4, 2019 9:25 AM >>>> To: r-help at r-project.org >>>> Subject: [R] [effects] allEffects does not accept integer value for >>>> xlevels >>>> >>>> Dear list, >>>> >>>> citing from allEffects' help page (of package effects 4.1-2): >>>> "If xlevels=n is an integer, then each numeric predictor is >>>> represented by n equally spaced values rounded to 'nice' numbers." >>>> >>>> >>>> However, adapting the first example from allEffects' help page throws >>>> an an error: >>>> >>>> mod.cowles <- glm(volunteer ~ sex + neuroticism*extraversion, >>>> data=Cowles, family=binomial) >>>> allEffects(mod.cowles, >>>> xlevels=5) Error in xlevels[[name]] : subscript out of bounds >>>> >>>> >>>> It appears to me that the cause is buried in effects:::Analyze.model >>>> >>>> in or close to the the lines >>>> >>>> if (is.numeric(xlevels) & length(xlevels) == 1L) { >>>> levs <- xlevels >>>> for (name in focal.predictors) xlevels[[name]] <- levs >>>> } >>>> >>>> >>>> >>>> where xlevels -- while not being a list in this case -- is >>>> subscripted by xlevels[[name]]. >>>> >>>> Is anyone aware of a workaround (without having to specify all >>>> numeric predictors of the used model explicitly in a list and giving >>>> it to xlevels when calling allEffects), and without having to write >>>> my own Analyze.model function? ;-) >>>> >>>> >>>> Thx in advance and best regards -- Gerrit >>>> >>>> >>>> >>>> PS: sessionInfo() >>>> >>>> R version 3.6.1 (2019-07-05) >>>> Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 >>>> x64 (build 18362) >>>> >>>> Matrix products: default >>>> >>>> Random number generation: >>>> RNG: Mersenne-Twister >>>> Normal: Inversion >>>> Sample: Rounding >>>> >>>> locale: >>>> [1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252 [3] >>>> LC_MONETARY=German_Germany.1252 LC_NUMERIC=C [5] >>>> LC_TIME=German_Germany.1252 >>>> >>>> attached base packages: >>>> [1] stats graphics grDevices utils datasets methods base >>>> >>>> other attached packages: >>>> [1] effects_4.1-2 carData_3.0-2 >>>> >>>> loaded via a namespace (and not attached): >>>> [1] Rcpp_1.0.2 lattice_0.20-38 MASS_7.3-51.4 grid_3.6.1 >>>> >>>> [5] DBI_1.0.0 nlme_3.1-141 survey_3.36 >>>> estimability_1.3 >>>> [9] minqa_1.2.4 nloptr_1.2.1 Matrix_1.2-17 boot_1.3- >> 23 >>>> >>>> [13] splines_3.6.1 lme4_1.1-21.9001 survival_2.44-1.1 >> compiler_3.6.1 >>>> [17] colorspace_1.4-1 mitools_2.4 nnet_7.3-12 >>>> >>>> >>>> --------------------------------------------------------------------- >>>> Dr. Gerrit Eichner Mathematical Institute, Room 212 >>>> gerrit.eichner at math.uni-giessen.de Justus-Liebig-University Giessen >>>> Tel: +49-(0)641-99-32104 Arndtstr. 2, 35392 Giessen, Germany >>>> http://www.uni-giessen.de/eichner >>>> >>>> ______________________________________________ >>>> 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. >>> >>> ______________________________________________ >>> 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. >>> >> >> >> -- >> Honorary Research Fellow >> Department of Statistics >> University of Auckland >> Phone: +64-9-373-7599 ext. 88276 >> >> ______________________________________________ >> 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. > > ______________________________________________ > 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. >