Frequentist logistic regression model analysis for binary data adjusting for calendar time units
Source:R/fixmodel_cal_bin.R
fixmodel_cal_bin.Rd
This function performs logistic regression taking into account all trial data until the arm under study leaves the trial and adjusting for calendar time units as factors.
Arguments
- data
Data frame with trial data, e.g. result from the
datasim_bin()
function. Must contain columns named 'treatment' and 'response'.- arm
Integer. Index of the treatment arm under study to perform inference on (vector of length 1). This arm is compared to the control group.
- alpha
Double. Significance level (one-sided). Default=0.025.
- unit_size
Integer. Number of patients per calendar time unit. Default=25.
- ncc
Logical. Indicates whether to include non-concurrent data into the analysis. Default=TRUE.
- check
Logical. Indicates whether the input parameters should be checked by the function. Default=TRUE, unless the function is called by a simulation function, where the default is FALSE.
- ...
Further arguments passed by wrapper functions when running simulations.
Value
List containing the following elements regarding the results of comparing arm
to control:
p-val
- p-value (one-sided)treat_effect
- estimated treatment effect in terms of the log-odds ratiolower_ci
- lower limit of the (1-2*alpha
)*100% confidence intervalupper_ci
- upper limit of the (1-2*alpha
)*100% confidence intervalreject_h0
- indicator of whether the null hypothesis was rejected or not (p_val
<alpha
)model
- fitted model
Details
The model-based analysis adjusts for the time effect by including the factor calendar time unit (defined as time units of fixed length, defined by ùnit_size
). The time is then modelled as a step-function with jumps at the beginning of each calendar time unit.
Denoting by \(y_j\) the response probability for patient \(j\), by \(k_j\) the arm patient \(j\) was allocated to, and by \(M\) the treatment arm under evaluation, the regression model is given by:
$$g(E(y_j)) = \eta_0 + \sum_{k \in \mathcal{K}_M} \theta_k \cdot I(k_j=k) + \sum_{c=2}^{C_M} \tau_c \cdot I(t_j \in T_{C_c})$$
where \(g(\cdot)\) denotes the logit link function and \(\eta_0\) is the log odds in the control arm in the first calendar time unit; \(\theta_k\) represents the log odds ratio of treatment \(k\) and control for \(k\in\mathcal{K}_M\), where \(\mathcal{K}_M\) is the set of treatments that were active in the trial during calendar time units prior or up to the time when the investigated treatment arm left the trial; \(\tau_c\) indicates the stepwise calendar time effect in terms of the log odds ratio between calendar time units 1 and \(c\) (\(c = 2, \ldots, C_M\)), where \(C_M\) denotes the calendar time unit, in which the investigated treatment arm left the trial.
If the data consists of only one calendar time unit, the calendar time unit in not used as covariate.
Examples
trial_data <- datasim_bin(num_arms = 3, n_arm = 100, d = c(0, 100, 250),
p0 = 0.7, OR = rep(1.8, 3), lambda = rep(0.15, 4), trend="stepwise")
fixmodel_cal_bin(data = trial_data, arm = 3)
#> $p_val
#> [1] 0.05434306
#>
#> $treat_effect
#> [1] 0.5854531
#>
#> $lower_ci
#> [1] -0.1183245
#>
#> $upper_ci
#> [1] 1.320428
#>
#> $reject_h0
#> [1] FALSE
#>
#> $model
#>
#> Call: glm(formula = response ~ as.factor(treatment) + as.factor(cal_time),
#> family = binomial, data = data_new)
#>
#> Coefficients:
#> (Intercept) as.factor(treatment)1 as.factor(treatment)2
#> 1.0044 0.8346 1.0941
#> as.factor(treatment)3 as.factor(cal_time)2 as.factor(cal_time)3
#> 0.5855 -0.6534 1.1401
#> as.factor(cal_time)4 as.factor(cal_time)5 as.factor(cal_time)6
#> 1.8186 -0.6755 0.9176
#> as.factor(cal_time)7 as.factor(cal_time)8 as.factor(cal_time)9
#> -0.4488 -0.4488 0.1060
#> as.factor(cal_time)10 as.factor(cal_time)11 as.factor(cal_time)12
#> -0.8664 0.5270 -0.1389
#> as.factor(cal_time)13 as.factor(cal_time)14 as.factor(cal_time)15
#> -0.1219 -0.3632 -0.5528
#> as.factor(cal_time)16 as.factor(cal_time)17 as.factor(cal_time)18
#> -0.3808 0.7392 0.7160
#> as.factor(cal_time)19 as.factor(cal_time)20
#> 1.1924 0.1031
#>
#> Degrees of Freedom: 499 Total (i.e. Null); 477 Residual
#> Null Deviance: 483.3
#> Residual Deviance: 446.2 AIC: 492.2
#>