John Fox
2020-Nov-09 18:51 UTC
[R] [effects] Wrong xlevels in effects plot for mixed effects model when multiline = TRUE
Dear Gerrit, This looks like a bug in plot.eff(), which I haven't yet tracked down, but the following should give you what you want: eff <- Effect(c("gProt", "Age"), m, xlevels = list(gProt = 1:6 * 30, Age=60:100)) plot(eff, lines=list(multiline=TRUE)) or eff <- predictorEffect("Age", m, xlevels = list(gProt = 1:6 * 30)) plot(eff, lines=list(multiline=TRUE)) A couple of comments on your code, unrelated to the bug in plot.eff(): You don't need allEffects() because there's only one high-order fixed effect in the model, I(gProt/10 - 6.2):I(Age/10 - 7.2) (i.e., the interaction of gProt with Age). x.var isn't intended as an argument for plot() with allEffects() because there generally isn't a common horizontal axis for all of the high-order effect plots. Finally, thank you for the bug report. Barring unforeseen difficulties, we'll fix the bug in due course. I hope this helps, John John Fox, Professor Emeritus McMaster University Hamilton, Ontario, Canada web: https://socialsciences.mcmaster.ca/jfox/ On 2020-11-09 8:06 a.m., Gerrit Eichner wrote:> Dear list members, > > I observe a strange/wrong graphical output when I set the xlevels > in (e. g.) allEffects for an lmer model and plot the effects with > multiline = TRUE. I have compiled a reprex for which you need the > lmer model and the environment in which the model was fitted. They > are contained in the zip file at > https://jlubox.uni-giessen.de/dl/fiSzTCc3bW8z2npZvPpqG1xr/m-and-G1.zip > After unpacking the following should work: > > m <- readRDS("m.rds")?? # The lmer-model. > G1 <- readRDS("G1.rds") # Environment in which the model > ???????????????????????? # was fitted; needed by alaEffects. > summary(m) # Just to see the model. > > library(effects) > aE <- allEffects(m, xlevels = list(gProt = 1:6 * 30)) > ???????????????????? # Non-default values for xlevels. > > plot(aE)????????????????????? # Fine. > plot(aE, x.var = "Age")?????? # Fine. > plot(aE, lines = list(multiline = TRUE))? # Fine. > > plot(aE, lines = list(multiline = TRUE), > ????? x.var = "Age")??????? # Nonsense. > > > Anybody any idea about the reason, my mistake, or a > workaround? Thx for any hint! > > ? Regards? --? Gerrit > > > PS: > ?> sessionInfo() > R version 4.0.2 (2020-06-22) > Platform: x86_64-w64-mingw32/x64 (64-bit) > Running under: Windows 10 x64 (build 18363) > > Matrix products: default > > 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.2-0 carData_3.0-4 > > loaded via a namespace (and not attached): > ? [1] Rcpp_1.0.5?????? lattice_0.20-41? MASS_7.3-53????? grid_4.0.2 > DBI_1.1.0 > ? [6] nlme_3.1-149???? survey_4.0?????? estimability_1.3 minqa_1.2.4 > nloptr_1.2.2.2 > [11] Matrix_1.2-18??? boot_1.3-25????? splines_4.0.2??? statmod_1.4.34 > lme4_1.1-23 > [16] tools_4.0.2????? survival_3.2-3?? yaml_2.2.1?????? compiler_4.0.2 > colorspace_1.4-1 > [21] mitools_2.4????? insight_0.9.5??? nnet_7.3-14 > > --------------------------------------------------------------------- > 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.
Gerrit Eichner
2020-Nov-09 21:51 UTC
[R] [effects] Wrong xlevels in effects plot for mixed effects model when multiline = TRUE
Dear John, thank you for prompt reply and your hints. The problem is that our lmer model is much more complicated and has several interaction terms: Mass ~ Sex + I(YoE - 1996) + I(PAI/0.1 - 16) + I(gProt/10 - 6.2) + I(Age/10 - 7.2) + I((Age/10 - 7.2)^2) + Diuretics + Sex:I(PAI/0.1 - 16) + Sex:I(gProt/10 - 6.2) + Sex:I(Age/10 - 7.2) + Sex:I((Age/10 - 7.2)^2) + I(YoE - 1996):I(Age/10 - 7.2) + I(PAI/0.1 - 16):I(Age/10 - 7.2) + I(gProt/10 - 6.2):I(Age/10 - 7.2) + (I(Age/10 - 7.2) + I((Age/10 - 7.2)^2) | ID) so that allEffects is quite efficient, and since I want to place several interaction terms with Age in one figure with Age on the horizontal axis the argument x.var = "Age" in plot would be very helpful. :-) Further hints using the above complex model: The following works well: eff <- Effect(c("gProt", "Age"), m, xlevels = list(gProt = 1:6 * 30, Age = 60:100)) plot(eff, lines=list(multiline=TRUE), x.var = "Age") But this fails (note that Age is missing in xlevels): eff <- Effect(c("gProt", "Age"), m, xlevels = list(gProt = 1:6 * 30)) plot(eff, lines=list(multiline=TRUE), x.var = "Age") And that just led me to a solutution also for allEffects: Specifying Age in xlevels for allEffects (although it seems unnecessary when x.var = "Age" is used in plot) produces the correct graphical output! :-) Thank you very much for your support and the brilliant effects package in general! :-) 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 Fax: +49-(0)641-99-32109 http://www.uni-giessen.de/eichner --------------------------------------------------------------------- Am 09.11.2020 um 19:51 schrieb John Fox:> Dear Gerrit, > > This looks like a bug in plot.eff(), which I haven't yet tracked down, > but the following should give you what you want: > > eff <- Effect(c("gProt", "Age"), m, xlevels = list(gProt = 1:6 * 30, > Age=60:100)) > plot(eff, lines=list(multiline=TRUE)) > > or > > eff <- predictorEffect("Age", m, xlevels = list(gProt = 1:6 * 30)) > plot(eff, lines=list(multiline=TRUE)) > > A couple of comments on your code, unrelated to the bug in plot.eff(): > > You don't need allEffects() because there's only one high-order fixed > effect in the model, I(gProt/10 - 6.2):I(Age/10 - 7.2) (i.e., the > interaction of gProt with Age). > > x.var isn't intended as an argument for plot() with allEffects() because > there generally isn't a common horizontal axis for all of the high-order > effect plots. > > Finally, thank you for the bug report. Barring unforeseen difficulties, > we'll fix the bug in due course. > > I hope this helps, > ?John > > John Fox, Professor Emeritus > McMaster University > Hamilton, Ontario, Canada > web: https://socialsciences.mcmaster.ca/jfox/ > > On 2020-11-09 8:06 a.m., Gerrit Eichner wrote: >> Dear list members, >> >> I observe a strange/wrong graphical output when I set the xlevels >> in (e. g.) allEffects for an lmer model and plot the effects with >> multiline = TRUE. I have compiled a reprex for which you need the >> lmer model and the environment in which the model was fitted. They >> are contained in the zip file at >> https://jlubox.uni-giessen.de/dl/fiSzTCc3bW8z2npZvPpqG1xr/m-and-G1.zip >> After unpacking the following should work: >> >> m <- readRDS("m.rds")?? # The lmer-model. >> G1 <- readRDS("G1.rds") # Environment in which the model >> ????????????????????????? # was fitted; needed by alaEffects. >> summary(m) # Just to see the model. >> >> library(effects) >> aE <- allEffects(m, xlevels = list(gProt = 1:6 * 30)) >> ????????????????????? # Non-default values for xlevels. >> >> plot(aE)????????????????????? # Fine. >> plot(aE, x.var = "Age")?????? # Fine. >> plot(aE, lines = list(multiline = TRUE))? # Fine. >> >> plot(aE, lines = list(multiline = TRUE), >> ?????? x.var = "Age")??????? # Nonsense. >> >> >> Anybody any idea about the reason, my mistake, or a >> workaround? Thx for any hint! >> >> ?? Regards? --? Gerrit >> >> >> PS: >> ??> sessionInfo() >> R version 4.0.2 (2020-06-22) >> Platform: x86_64-w64-mingw32/x64 (64-bit) >> Running under: Windows 10 x64 (build 18363) >> >> Matrix products: default >> >> 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.2-0 carData_3.0-4 >> >> loaded via a namespace (and not attached): >> ?? [1] Rcpp_1.0.5?????? lattice_0.20-41? MASS_7.3-53????? grid_4.0.2 >> DBI_1.1.0 >> ?? [6] nlme_3.1-149???? survey_4.0?????? estimability_1.3 minqa_1.2.4 >> nloptr_1.2.2.2 >> [11] Matrix_1.2-18??? boot_1.3-25????? splines_4.0.2??? statmod_1.4.34 >> lme4_1.1-23 >> [16] tools_4.0.2????? survival_3.2-3?? yaml_2.2.1?????? compiler_4.0.2 >> colorspace_1.4-1 >> [21] mitools_2.4????? insight_0.9.5??? nnet_7.3-14 >> >> --------------------------------------------------------------------- >> 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.
John Fox
2020-Nov-12 00:52 UTC
[R] [effects] Wrong xlevels in effects plot for mixed effects model when multiline = TRUE
Dear Gerrit, The bug you reported should now be fixed in the development version 4.2-1 of the effects package, which you can currently install from R-Forge via install.packages("effects", repos="http://R-Forge.R-project.org") . Eventually, the updated version of the effects package will be submitted to CRAN. Thank you again for the bug report, John John Fox, Professor Emeritus McMaster University Hamilton, Ontario, Canada web: https://socialsciences.mcmaster.ca/jfox/ On 2020-11-09 4:51 p.m., Gerrit Eichner wrote:> Dear John, > > thank you for prompt reply and your hints. The problem is that our > lmer model is much more complicated and has several interaction > terms: > > Mass ~ Sex + I(YoE - 1996) + I(PAI/0.1 - 16) + I(gProt/10 - 6.2) + > ??? I(Age/10 - 7.2) + I((Age/10 - 7.2)^2) + Diuretics + > ??? Sex:I(PAI/0.1 - 16) + Sex:I(gProt/10 - 6.2) + > ??? Sex:I(Age/10 - 7.2) + Sex:I((Age/10 - 7.2)^2) + > ??? I(YoE - 1996):I(Age/10 - 7.2) + I(PAI/0.1 - 16):I(Age/10 - 7.2) + > ??? I(gProt/10 - 6.2):I(Age/10 - 7.2) + > ??? (I(Age/10 - 7.2) + I((Age/10 - 7.2)^2) | ID) > > so that allEffects is quite efficient, and since I want to place > several interaction terms with Age in one figure with Age on the > horizontal axis the argument x.var = "Age" in plot would be very > helpful. :-) > > Further hints using the above complex model: The following works well: > eff <- Effect(c("gProt", "Age"), m, > ????????????? xlevels = list(gProt = 1:6 * 30, Age = 60:100)) > plot(eff, lines=list(multiline=TRUE), x.var = "Age") > > But this fails (note that Age is missing in xlevels): > eff <- Effect(c("gProt", "Age"), m, xlevels = list(gProt = 1:6 * 30)) > plot(eff, lines=list(multiline=TRUE), x.var = "Age") > > > And that just led me to a solutution also for allEffects: Specifying > Age in xlevels for allEffects (although it seems unnecessary when > x.var = "Age" is used in plot) produces the correct graphical > output! :-) > > Thank you very much for your support and the brilliant effects > package in general! :-) > > ?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 > Fax: +49-(0)641-99-32109??????????? http://www.uni-giessen.de/eichner > --------------------------------------------------------------------- > > Am 09.11.2020 um 19:51 schrieb John Fox: >> Dear Gerrit, >> >> This looks like a bug in plot.eff(), which I haven't yet tracked down, >> but the following should give you what you want: >> >> eff <- Effect(c("gProt", "Age"), m, xlevels = list(gProt = 1:6 * 30, >> Age=60:100)) >> plot(eff, lines=list(multiline=TRUE)) >> >> or >> >> eff <- predictorEffect("Age", m, xlevels = list(gProt = 1:6 * 30)) >> plot(eff, lines=list(multiline=TRUE)) >> >> A couple of comments on your code, unrelated to the bug in plot.eff(): >> >> You don't need allEffects() because there's only one high-order fixed >> effect in the model, I(gProt/10 - 6.2):I(Age/10 - 7.2) (i.e., the >> interaction of gProt with Age). >> >> x.var isn't intended as an argument for plot() with allEffects() >> because there generally isn't a common horizontal axis for all of the >> high-order effect plots. >> >> Finally, thank you for the bug report. Barring unforeseen >> difficulties, we'll fix the bug in due course. >> >> I hope this helps, >> ??John >> >> John Fox, Professor Emeritus >> McMaster University >> Hamilton, Ontario, Canada >> web: https://socialsciences.mcmaster.ca/jfox/ >> >> On 2020-11-09 8:06 a.m., Gerrit Eichner wrote: >>> Dear list members, >>> >>> I observe a strange/wrong graphical output when I set the xlevels >>> in (e. g.) allEffects for an lmer model and plot the effects with >>> multiline = TRUE. I have compiled a reprex for which you need the >>> lmer model and the environment in which the model was fitted. They >>> are contained in the zip file at >>> https://jlubox.uni-giessen.de/dl/fiSzTCc3bW8z2npZvPpqG1xr/m-and-G1.zip >>> After unpacking the following should work: >>> >>> m <- readRDS("m.rds")?? # The lmer-model. >>> G1 <- readRDS("G1.rds") # Environment in which the model >>> ????????????????????????? # was fitted; needed by alaEffects. >>> summary(m) # Just to see the model. >>> >>> library(effects) >>> aE <- allEffects(m, xlevels = list(gProt = 1:6 * 30)) >>> ????????????????????? # Non-default values for xlevels. >>> >>> plot(aE)????????????????????? # Fine. >>> plot(aE, x.var = "Age")?????? # Fine. >>> plot(aE, lines = list(multiline = TRUE))? # Fine. >>> >>> plot(aE, lines = list(multiline = TRUE), >>> ?????? x.var = "Age")??????? # Nonsense. >>> >>> >>> Anybody any idea about the reason, my mistake, or a >>> workaround? Thx for any hint! >>> >>> ?? Regards? --? Gerrit >>> >>> >>> PS: >>> ??> sessionInfo() >>> R version 4.0.2 (2020-06-22) >>> Platform: x86_64-w64-mingw32/x64 (64-bit) >>> Running under: Windows 10 x64 (build 18363) >>> >>> Matrix products: default >>> >>> 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.2-0 carData_3.0-4 >>> >>> loaded via a namespace (and not attached): >>> ?? [1] Rcpp_1.0.5?????? lattice_0.20-41? MASS_7.3-53????? grid_4.0.2 >>> DBI_1.1.0 >>> ?? [6] nlme_3.1-149???? survey_4.0?????? estimability_1.3 minqa_1.2.4 >>> nloptr_1.2.2.2 >>> [11] Matrix_1.2-18??? boot_1.3-25????? splines_4.0.2 >>> statmod_1.4.34 lme4_1.1-23 >>> [16] tools_4.0.2????? survival_3.2-3?? yaml_2.2.1 >>> compiler_4.0.2 colorspace_1.4-1 >>> [21] mitools_2.4????? insight_0.9.5??? nnet_7.3-14 >>> >>> --------------------------------------------------------------------- >>> 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.