From 5f8901f97bbadf6db6ba813b5e32f11696b64020 Mon Sep 17 00:00:00 2001 From: Torsten Hothorn Date: Wed, 24 Feb 2021 07:20:02 +0000 Subject: [PATCH] version 1.2-3 --- DESCRIPTION | 8 +- MD5 | 15 ++-- R/dpq_etc.R | 4 +- build/partial.rdb | Bin 8341 -> 22352 bytes inst/NEWS.Rd | 12 ++- man/R.Rd | 68 +++++++++++++++- man/mlt-package.Rd | 13 +-- man/predict.Rd | 135 +++++++++++++++++++++++++++++++- tests/Examples/mlt-Ex.Rout.save | 132 ------------------------------- 9 files changed, 231 insertions(+), 156 deletions(-) delete mode 100644 tests/Examples/mlt-Ex.Rout.save diff --git a/DESCRIPTION b/DESCRIPTION index 9dba051..bec7889 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: mlt Title: Most Likely Transformations -Version: 1.2-2 -Date: 2021-02-12 +Version: 1.2-3 +Date: 2021-02-22 Authors@R: person("Torsten", "Hothorn", role = c("aut", "cre"), email = "Torsten.Hothorn@R-project.org", comment = c(ORCID = "0000-0001-8301-0471")) Description: Likelihood-based estimation of conditional transformation @@ -15,8 +15,8 @@ URL: http://ctm.R-forge.R-project.org License: GPL-2 Encoding: UTF-8 NeedsCompilation: no -Packaged: 2021-02-12 13:53:40 UTC; hothorn +Packaged: 2021-02-24 07:48:00 UTC; hothorn Author: Torsten Hothorn [aut, cre] () Maintainer: Torsten Hothorn Repository: CRAN -Date/Publication: 2021-02-13 00:10:08 UTC +Date/Publication: 2021-02-24 08:20:02 UTC diff --git a/MD5 b/MD5 index 85acc44..07b1bea 100644 --- a/MD5 +++ b/MD5 @@ -1,10 +1,10 @@ -f68d95fd59214a1b1490c6d4ed7d614c *DESCRIPTION +1784d82db47ba762c4da71f25ef65fa9 *DESCRIPTION 44dc29e1096ee97227a727914c71efe0 *NAMESPACE 226446b622fa6ccff2633ccd5af47b75 *R/R.R d2cd3551b75d248b1630149d9a11f48f *R/confband.R 85bfdf07717f5a022e84c7ce5ff891f8 *R/ctm.R 098ce237d6af53626d8d2cd138e47443 *R/distr.R -a3272914744fa0f5d6565cb9eafaa9db *R/dpq_etc.R +9223c303cd72fedb43084863ce2f2df7 *R/dpq_etc.R 70f18f8a82d9b63d3b1e7cb33201ffc0 *R/loglik.R 399714763b4bd3bd99e576a58057884c *R/methods.R 70e68a7d0cd22a234f4eb74b06add404 *R/mlt.R @@ -13,24 +13,23 @@ a3272914744fa0f5d6565cb9eafaa9db *R/dpq_etc.R 879724557cf8f27b085fccc3579e8c0f *R/predict.R 40c693617393d342c4b957c725770273 *R/sample.R 514ae5ccf7ba2841bda0c0b2e358b2ce *R/utils.R -d8473edb4dc4bed14b3518e2701e827d *build/partial.rdb +6e0e58a92378d5a2a75ca3c602dcebb6 *build/partial.rdb 1c9695dee7162d6e72883b552906e753 *cleanup 903952ead54ce0029d7ceb59c44645c3 *inst/CITATION -7e856cfbcc785b785274c76f8be7b136 *inst/NEWS.Rd -9e7da8008d4c41f098d9ffba0e00756a *man/R.Rd +34357ef16dcff7ef04ba4634f7e51657 *inst/NEWS.Rd +2fd36e671344c1f894b4f06235156ce6 *man/R.Rd 4141097f19682037945cf253537240c9 *man/confband.Rd b211532488e33a74047c6cbdce2e3246 *man/ctm-methods.Rd dbe2d83228567a26ae5f2af6d8ab9203 *man/ctm.Rd 30d6369b93ba5ebb221d6a47b851f6ce *man/mlt-methods.Rd -3338817cb685f7ed177fc68d2b6ad4b5 *man/mlt-package.Rd +d4dc0f0568a35ea8c0c0a3ee14a20233 *man/mlt-package.Rd c5add13dbdb8903c05a351768268d940 *man/mlt.Rd a4990dc3e06fe47fc8fdc6deb4712968 *man/mltoptim.Rd -7a2d1b4432a506806eef86dc4ce095d0 *man/predict.Rd +18e45384a6a7af7be1a801b23d9419ff *man/predict.Rd db0bcd162bd3125c10bd2a365fa92a3b *tests/2sample.R 5a9f502537a95ce85d5627eff0a7b610 *tests/2sample.Rout.save 1761c0ee2fa1a622b95d41dae932a559 *tests/Cox-Ex.R be7cf5845dbab7aaec2bf4b7518842d9 *tests/Cox-Ex.Rout.save -1ad2ce6b21829a5ec4991c0a079b6a10 *tests/Examples/mlt-Ex.Rout.save 431aabe6cb130b2cc8eafbcaf6a21b15 *tests/bugfixes.R bc3008e0de096dd16c88f119f434f983 *tests/bugfixes.Rout.save cab1777631a72c7a1dd8b7138cbdfd6f *tests/distr-Ex.R diff --git a/R/dpq_etc.R b/R/dpq_etc.R index 5af0724..d1bc801 100644 --- a/R/dpq_etc.R +++ b/R/dpq_etc.R @@ -276,8 +276,8 @@ qmlt <- function(object, newdata = NULL, q = NULL, prob = .5, n = 50, nrow = nrow(trm), ncol = length(prob), byrow = TRUE) ret <- .invf(object, f = trm, q = q, z = qu) - i <- as.vector(matrix(1:length(ret), ncol = nrow(trm), byrow = TRUE)) - ret <- if (is.matrix(ret)) ret[i,] else ret[i] + i <- as.vector(matrix(1:NROW(ret), ncol = nrow(trm), byrow = TRUE)) + ret <- if (is.data.frame(ret)) ret[i,] else ret[i] ### arrays of factors are not allowed if (is.factor(q)) return(ret) diff --git a/build/partial.rdb b/build/partial.rdb index 09c9a550ed88e1c71d754b6f6fb282405f7b5726..65014af04b268a1059bfa6a0ab1eb703a7d05f0a 100644 GIT binary patch literal 22352 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�%9s*g0qH(UgdMog35*H`? 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 diff --git a/inst/NEWS.Rd b/inst/NEWS.Rd index 06a4553..0de0335 100644 --- a/inst/NEWS.Rd +++ b/inst/NEWS.Rd @@ -2,7 +2,15 @@ \name{NEWS} \title{NEWS file for the mlt package} -\section{Changes in Version 1.2-2 (2020-02-12)}{ +\section{Changes in Version 1.2-3 (2021-02-22)}{ + \subsection{New features}{ + \itemize{ + \item{Improve documentation.} + } + } +} + +\section{Changes in Version 1.2-2 (2021-02-12)}{ \subsection{Bugfixes}{ \itemize{ \item{Sampling from unconditional models did not pay attention to @@ -11,7 +19,7 @@ } } -\section{Changes in Version 1.2-1 (2020-02-03)}{ +\section{Changes in Version 1.2-1 (2021-02-03)}{ \subsection{New features}{ \itemize{ \item{Quantiles and thus simulations are now computationally more exact and more robust. diff --git a/man/R.Rd b/man/R.Rd index ea98bab..2956798 100644 --- a/man/R.Rd +++ b/man/R.Rd @@ -10,7 +10,7 @@ \alias{as.Surv} \alias{as.Surv.response} \title{ - Response Variable + Response Variables } \description{ Represent a possibly censored or truncated response variable @@ -49,13 +49,77 @@ as.Surv(object) \details{ \code{R} is basically an extention of \code{\link[survival]{Surv}} for the representation of arbitrarily censored or truncated measurements at any scale. + The \code{storage.mode} of \code{object} determines if models are fitted + by the discrete likelihood (integers or factors) or the continuous + likelihood (log-density for numeric \code{object}s). Interval-censoring + is given by intervals (\code{cleft}, \code{cright}], also for integers and + factors (see example below). Left- and right-truncation can be defined + by the \code{tleft} and \code{tright} arguments. Existing \code{Surv} + objects can be converted using \code{R(Surv(...))}$ and, in some cases, an + \code{as.Surv()} method exists for representing \code{response} objects as + \code{Surv} objects. \code{R} applied to a list calls \code{R} for each of the list elements and returns a joint object. + + More examples can be found in Hothorn (2018) and in + \code{vignette("tram", package = "tram")}. + +} +\references{ + + Torsten Hothorn (2020), Most Likely Transformations: The mlt Package, + \emph{Journal of Statistical Software}, \bold{92}(1), 1--68, + \doi{10.18637/jss.v092.i01} + } \examples{ + library("survival") + + ### randomly right-censored continuous observations + time <- as.double(1:9) + event <- rep(c(FALSE, TRUE), length = length(time)) + + Surv(time, event) + R(Surv(time, event)) + + ### right-censoring, left-truncation + ltm <- 1:9 / 10 + Surv(ltm, time, event) + R(Surv(ltm, time, event)) + + ### interval-censoring + Surv(ltm, time, type = "interval2") + R(Surv(ltm, time, type = "interval2")) + + ### interval-censoring, left/right-truncation + lc <- as.double(1:4) + lt <- c(NA, NA, 7, 8) + rt <- c(NA, 9, NA, 10) + x <- c(3, NA, NA, NA) + rc <- as.double(11:14) + R(x, cleft = lt, cright = rt) + as.Surv(R(x, cleft = lt, cright = rt)) + R(x, tleft = 1, cleft = lt, cright = rt) + R(x, tleft = 1, cleft = lt, cright = rt, tright = 15) + R(x, tleft = lc, cleft = lt, cright = rt, tright = rc) + + ### discrete observations: counts + x <- 0:9 + R(x) + ### partially interval-censored counts + rx <- c(rep(NA, 6), rep(15L, 4)) + R(x, cright = rx) + ### ordered factor - R(gl(3, 3, labels = LETTERS[1:3])) + x <- gl(5, 2, labels = LETTERS[1:5], ordered = TRUE) + R(x) + ### interval-censoring (ie, observations can have multiple levels) + lx <- ordered(c("A", "A", "B", "C", "D", "E"), + levels = LETTERS[1:5], labels = LETTERS[1:5]) + rx <- ordered(c("B", "D", "E", "D", "D", "E"), + levels = LETTERS[1:5], labels = LETTERS[1:5]) + R(rx, cleft = lx, cright = rx) } diff --git a/man/mlt-package.Rd b/man/mlt-package.Rd index 5263f41..97ff0f3 100644 --- a/man/mlt-package.Rd +++ b/man/mlt-package.Rd @@ -4,14 +4,17 @@ \title{General Information on the \pkg{mlt} Package} \description{ The \pkg{mlt} package implements maximum likelihood estimation in - conditional transformation models as introduced by Hothorn et al. (2018). + conditional transformation models as introduced by Hothorn et al. (2020). An introduction to the package is available in the \code{mlt} package - vignette from package \code{mlt.docreg} (Hothorn, 2018). + vignette from package \code{mlt.docreg} (Hothorn, 2020). A short talk on most likely transformations is available from \url{https://channel9.msdn.com/Events/useR-international-R-User-conference/useR2016/Most-Likely-Transformations}. + Novice users might find the high(er) level interfaces offered by package + \pkg{tram} more convenient. + } \references{ @@ -19,9 +22,9 @@ Transformations, \emph{Scandinavian Journal of Statistics}, \bold{45}(1), 110--134, \doi{10.1111/sjos.12291}. - Torsten Hothorn (2018), Most Likely Transformations: The mlt Package, - \emph{Journal of Statistical Software}, forthcoming. URL: - \url{https://cran.r-project.org/package=mlt.docreg}. + Torsten Hothorn (2020), Most Likely Transformations: The mlt Package, + \emph{Journal of Statistical Software}, \bold{92}(1), 1--68, + \doi{10.18637/jss.v092.i01} } \author{ diff --git a/man/predict.Rd b/man/predict.Rd index 45e3d07..16a2d5c 100644 --- a/man/predict.Rd +++ b/man/predict.Rd @@ -59,7 +59,21 @@ for all observations in \code{newdata} and plots these functions (according to \code{type}). \code{predict} evaluates the transformation function over a grid of \code{q} values for all observations in \code{newdata} and returns the - result as a matrix (where _columns_ correspond to _rows_ in \code{newdata}). + result as a matrix (where _columns_ correspond to _rows_ in + \code{newdata}, see examples). Lack of \code{type = "mean"} is a feature + and not a bug. + + Argument \code{type} defines the scale of the plots or predictions: + \code{type = "distribution"} means the cumulative distribution function, + \code{type = "survivor"} is the survivor function (one minus distribution + function), \code{type = "density"} the absolute continuous or discrete + density (depending on the response), \code{type = "hazard"}, \code{type = + "cumhazard"}, and \code{type = "odds"} refers to the hazard (absolute + continuous or discrete), cumulative hazard (defined as minus log-survivor + function in both the absolute continuous and discrete cases), and odds + (distribution divided by survivor) functions. The quantile function can be + evaluated for probabilities \code{prob} by \code{type = "quantile"}. + Note that the \code{predict} method for \code{ctm} objects requires all model coefficients to be specified in this unfitted model. \code{simulate} draws samples from \code{object} by numerical inversion of the @@ -69,4 +83,123 @@ want the methods to pay attention to offsets, specify them as a variable in the model with fixed regression coefficient using the \code{fixed} argument in \code{\link{mlt}}. + + More examples can be found in Hothorn (2018). + +} +\references{ + + Torsten Hothorn (2020), Most Likely Transformations: The mlt Package, + \emph{Journal of Statistical Software}, \bold{92}(1), 1--68, + \doi{10.18637/jss.v092.i01} + +} +\examples{ + + library("survival") + op <- options(digits = 2) + + ### GBSG2 dataset + data("GBSG2", package = "TH.data") + + ### right-censored response + GBSG2$y <- with(GBSG2, Surv(time, cens)) + + ### define Bernstein(log(time)) parameterisation + ### of transformation function. The response + ### is bounded (log(0) doesn't work, so we use log(1)) + ### support defines the support of the Bernstein polynomial + ### and add can be used to make the grid wider (see below) + rvar <- numeric_var("y", bounds = c(0, Inf), + support = c(100, 2000)) + rb <- Bernstein_basis(rvar, order = 6, ui = "increasing") + ### dummy coding of menopausal status + hb <- as.basis(~ 0 + menostat, data = GBSG2) + ### treatment contrast of hormonal treatment + xb <- as.basis(~ horTh, data = GBSG2, remove_intercept = TRUE) + + ### set-up and fit Cox model, stratified by menopausal status + m <- ctm(rb, interacting = hb, shifting = xb, todistr = "MinExtrVal") + fm <- mlt(m, data = GBSG2) + + ### generate grid for all three variables + ### note that the response grid ranges between 1 (bounds[1]) + ### and 2000 (support[2]) + (d <- mkgrid(m, n = 10)) + ### data.frame of menopausal status and treatment + nd <- do.call("expand.grid", d[-1]) + + ### plot model on different scales, for all four combinations + ### of menopausal status and hormonal treatment + typ <- c("distribution", "survivor", "density", "hazard", + "cumhazard", "odds") + layout(matrix(1:6, nrow = 2)) + nl <- sapply(typ, function(tp) + ### K = 500 makes densities and hazards smooth + plot(fm, newdata = nd, type = tp, col = 1:nrow(nd), K = 500)) + legend("topleft", lty = 1, col = 1:nrow(nd), + legend = do.call("paste", nd), bty = "n") + + ### plot calls predict, which generates a grid with K = 50 + ### response values + ### note that a K x nrow(newdata) matrix is returned + ### (for reasons explained in the next example) + predict(fm, newdata = nd, type = "survivor") + + ### newdata can take a list, and evaluates the survivor + ### function on the grid defined by newdata + ### using a linear array model formulation and is + ### extremely efficient (wrt computing time and memory) + ### d[1] (the response grid) varies fastest + ### => the first dimension of predict() is always the response, + ### not the dimension of the predictor variables (like one + ### might expect) + predict(fm, newdata = d, type = "survivor") + + ### owing to this structure, the result can be quickly stored in + ### a data frame as follows + cd <- do.call("expand.grid", d) + cd$surv <- c(S <- predict(fm, newdata = d, type = "survivor")) + + ### works for distribution functions + all.equal(1 - S, predict(fm, newdata = d, type = "distribution")) + ### cumulative hazard functions + all.equal(-log(S), predict(fm, newdata = d, type = "cumhazard")) + ### log-cumulative hazard functions (= trafo, for Cox models) + all.equal(log(-log(S)), predict(fm, newdata = d, type = "logcumhazard")) + all.equal(log(-log(S)), predict(fm, newdata = d, type = "trafo")) + ### densities, hazards, or odds functions + predict(fm, newdata = d, type = "density") + predict(fm, newdata = d, type = "hazard") + predict(fm, newdata = d, type = "odds") + ### and quantiles (10 and 20%) + predict(fm, newdata = d[-1], type = "quantile", prob = 1:2 / 10) + + ### note that some quantiles are only defined as intervals + ### (> 2000, in this case). Intervals are returned as an "response" + ### object, see ?R. Unfortunately, these can't be stored as array, so + ### a data.frame is returned where the quantile varies first + p <- c(list(prob = 1:9/10), d[-1]) + np <- do.call("expand.grid", p) + (Q <- predict(fm, newdata = d[-1], type = "quantile", prob = 1:9 / 10)) + np$Q <- Q + np + + ### simulating from the model works by inverting the distribution + ### function; some obs are right-censored at 2000 + (s <- simulate(fm, newdata = nd, nsim = 3)) + ### convert to Surv + sapply(s, as.Surv) + + ### generate 3 parametric bootstrap samples from the model + tmp <- GBSG2[, c("menostat", "horTh")] + s <- simulate(fm, newdata = tmp, nsim = 3) + ### refit the model using the simulated response + lapply(s, function(y) { + tmp$y <- y + coef(mlt(m, data = tmp)) + }) + + options(op) + } diff --git a/tests/Examples/mlt-Ex.Rout.save b/tests/Examples/mlt-Ex.Rout.save deleted file mode 100644 index 010dd09..0000000 --- a/tests/Examples/mlt-Ex.Rout.save +++ /dev/null @@ -1,132 +0,0 @@ - -R version 4.0.3 (2020-10-10) -- "Bunny-Wunnies Freak Out" -Copyright (C) 2020 The R Foundation for Statistical Computing -Platform: x86_64-pc-linux-gnu (64-bit) - -R is free software and comes with ABSOLUTELY NO WARRANTY. -You are welcome to redistribute it under certain conditions. -Type 'license()' or 'licence()' for distribution details. - - Natural language support but running in an English locale - -R is a collaborative project with many contributors. -Type 'contributors()' for more information and -'citation()' on how to cite R or R packages in publications. - -Type 'demo()' for some demos, 'help()' for on-line help, or -'help.start()' for an HTML browser interface to help. -Type 'q()' to quit R. - -> pkgname <- "mlt" -> source(file.path(R.home("share"), "R", "examples-header.R")) -> options(warn = 1) -> library('mlt') -Loading required package: basefun -Loading required package: variables -> -> base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') -> base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv') -> cleanEx() -> nameEx("R") -> ### * R -> -> flush(stderr()); flush(stdout()) -> -> ### Name: R -> ### Title: Response Variable -> ### Aliases: R R.Surv R.factor R.ordered R.numeric R.integer R.list -> ### R.response as.Surv as.Surv.response -> -> ### ** Examples -> -> -> ### ordered factor -> R(gl(3, 3, labels = LETTERS[1:3])) -Warning in R.factor(gl(3, 3, labels = LETTERS[1:3])) : - response is unordered factor; - results may depend on order of levels -[1] (NA, A] (NA, A] (NA, A] (A, B] (A, B] (A, B] (B, NA] (B, NA] (B, NA] -> -> -> -> -> cleanEx() -> nameEx("mlt") -> ### * mlt -> -> flush(stderr()); flush(stdout()) -> -> ### Name: mlt -> ### Title: Most Likely Transformations -> ### Aliases: mlt -> -> ### ** Examples -> -> -> ### set-up conditional transformation model for conditional -> ### distribution of dist given speed -> dist <- numeric_var("dist", support = c(2.0, 100), bounds = c(0, Inf)) -> speed <- numeric_var("speed", support = c(5.0, 23), bounds = c(0, Inf)) -> ctmm <- ctm(response = Bernstein_basis(dist, order = 4, ui = "increasing"), -+ interacting = Bernstein_basis(speed, order = 3)) -> -> ### fit model -> mltm <- mlt(ctmm, data = cars) -> -> ### plot data -> plot(cars) -> ### predict quantiles and overlay data with model via a "quantile sheet" -> q <- predict(mltm, newdata = data.frame(speed = 0:24), type = "quantile", -+ p = 2:8 / 10, K = 500) -> tmp <- apply(q, 1, function(x) lines(0:24, x, type = "l")) -> -> -> -> -> cleanEx() -> nameEx("mltoptim") -> ### * mltoptim -> -> flush(stderr()); flush(stdout()) -> -> ### Name: mltoptim -> ### Title: Control Optimisation -> ### Aliases: mltoptim -> ### Keywords: list -> -> ### ** Examples -> -> -> ### set-up linear transformation model for conditional -> ### distribution of dist given speed -> dist <- numeric_var("dist", support = c(2.0, 100), bounds = c(0, Inf)) -> ctmm <- ctm(response = Bernstein_basis(dist, order = 4, ui = "increasing"), -+ shifting = ~ speed, data = cars) -> -> ### use auglag with kkt2.check = TRUE => the numerically determined -> ### hessian is returned as "optim_hessian" slot -> op <- mltoptim(auglag = list(maxtry = 5, kkt2.check = TRUE))[1] -> mltm <- mlt(ctmm, data = cars, scale = FALSE, optim = op) -> -> ### compare analytical and numerical hessian -> all.equal(c(Hessian(mltm)), c(mltm$optim_hessian), tol = 1e-4) -[1] TRUE -> -> -> -> -> ### *