sahirbhatnagar/casebase

lm method for plot generic not being used

Closed this issue · 1 comments

This was one of the issues brought up by the reviewer (see #136). Here I reproduce what I believe to be the issue. Basically, the lm method isn't being used, i.e., it's overridden by plot.singleEventCB. This likely suggests that we somehow need to use NextMethod. Also see https://sloop.r-lib.org/reference/s3_dispatch.html for details on what the symbols for s3_dispatch mean.

# devtools::install_github("r-lib/sloop")
library(sloop)
library(casebase)
#> See example usage at http://sahirbhatnagar.com/casebase/
library(splines)

data("eprchd")
eprchd <- transform(eprchd,
                    treatment = factor(treatment, levels = c("placebo","estPro")))

fit_mason <- fitSmoothHazard(status ~ treatment*ns(time),
                             data = eprchd,
                             time = "time")
sloop::s3_dispatch(plot(fit_mason))
#> => plot.singleEventCB
#>    plot.glm
#>  * plot.lm
#>  * plot.default

Created on 2021-02-02 by the reprex package (v0.3.0)

Session info
devtools::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#>  setting  value                       
#>  version  R version 4.0.2 (2020-06-22)
#>  os       Pop!_OS 20.04 LTS           
#>  system   x86_64, linux-gnu           
#>  ui       X11                         
#>  language en_US:en                    
#>  collate  en_US.UTF-8                 
#>  ctype    en_US.UTF-8                 
#>  tz       America/Toronto             
#>  date     2021-02-02                  
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────
#>  package     * version    date       lib source                            
#>  assertthat    0.2.1      2019-03-21 [1] CRAN (R 4.0.2)                    
#>  backports     1.2.1      2020-12-09 [1] CRAN (R 4.0.2)                    
#>  callr         3.5.1      2020-10-13 [1] CRAN (R 4.0.2)                    
#>  casebase    * 0.9.0      2020-07-03 [1] CRAN (R 4.0.2)                    
#>  cli           2.1.0      2020-10-12 [1] CRAN (R 4.0.2)                    
#>  codetools     0.2-16     2018-12-24 [4] CRAN (R 4.0.0)                    
#>  colorspace    1.4-1      2019-03-18 [1] CRAN (R 4.0.2)                    
#>  crayon        1.3.4      2017-09-16 [1] CRAN (R 4.0.2)                    
#>  data.table    1.13.0     2020-07-24 [1] CRAN (R 4.0.2)                    
#>  desc          1.2.0      2018-05-01 [1] CRAN (R 4.0.2)                    
#>  devtools      2.3.2      2020-09-18 [1] CRAN (R 4.0.2)                    
#>  digest        0.6.27     2020-10-24 [1] CRAN (R 4.0.2)                    
#>  dplyr         1.0.2      2020-08-18 [1] CRAN (R 4.0.2)                    
#>  ellipsis      0.3.1      2020-05-15 [1] CRAN (R 4.0.2)                    
#>  evaluate      0.14       2019-05-28 [1] CRAN (R 4.0.2)                    
#>  fansi         0.4.1      2020-01-08 [1] CRAN (R 4.0.2)                    
#>  fs            1.5.0      2020-07-31 [1] CRAN (R 4.0.2)                    
#>  generics      0.1.0      2020-10-31 [1] CRAN (R 4.0.2)                    
#>  ggplot2       3.3.2      2020-06-19 [1] CRAN (R 4.0.2)                    
#>  glue          1.4.2      2020-08-27 [1] CRAN (R 4.0.2)                    
#>  gtable        0.3.0      2019-03-25 [1] CRAN (R 4.0.2)                    
#>  highr         0.8        2019-03-20 [1] CRAN (R 4.0.2)                    
#>  htmltools     0.5.0      2020-06-16 [1] CRAN (R 4.0.2)                    
#>  knitr         1.30       2020-09-22 [1] CRAN (R 4.0.2)                    
#>  lattice       0.20-41    2020-04-02 [1] CRAN (R 4.0.2)                    
#>  lifecycle     0.2.0      2020-03-06 [1] CRAN (R 4.0.2)                    
#>  magrittr      2.0.1      2020-11-17 [1] CRAN (R 4.0.2)                    
#>  Matrix        1.2-18     2019-11-27 [4] CRAN (R 4.0.0)                    
#>  memoise       1.1.0      2017-04-21 [1] CRAN (R 4.0.2)                    
#>  mgcv          1.8-33     2020-08-27 [4] CRAN (R 4.0.2)                    
#>  munsell       0.5.0      2018-06-12 [1] CRAN (R 4.0.2)                    
#>  nlme          3.1-149    2020-08-23 [4] CRAN (R 4.0.2)                    
#>  pillar        1.4.6      2020-07-10 [1] CRAN (R 4.0.2)                    
#>  pkgbuild      1.1.0      2020-07-13 [1] CRAN (R 4.0.2)                    
#>  pkgconfig     2.0.3      2019-09-22 [1] CRAN (R 4.0.2)                    
#>  pkgload       1.1.0      2020-05-29 [1] CRAN (R 4.0.2)                    
#>  prettyunits   1.1.1      2020-01-24 [1] CRAN (R 4.0.2)                    
#>  processx      3.4.4      2020-09-03 [1] CRAN (R 4.0.2)                    
#>  ps            1.4.0      2020-10-07 [1] CRAN (R 4.0.2)                    
#>  purrr         0.3.4      2020-04-17 [1] CRAN (R 4.0.2)                    
#>  R6            2.5.0      2020-10-28 [1] CRAN (R 4.0.2)                    
#>  remotes       2.2.0      2020-07-21 [1] CRAN (R 4.0.2)                    
#>  rlang         0.4.9      2020-11-26 [1] CRAN (R 4.0.2)                    
#>  rmarkdown     2.5.3      2020-10-31 [1] Github (rstudio/rmarkdown@62d9b6b)
#>  rprojroot     1.3-2      2018-01-03 [1] CRAN (R 4.0.2)                    
#>  scales        1.1.1      2020-05-11 [1] CRAN (R 4.0.2)                    
#>  sessioninfo   1.1.1      2018-11-05 [1] CRAN (R 4.0.2)                    
#>  sloop       * 1.0.1.9000 2021-02-02 [1] Github (r-lib/sloop@0838334)      
#>  stringi       1.5.3      2020-09-09 [1] CRAN (R 4.0.2)                    
#>  stringr       1.4.0      2019-02-10 [1] CRAN (R 4.0.2)                    
#>  survival      3.2-3      2020-06-13 [1] CRAN (R 4.0.2)                    
#>  testthat      3.0.0      2020-10-31 [1] CRAN (R 4.0.2)                    
#>  tibble        3.0.4      2020-10-12 [1] CRAN (R 4.0.2)                    
#>  tidyselect    1.1.0      2020-05-11 [1] CRAN (R 4.0.2)                    
#>  usethis       1.6.3      2020-09-17 [1] CRAN (R 4.0.2)                    
#>  vctrs         0.3.4      2020-08-29 [1] CRAN (R 4.0.2)                    
#>  VGAM          1.1-3      2020-04-28 [1] CRAN (R 4.0.2)                    
#>  withr         2.3.0      2020-09-22 [1] CRAN (R 4.0.2)                    
#>  xfun          0.19       2020-10-30 [1] CRAN (R 4.0.2)                    
#>  yaml          2.2.1      2020-02-01 [1] CRAN (R 4.0.2)                    
#> 
#> [1] /home/sahir/R/x86_64-pc-linux-gnu-library/4.0
#> [2] /usr/local/lib/R/site-library
#> [3] /usr/lib/R/site-library
#> [4] /usr/lib/R/library

Yeah, I looked at that one yesterday, but I couldn't really understand what the reviewer meant. Of course we override the plot method, that was intentional. A user who insists on using plot.lm can call it directly, e.g. plot.lm(fit_mason).

My best guess of what the reviewing was saying is that the print method looked like the user called glm, which may be confusing:

> fitDF

Call: glm(formula = formula, family = binomial, data = sampleData)

Coefficients:
(Intercept)            Z  
     0.1350       0.9446  

Degrees of Freedom: 7877 Total (i.e. Null);  7876 Residual
Null Deviance:	    875.2 
Residual Deviance: 858.6 	AIC: 862.6

So I changed the code a bit to capture the call to fitSmoothHazard:

> fitDF

Call:  fitSmoothHazard(formula = event ~ Z, data = DF, time = "ftime")

Coefficients:
(Intercept)            Z  
     0.1350       0.9446  

Degrees of Freedom: 7877 Total (i.e. Null);  7876 Residual
Null Deviance:	    875.2 
Residual Deviance: 858.6 	AIC: 862.6

That's the best interpretation I have for that comment. Other methods like summary and anova are inherited from glm, which is fine. The plot method for glm is inherited from lm, without using NextMethod.