Reformulate a terms object such that some specials are stripped off

strip.terms(
  terms,
  specials,
  alias.names = NULL,
  unspecials = NULL,
  arguments,
  keep.response = TRUE
)

Arguments

terms

Terms object

specials

Character vector of specials which should be stripped off

alias.names

Optional. A named list with alias names for the specials.

unspecials

Optional. A special name for treating all the unspecial terms.

arguments

A named list of arguments, one for each element of specials. Elements are passed to parseSpecialNames.

keep.response

Keep the response in the resulting object?

Value

Reformulated terms object with an additional attribute which contains the stripped.specials.

Details

This function is used to remove special specials, i.e., those which cannot or should not be evaluated. IMPORTANT: the unstripped terms need to know about all specials including the aliases. See examples.

See also

parseSpecialNames reformulate drop.terms

Author

Thomas A. Gerds <tag@biostat.ku.dk>

Examples


## parse a survival formula and identify terms which
## should be treated as proportional or timevarying:
f <- Surv(time,status)~age+prop(factor(edema))+timevar(sex,test=0)+prop(bili,power=1)
tt <- terms(f,specials=c("prop","timevar"))
attr(tt,"specials")
#> $prop
#> [1] 3 5
#> 
#> $timevar
#> [1] 4
#> 
st <- strip.terms(tt,specials=c("prop","timevar"),arguments=NULL)
formula(st)
#> Surv(time, status) ~ age + factor(edema) + sex + bili
#> <environment: 0x5613bd03edc8>
attr(st,"specials")
#> $prop
#> NULL
#> 
#> $timevar
#> NULL
#> 
attr(st,"stripped.specials")
#> $prop
#> [1] 3 5
#> 
#> $timevar
#> [1] 4
#> 

## provide a default value for argument power of proportional treatment
## and argument test of timevarying treatment: 
st2 <- strip.terms(tt,
                   specials=c("prop","timevar"),
                   arguments=list("prop"=list("power"=0),"timevar"=list("test"=0)))
formula(st2)
#> Surv(time, status) ~ age + factor(edema) + sex + bili
#> <environment: 0x5613bd03edc8>
attr(st2,"stripped.specials")
#> $prop
#> [1] 3 5
#> 
#> $timevar
#> [1] 4
#> 
attr(st2,"stripped.arguments")
#> $prop
#> $prop$`factor(edema)`
#> $prop$`factor(edema)`$power
#> [1] 0
#> 
#> 
#> $prop$bili
#> $prop$bili$power
#> [1] "1"
#> 
#> 
#> 
#> $timevar
#> $timevar$sex
#> $timevar$sex$test
#> [1] "0"
#> 
#> 
#> 

## treat all unspecial terms as proportional
st3 <- strip.terms(tt,
                   unspecials="prop",
                   specials=c("prop","timevar"),
                   arguments=list("prop"=list("power"=0),"timevar"=list("test"=0)))
formula(st3)
#> Surv(time, status) ~ age + factor(edema) + sex + bili
#> <environment: 0x5613bd03edc8>
attr(st3,"stripped.specials")
#> $prop
#> [1] 2 3 5
#> 
#> $timevar
#> [1] 4
#> 
attr(st3,"stripped.arguments")
#> $prop
#> $prop$age
#> $prop$age$power
#> [1] 0
#> 
#> 
#> $prop$`factor(edema)`
#> $prop$`factor(edema)`$power
#> [1] 0
#> 
#> 
#> $prop$bili
#> $prop$bili$power
#> [1] "1"
#> 
#> 
#> 
#> $timevar
#> $timevar$sex
#> $timevar$sex$test
#> [1] "0"
#> 
#> 
#> 

## allow alias names: strata for timevar and tp, const for prop.
## IMPORTANT: the unstripped terms need to know about
## all specials including the aliases
f <- Surv(time,status)~age+const(factor(edema))+strata(sex,test=0)+prop(bili,power=1)+tp(albumin)
tt2 <- terms(f,specials=c("prop","timevar","strata","tp","const"))
st4 <- strip.terms(tt2,
                   specials=c("prop","timevar"),
                   unspecials="prop",
                   alias.names=list("timevar"="strata","prop"=c("const","tp")),
                   arguments=list("prop"=list("power"=0),"timevar"=list("test"=0)))
formula(st4)
#> Surv(time, status) ~ age + factor(edema) + sex + bili + albumin
#> <environment: 0x5613bd03edc8>
attr(st4,"stripped.specials")
#> $prop
#> [1] 2 3 5 6
#> 
#> $timevar
#> [1] 4
#> 
attr(st4,"stripped.arguments")
#> $prop
#> $prop$age
#> $prop$age$power
#> [1] 0
#> 
#> 
#> $prop$`factor(edema)`
#> $prop$`factor(edema)`$power
#> [1] 0
#> 
#> 
#> $prop$bili
#> $prop$bili$power
#> [1] "1"
#> 
#> 
#> $prop$albumin
#> $prop$albumin$power
#> [1] 0
#> 
#> 
#> 
#> $timevar
#> $timevar$sex
#> $timevar$sex$test
#> [1] "0"
#> 
#> 
#> 

## test if alias works also without unspecial argument
st5 <- strip.terms(tt2,
                   specials=c("prop","timevar"),
                   alias.names=list("timevar"="strata","prop"=c("const","tp")),
                   arguments=list("prop"=list("power"=0),"timevar"=list("test"=0)))
