# Confidence interval for Cohen's d

# R. Chris Fraley | Oct 27, 2003

# This program computes an approximation to the 95% confidence interval

# for Cohen's d

# Because S-Plus/R don't have an easy to way to generate

# non-central t distributions, I have simulated a sampling distribution

# for d based on hypothesized group means and SDs.  Assuming

# backwards inference is valid, the sample means and SDs can be used

# as proxies and the resulting sampling distribution

# can be used to estimate the CI.

 

# -- User provided parameters ---

 

m1 <- 10         # hypothesized mean group 1

m2 <- 18         # hypothesized mean group 2

n1 <- 30         # sample size group 1

n2 <- 30         # sample size group 2

sp <- 3          # hypothesized sd for both groups

trials <- 1000   # number of simulated trials

 

# ----- Program does the rest ------------

 

cohend<-rep(9999,trials)

xdiff<-rep(9999,trials)

pVec<-rep(9999,trials)

 

# -------------

# loop through sampling process

 

for(i in 1:trials){

   x1<-rnorm(n1,m1,sp)

   x2<-rnorm(n2,m2,sp)

   xdiff[i] <- mean(x2)-mean(x1)

   spo <- sqrt(mean(var(x1),var(x2)))

   cohend[i] <- xdiff[i]/spo

   pVec[i]<-t.test(x1,x2)$p.value

}

 

# -----------------------

# compute CI's as lower 5% and upper 95% values of d

 

ciL <- sort(cohend)[round(.05*trials)]

ciU <- sort(cohend)[round(.95*trials)]

 

z<-table(pVec<=.05)

if(dim(z)>1){

   spower<-z[2]/trials

} else{

   spower<-1

}

 

# ----------------------------

# plot and summarize results

 

hist(cohend,xlab="Cohen's d",main="Sampling distribution of Cohen's d")

cat("average cohen d =",round(mean(cohend),3),"\n")

cat("average mean difference =",round(mean(xdiff),3),"\n")

cat("Approximate lower bound 95% CI for Cohen's d",round(ciL,3),"\n")

cat("Approximate upper bound 95% CI for Cohen's d",round(ciU,3),"\n")

cat("Approximate power",spower,"\n")