Reader Comments

Post a new comment on this article

correlation/regression optimal alpha R code version 1.1 (compatibility update for R version 3.x)

Posted by joemudge on 24 Jun 2013 at 16:18 GMT

#Optimal alpha correlation/regression R code version 1.1, updated for compatibility with R version 3.x.
#Authored by Joe Mudge (questions or comments? contact: joe.mudge83@gmail.com).

optab.r<-function (n=NULL,r=NULL,T1T2cratio=1,HaHopratio=1){
beta.r.test<- function (n = NULL, r = NULL, sig.level = 0.05, power = NULL) {
if (!is.null(sig.level) && !is.numeric(sig.level) || any(0 >
sig.level | sig.level > 1))
stop(sQuote("sig.level"), " must be numeric in [0, 1]")
if (!is.null(n) && n < 4)
stop("number of observations must be at least 4")
r <- abs(r)
p.body <- quote({
ttt <- qt(sig.level/2, df = n - 2, lower = FALSE)
rc <- sqrt(ttt^2/(ttt^2 + n - 2))
zr <- atanh(r) + r/(2 * (n - 1))
zrc <- atanh(rc) + rc/(2 * (n - 1))
pnorm((zr - zrc) * sqrt(n - 3)) + pnorm((-zr - zrc) *
sqrt(n - 3))
})
#approximate correlation power calculation (arctangh transformation)
1-eval(p.body)
}

w.average.error.r<-function (alpha=NULL,n=NULL,r=NULL,T1T2cratio=1,HaHopratio=1)
((alpha*T1T2cratio+HaHopratio*(beta.r.test(n=n,r=r,sig.level=alpha))))/(HaHopratio+T1T2cratio)

min.average.error.r<-function (n=NULL,r=NULL,T1T2cratio=1,HaHopratio=1)
unlist(optimize(w.average.error.r,c(0,1),tol=0.000000000001,n=n,r=r,T1T2cratio=T1T2cratio,HaHopratio=HaHopratio))[2]

alpha.r<-function (n=NULL,r=NULL,T1T2cratio=1,HaHopratio=1)
unlist(optimize(w.average.error.r,c(0,1),tol=0.000000000001,n=n,r=r,T1T2cratio=T1T2cratio,HaHopratio=HaHopratio))[1]

beta.r<-function (n=NULL,r=NULL,T1T2cratio=1,HaHopratio=1)
((T1T2cratio+HaHopratio)*min.average.error.r(n=n,r=r,T1T2cratio=T1T2cratio,HaHopratio=HaHopratio)-T1T2cratio*alpha.r(n=n,r=r,T1T2cratio=T1T2cratio,HaHopratio=HaHopratio))/HaHopratio

t(data.frame(
"sample size"=n,
"correlation coefficient effect size"= r,
"Type I/II error cost ratio"= T1T2cratio,
"Ha/Ho prior probability ratio"= HaHopratio,
"overall probability of error"= (alpha.r(n=n,r=r,T1T2cratio=T1T2cratio,HaHopratio=HaHopratio)+HaHopratio*beta.r(n=n,r=r,T1T2cratio=T1T2cratio,HaHopratio=HaHopratio))/(1+HaHopratio),
"cost-weighted probability of error"= min.average.error.r(n=n,r=r,T1T2cratio=T1T2cratio,HaHopratio=HaHopratio),
"optimal alpha"= alpha.r(n=n,r=r,T1T2cratio=T1T2cratio,HaHopratio=HaHopratio),
"optimal beta"= beta.r(n=n,r=r,T1T2cratio=T1T2cratio,HaHopratio=HaHopratio)
))
}

#The function used to calculate optimal alphas is: optab.r(n=NULL,r=NULL,T1T2cratio=1,HaHopratio=1)
#The argument 'n'is the sample size
#The argument 'r' is the critical effect size, expressed as a correlation coefficient.
#The argument 'T1T2cratio' is the cost ratio of Type I errors relative to Type II errors. T1T2cratio is set at 1 as a default, making Type I and Type II errors equally serious.
#The argument 'HaHopratio' is the prior probability of the alternate hypothesis relative to the prior probability of the null hypothesis. HaHopratio is set at 1 as a default, to not weight alpha and beta by their prior probabilities (assuming they are unknown).
#The output is for a two-tailed test.
#This code is partially based on code modified from the R package 'pwr'(Champely 2009)

No competing interests declared.