formula(st5)
#> Surv(time, status) ~ age + factor(edema) + sex + bili + albumin
#> <environment: 0x5613bd03edc8>
attr(st5,"stripped.specials")
#> $prop
#> [1] 3 5 6
#> 
#> $timevar
#> [1] 4
#> 
attr(st5,"stripped.arguments")
#> $prop
#> $prop$`factor(edema)`
#> $prop$`factor(edema)`$power
#> [1] 0
#> 
#> 
#> $prop$bili
#> $prop$bili$power
#> [1] "1"
#> 
#> 
#> $prop$albumin
#> $prop$albumin$power
#> [1] 0
#> 
#> 
#> 
#> $timevar
#> $timevar$sex
#> $timevar$sex$test
#> [1] "0"
#> 
#> 
#> 

library(survival)
data(pbc)
model.design(st4,data=pbc[1:3,],specialsDesign=TRUE)
#> $design
#> NULL
#> 
#> $prop
#>        age factor(edema)0.5 factor(edema)1 bili albumin
#> 1 58.76523                0              1 14.5    2.60
#> 2 56.44627                0              0  1.1    4.14
#> 3 70.07255                1              0  1.4    3.48
#> attr(,"levels")
#> attr(,"levels")$`factor(edema)`
#> [1] "0"   "0.5" "1"  
#> 
#> attr(,"arguments")
#> attr(,"arguments")$age
#> attr(,"arguments")$age$power
#> [1] 0
#> 
#> 
#> attr(,"arguments")$`factor(edema)`
#> attr(,"arguments")$`factor(edema)`$power
#> [1] 0
#> 
#> 
#> attr(,"arguments")$bili
#> attr(,"arguments")$bili$power
#> [1] "1"
#> 
#> 
#> attr(,"arguments")$albumin
#> attr(,"arguments")$albumin$power
#> [1] 0
#> 
#> 
#> attr(,"arguments.terms")
#> attr(,"arguments.terms")$power
#>              age   factor(edema)0 factor(edema)0.5   factor(edema)1 
#>              "0"              "0"              "0"              "0" 
#>             bili          albumin 
#>              "1"              "0" 
#> 
#> attr(,"matrix.terms")
#> attr(,"matrix.terms")$age
#> [1] "age"
#> 
#> attr(,"matrix.terms")$`factor(edema)`
#> [1] "factor(edema)0"   "factor(edema)0.5" "factor(edema)1"  
#> 
#> attr(,"matrix.terms")$bili
#> [1] "bili"
#> 
#> attr(,"matrix.terms")$albumin
#> [1] "albumin"
#> 
#> 
#> $timevar
#>   sexf
#> 1    1
#> 2    1
#> 3    0
#> attr(,"levels")
#> attr(,"levels")$sex
#> [1] "m" "f"
#> 
#> attr(,"arguments")
#> attr(,"arguments")$sex
#> attr(,"arguments")$sex$test
#> [1] "0"
#> 
#> 
#> attr(,"arguments.terms")
#> attr(,"arguments.terms")$test
#> sexm sexf 
#>  "0"  "0" 
#> 
#> attr(,"matrix.terms")
#> attr(,"matrix.terms")$sex
#> [1] "sexm" "sexf"
#> 
#> 
model.design(st5,data=pbc[1:3,],specialsDesign=TRUE)
#> $design
#>   (Intercept)      age
#> 1           1 58.76523
#> 2           1 56.44627
#> 3           1 70.07255
#> attr(,"assign")
#> [1] 0 1
#> attr(,"levels")
#> named list()
#> 
#> $prop
#>   factor(edema)0.5 factor(edema)1 bili albumin
#> 1                0              1 14.5    2.60
#> 2                0              0  1.1    4.14
#> 3                1              0  1.4    3.48
#> attr(,"levels")
#> attr(,"levels")$`factor(edema)`
#> [1] "0"   "0.5" "1"  
#> 
#> attr(,"arguments")
#> attr(,"arguments")$`factor(edema)`
#> attr(,"arguments")$`factor(edema)`$power
#> [1] 0
#> 
#> 
#> attr(,"arguments")$bili
#> attr(,"arguments")$bili$power
#> [1] "1"
#> 
#> 
#> attr(,"arguments")$albumin
#> attr(,"arguments")$albumin$power
#> [1] 0
#> 
#> 
#> attr(,"arguments.terms")
#> attr(,"arguments.terms")$power
#>   factor(edema)0 factor(edema)0.5   factor(edema)1             bili 
#>              "0"              "0"              "0"              "1" 
#>          albumin 
#>              "0" 
#> 
#> attr(,"matrix.terms")
#> attr(,"matrix.terms")$`factor(edema)`
#> [1] "factor(edema)0"   "factor(edema)0.5" "factor(edema)1"  
#> 
#> attr(,"matrix.terms")$bili
#> [1] "bili"
#> 
#> attr(,"matrix.terms")$albumin
#> [1] "albumin"
#> 
#> 
#> $timevar
#>   sexf
#> 1    1
#> 2    1
#> 3    0
#> attr(,"levels")
#> attr(,"levels")$sex
#> [1] "m" "f"
#> 
#> attr(,"arguments")
#> attr(,"arguments")$sex
#> attr(,"arguments")$sex$test
#> [1] "0"
#> 
#> 
#> attr(,"arguments.terms")
#> attr(,"arguments.terms")$test
#> sexm sexf 
#>  "0"  "0" 
#> 
#> attr(,"matrix.terms")
#> attr(,"matrix.terms")$sex
#> [1] "sexm" "sexf"
#> 
#>