power.mmrm.ar1 {longpower} | R Documentation |
Linear mixed model sample size calculations.
Description
This function performs the sample size calculation for a mixed model of repeated measures with AR(1) correlation structure. See Lu, Luo, & Chen (2008) for parameter definitions and other details.
Usage
power.mmrm.ar1(
N = NULL,
rho = NULL,
ra = NULL,
sigmaa = NULL,
rb = NULL,
sigmab = NULL,
lambda = 1,
times = 1:length(ra),
delta = NULL,
sig.level = 0.05,
power = NULL,
alternative = c("two.sided", "one.sided"),
tol = .Machine$double.eps^2
)
Arguments
N |
total sample size |
rho |
AR(1) correlation parameter |
ra |
retention in group a |
sigmaa |
standard deviation of observation of interest in group a |
rb |
retention in group a (assumed same as |
sigmab |
standard deviation of observation of interest in group b. If
NULL, |
lambda |
allocation ratio |
times |
observation times |
delta |
effect size |
sig.level |
type one error |
power |
power |
alternative |
one- or two-sided test |
tol |
numerical tolerance used in root finding. |
Details
See Lu, Luo, & Chen (2008).
Value
The number of subject required per arm to attain the specified
power
given sig.level
and the other parameter estimates.
Author(s)
Michael C. Donohue
References
Lu, K., Luo, X., Chen, P.-Y. (2008) Sample size estimation for repeated measures analysis in randomized clinical trials with missing data. International Journal of Biostatistics, 4, (1)
See Also
power.mmrm
, lmmpower
,
diggle.linear.power
Examples
# reproduce Table 2 from Lu, Luo, & Chen (2008)
tab <- c()
for(J in c(2,4))
for(aJ in (1:4)/10)
for(p1J in c(0, c(1, 3, 5, 7, 9)/10)){
rJ <- 1-aJ
r <- seq(1, rJ, length = J)
# p1J = p^(J-1)
tab <- c(tab, power.mmrm.ar1(rho = p1J^(1/(J-1)), ra = r, sigmaa = 1,
lambda = 1, times = 1:J,
delta = 1, sig.level = 0.05, power = 0.80)$phi1)
}
matrix(tab, ncol = 6, byrow = TRUE)
# approximate simulation results from Table 5 from Lu, Luo, & Chen (2008)
ra <- c(100, 76, 63, 52)/100
rb <- c(100, 87, 81, 78)/100
power.mmrm.ar1(rho=0.6, ra=ra, sigmaa=1, rb = rb,
lambda = sqrt(1.25/1.75), power = 0.904, delta = 0.9)
power.mmrm.ar1(rho=0.6, ra=ra, sigmaa=1, rb = rb,
lambda = 1.25/1.75, power = 0.910, delta = 0.9)
power.mmrm.ar1(rho=0.6, ra=ra, sigmaa=1, rb = rb,
lambda = 1, power = 0.903, delta = 0.9)
power.mmrm.ar1(rho=0.6, ra=ra, sigmaa=1, rb = rb,
lambda = 2, power = 0.904, delta = 0.9)
power.mmrm.ar1(N=81, ra=ra, sigmaa=1, rb = rb,
lambda = sqrt(1.25/1.75), power = 0.904, delta = 0.9)
power.mmrm.ar1(N=87, rho=0.6, ra=ra, sigmaa=1, rb = rb,
lambda = 1.25/1.75, power = 0.910)
power.mmrm.ar1(N=80, rho=0.6, ra=ra, sigmaa=1, rb = rb,
lambda = 1, delta = 0.9)
power.mmrm.ar1(N=84, rho=0.6, ra=ra, sigmaa=1, rb = rb,
lambda = 2, power = 0.904, delta = 0.9, sig.level = NULL)
# Extracting paramaters from gls objects with AR1 correlation
# Create time index:
Orthodont$t.index <- as.numeric(factor(Orthodont$age, levels = c(8, 10, 12, 14)))
with(Orthodont, table(t.index, age))
fmOrth.corAR1 <- gls( distance ~ Sex * I(age - 11),
Orthodont,
correlation = corAR1(form = ~ t.index | Subject),
weights = varIdent(form = ~ 1 | age) )
summary(fmOrth.corAR1)$tTable
C <- corMatrix(fmOrth.corAR1$modelStruct$corStruct)[[1]]
sigmaa <- fmOrth.corAR1$sigma *
coef(fmOrth.corAR1$modelStruct$varStruct, unconstrained = FALSE)['14']
ra <- seq(1,0.80,length=nrow(C))
power.mmrm(N=100, Ra = C, ra = ra, sigmaa = sigmaa, power = 0.80)
power.mmrm.ar1(N=100, rho = C[1,2], ra = ra, sigmaa = sigmaa, power = 0.80)