visreg clash with riskRegression for hazard plots
Opened this issue · 2 comments
I have no idea where to even begin with this error. It seems there's a clash somewhere with the visreg and riskRegression packages. It occurs when I use the plot.singleEventCB
function:
library(survival)
library(casebase)
#> See example usage at http://sahirbhatnagar.com/casebase/
library(riskRegression)
#> riskRegression version 2021.10.10
cfit <- fitSmoothHazard(death ~ futime + sex*pspline(age, df=4), data=mgus, time = "futime")
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
plot(cfit,
hazard.params = list(xvar = "age",
by = "sex",
alpha = 1))
#> Error in names(Data) <- gsub("offset\\((.*)\\)", "\\1", names(Data)): names() applied to a non-vector
Created on 2021-10-14 by the reprex package (v0.3.0)
Session info
devtools::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.0.4 (2021-02-15)
#> os Pop!_OS 21.04
#> 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-10-14
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date lib
#> assertthat 0.2.1 2019-03-21 [1]
#> backports 1.2.1 2020-12-09 [1]
#> base64enc 0.1-3 2015-07-28 [1]
#> blob 1.2.1 2020-01-20 [1]
#> cachem 1.0.6 2021-08-19 [1]
#> callr 3.7.0 2021-04-20 [1]
#> casebase * 0.9.1.9999 2021-10-13 [1]
#> checkmate 2.0.0 2020-02-06 [1]
#> cli 3.0.1 2021-07-17 [1]
#> cluster 2.1.1 2021-02-14 [4]
#> cmprsk 2.2-10 2020-06-09 [1]
#> codetools 0.2-18 2020-11-04 [4]
#> colorspace 2.0-2 2021-06-24 [1]
#> conquer 1.0.2 2020-08-27 [1]
#> crayon 1.4.1 2021-02-08 [1]
#> data.table 1.14.2 2021-09-27 [1]
#> DBI 1.1.1 2021-01-15 [1]
#> desc 1.4.0 2021-09-28 [1]
#> devtools 2.4.2 2021-06-07 [1]
#> digest 0.6.28 2021-09-23 [1]
#> dplyr 1.0.7 2021-06-18 [1]
#> ellipsis 0.3.2 2021-04-29 [1]
#> evaluate 0.14 2019-05-28 [1]
#> fansi 0.5.0 2021-05-25 [1]
#> fastmap 1.1.0 2021-01-25 [1]
#> foreach 1.5.1 2020-10-15 [1]
#> foreign 0.8-81 2020-12-22 [4]
#> Formula 1.2-3 2018-05-03 [1]
#> fs 1.5.0 2020-07-31 [1]
#> generics 0.1.0 2020-10-31 [1]
#> ggplot2 3.3.5 2021-06-25 [1]
#> glue 1.4.2 2020-08-27 [1]
#> gridExtra 2.3 2017-09-09 [1]
#> gtable 0.3.0 2019-03-25 [1]
#> highr 0.9 2021-04-16 [1]
#> Hmisc 4.4-1 2020-08-10 [1]
#> htmlTable 2.1.0 2020-09-16 [1]
#> htmltools 0.5.2 2021-08-25 [1]
#> htmlwidgets 1.5.3 2020-12-10 [1]
#> iterators 1.0.13 2020-10-15 [1]
#> jpeg 0.1-8.1 2019-10-24 [1]
#> knitr 1.36 2021-09-29 [1]
#> lattice 0.20-41 2020-04-02 [1]
#> latticeExtra 0.6-29 2019-12-19 [1]
#> lava 1.6.7 2020-03-05 [1]
#> lifecycle 1.0.1 2021-09-24 [1]
#> magrittr 2.0.1 2020-11-17 [1]
#> MASS 7.3-53.1 2021-02-12 [4]
#> Matrix 1.3-2 2021-01-06 [4]
#> MatrixModels 0.4-1 2015-08-22 [1]
#> matrixStats 0.56.0 2020-03-13 [1]
#> memoise 2.0.0 2021-01-26 [1]
#> mets 1.2.9 2021-09-06 [1]
#> mgcv 1.8-34 2021-02-16 [4]
#> multcomp 1.4-13 2020-04-08 [1]
#> munsell 0.5.0 2018-06-12 [1]
#> mvtnorm 1.1-1 2020-06-09 [1]
#> nlme 3.1-152 2021-02-04 [4]
#> nnet 7.3-15 2021-01-24 [4]
#> numDeriv 2016.8-1.1 2019-06-06 [1]
#> pillar 1.6.3 2021-09-26 [1]
#> pkgbuild 1.2.0 2020-12-15 [1]
#> pkgconfig 2.0.3 2019-09-22 [1]
#> pkgload 1.2.2 2021-09-11 [1]
#> png 0.1-7 2013-12-03 [1]
#> polspline 1.1.19 2020-05-15 [1]
#> prettyunits 1.1.1 2020-01-24 [1]
#> processx 3.5.2 2021-04-30 [1]
#> prodlim 2019.11.13 2019-11-17 [1]
#> ps 1.6.0 2021-02-28 [1]
#> purrr 0.3.4 2020-04-17 [1]
#> quantreg 5.67 2020-09-09 [1]
#> R6 2.5.1 2021-08-19 [1]
#> RColorBrewer 1.1-2 2014-12-07 [1]
#> Rcpp 1.0.7 2021-07-07 [1]
#> remotes 2.4.0 2021-06-02 [1]
#> riskRegression * 2021.10.10 2021-10-11 [1]
#> rlang 0.4.11 2021-04-30 [1]
#> rmarkdown 2.11.3 2021-10-13 [1]
#> rms 6.0-1 2020-07-18 [1]
#> rpart 4.1-15 2019-04-12 [4]
#> rprojroot 2.0.2 2020-11-15 [1]
#> rstudioapi 0.13 2020-11-12 [1]
#> sandwich 2.5-1 2019-04-06 [1]
#> scales 1.1.1 2020-05-11 [1]
#> sessioninfo 1.1.1 2018-11-05 [1]
#> SparseM 1.78 2019-12-13 [1]
#> stringi 1.7.5 2021-10-04 [1]
#> stringr 1.4.0 2019-02-10 [1]
#> survival * 3.2-13 2021-08-24 [1]
#> testthat 3.1.0 2021-10-04 [1]
#> TH.data 1.0-10 2019-01-21 [1]
#> tibble 3.1.5 2021-09-30 [1]
#> tidyselect 1.1.1 2021-04-30 [1]
#> timereg 1.9.7 2020-08-24 [1]
#> usethis 2.0.1 2021-02-10 [1]
#> utf8 1.2.2 2021-07-24 [1]
#> vctrs 0.3.8 2021-04-29 [1]
#> VGAM 1.1-5 2021-01-14 [1]
#> visreg 2.7.0 2020-06-04 [1]
#> withr 2.4.2 2021-04-18 [1]
#> xfun 0.26 2021-09-14 [1]
#> yaml 2.2.1 2020-02-01 [1]
#> zoo 1.8-8 2020-05-02 [1]
#> source
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> Github (sahirbhatnagar/casebase@2342d19)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.3)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.3)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.3)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.3)
#> CRAN (R 4.0.3)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> Github (rstudio/rmarkdown@ebf0d09)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.0)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> 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
This works if I don't load riskRegression:
library(survival)
library(casebase)
#> See example usage at http://sahirbhatnagar.com/casebase/
# library(riskRegression)
cfit <- fitSmoothHazard(death ~ futime + sex*pspline(age, df=4), data=mgus, time = "futime")
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
plot(cfit,
hazard.params = list(xvar = "age",
by = "sex",
alpha = 1))
#> Conditions used in construction of plot
#> sex: female / male
#> futime: 3329.963
#> offset: 0
Created on 2021-10-14 by the reprex package (v0.3.0)
Session info
devtools::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.0.4 (2021-02-15)
#> os Pop!_OS 21.04
#> 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-10-14
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date lib
#> assertthat 0.2.1 2019-03-21 [1]
#> blob 1.2.1 2020-01-20 [1]
#> cachem 1.0.6 2021-08-19 [1]
#> callr 3.7.0 2021-04-20 [1]
#> casebase * 0.9.1.9999 2021-10-13 [1]
#> cli 3.0.1 2021-07-17 [1]
#> colorspace 2.0-2 2021-06-24 [1]
#> crayon 1.4.1 2021-02-08 [1]
#> curl 4.3.2 2021-06-23 [1]
#> data.table 1.14.2 2021-09-27 [1]
#> DBI 1.1.1 2021-01-15 [1]
#> desc 1.4.0 2021-09-28 [1]
#> devtools 2.4.2 2021-06-07 [1]
#> digest 0.6.28 2021-09-23 [1]
#> dplyr 1.0.7 2021-06-18 [1]
#> ellipsis 0.3.2 2021-04-29 [1]
#> evaluate 0.14 2019-05-28 [1]
#> fansi 0.5.0 2021-05-25 [1]
#> fastmap 1.1.0 2021-01-25 [1]
#> fs 1.5.0 2020-07-31 [1]
#> generics 0.1.0 2020-10-31 [1]
#> ggplot2 3.3.5 2021-06-25 [1]
#> glue 1.4.2 2020-08-27 [1]
#> gtable 0.3.0 2019-03-25 [1]
#> highr 0.9 2021-04-16 [1]
#> htmltools 0.5.2 2021-08-25 [1]
#> httr 1.4.2 2020-07-20 [1]
#> knitr 1.36 2021-09-29 [1]
#> lattice 0.20-41 2020-04-02 [1]
#> lifecycle 1.0.1 2021-09-24 [1]
#> magrittr 2.0.1 2020-11-17 [1]
#> Matrix 1.3-2 2021-01-06 [4]
#> memoise 2.0.0 2021-01-26 [1]
#> mgcv 1.8-34 2021-02-16 [4]
#> mime 0.11 2021-06-23 [1]
#> munsell 0.5.0 2018-06-12 [1]
#> nlme 3.1-152 2021-02-04 [4]
#> pillar 1.6.3 2021-09-26 [1]
#> pkgbuild 1.2.0 2020-12-15 [1]
#> pkgconfig 2.0.3 2019-09-22 [1]
#> pkgload 1.2.2 2021-09-11 [1]
#> prettyunits 1.1.1 2020-01-24 [1]
#> processx 3.5.2 2021-04-30 [1]
#> ps 1.6.0 2021-02-28 [1]
#> purrr 0.3.4 2020-04-17 [1]
#> R6 2.5.1 2021-08-19 [1]
#> remotes 2.4.0 2021-06-02 [1]
#> rlang 0.4.11 2021-04-30 [1]
#> rmarkdown 2.11.3 2021-10-13 [1]
#> rprojroot 2.0.2 2020-11-15 [1]
#> rstudioapi 0.13 2020-11-12 [1]
#> scales 1.1.1 2020-05-11 [1]
#> sessioninfo 1.1.1 2018-11-05 [1]
#> stringi 1.7.5 2021-10-04 [1]
#> stringr 1.4.0 2019-02-10 [1]
#> survival * 3.2-13 2021-08-24 [1]
#> testthat 3.1.0 2021-10-04 [1]
#> tibble 3.1.5 2021-09-30 [1]
#> tidyselect 1.1.1 2021-04-30 [1]
#> usethis 2.0.1 2021-02-10 [1]
#> utf8 1.2.2 2021-07-24 [1]
#> vctrs 0.3.8 2021-04-29 [1]
#> VGAM 1.1-5 2021-01-14 [1]
#> visreg 2.7.0 2020-06-04 [1]
#> withr 2.4.2 2021-04-18 [1]
#> xfun 0.26 2021-09-14 [1]
#> xml2 1.3.2 2020-04-23 [1]
#> yaml 2.2.1 2020-02-01 [1]
#> source
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> Github (sahirbhatnagar/casebase@2342d19)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.3)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> Github (rstudio/rmarkdown@ebf0d09)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.2)
#> CRAN (R 4.0.4)
#> CRAN (R 4.0.2)
#> 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
Here is what I was able to find. First, if I use the debugger and look at the content of Data
, I get this:
Browse[1]> Data
function (n, outcome = "competing.risks", formula = ~f(X1, 2) +
f(X2, -0.033) + f(X3, 0.4) + f(X6, 0.1) + f(X7, -0.1) + f(X8,
0.5) + f(X9, -1))
{
# Some code that's irrelevant
}
<bytecode: 0x7f84a6322f10>
<environment: namespace:riskRegression>
As we can see at the end, the argument Data
, used in visreg
, now points to a function in the package riskRegression
. So we get an error when visreg:::setupF
tries to change the names of a data frame that is now in fact a function; see here:
https://github.com/pbreheny/visreg/blob/13254c9553960c3885f2c12c7a7f7332bc582fb2/R/setupF.R#L37
A little bit more sleuthing reveals that Data
actually maps to riskRegression::sampleData
, which is a function creating sample data according to some parameters:
Browse[1]> identical(Data, riskRegression::sampleData)
[1] TRUE
One key observation is that sampleData
is also the name we use for the dataset after case-base sampling. It's also the dataset that appears in the original call to glm
:
> cfit$call
fitSmoothHazard(formula = death ~ futime + sex * pspline(age,
df = 4), data = mgus, time = "futime")
> cfit$lower_call
glm(formula = formula, family = binomial, data = sampleData)
Given all this, and given how visreg:::setupF
finds the dataset it needs, my best guess is that at some point visreg:::setupF
reads cfit$lower_call
instead of cfit$call
, and therefore looks for an object called sampleData
in the environment and finds the function from riskRegression
.
The only problem with this guess is that it doesn't explain why the code works when riskRegression
isn't loaded. It seems to me that, following that logic, we would get an error that sampleData
doesn't exist.
As a proof of concept, you can see that if we define an object sampleData
in the global environment, visreg:::setupF
finds it:
library(survival)
library(casebase)
#> See example usage at http://sahirbhatnagar.com/casebase/
sampleData <- 10
class(sampleData) <- "foo"
names.foo <- function(x) message("I feel triggered")
cfit <- fitSmoothHazard(death ~ futime + sex*pspline(age, df=4), data=mgus, time = "futime")
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
plot(cfit,
hazard.params = list(xvar = "age",
by = "sex",
alpha = 1))
#> I feel triggered
#> Error in as.data.frame.default(data): cannot coerce class '"foo"' to a data.frame
Created on 2021-10-14 by the reprex package (v2.0.0)