[Rd] summary() dispatch puzzle
Martin Maechler
maechler at stat.math.ethz.ch
Mon Jul 18 17:02:22 CEST 2016
>>>>> Ben Bolker <bbolker at gmail.com>
>>>>> on Fri, 15 Jul 2016 16:45:50 -0400 writes:
> I'm sorry I haven't boiled this down to a more-minimal example yet,
> but ...
> I'm working on an S3 method (tidy.merMod, in the 'broom' package). It
> normally handles 'merMod' objects from the lme4 package, but I'm trying
> to make it handle 'merModLmerTest' objects from the lmerTest package too.
> The merModLmerTest class inherits (as an S4) class from the merMod
> class. The important difference (for my current purposes) is that
> summary.merMod returns an object containing a coefficient table
> *without* degrees or freedom or p-values, while the summary method for
> merModLmerTest objects returns one *with* both of those columns.
> Because merModLmerTest inherits from merMod, calling tidy(obj) on a
> merModLmerTest object does get you into broom:::tidy.merMod. Within
> that function, though, calling summary() appears to call summary.merMod
> instead of merModLmerTest, so I don't get the additional columns I want.
> Ideas/directions for further diagnoses? Is this an S3/S4 confusion,
> or something funny about the way the broom and merModLmerTest package
> are talking to each other, or ... ?
I'm not sure, if I see your problem when I execute the
reproducible code below ...
> ----
> library(lme4)
> fm1 <- lmer(Reaction~Days+(Days|Subject),sleepstudy)
> library(lmerTest)
> fm1B <- as(fm1,"merModLmerTest")
> coef(summary(fm1B)) ## table with df and p values
> coef(lme4:::summary.merMod(fm1B)) ## table without df and p values
> is(fm1B,"merMod") ## TRUE
> library(broom)
> tidy(fm1B)
Part of what I see from above, is
> coef(summary(fm1B)) ## table with df and p values
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 251.40510 6.824556 17.00002 36.838310 0.000000e+00
Days 10.46729 1.545789 17.00000 6.771485 3.263788e-06
> tidy(fm1B)
term estimate std.error statistic group
1 (Intercept) 251.40510485 6.824556 36.838310 fixed
2 Days 10.46728596 1.545789 6.771485 fixed
3 sd_(Intercept).Subject 24.74044768 NA NA Subject
4 sd_Days.Subject 5.92213326 NA NA Subject
5 cor_(Intercept).Days.Subject 0.06555134 NA NA Subject
6 sd_Observation.Residual 25.59181589 NA NA Residual
>
which seems consistent at least: You get std.error and statistic
for those two terms that you get 'df' and 'p-value from "the
good method" of summary(.)
?
Of course, I'm using the CRAN versions of the packages, not
github ones, and I see that we end up using half of tidyVerse
... which does not necessarily keep debugging easy..
Martin :
> sessionInfo()
R version 3.3.1 Patched (2016-07-16 r70928)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Fedora 22 (Twenty Two)
locale:
[1] LC_CTYPE=de_CH.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8
[4] LC_COLLATE=de_CH.UTF-8 LC_MONETARY=en_US.UTF-8 LC_MESSAGES=de_CH.UTF-8
[7] LC_PAPER=de_CH.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=de_CH.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] graphics grDevices datasets stats utils methods base
other attached packages:
[1] broom_0.4.1 lmerTest_2.0-32 lme4_1.1-12 Matrix_1.2-3 fortunes_1.5-3
[6] sfsmisc_1.1-0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.5 compiler_3.3.1 nloptr_1.0.4 RColorBrewer_1.1-2
[5] plyr_1.8.4 tools_3.3.1 rpart_4.1-10 tibble_1.1
[9] gtable_0.2.0 nlme_3.1-128 lattice_0.20-33 psych_1.6.6
[13] DBI_0.4-1 parallel_3.3.1 gridExtra_2.2.1 stringr_1.0.0
[17] dplyr_0.5.0 cluster_2.0.3 grid_3.3.1 nnet_7.3-12
[21] data.table_1.9.6 R6_2.1.2 survival_2.39-5 foreign_0.8-66
[25] latticeExtra_0.6-28 minqa_1.2.4 Formula_1.2-1 tidyr_0.5.1
[29] reshape2_1.4.1 ggplot2_2.1.0 magrittr_1.5 Hmisc_3.17-4
[33] scales_0.4.0 MASS_7.3-45 splines_3.3.1 assertthat_0.1
[37] mnormt_1.5-4 colorspace_1.2-6 stringi_1.1.1 acepack_1.3-3.3
[41] munsell_0.4.3 chron_2.3-47
>
> ## hard to show what's going on without debugging through the function:
> ## the issue occurs here:
> ## https://github.com/dgrtwo/broom/blob/master/R/lme4_tidiers.R#L94
> I can't replicate this behaviour with a trivial method ...
> silly <- function(x, ...) {
> UseMethod("silly")
> }
> silly.merMod <- function(object, ...) {
> coef(summary(object))
> }
> silly(fm1B)
> environment(silly) <- environment(tidy)
> silly(fm1B)
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list