-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f1c88c5
commit 5422039
Showing
7 changed files
with
274 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#' Frequentist linear regression model analysis for continuous data with linear adjustment for time | ||
#' | ||
#' @description This function performs linear regression taking into account all trial data until the arm under study leaves the trial and adjusting for time a continuous covariate | ||
#' | ||
#' @param data Data frame with trial data, e.g. result from the `datasim_cont()` function. Must contain columns named 'treatment', 'response' and 'period'. | ||
#' @param 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. | ||
#' @param alpha Double. Significance level (one-sided). Default=0.025. | ||
#' @param ncc Logical. Indicates whether to include non-concurrent data into the analysis. Default=TRUE. | ||
#' @param 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. | ||
#' @param ... Further arguments passed by wrapper functions when running simulations. | ||
#' | ||
#' @importFrom stats lm | ||
#' @importFrom stats pt | ||
#' @importFrom stats coef | ||
#' @importFrom stats confint | ||
#' | ||
#' @export | ||
#' | ||
#' @examples | ||
#' | ||
#' trial_data <- datasim_cont(num_arms = 3, n_arm = 100, d = c(0, 100, 250), | ||
#' theta = rep(0.25, 3), lambda = rep(0.15, 4), sigma = 1, trend = "linear") | ||
#' | ||
#' fixmodel_lin_cont(data = trial_data, arm = 3) | ||
#' | ||
#' @return 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 difference in means | ||
#' - `lower_ci` - lower limit of the (1-2*`alpha`)*100% confidence interval | ||
#' - `upper_ci` - upper limit of the (1-2*`alpha`)*100% confidence interval | ||
#' - `reject_h0` - indicator of whether the null hypothesis was rejected or not (`p_val` < `alpha`) | ||
#' - `model` - fitted model | ||
#' | ||
#' @author Pavla Krotka | ||
#' | ||
#' @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. | ||
|
||
fixmodel_lin_cont <- function(data, arm, alpha=0.025, ncc=TRUE, check=TRUE, ...){ | ||
|
||
if (check) { | ||
if (!is.data.frame(data) | sum(c("treatment", "response", "j") %in% colnames(data))!=3) { | ||
stop("The data frame with trial data must contain the columns 'treatment', 'response' and 'j'!") | ||
} | ||
|
||
if(!is.numeric(arm) | length(arm)!=1){ | ||
stop("The evaluated treatment arm (`arm`) must be one number!") | ||
} | ||
|
||
if(!is.numeric(alpha) | length(alpha)!=1 | alpha>=1 | alpha<=0){ | ||
stop("The significance level (`alpha`) must be one number between 0 and 1!") | ||
} | ||
|
||
if(!is.logical(ncc) | length(ncc)!=1){ | ||
stop("The indicator of including NCC data to the analysis (`ncc`) must be TRUE or FALSE!") | ||
} | ||
} | ||
|
||
min_period <- min(data[data$treatment==arm,]$period) | ||
max_period <- max(data[data$treatment==arm,]$period) | ||
|
||
if (ncc) { | ||
data_new <- data[data$period %in% c(1:max_period),] | ||
} else { | ||
data_new <- data[data$period %in% c(min_period:max_period),] | ||
} | ||
|
||
# fit linear model | ||
|
||
mod <- lm(response ~ as.factor(treatment) + j, data_new) | ||
|
||
res <- summary(mod) | ||
|
||
# one-sided p-value | ||
p_val <- pt(coef(res)[paste0("as.factor(treatment)", arm), "t value"], mod$df, lower.tail = FALSE) | ||
|
||
# metrics | ||
treat_effect <- res$coefficients[paste0("as.factor(treatment)", arm), "Estimate"] | ||
lower_ci <- confint(mod, level = 1-(2*alpha))[paste0("as.factor(treatment)", arm), 1] | ||
upper_ci <- confint(mod, level = 1-(2*alpha))[paste0("as.factor(treatment)", arm), 2] | ||
reject_h0 <- (p_val < alpha) | ||
|
||
return(list(p_val = p_val, | ||
treat_effect = treat_effect, | ||
lower_ci = lower_ci, | ||
upper_ci = upper_ci, | ||
reject_h0 = reject_h0, | ||
model = mod)) | ||
} | ||
|
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,22 @@ | ||
#Sys.setenv("_R_CHECK_SYSTEM_CLOCK_" = 0) | ||
|
||
# Create r package folder | ||
usethis::create_package("C:/Users/pavla/Nextcloud/GitKraken/NCC") | ||
usethis::create_package("D:/My Drive/GitKraken/NCC") | ||
|
||
# Copy in R folder the functions of the r package | ||
setwd("C:/Users/pavla/Nextcloud/GitKraken/NCC") | ||
setwd("D:/My Drive/GitKraken/NCC") | ||
devtools::document() | ||
devtools::load_all() | ||
|
||
# Build & check the package | ||
devtools::build(pkg = "C:/Users/pavla/Nextcloud/GitKraken/NCC", path = NULL, binary = FALSE, manual = TRUE, vignettes = TRUE) | ||
devtools::check_built(path = "C:/Users/pavla/Nextcloud/GitKraken/NCC", cran = TRUE, manual = TRUE, incoming = TRUE) | ||
devtools::build_manual(pkg = "C:/Users/pavla/Nextcloud/GitKraken/NCC", path = NULL) | ||
devtools::build(pkg = "D:/My Drive/GitKraken/NCC", path = NULL, binary = FALSE, manual = TRUE, vignettes = TRUE) | ||
devtools::check_built(path = "D:/My Drive/GitKraken/NCC", cran = TRUE, manual = TRUE, incoming = TRUE) | ||
devtools::build_manual(pkg = "D:/My Drive/GitKraken/NCC", path = NULL) | ||
|
||
#create vignette | ||
usethis::use_vignette("my-vignette") | ||
|
||
pkgdown::build_site(pkg = "C:/Users/pavla/Nextcloud/GitKraken/NCC") | ||
pkgdown::build_site(pkg = "D:/My Drive/GitKraken/NCC") | ||
|
||
# https://www.r-bloggers.com/2017/08/building-a-website-with-pkgdown-a-short-guide/ | ||
# https://r-pkgs.org/vignettes.html |