logrank.test {nph} | R Documentation |
Weighted log-rank test
Description
Calculates a weighted log-rank test for the comparison of two groups.
Usage
logrank.test(
time,
event,
group,
alternative = c("two.sided", "less", "greater"),
rho = 0,
gamma = 0,
event_time_weights = NULL
)
Arguments
time |
Vector of observed event/censored times |
event |
logical vector or numeric vector with entries 0 or 1, indicating if an event was observed (TRUE or 1) or the time is censored (FALSE or 0) |
group |
Vector of group allocations |
alternative |
Either of |
rho |
Parameter to calculate weights in the rho-gamma family |
gamma |
Parameter to calculate weights in the rho-gamma family |
event_time_weights |
Optional vector of user defined weights. This weight vector needs to have one entry per event time (not per event, as multiple events may occur at the same time) and must be sorted by increasing event time. |
Details
For a given sample, let \mathcal{D}
be the set of unique event times.
For a time-point t \in \mathcal{D}
, let n_{t,ctr}
and n_{t,trt}
be
the number of patients at risk in the control and treatment group and let
d_{t,ctr}
and d_{t,trt}
be the respective number of events.
The expected number of events in the control group is calculated under the
least favorable configuration in H_0
,
\lambda_{ctr}(t) = \lambda_{trt}(t)
, as e_{t,ctr}=(d_{t,ctr}+d_{t,trt})
\frac{n_{t0}}{n_{t0}+n_{t1}}
. The conditional variance of d_{t,ctr}
is calculated from a hypergeometric distribution as
var(d_{t,ctr})=\frac{n_{t0} n_{t1} (d_{t0}+d_{t1}) (n_{t0}+n_{t1} - d_{t0} - d_{t1})}{(n_{t0}+n_{t1})^2 (n_{t0}+n_{t1}-1)}
.
Further define a weighting function w(t)
.
The weighted logrank test statistic for a comparison of two groups is
z=\sum_{t \in \mathcal{D}} w(t) (d_{t,ctr}-e_{t,ctr}) / \sqrt{\sum_{t \in \mathcal{D}} w(t)^2 var(d_{t,ctr})}
Under the the least favorable configuration in H_0
,
the test statistic is asymptotically standard normally distributed and large
values of z
are in favor of the alternative.
The function consider particular weights in the Fleming-Harrington \rho-\gamma
family w(t)=\hat S(t-)^\rho (1-\hat S(t-))^\gamma
.
Here, \hat{S}(t)=\prod_{s \in \mathcal{D}: s \leq t} 1-\frac{d_{t,ctr}+d_{t,trt}}{n_{t,ctr}+n_{t,trt}}
is the pooled sample Kaplan-Meier estimator.
(Note: Prior to package version 2.1, S(t)
was used in the definition of \rho-\gamma
weights,
this was changed to S(t-)
with version 2.1.)
Weights \rho=0, \gamma=0
correspond to the standard logrank test with
constant weights w(t)=1
. Choosing \rho=0, \gamma=1
puts more weight on
late events, \rho=1, \gamma=0
puts more weight on early events and
\rho=1, \gamma=1
puts most weight on events at intermediate time points.
Value
A list with elements:
D
A data frame event numbers, numbers at risk and expected number of events for each event time
test
A data frame containing the z and chi-squared statistic for the one-sided and two-sided test, respectively, of the null hypothesis of equal hazard functions in both groups and the p-value for the one-sided test.
var
The estimated variance of the sum of expected minus observed events in the first group.
Author(s)
Robin Ristl, robin.ristl@meduniwien.ac.at
References
Robin Ristl, Nicolas Ballarini, Heiko Götte, Armin Schüler, Martin Posch, Franz König. Delayed treatment effects, treatment switching and heterogeneous patient populations: How to design and analyze RCTs in oncology. Pharmaceutical statistics. 2021; 20(1):129-145.
Thomas R Fleming and David P Harrington. Counting processes and survival analysis. John Wiley & Sons, 2011
See Also
Examples
A <- pop_pchaz(Tint = c(0, 90, 1500),
lambdaMat1 = matrix(c(0.2, 0.1, 0.4, 0.1), 2, 2) / 365,
lambdaMat2 = matrix(c(0.5, 0.2, 0.6, 0.2), 2, 2) / 365,
lambdaProg = matrix(c(0.5, 0.5, 0.4, 0.4), 2, 2) / 365,
p = c(0.8, 0.2),
timezero = FALSE, discrete_approximation = TRUE)
B <- pop_pchaz(Tint = c(0, 90, 1500),
lambdaMat1 = matrix(c(0.2, 0.1, 0.4, 0.1), 2, 2) / 365,
lambdaMat2 = matrix(c(0.5, 0.1, 0.6, 0.1), 2, 2) / 365,
lambdaProg = matrix(c(0.5, 0.5, 0.04, 0.04), 2, 2) / 365,
p = c(0.8, 0.2),
timezero = FALSE, discrete_approximation = TRUE)
dat <- sample_fun(A, B, r0 = 0.5, eventEnd = 30,
lambdaRecr = 0.5, lambdaCens = 0.25 / 365,
maxRecrCalendarTime = 2 * 365,
maxCalendar = 4 * 365)
logrank.test(dat$y, dat$event, dat$group)