corrTime | R Documentation |
This function calculates the correlation of two logrank test statistics on overlapping populations A and B over time calculated from first subject in.
corrTime( T = 24, n = list(AandB = 300, AnotB = 0, BnotA = 450), r = list(AandB = 1/2, AnotB = 0, BnotA = 1/2), rA = 1/2, rB = 1/2, h0 = list(AandB = function(t) { log(2)/12 }, AnotB = function(t) { log(2)/12 }, BnotA = function(t) { log(2)/12 }), S0 = list(AandB = function(t) { exp(-log(2)/12 * t) }, AnotB = function(t) { exp(-log(2)/12 * t) }, BnotA = function(t) { exp(-log(2)/12 * t) }), h1 = list(AandB = function(t) { log(2)/12 * 0.7 }, AnotB = function(t) { log(2)/12 * 0.7 }, BnotA = function(t) { log(2)/12 * 0.7 }), S1 = list(AandB = function(t) { exp(-log(2)/12 * 0.7 * t) }, AnotB = function(t) { exp(-log(2)/12 * 0.7 * t) }, BnotA = function(t) { exp(-log(2)/12 * 0.7 * t) }), F.entry = function(t) { (t/18)^1.5 * as.numeric(t <= 18) + as.numeric(t > 18) }, G.ltfu = function(t) { 0 }, strat.ana = "Y" )
T |
Analysis time calculated from first subject randomization date. |
n |
Total sample size for two arms for subjects in both population A and B, A not B, B not A. Default is NULL. |
r |
Proportion of experimental subjects in both population A and B, A not B, B not A. Default, 1/2 for 1:1 randomization stratified by A and B |
h0 |
Hazard function of control arm for subjects in both population A and B, A not B, B not A. h0(t) = log(2)/m0 means T~exponential distribution with median m0. For study design without considering heterogeneous effect in strata for control arm, then specify the same h0(t) function across strata. |
S0 |
Survival function of control arm for subjects in both population A and B, A not B, B not A. h0(t) = log(2)/m0 means T~exponential distribution with median m0. For study design without considering heterogeneous effect in strata for control arm, then specify the same S0(t) function across strata. The density function f0(t) = h0(t) * S0(t). |
h1 |
Hazard function of experimental arm for subjects in both population A and B, A not B, B not A. For study design without considering heterogeneous effect in strata for the experimental arm, then specify the same h1(t) function across strata. |
S1 |
Survival function of experimental arm for subjects in both population A and B, A not B, B not A. For study design without considering heterogeneous effect in strata for the experimental arm, then specify the same h1(t) function across strata. |
F.entry |
Distribution function of enrollment. For uniform enrollment, F.entry(t) = (t/A) where A is the enrollment period, i.e., F.entry(t) = t/A for 0<=t<=A, and F.entry(t) = 1 when t > A. For more general non-uniform enrollment with weight psi, F.entry(t) = (t/A)^psi*I(0<=t<=A) + I(t>A). Default F.entry is uniform distribution function. |
G.ltfu |
Distribution function of lost-to-follow-up censoring process. The observed survival time is min(survival time, lost-to-follow-up time). For 3\ every year as a constant rate, then G.ltfu = 1-exp(-0.03/12*t), i.e., drop-off~exp distribution. Default G.ltfu = 0 (no lost-to-followup) |
strat.ana |
Stratified Analysis by A and B "Y" or "N". Default "Y" |
An object with dataframes below.
Expected number of events
n.events0: number of events for control group
n.events1: number of events for experimental group
n.events.total: total number of events for two groups
subgroup Label of subgroups
Correlation of the two test statistics for populations A and B at time T
################################ # Example 1: PD-L1+ subgroup # and overall population tests. ################################ #Control arm has exponential #distribution with median 12 months in all strata. #1:1 randomization stratified by PD-L1+ status. 300 subjects in PD-L1+ and #450 total subjects in overall population. 3\% drop-off every year. Enrollment #period is 18 months and weight 1.5. ################# # h(t) and S(t) ################# h0 = function(t){log(2)/12} S0 = function(t){exp(-log(2)/12 * t)} h0.5 = function(t){log(2)/12*0.5} h0.65 = function(t){log(2)/12*0.65} h0.8 = function(t){log(2)/12*0.8} S0.5 = function(t){exp(-log(2)/12 * 0.5 * t)} S0.65 = function(t){exp(-log(2)/12 * 0.65 * t)} S0.8 = function(t){exp(-log(2)/12 * 0.8 * t)} #Entry distribution: enrollment period 18 mo, acceleration weight 1.5. Fe = function(t){(t/18)^1.5*as.numeric(t <= 18) + as.numeric(t > 18)} #Drop-off distribution: 3\% drop-off every year. G = function(t){1-exp(-0.03/12*t)} #Plot correlation over time after enrollment complete t = seq(18, 50, 1) #Analysis time, must be greater than enrollment period 18. omega = matrix(NA, nrow=6, ncol=length(t)) for (i in 1:length(t)){ #(1) Homogeneous regardless of PD-L1 status: HR = 0.65 omega[1,i]=corrTime(T = t[i], n = list(AandB = 300, AnotB=0, BnotA=450), r = list(AandB=1/2, AnotB =0, BnotA = 1/2, A=1/2, B=1/2), h0=list(AandB=h0, AnotB=h0, BnotA=h0), S0=list(AandB=S0, AnotB=S0, BnotA=S0), h1=list(AandB=h0.65, AnotB=NULL, BnotA=h0.65), S1=list(AandB=S0.65, AnotB=NULL, BnotA=S0.65), F.entry = Fe, G.ltfu = G, strat.ana="Y")$corr omega[2,i]=corrTime(T = t[i], n = list(AandB = 300, AnotB=0, BnotA=450), r = list(AandB=1/2, AnotB =0, BnotA = 1/2, A=1/2, B=1/2), h0=list(AandB=h0, AnotB=h0, BnotA=h0), S0=list(AandB=S0, AnotB=S0, BnotA=S0), h1=list(AandB=h0.65, AnotB=NULL, BnotA=h0.65), S1=list(AandB=S0.65, AnotB=NULL, BnotA=S0.65), F.entry = Fe, G.ltfu = G, strat.ana="N")$corr #(2) Stronger effect in PD-L1+: HR = 0.65; PD-L1-: HR = 0.85 omega[3,i]=corrTime(T = t[i], n = list(AandB = 300, AnotB=0, BnotA=450), r = list(AandB=1/2, AnotB =0, BnotA = 1/2, A=1/2, B=1/2), h0=list(AandB=h0, AnotB=h0, BnotA=h0), S0=list(AandB=S0, AnotB=S0, BnotA=S0), h1=list(AandB=h0.65, AnotB=NULL, BnotA=h0.8), S1=list(AandB=S0.65, AnotB=NULL, BnotA=S0.8), F.entry = Fe, G.ltfu = G, strat.ana="Y")$corr omega[4,i]=corrTime(T = t[i], n = list(AandB = 300, AnotB=0, BnotA=450), r = list(AandB=1/2, AnotB =0, BnotA = 1/2, A=1/2, B=1/2), h0=list(AandB=h0, AnotB=h0, BnotA=h0), S0=list(AandB=S0, AnotB=S0, BnotA=S0), h1=list(AandB=h0.65, AnotB=NULL, BnotA=h0.8), S1=list(AandB=S0.65, AnotB=NULL, BnotA=S0.8), F.entry = Fe, G.ltfu = G, strat.ana="N")$corr #(3) Weaker effect in PD-L1+: HR = 0.85; PD-L1-: HR = 0.65 omega[5,i]=corrTime(T = t[i], n = list(AandB = 300, AnotB=0, BnotA=450), r = list(AandB=1/2, AnotB =0, BnotA = 1/2, A=1/2, B=1/2), h0=list(AandB=h0, AnotB=h0, BnotA=h0), S0=list(AandB=S0, AnotB=S0, BnotA=S0), h1=list(AandB=h0.65, AnotB=NULL, BnotA=h0.5), S1=list(AandB=S0.65, AnotB=NULL, BnotA=S0.5), F.entry = Fe, G.ltfu = G, strat.ana="Y")$corr omega[6,i]=corrTime(T = t[i], n = list(AandB = 300, AnotB=0, BnotA=450), r = list(AandB=1/2, AnotB =0, BnotA = 1/2, A=1/2, B=1/2), h0=list(AandB=h0, AnotB=h0, BnotA=h0), S0=list(AandB=S0, AnotB=S0, BnotA=S0), h1=list(AandB=h0.65, AnotB=NULL, BnotA=h0.5), S1=list(AandB=S0.65, AnotB=NULL, BnotA=S0.5), F.entry = Fe, G.ltfu = G, strat.ana="N")$corr } #Plot the correlations vs time plot(t, omega[1,], type="n", ylim=range(omega), xlab="Analysis Time", ylab="Correlation") lines(t, omega[1,], lty=1, col=1, lwd=2) lines(t, omega[2,], lty=2, col=2, lwd=2) lines(t, omega[3,], lty=1, col=3, lwd=2) lines(t, omega[4,], lty=2, col=3, lwd=2) lines(t, omega[5,], lty=1, col=4, lwd=2) lines(t, omega[6,], lty=2, col=4, lwd=2) legend(18,0.642, c("PD-L1+/- HR 0.65/0.65: S", "PD-L1+/- HR 0.65/0.65: U", "PD-L1+/- HR 0.65/0.8: S"), lwd=rep(2,3), col=c(1,2,3), lty=c(1,2,1), bty="n", cex=0.6) legend(18,0.632, c("PD-L1+/- HR 0.65/0.8: U","PD-L1+/- HR 0.65/0.5: S","PD-L1+/- HR 0.65/0.5: U"), lwd=rep(2,3), col=c(3,4,4), lty=c(2,1,2), bty="n", cex=0.6)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.