Skip to contents

Stepwise Covariate Model-selection (SCM) method

Usage

covarSearchAuto(
  fit,
  varsVec,
  covarsVec,
  pVal = list(fwd = 0.05, bck = 0.01),
  catvarsVec = NULL,
  searchType = c("scm", "forward", "backward"),
  restart = FALSE
)

Arguments

fit

an nlmixr2 'fit' object

varsVec

a list of candidate variables to which the covariates could be added

covarsVec

a list of candidate covariates that need to be tested

pVal

a named list with names 'fwd' and 'bck' for specifying the p-values for the forward and backward searches, respectively

catvarsVec

character vector of categorical covariates that need to be added

searchType

one of 'scm', 'forward' and 'backward' to specify the covariate search method; default is 'scm'

restart

a boolean that controls if the search should be restarted; default is FALSE

Value

A list summarizing the covariate selection steps and output; This list has the "summaryTable" for the overall summary of the covariate selection as well as "resFwd" for the forward selection method and "resBck" for the backward selection method.

Author

Vipul Mann, Matthew Fidler, Vishal Sarsani

Examples

# \donttest{

one.cmt <- function() {
  ini({
    ## You may label each parameter with a comment
    tka <- 0.45 # Log Ka
    tcl <- log(c(0, 2.7, 100)) # Log Cl
    ## This works with interactive models
    ## You may also label the preceding line with label("label text")
    tv <- 3.45; label("log V")
    ## the label("Label name") works with all models
    eta.ka ~ 0.6
    eta.cl ~ 0.3
    eta.v ~ 0.1
    add.sd <- 0.7
  })
  model({
    ka <- exp(tka + eta.ka)
    cl <- exp(tcl + eta.cl)
    v <- exp(tv + eta.v)
    linCmt() ~ add(add.sd)
  })
}

fit <- nlmixr2(one.cmt, nlmixr2data::theo_sd,"focei")
#>  
#>  
#>  
#>  
#>  parameter labels from comments will be replaced by 'label()'
#> → Calculating residuals/tables
#>  done
#> → compress origData in nlmixr2 object, save 5952
#> → compress parHist in nlmixr2 object, save 2040
rxode2::.rxWithWd(tempdir(), {# with temporary directory

auto1 <- covarSearchAuto(fit, varsVec = c("ka", "cl"),
    covarsVec = c("WT"))

})
#> 
#> ── starting forward search... ──────────────────────────────────────────────────
#>  
#>  
#> → loading into symengine environment...
#> → pruning branches (`if`/`else`) of full model...
#>  done
#> → calculate jacobian
#> → calculate ∂(f)/∂(η)
#> → calculate ∂(R²)/∂(η)
#> → finding duplicate expressions in inner model...
#> → optimizing duplicate expressions in inner model...
#> → finding duplicate expressions in EBE model...
#> → optimizing duplicate expressions in EBE model...
#> → compiling inner model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → finding duplicate expressions in FD model...
#> → compiling EBE model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → compiling events FD model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → Calculating residuals/tables
#>  done
#> → compress origData in nlmixr2 object, save 5952
#> → compress parHist in nlmixr2 object, save 2480
#>  
#>  
#> → loading into symengine environment...
#> → pruning branches (`if`/`else`) of full model...
#>  done
#> → calculate jacobian
#> → calculate ∂(f)/∂(η)
#> → calculate ∂(R²)/∂(η)
#> → finding duplicate expressions in inner model...
#> → optimizing duplicate expressions in inner model...
#> → finding duplicate expressions in EBE model...
#> → optimizing duplicate expressions in EBE model...
#> → compiling inner model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → finding duplicate expressions in FD model...
#> → compiling EBE model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → compiling events FD model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → Calculating residuals/tables
#>  done
#> → compress origData in nlmixr2 object, save 5952
#> → compress parHist in nlmixr2 object, save 2616
#> 
#> ── objf value did not improve, exiting the search ... ──────────────────────────
#> 
#> ── forward search complete ──
#> 
#> Error in backwardSearch(varsVec, covarsVec, catvarsVec, fitorig = fit,     fitupdated = resFwd[[1]], pVal = pVal$bck, reFitCovars = FALSE,     outputDir = outputDir, restart = restart): object 'fit' not found

## Note that this didn't include sex, add it to dataset and restart model


d <- nlmixr2data::theo_sd
d$SEX <-0
d$SEX[d$ID<=6] <-1

fit <- nlmixr2(one.cmt, d, "focei")
#>  
#>  
#>  
#>  
#>  parameter labels from comments will be replaced by 'label()'
#> → Calculating residuals/tables
#>  done
#> → compress origData in nlmixr2 object, save 7184
#> → compress parHist in nlmixr2 object, save 2040

# This would restart if for some reason the search crashed:

rxode2::.rxWithWd(tempdir(), {# with temporary directory

auto2 <- covarSearchAuto(fit, varsVec = c("ka", "cl"), covarsVec = c("WT"),
                catvarsVec= c("SEX"), restart = TRUE)

auto3 <- covarSearchAuto(fit, varsVec = c("ka", "cl"), covarsVec = c("WT"),
                catvarsVec=  c("SEX"), restart = TRUE,
                searchType = "forward")
})
#> 
#> ── starting forward search... ──────────────────────────────────────────────────
#>  
#>  
#> → Calculating residuals/tables
#>  done
#> → compress origData in nlmixr2 object, save 7096
#> → compress parHist in nlmixr2 object, save 2480
#>  
#>  
#> → Calculating residuals/tables
#>  done
#> → compress origData in nlmixr2 object, save 7096
#> → compress parHist in nlmixr2 object, save 2616
#>  
#>  
#> → loading into symengine environment...
#> → pruning branches (`if`/`else`) of full model...
#>  done
#> → calculate jacobian
#> → calculate ∂(f)/∂(η)
#> → calculate ∂(R²)/∂(η)
#> → finding duplicate expressions in inner model...
#> → optimizing duplicate expressions in inner model...
#> → finding duplicate expressions in EBE model...
#> → optimizing duplicate expressions in EBE model...
#> → compiling inner model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → finding duplicate expressions in FD model...
#> → compiling EBE model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → compiling events FD model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → Calculating residuals/tables
#>  done
#> → compress origData in nlmixr2 object, save 7096
#> → compress parHist in nlmixr2 object, save 2968
#>  
#>  
#> → loading into symengine environment...
#> → pruning branches (`if`/`else`) of full model...
#>  done
#> → calculate jacobian
#> → calculate ∂(f)/∂(η)
#> → calculate ∂(R²)/∂(η)
#> → finding duplicate expressions in inner model...
#> → optimizing duplicate expressions in inner model...
#> → finding duplicate expressions in EBE model...
#> → optimizing duplicate expressions in EBE model...
#> → compiling inner model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → finding duplicate expressions in FD model...
#> → compiling EBE model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → compiling events FD model...
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0’
#>  done
#> → Calculating residuals/tables
#>  done
#> → compress origData in nlmixr2 object, save 7096
#> → compress parHist in nlmixr2 object, save 3016
#> 
#> ── objf value did not improve, exiting the search ... ──────────────────────────
#> 
#> ── forward search complete ──
#> 
#> Error in backwardSearch(varsVec, covarsVec, catvarsVec, fitorig = fit,     fitupdated = resFwd[[1]], pVal = pVal$bck, reFitCovars = FALSE,     outputDir = outputDir, restart = restart): object 'fit' not found

# }