%\VignetteIndexEntry{Computing Cumulative Incidence Functions with the etmCIF Function} \documentclass{article} \usepackage{amsmath, amssymb} \usepackage{graphicx} \usepackage{url} \usepackage[pdftex]{color} \usepackage[round]{natbib} \SweaveOpts{keep.source=TRUE,eps=FALSE} \title{Computing Cumulative Incidence Functions with the {\tt etmCIF} Function, with a view Towards Pregnancy Applications} \author{Arthur Allignol} \date{} \begin{document} \maketitle \section{Introduction} This paper documents the use of the {\tt etmCIF} function to compute the cumulative incidence function (CIF) in pregnancy data. \section{Data Example} The data set {\tt abortion}, included in the {\bf etm} package will be used to illustrate the computation of the CIFs. We first load the {\bf etm} package and the data set. <<>>= library(etm) library(survival) data(abortion) @ Briefly, the data set contains information on \Sexpr{nrow(abortion)} pregnant women collected prospectively by the Teratology Information Service of Berlin, Germany \citep{meister}. Among these pregnant women, \Sexpr{with(abortion, table(group)[2])} were exposed therapeutically to coumarin derivatives, a class of orally active anticoagulant, and \Sexpr{with(abortion, table(group)[1])} women served as controls. Coumarin derivatives are suspected to increase the number of spontaneous abortions. Competing events are elective abortion (ETOP) and life birth. Below is an excerpt of the data set <<>>= head(abortion) @ {\tt id} is the individual number, {\tt entry} is the gestational age at which the women entered the study, {\tt exit} is the gestational age at the end of pregnancy, {\tt group} is the group membership (0 for controls and 1 for the women exposed to coumarin derivatives) and {\tt cause} is the cause of end of pregnancy (1 for induced abortion, 2 for life birth and 3 for spontaneous abortion.) \section{Computing and plotting the CIFs} \subsection{The {\tt etmCIF} function} The CIFs are computed using the {\tt etmCIF} function. It is a wrapper around the {\tt etm} function, meant to facilitate the computation of the CIFs. {\tt etmCIF} takes as arguments \begin{itemize} \item {\tt formula}: A formula consisting of a {\tt Surv} object on the left of a {\tt ~} operator, and the group covariate on the right. A {\tt Surv} object is for example created this way: {\tt Surv(entry, exit, cause != 0)}. We need to specify the entry time ({\tt entry}), the gestational age at end of pregnancy ({\tt exit}), and an event indicator ({\tt cause != 0}). The latter means that any value different from 0 in {\tt cause} will be considered as an event -- which is the case in our example, as we don't have censoring. \item {\tt data}: A data set in which to interpret the terms of the formula. In our case, it will be {\tt abortion}. \item {\tt etype}: Competing risks event indicator. When the status indicator is 1 (or TRUE) in the formula, {\tt etype} describes the type of event, otherwise, for censored observation, the value of {\tt etype} is ignored. \item {\tt failcode}: Indicates the failure type of interest. Default is one. This option is only interesting for some features of the plot function. \end{itemize} \subsection{Estimation and display of the CIFs} We know compute the CIFs <<>>= cif.abortion <- etmCIF(Surv(entry, exit, cause != 0) ~ group, abortion, etype = cause, failcode = 3) cif.abortion @ Above is the display provided by the {\tt print} function. It gives, at the last event time, the probabilities ({\tt P}) standard errors ({\tt se(P)}), and the total number of events ({\tt n.event}) for the three possible pregnancy outcomes and for both groups. More information is provided by the {\tt summary} function. <<>>= s.cif.ab <- summary(cif.abortion) @ The function returns a list of data.frames that contain probabilities, variances, pointwise confidence intervals, number at risk and number of events for each event times. the {\tt print} function displays this information for some selected event times. <<>>= s.cif.ab @ \subsection{Plotting the CIFs} Interest lies in the CIFs of spontaneous abortion. We display them using the {\tt plot} function, which by default, plots only the the CIFs for the event of interest, i.e., the one specified in {\tt failcode}. \setkeys{Gin}{width=0.9\textwidth} \begin{figure}[!htb] \begin{center} <>= plot(cif.abortion) @ \caption{CIFs of spontaneous abortion for the controls (solid line) and the exposed (dashed line), using the default settings of the {\tt plot} function.} \end{center} \end{figure} \clearpage We now add confidence intervals taken at week 27, plus a bit of customisation. \setkeys{Gin}{width=0.9\textwidth} \begin{figure}[!htb] \begin{center} <>= plot(cif.abortion, curvlab = c("Control", "Exposed"), ylim = c(0, 0.6), ci.type = "bars", pos.ci = 27, col = c(1, 2), ci.lwd = 6, lwd = 2, lty = 1, cex = 1.3) @ \caption{CIFs of spontaneous abortion for the controls (black) and the exposed (red), along with pointwise confidence intervals taken at week 27.} \end{center} \end{figure} \clearpage When the figure is to be in black and white, or when the confidence intervals are not as separated as in this example, it might be a good idea to shift slightly one of the bar representing the confidence interval, so that the two bars don't overlap. This might be done manipulating the {\tt pos.ci} argument: \setkeys{Gin}{width=0.9\textwidth} \begin{figure}[!htb] \begin{center} <>= plot(cif.abortion, curvlab = c("Control", "Exposed"), ylim = c(0, 0.6), ci.type = "bars", pos.ci = c(27, 28), col = c(1, 1), ci.lwd = 6, lwd = 2, lty = c(2, 1), cex = 1.3) @ \caption{CIFs of spontaneous abortion for the controls (dashed line) and the exposed (solid line), along with pointwise confidence intervals.}\label{decalage} \end{center} \end{figure} \clearpage Pointwise confidence intervals can also be plotted for the whole follow-up period. \begin{figure}[!htb] \begin{center} <>= plot(cif.abortion, curvlab = c("Control", "Exposed"), ylim = c(0, 0.5), ci.type = "pointwise", col = c(1, 2), lwd = 2, lty = 1, cex = 1.3) @ \caption{Same as the last pictures, except for the confidence intervals, that are displayed for the whole follow-up period.} \end{center} \end{figure} \clearpage CIFs for other pregnancy outcomes can also be plotted using the {\tt which.cif} arguments. For instance, for plotting the CIFs of ETOP and life birth on the same graph, we specify {\tt which.cif = c(1, 2)} in the call to {\tt plot}. \begin{figure}[!htb] \begin{center} <>= plot(cif.abortion, which.cif = c(1, 2), ylim = c(0, 0.8), lwd = 2, col = c(1, 1, 2, 2), lty = c(1, 2, 1, 2), legend = FALSE) legend(0, 0.8, c("Control", "Exposed"), col = c(1, 2), lty = 1, bty = "n", lwd = 2) legend(0, 0.7, c("ETOP", "Life Birth"), col = 1, lty = c(1, 2), bty = "n", lwd = 2) @ \end{center} \caption{CIFs of ETOP (solid lines) and life birth (dashed lines) for the exposed, in red, and the controls, in black.} \end{figure} \clearpage \subsection{Some More Features} \paragraph{Competing event names} For those who don't like using plain numbers for naming the competing events or the group allocation, it is of course possible to give more informative names, either as factors or character vectors. For instance, we define a new group variable that takes value {\tt 'control'} or {\tt 'exposed'}, and we give more informative names for the pregnancy outcomes. <<>>= abortion$status <- with(abortion, ifelse(cause == 2, "life birth", ifelse(cause == 1, "ETOP", "spontaneous abortion"))) abortion$status <- factor(abortion$status) abortion$treat <- with(abortion, ifelse(group == 0, "control", "exposed")) abortion$treat <- factor(abortion$treat) @ We can compute the CIFs as before, taking care of changing the {\tt failcode} argument. <<>>= new.cif <- etmCIF(Surv(entry, exit, status != 0) ~ treat, abortion, etype = status, failcode = "spontaneous abortion") new.cif @ The {\tt summary} and {\tt plot} functions will work as before, except for a more informative outcome from scratch. \paragraph{Taking advantage of the miscellaneous functions defined for {\tt etm} objects} The {\tt etmCIF} function uses the more general {\tt etm} machinery for computing the CIFs. Thus the returned {\tt etmCIF} object is for part a list of {\tt etm} objects (one for each covariate level). It is therefore relatively easy to use the methods defined for {\tt etm} on {\tt etmCIF} objects. An example would be to use the {\tt trprob} function to extract the CIF of spontaneous abortion for the controls. This function takes as arguments an {\tt etm} object, the transition we are interested in, in the form ``from to'' (the state a patient comes from is automatically defined as being 0 in {\tt etmCIF}), and possibly some time points. Using {\tt new.cif} from the example above: <<>>= trprob(new.cif[[1]], "0 spontaneous abortion", c(1, 10, 27)) @ We applied the {\tt trprob} function to the {\tt etm} object for the controls (which is in the first item of the output, for the exposed in the second). The transition of interest is from {\tt 0} to {\tt spontaneous abortion}, and we want the CIF at weeks 1, 10 and 27 (just put nothing if you want the CIF for all time points). Another example would be to use the {\tt lines} function to add a CIF to an existing plot. The following code snippet adds the CIF of ETOP for the exposed to Figure \ref{decalage}. That's the {\tt tr.choice} arguments that defines which CIF to pick. It works in the same way as in the {\tt trprob} function. <>= lines(cif.abortion[[2]], tr.choice = "0 1", col = 2, lwd = 2) @ \setkeys{Gin}{width=0.9\textwidth} \begin{figure}[!htb] \begin{center} <>= plot(cif.abortion, curvlab = c("Control", "Exposed"), ylim = c(0, 0.6), ci.type = "bars", pos.ci = c(27, 28), col = c(1, 1), ci.lwd = 6, lwd = 2, lty = c(2, 1), cex = 1.3) lines(cif.abortion[[2]], tr.choice = "0 1", col = 2, lwd = 2) @ \caption{Figure \ref{decalage} along with the CIF of ETOP for the exposed in red.} \end{center} \end{figure} \clearpage \begin{thebibliography}{1} \bibitem[Meister and Schaefer, 2008]{meister} Meister, R. and Schaefer, C. (2008). \newblock Statistical methods for estimating the probability of spontaneous abortion in observational studies--analyzing pregnancies exposed to coumarin derivatives. \newblock {\em Reproductive Toxicology}, 26(1):31--35. \end{thebibliography} \end{document}