Learn R Programming

Epi (version 2.19)

mcutLexis: Cut follow-up at multiple event dates and keep track of order of events

Description

A generalization of cutLexis to the case where different events may occur in any order.

Usage

mcutLexis( L0, timescale = 1, wh,
              new.states = NULL,
        precursor.states = NULL,
              seq.states = TRUE,
              new.scales = NULL,
            ties.resolve = FALSE )

Arguments

L0

A Lexis object.

timescale

Which time scale do the variables in L0[,wh] refer to. Can be character or integer.

wh

Which variables contain the event dates. Character or integer vector

new.states

Names of the events forming new states. If NULL equal to the variable names from wh.

precursor.states

Which states are precursor states. See cutLexis for definition of precursor states.

seq.states

Should the sequence of events be kept track of? That is, should A-B be considered different from B-A. If FALSE, the state with combined preceding events A and B will be called A+B.

new.scales

Should we construct new time scales indicating the time since each of the event occurrences.

ties.resolve

Should tied event times be resolved by adding random noise to tied event dates. If FALSE the function will not accept that two events occur at the same time for a person (ties). If TRUE a random quantity in the range c(-1,1)/100 will be added to all event times in all records with at least one tie. If numeric a random quantity in the range c(-1,1)*ties.resolve will be added to all event times in all records with at least one tie.

Value

A Lexis object with extra states created by occurrence of a number of intermediate events.

See Also

cutLexis, Lexis, splitLexis

Examples

Run this code
# NOT RUN {
# A dataframe of times
set.seed(563248)
dd <- data.frame( id = 1:10,
                 doN = round(runif(10,-30, 0),1),
                 doE = round(runif(10,  0,20),1),
                 doX = round(runif(10, 50,60),1),
                 doD = round(runif(10, 50,60),1),
                 # these are the event times
                 doA = c(NA,20,NA,27,35,NA,52, 5,43,80),
                 doB = c(25,NA,37,40,NA,NA,15,23,36,61) )

# set up a Lexis object with time from entry to death/exit
Lx <- Lexis( entry = list(time=doE,
                           age=doE-doN),
              exit = list(time=pmin(doX,doD)),
       exit.status = factor(doD<doX,labels=c("OK","D")),
              data = dd )
summary( Lx )

# cut the follow-up at dates doA and doB
L2 <- mcutLexis( Lx, "time", wh=c("doA","doB"),
                 new.states = c("A","B"),
           precursor.states = "OK",
                 seq.states = TRUE,
                 new.scales = c("tfA","tfB") )
summary( L2 )
L2

# show the states
boxes( L2, boxpos=list(x=c(10,50,50,90,50,90),
                       y=c(50,90,50,90,10,10)),
           show.R=FALSE, show.BE=TRUE )


L3 <- mcutLexis( Lx, "time", wh=c("doA","doB"),
                 new.states = c("A","B"),
           precursor.states = "OK",
                 seq.states = FALSE,
                 new.scales = c("tfA","tfB") )
summary( L3 )
boxes( L3, boxpos=list(x=c(10,50,50,90,50),
                       y=c(50,90,50,50,10)),
           show.R=FALSE, show.BE=TRUE )
# }

Run the code above in your browser using DataLab