Inman, Brant A. M.D.
2007-Apr-20 17:20 UTC
[R] Using power.t.test over a range of conditions
R-Helpers: I would like to perform sample size calculations for an experiment. As part of this process, I would like to know how various assumptions affect the sample size calculation. For instance, one thing that I would like to know is how the calculated sample size changes as I vary the difference that I would like to detect. I tried the following first, but got the associated error message. -----------------> power.t.test(delta=seq(500,2000,100), sd=1000, sig.level=0.05,power=0.8, + type='two.sample', alt='two.sided') Error in uniroot(function(n) eval(p.body) - power, c(2, 1e+07)) : invalid function value in 'zeroin' In addition: Warning message: the condition has length > 1 and only the first element will be used in: if (f(lower, ...) * f(upper, ...) >= 0) stop("f() values at end points not of opposite sign")>----------------->From the error message I suspected that the function did not handlevectors as arguments. I therefore tried the following looping structure to solve the problem: ----------------- DELTA <- seq(500,2000,250) SD <- seq(1000,2500,250) result <- matrix(nrow=length(DELTA), ncol=length(SD)) colnames(result) <- paste('SD=',SD, sep='') rownames(result) <- paste('Delta=',DELTA, sep='') for(i in 1:length(DELTA)){ for(j in 1:length(SD)){ result[i,j] <- power.t.test(delta=DELTA[i], sd=SD[j], sig.level=0.05, power=0.8, type='two.sample', alt='two.sided') } } Error in result[i, j] <- power.t.test(delta = DELTA[i], sd = SD[j], sig.level = 0.05, : number of items to replace is not a multiple of replacement length ----------------- Can some one tell me what I am doing wrong here? Thanks in advance for your help, Brant Inman
Inman, Brant A. M.D. wrote:> R-Helpers: > > I would like to perform sample size calculations for an experiment. As > part of this process, I would like to know how various assumptions > affect the sample size calculation. For instance, one thing that I > would like to know is how the calculated sample size changes as I vary > the difference that I would like to detect. I tried the following > first, but got the associated error message. > > ----------------- > >> power.t.test(delta=seq(500,2000,100), sd=1000, sig.level=0.05, > power=0.8, > + type='two.sample', alt='two.sided') > > Error in uniroot(function(n) eval(p.body) - power, c(2, 1e+07)) : > invalid function value in 'zeroin' > In addition: Warning message: > the condition has length > 1 and only the first element will be used in: > if (f(lower, ...) > * f(upper, ...) >= 0) stop("f() values at end points not of opposite > sign") > > ----------------- > >>From the error message I suspected that the function did not handle > vectors as arguments. I therefore tried the following looping structure > to solve the problem: > > ----------------- > > > DELTA <- seq(500,2000,250) > SD <- seq(1000,2500,250) > result <- matrix(nrow=length(DELTA), ncol=length(SD)) > colnames(result) <- paste('SD=',SD, sep='') > rownames(result) <- paste('Delta=',DELTA, sep='') > > for(i in 1:length(DELTA)){ > for(j in 1:length(SD)){ > result[i,j] <- power.t.test(delta=DELTA[i], sd=SD[j], > sig.level=0.05, power=0.8, > type='two.sample', alt='two.sided') > } > } > > Error in result[i, j] <- power.t.test(delta = DELTA[i], sd = SD[j], > sig.level = 0.05, : > number of items to replace is not a multiple of replacement > length > > ----------------- > > Can some one tell me what I am doing wrong here?I think one problem you are having is that power.t.test() returns a list with multiple components. Perhaps you could go about it like this: df <- data.frame(expand.grid(DELTA = seq(500,2000,250), SD = seq(1000,2500,250))) df$N <- NA for(i in 1:dim(df)[1]){ df$N[i] <- power.t.test(delta=df$DELTA[i], sd=df$SD[i], sig.level=0.05, power=0.8, type='two.sample', alt='two.sided')$n }> Thanks in advance for your help, > > Brant Inman > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- Chuck Cleland, Ph.D. NDRI, Inc. 71 West 23rd Street, 8th floor New York, NY 10010 tel: (212) 845-4495 (Tu, Th) tel: (732) 512-0171 (M, W, F) fax: (917) 438-0894