Skip to content

Vignette follow‐up completeness

Kevin M Veen edited this page Mar 13, 2025 · 2 revisions

Follow-up (FUP) of patients in clinical trials and cohort studies is essential in order to monitor disease progression or treatment outcomes and improve quality of care. Unfortunately, it is inevitable that some of these patients become lost to FUP before the study ends or they develop the event of interest, leading to incomplete FUP. This may compromise the validity of the study. Different methods exist to evaluate completeness of FUP and, these are all implemented in the package fupcompleteness.

Methods of estimation FUP completeness

Five different methods are implemented in the package: The naive percentage method method="percent, which only accounts for censoring irrespective of time of censoring (Xue X, 2017) the Clark C method (Clark TG, 2002) method="clarkc, which does take in into account timing of censoring, the modified Clark C (Wu Y, 2008) method="mclarkc , that adjusts missed follow-up time by observed death rate in the study. The follow-up index (von Allmen RS, 2015) method="FUI, which is an patient-level follow-up measure, and the Formal Person-Time method (Xue X, 2017) method="FPT", which adjusts missed follow-up based on NLMPE regression of censored data and Simplified Person-Time method (Xue X, 2017) method="SPT".

Installation

Before installing fupcompleteness, it is it important to install the dependencies that rely on packages not published in the CRAN library.

if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("Icens")
install.packages("interval")
library(interval)

Using the devtools package one can install the fupcompleteness package from github.

library(devtools)
install_github("kevinmveen/fupcompleteness", force = T)

Example

Using the included data set we can calculate the completeness of follow-up using the method of known as Clark C method="clarkc. The status column in the data specifies if a patient had the event during follow-up or was censored at their last follow-up date. The code for censoring in the status vector is by default 0 cencode=0. Furthermore, the data set should contain a vector with dates of inclusion, last date of follow-up and end-date of the study. The dates should be class() is Date and can be parsed by the as.Date() function.

If the event of interest in the data set is not mortality, you can pass a vector with mortality dates death.date, mortality status death, and code for mortality deathcode in the the mortality vector, this is 1 by default deathcode = 1. In case an external daily death rate is known one can provide this by setting r. In this case we calculate the death rate from the provided data.

data(input_data)
head(input_data)
#>   date.inclusion   end.date last.fup.date status
#> 1     2007-01-01 2012-01-01    2009-02-06      1
#> 2     2007-01-01 2012-01-01    2008-01-13      1
#> 3     2007-01-01 2012-01-01    2012-01-01      0
#> 4     2007-01-01 2012-01-01    2012-01-01      0
#> 5     2007-01-01 2012-01-01    2008-03-08      0
#> 6     2007-01-01 2012-01-01    2007-03-20      0

As you can see all the subjects have been included the same date in this study. In clinical practice this is rarely the case.

Now lets run the function. It outputs a list with two elements: de fupc (follow-up completeness estimate) and dat, the inputted data plus extra columns perform do the calculations. Every method prints the follow-up completeness.

store.output = fupcompletness::fup.completeness(date.inclusion = input_data$date.inclusion,
                                 last.fup.date = input_data$last.fup.date,
                                 end.date = input_data$end.date,
                                 status = input_data$status,
                                 cencode = 0, 
                                 method = "clarkc")
#> [1] "The completeness of follow-up is 75.68 % according to the method of Clark C"
head(store.output$dat)

#>   date.inclusion   end.date last.fup.date status    obs.fup theoretical.fup
#> 1     2007-01-01 2012-01-01    2009-02-06      1  767.29987        767.2999
#> 2     2007-01-01 2012-01-01    2008-01-13      1  377.23858        377.2386
#> 3     2007-01-01 2012-01-01    2012-01-01      0 1826.25000       1826.0000
#> 4     2007-01-01 2012-01-01    2012-01-01      0 1826.25000       1826.0000
#> 5     2007-01-01 2012-01-01    2008-03-08      0  432.65236       1826.0000
#> 6     2007-01-01 2012-01-01    2007-03-20      0   78.67587       1826.0000

Example figure

Enclosed the R code to make a bar graph of all methods. It depends on the library ggplot2.

library(ggplot2)

meth = c("percent", "clarkc", "FUI", "mclarkc", "FPT", "SPT")
store.fupc = rep(0, length(meth))

for(i in 1:length(meth)){
  
  store.output = fupcompletness::fup.completeness(date.inclusion = input_data$date.inclusion,
                                 last.fup.date = input_data$last.fup.date,
                                 end.date = input_data$end.date,
                                 status = input_data$status,
                                 cencode = 0, 
                                 method = meth[i])
  
  store.fupc[i] = store.output$fupc
}

df = data.frame(meth = meth,
                y = store.fupc)

ggplot(df, aes(x=meth, y=y, fill = meth)) 
            + geom_bar(stat="identity") 
            + theme_classic() 
            + ylab("Completeness (%)") 
            + xlab("Method") 
            + theme(legend.position="none")

image

References

Xue X, Agalliu I, et al. New methods for estimating follow-up rates in cohort studies. BMC Med Res Methodol 17, 155 (2017). https://doi.org/10.1186/s12874-017-0436-z[↩︎]

Clark TG, Altman DG, et al. Quantification of the completeness of follow-up. Lancet. 2002 Apr 13;359(9314):1309-10. doi: 10.1016/s0140-6736(02)08272-7. PMID: 11965278.[↩︎]

Wu Y, Takkenberg JJ, et al. Measuring follow-up completeness. Ann Thorac Surg. 2008 Apr;85(4):1155-7. doi: 10.1016/j.athoracsur.2007.12.012. PMID: 18355488.[↩︎]

von Allmen RS, Weiss S, et al. Completeness of Follow-Up Determines Validity of Study Findings: Results of a Prospective Repeated Measures Cohort Study. PLoS One. 2015 Oct 15;10(10):e0140817. doi: 10.1371/journal.pone.0140817. PMID: 26469346; PMCID: PMC4607456.[↩︎]