Frequentist logistic regression model analysis for binary data adjusting for periods
Source:R/fixmodel_bin.R
fixmodel_bin.Rd
This function performs logistic regression taking into account all trial data until the arm under study leaves the trial and adjusting for periods as factors.
Arguments
- data
Data frame with trial data, e.g. result from the
datasim_bin()
function. Must contain columns named 'treatment', 'response' and 'period'.- 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.
- 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 period (defined as a time interval bounded by any treatment arm entering or leaving the platform). The time is then modelled as a step-function with jumps at the beginning of each period. 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_{s=2}^{S_M} \tau_s \cdot I(t_j \in T_{S_s})$$
where \(g(\cdot)\) denotes the logit link function and \(\eta_0\) is the log odds in the control arm in the first period; \(\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 periods prior or up to the time when the investigated treatment arm left the trial; \(\tau_s\) indicates the stepwise period effect in terms of the log odds ratio between periods 1 and \(s\) (\(s = 2, \ldots, S_M\)), where \(S_M\) denotes the period, in which the investigated treatment arm left the trial.
If the data consists of only one period (e.g. in case of a multi-arm trial), the period in not used as covariate.
References
On model-based time trend adjustments in platform trials with non-concurrent controls. Bofill Roig, M., Krotka, P., et al. BMC Medical Research Methodology 22.1 (2022): 1-16.
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_bin(data = trial_data, arm = 3)
#> $p_val
#> [1] 0.2436484
#>
#> $treat_effect
#> [1] 0.2355592
#>
#> $lower_ci
#> [1] -0.424127
#>
#> $upper_ci
#> [1] 0.9111935
#>
#> $reject_h0
#> [1] FALSE
#>
#> $model
#>
#> Call: glm(formula = response ~ as.factor(treatment) + as.factor(period),
#> family = binomial, data = data_new)
#>
#> Coefficients:
#> (Intercept) as.factor(treatment)1 as.factor(treatment)2
#> 1.06960 -0.04699 0.45312
#> as.factor(treatment)3 as.factor(period)2 as.factor(period)3
#> 0.23556 0.15502 -0.02392
#> as.factor(period)4
#> 0.33341
#>
#> Degrees of Freedom: 499 Total (i.e. Null); 493 Residual
#> Null Deviance: 521.8
#> Residual Deviance: 517.6 AIC: 531.6
#>