Nothing
## ---- echo=FALSE--------------------------------------------------------------
df = data.frame(
Design = c("Simple Experiments", "2-Level CRTs", "2-Level MRTs",
"3-Level CRTs", "3-Level MRTs",
"4-Level CRTs", "4-Level MRTs"),
OD_Function = c("od.1", "od.2", "od.2m",
"od.3", "od.3m",
"od.4", "od.4m"),
Power_Function = c("power.1", "power.2", "power.2m",
"power.3", "power.3m",
"power.4", "power.4m"),
RE_Function = c("re", "re", "re",
"re", "re",
"re", "re")
)
names(df) <- c("Design", "OD Function", "Power Function", "RE Function")
library(knitr)
kable(df,
caption = "Functions for Designs Detecting Main Effects")
## ---- echo=FALSE--------------------------------------------------------------
df = data.frame(
Design = c("Simple Experiments", "2-Level CRTs", "2-Level MRTs"),
OD_Function = c("od.1.111", "od.2.221", "od.2m.111"),
Power_Function = c("power.1.111", "power.2.221", "power.2m.111")
)
names(df) <- c("Design", "OD Function", "Power Function")
library(knitr)
kable(df,
caption = "Functions for Designs Detecting Mediation Effects (In Preparation)")
## -----------------------------------------------------------------------------
library(odr)
## ----fig.width = 7, fig.height = 3.5------------------------------------------
# unconstrained optimal design
myod1 <- od.2(icc = 0.2, r12 = 0.5, r22 = 0.5, c1 = 1, c2 = 5, c1t = 1, c2t = 50,
varlim = c(0.01, 0.02))
# The function by default prints messages of output and plots the variance curves; one can turn off message and specify one or no plot.
# myod1$out # output;
# myod1$par # parameters used in the calculation.
## ----fig.width = 5, fig.height = 5--------------------------------------------
# constrained optimal design with n = 20
myod2 <- od.2(icc = 0.2, r12 = 0.5, r22 = 0.5, c1 = 1, c2 = 5, c1t = 1,
c2t = 50, plot.by = list(p = "p"), n = 20,
varlim = c(0.005, 0.030))
# myod2$out # output
# myod2$par # parameters used in the calculation.
## ----fig.width = 7, fig.height = 3.5------------------------------------------
# constrained optimal design with p = 0.5
myod3 <- od.2(icc = 0.2, r12 = 0.5, r22 = 0.5, c1 = 1, c2 = 5, c1t = 1, c2t = 50,
p = 0.5, varlim = c(0.005, 0.020))
# myod3$out # output;
# myod3$par # parameters used in the calculation.
## ----fig.width = 7, fig.height = 3.5------------------------------------------
# constrained n and p, no calculation performed
myod4 <- od.2(icc = 0.2, r12 = 0.5, r22 = 0.5, c1 = 1, c2 = 5, c1t = 1, c2t = 50,
plots = FALSE, n = 20, p = 0.5, varlim = c(0.005, 0.025))
## -----------------------------------------------------------------------------
# ?od.1
# ?od.3
# ?od.4
# ?od.2m
# ?od.3m
# ?od.4m
## -----------------------------------------------------------------------------
mym <- power.2(expr = myod1, d = 0.3, q = 1, power = 0.8)
# mym$out # m =1702, J = 59
## ----fig.width = 7, fig.height = 3.5------------------------------------------
figure <- par(mfrow = c(1, 2))
budget <- NULL
nrange <- c(2:50)
for (n in nrange)
budget <- c(budget, power.2(expr = myod1, constraint = list (n = n), d = 0.3, q = 1, power = 0.8)$out$m)
plot(nrange, budget, type = "l", lty = 1, xlim = c(0, 50), ylim = c(1500, 3500),
xlab = "Level-1 sample size: n", ylab = "Budget", main = "", col = "black")
abline(v = 9, lty = 2, col = "Blue")
budget <- NULL
prange <- seq(0.05, 0.95, by = 0.005)
for (p in prange)
budget <- c(budget, power.2(expr = myod1, constraint = list (p = p), d = 0.3, q = 1, power = 0.8)$out$m)
plot(prange, budget, type = "l", lty = 1, xlim = c(0, 1), ylim = c(1500, 7000),
xlab = "Porportion groups in treatment: p", ylab = "Budget", main = "", col = "black")
abline(v = 0.33, lty = 2, col = "Blue")
par(figure)
## -----------------------------------------------------------------------------
mypower <- power.2(expr = myod1, q = 1, d = 0.3, m = 1702)
# mypower$out # power = 0.80
## ----fig.width = 7, fig.height = 3.5------------------------------------------
figure <- par(mfrow = c (1, 2))
pwr <- NULL
nrange <- c(2:50)
for (n in nrange)
pwr <- c(pwr, power.2(expr = myod1, constraint = list (n = n), d = 0.3, q = 1, m = 1702)$out)
plot(nrange, pwr, type = "l", lty = 1, xlim = c(0, 50), ylim = c(0.4, 0.9),
xlab = "Level-1 sample size: n", ylab = "Power", main = "", col = "black")
abline(v = 9, lty = 2, col = "Blue")
pwr <- NULL
prange <- seq(0.05, 0.95, by = 0.005)
for (p in prange)
pwr <- c(pwr, power.2(expr = myod1, constraint = list (p = p), d = 0.3, q = 1, m = 1702)$out)
plot(prange, pwr, type = "l", lty = 1, xlim = c(0, 1), ylim = c(0.1, 0.9),
xlab = "Porportion groups in treatment: p", ylab = "Power", main = "", col = "black")
abline(v = 0.33, lty = 2, col = "Blue")
par(figure)
## -----------------------------------------------------------------------------
mymdes <- power.2(expr = myod1, q = 1, power = 0.80, m = 1702)
# above experssion takes parameters and outputs from od.2 function. Equivalently, each parameter can be explicitly specified.
# mym <- power.2(icc = 0.2, r12 = 0.5, r22 = 0.5, c1 = 1, c2 = 5, c1t = 1, c2t = 50,
# n = 9, p = 0.33, d = 0.3, q = 1, power = 0.8)
# mymdes$out # d = 0.30
## ----fig.width = 7, fig.height = 3.5------------------------------------------
figure <- par(mfrow = c (1, 2))
MDES <- NULL
nrange <- c(2:50)
for (n in nrange)
MDES <- c(MDES, power.2(expr = myod1, constraint = list (n = n), power = 0.8, q = 1, m = 1702)$out)
plot(nrange, MDES, type = "l", lty = 1, xlim = c(0, 50), ylim = c(0.3, 0.8),
xlab = "Level-1 sample size: n", ylab = "MDES", main = "", col = "black")
abline(v = 9, lty = 2, col = "Blue")
MDES <- NULL
prange <- seq(0.05, 0.95, by = 0.005)
for (p in prange)
MDES <- c(MDES, power.2(expr = myod1, constraint = list (p = p), power = 0.8, q = 1, m = 1702)$out)
plot(prange, MDES, type = "l", lty = 1, xlim = c(0, 1), ylim = c(0.3, 0.8),
xlab = "Porportion groups in treatment: p", ylab = "MDES", main = "", col = "black")
abline(v = 0.33, lty = 2, col = "Blue")
par(figure)
## -----------------------------------------------------------------------------
# Required level-2 sample size calculation
myJ <- power.2(cost.model = FALSE, expr = myod1, d = 0.3, q = 1, power = 0.8)
# above experssion takes parameters and outputs from od.2 function. Equivalently, each parameter can be explicitly specified.
# myJ <- power.2(icc = 0.2, r12 = 0.5, r22 = 0.5,
# cost.model = FALSE, n = 9, p = 0.33, d = 0.3, q = 1, power = 0.8)
myJ$out # J = 59
# Power calculation
mypower1 <- power.2(cost.model = FALSE, expr = myod1, J = 59, d = 0.3, q = 1)
mypower1$out # power = 0.80
# Minimum detectable effect size calculation
mymdes1 <- power.2(cost.model = FALSE, expr = myod1, J = 59, power = 0.8, q = 1)
mymdes1$out # d = 0.30
## ----fig.width = 7, fig.height = 3.5------------------------------------------
figure <- par(mfrow = c (1, 2))
pwr <- NULL
mrange <- c(300:3000)
for (m in mrange)
pwr <- c(pwr, power.2(expr = myod1, d = 0.3, q = 1, m = m)$out)
plot(mrange, pwr, type = "l", lty = 1, xlim = c(300, 3000), ylim = c(0, 1),
xlab = "Budget", ylab = "Power", main = "", col = "black")
abline(v = 1702, lty = 2, col = "Blue")
pwr <- NULL
Jrange <- c(4:100)
for (J in Jrange)
pwr <- c(pwr, power.2(expr = myod1, cost.model = FALSE, d = 0.3, q = 1, J = J)$out)
plot(Jrange, pwr, type = "l", lty = 1, xlim = c(4, 100), ylim = c(0, 1),
xlab = "Level-2 sample size: J", ylab = "Power", main = "", col = "black")
abline(v = 59, lty = 2, col = "Blue")
par(figure)
## -----------------------------------------------------------------------------
# ?power.1
# ?power.3
# ?power.4
# ?power.2m
# ?power.3m
# ?power.4m
## -----------------------------------------------------------------------------
# relative efficiency (RE) of a constrained design comparing with the optimal design
myre <- re(od = myod1, subod= myod2)
myre$re # get the output (i.e., RE = 0.88)
# relative efficiency (RE) of a constrained design comparing with the unconstrained optimal one
myre <- re(od = myod1, subod= myod3)
# relative efficiency (RE) of a constrained design comparing with the unconstrained optimal one
myre <- re(od = myod1, subod= myod4)
## -----------------------------------------------------------------------------
# ?od.1
# ?od.2
# ?od.3
# ?od.4
# ?od.2m
# ?od.3m
# ?od.4m
## -----------------------------------------------------------------------------
# Optimal sample allocation and statistical power for randomized controlled trials
myod <- od.1.111(a = .3, b = .5, c1 = 10, c1t = 100, verbose = FALSE)
mypower <- power.1.111(expr = myod, power = .8)
# mypower
# Conventional power analyses
mypower <- power.1.111(cost.model = FALSE, a = .3, b = .5, test = "joint",
power = .8, p =.5)
# mypower
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.