Skip to content

Commit 90ca74a

Browse files
committed
extract out some lower level code into functions from outstandR()
1 parent 8b87034 commit 90ca74a

File tree

3 files changed

+60
-42
lines changed

3 files changed

+60
-42
lines changed

R/contrast_stats.R

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
#
3+
contrast_stats <- function(AC_stats,
4+
BC_stats,
5+
CI = 0.95) {
6+
upper <- 0.5 + CI/2
7+
ci_range <- c(1-upper, upper)
8+
9+
contrasts <- list(
10+
AB = AC_stats$mean - BC_stats$mean,
11+
AC = AC_stats$mean,
12+
BC = BC_stats$mean)
13+
14+
contrast_variances <- list(
15+
AB = AC_stats$var + BC_stats$var,
16+
AC = AC_stats$var,
17+
BC = BC_stats$var)
18+
19+
contrast_ci <- list(
20+
AB = contrasts$AB + qnorm(ci_range)*as.vector(sqrt(contrast_variances$AB)),
21+
AC = contrasts$AC + qnorm(ci_range)*as.vector(sqrt(contrast_variances$AC)),
22+
BC = contrasts$BC + qnorm(ci_range)*as.vector(sqrt(contrast_variances$BC)))
23+
24+
list(contrasts = contrasts,
25+
variances = contrast_variances,
26+
CI = contrast_ci)
27+
}

R/outstandR.R

Lines changed: 5 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -50,50 +50,13 @@ outstandR <- function(AC.IPD, BC.ALD, strategy, CI = 0.95, ...) {
5050
if (!inherits(strategy, "strategy"))
5151
stop("strategy argument must be a class strategy.")
5252

53-
# select data according to formula
54-
ipd <- model.frame(strategy$formula, data = AC.IPD)
55-
56-
term.labels <- attr(terms(strategy$formula), "term.labels")
57-
mean_names <- paste0("mean.", term.labels)
58-
sd_names <- paste0("sd.", term.labels)
59-
term_names <- c(mean_names, sd_names)
60-
61-
# remove treatment labels
62-
term_names <- sort(term_names[!grepl(pattern = "trt", term_names)])
63-
64-
# replace outcome variable name
65-
response_var <- all.vars(strategy$formula)[1]
66-
response_names <- gsub(pattern = "y", replacement = response_var,
67-
x = c("y.B.sum", "y.B.bar", "N.B", "y.C.sum", "y.C.bar", "N.C"))
68-
69-
keep_names <- c(term_names, response_names)
70-
71-
ald <- BC.ALD[keep_names]
53+
ipd <- prep_ipd(strategy$formula, AC.IPD)
54+
ald <- prep_ald(strategy$formula, BC.ALD)
7255

73-
AC_outstandR <- IPD_stats(strategy, ipd = ipd, ald = ald, ...)
74-
BC_outstandR <- ALD_stats(ald = ald)
75-
76-
upper <- 0.5 + CI/2
77-
ci_range <- c(1-upper, upper)
78-
79-
contrasts <- list(
80-
AB = AC_outstandR$mean - BC_outstandR$mean,
81-
AC = AC_outstandR$mean,
82-
BC = BC_outstandR$mean)
83-
84-
contrast_variances <- list(
85-
AB = AC_outstandR$var + BC_outstandR$var,
86-
AC = AC_outstandR$var,
87-
BC = BC_outstandR$var)
88-
89-
contrast_ci <- list(
90-
AB = contrasts$AB + qnorm(ci_range)*as.vector(sqrt(contrast_variances$AB)),
91-
AC = contrasts$AC + qnorm(ci_range)*as.vector(sqrt(contrast_variances$AC)),
92-
BC = contrasts$BC + qnorm(ci_range)*as.vector(sqrt(contrast_variances$BC)))
56+
AC_stats <- IPD_stats(strategy, ipd = ipd, ald = ald, ...)
57+
BC_stats <- ALD_stats(ald = ald)
9358

94-
stats <- list(contrasts = contrasts,
95-
variances = contrast_variances,
96-
CI = contrast_ci)
59+
stats <- contrast_stats(AC_stats, BC_stats, CI)
9760

9861
structure(stats,
9962
CI = CI,

R/prep_data.R

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# prepare data functions
2+
3+
#
4+
prep_ipd <- function(form, data) {
5+
# select data according to formula
6+
model.frame(form, data = data)
7+
}
8+
9+
#
10+
prep_ald <- function(form, data) {
11+
12+
term.labels <- attr(terms(form), "term.labels")
13+
mean_names <- paste0("mean.", term.labels)
14+
sd_names <- paste0("sd.", term.labels)
15+
term_names <- c(mean_names, sd_names)
16+
17+
# remove treatment labels
18+
term_names <- sort(term_names[!grepl(pattern = "trt", term_names)])
19+
20+
# replace outcome variable name
21+
response_var <- all.vars(form)[1]
22+
response_names <- gsub(pattern = "y", replacement = response_var,
23+
x = c("y.B.sum", "y.B.bar", "N.B", "y.C.sum", "y.C.bar", "N.C"))
24+
25+
keep_names <- c(term_names, response_names)
26+
27+
data[keep_names]
28+
}

0 commit comments

Comments
 (0)