Wednesday, December 21, 2011

Progression-Free Survival

A close friend of mine -- an insanely productive medical clinician -- asked me to assist him and a colleague on an analysis of survival time where the endpoint was "Progression-Free Survival" (PFS).  In my last job as a biostatistician for a contract research organization (CRO) specializing in the conduct and execution of NIH-funded clinical trials, I first encountered this endpoint -- as well as others that differed in small but minor ways -- but just took for granted what the endpoints meant since they had already been defined and programmed.  Now that I was in the position of explicitly defining and programming the endpoint for their analysis, I figured it would be prudent to research how exactly PFS is defined according to experts who specialize in these things.

A simple PubMed search of "progression-free survival" returned hundreds of hits -- many studies use PFS as an endpoint -- so I narrowed the search a bit by adding "definition" to the search terms.  Considerably fewer articles were identified and among the ones I found, there was a reference to a 2007 article published in the Journal of Clinical Oncology titled "Revised Response Criteria for Malignant Lymphoma" (2007 Feb 10;25(5):579-86) by Cheson, Pfistner, Juweid, et al..  This article clearly defines progression-free survival, overall survival (OS), event-free survival, as well as others, with a view toward making endpoint definitions more uniform in lymphoma studies.  (Click here to access the full article in a new window.)

The authors summarize and describe eight endpoints with two considered primary endpoints -- overall survival and progression-free survival -- with the remaining six considered secondary endpoints:  event-free survival, time to progression, disease-free survival, response duration, lymphoma-specific survival, and time to next treatment.  Overall survival is the most clear-cut and least ambiguous:  time from enrollment/entry/randomization to death from any cause.  Progression-free survival is slightly more complicated than OS in that in addition to death from any cause, disease progression also constitutes an event/endpoint.  The authors explain:  "PFS reflects tumor growth, and therefore is interpretable earlier than the end point of overall survival.  In addition, PFS is not confounded by the administration of subsequent therapy."

Among the secondary endpoints, event-free survival (EFS) -- also referred to as "time to treatment failure" -- and disease-free survival (DFS) are the two I've encountered.  EFS is calculated as the time from study entry/enrollment/randomization to any treatment failure, i.e. disease progression or discontinuation of treatment for any reason (disease progression, toxicity, patient request, new treatment initiation, or death).  According to the authors, this endpoint is generally frowned upon by regulators since it combines efficacy, toxicity, and patient withdrawal.  DFS, unlike the other endpoints mentioned, starts to measure survival time from the occurrence of a disease-free state or the attainment of complete remission and terminates with either disease recurrence, death resulting from the lymphoma, or onset of acute toxicity of treatment.  This endpoint is susceptible to bias from the correct/incorrect attribution of death and whether death is censored or not.

The following table was copied-and-pasted from the article and presents a concise definition of all eight endpoints.  


In order to analyze survival data in Stata, you need to first declare the data as "survival time" with the -stset- command.  This command can be used for both single-record and multiple record survival data and requires, at a minimum, a variable containing the observation time.  If you have censored data, a variable indicating whether the observation was censored or not also must be included.  I first calculated the survival time as the difference between the patient's diagnosis date and either the event date, death date, or last contact date (whichever occurred first).  Subjects who did not experience the event or died were censored.  The censor variable assumed two values -- zero (censored) or one -- and was a composite of the event (failure) and death variables   Finally, the data was set up for survival analysis by way of -stset-.  Snippets of code follow:

* **survival-time calculated in days
gen ftime_days = min(fail_dt, dthdt, lastctdt) - sj_dx_date
 label var ftime_days "Survival Time (days)"

* **generation of censor variable
gen fail_death = 1 if fail==1 | survstatus==1
 replace fail_death = 0 if missing(fail_death)
 label var fail_death "Failure/Death Indicator"
* **-stset- the data using follow-up time (days)
stset ftime_days, failure(fail_death==1)

No comments:

Post a Comment