Checks of a survival data set
Perform a set of consistency checks on survival data
survcheck(formula, data, id, istate, istate0="(s0)", timefix=TRUE,...)
a model formula with a
Survobject as the response
data frame in which to find the
istateand formula variables
an identifier that labels unique subjects
an optional vector giving the current state at the start of each interval
default label for the initial state of each subject (at their first interval) when
process times through the
aeqSurvfunction to eliminate potential roundoff issues.
other arguments, which are ignored (but won't give an error if someone added
This routine will examine a multi-state data set for consistency of the data. The basic rules are that if a subject is at risk they have to be somewhere, can not be two states at once, and should make sensible transitions from state to state. It reports the number of instances of the following conditions:
two observations for the same subject that overlap in time, e.g. intervals of (0, 100) and (90, 120). If
yis simple (time, status) survival observation intervals implicitly start at 0, so in that case any duplicate identifiers will generate an overlap.
a hole in a subject's timeline, where they are in one state at the end of the prior interval, but a new state in the at the start subsequent interval.
one or more gaps in a subject's timeline; they are presumably in the same state at their return as when they left.
two adjacent intervals for a subject, with the first interval ending in one state and the subsequent interval starting in another. They have instantaneously changed states with experiencing a transition.
The total number of occurences of each is present in the
vector. Optional components give the location and identifiers of the
a list with components
the vector of possible states
a matrix giving the count of transitions from one state to another
table of the number of visits per state, e.g., 18 subjects had 2 visits to the "infection" state
a vector giving the counts of each check
a copy of the istate vector, if it was supplied; otherwise a constructed istate that satisfies all the checks
a list with the row number and id of overlaps (not present if there are no overlaps)
a list with the row number and id of gaps (not present if there are no gaps)
a list with the row number and id of inconsistent rows (not present if there are none)
a list with the row number and id of jumps (not present if there are no jumps
For data sets with time-dependent covariates, a given subject will often
have intermediate rows with a status of `no event at this time'. (numeric
value of 0).
For instance a subject who started in state 1 at time 0, transitioned to state
2 at time 10, had a covariate
x change from 135 to 156 at time
20, and a final transition to state 3 at time 30.
The response would be
Surv(c(0, 10, 20), c(10, 20, 30), c(2,0,3)):
the status variable records changes in state, and there was no
change at time 20.
istate variable would be (1, 2, 2); it contains the current
state, and so the value is unchanged when status = censored.
Thus, when there are intermediate observations
istate is not
simply a lagged version of the status, and may be more challenging to
One approach is to let
survcheck do the work: call it with
istate argument that is correct for the first row of each
subject, or no
istate argument at all, and then insert the
returned value into ones data frame.