# DGB
## Mean Difference from Two (Independent) Samples
ci.mean.is.data <- function(alpha, y1, y2) {
# Computes confidence interval for a
# difference in population means in a 2-group design
# Arguments:
# alpha: alpha level for 1-alpha confidence
# y1: vector of scores for group 1
# y2: vector of scores for group 2
# Values:
# estimate, SE, df, lower limit, upper limit
# for both equal variance and unequal variance methods
n1 <- length(y1)
n2 <- length(y2)
df1 <- n1 + n2 - 2
m1 <- mean(y1)
m2 <- mean(y2)
est <- m1 - m2
v1 <- var(y1)
v2 <- var(y2)
vp <- ((n1 - 1)*v1 + (n2 - 1)*v2)/df1
se1 <- sqrt(vp/n1 + vp/n2)
t1 <- est/se1
p1 <- 2*(1 - pt(abs(t1),df1))
tcrit1 <- qt(1 - alpha/2, df1)
ll1 <- est - tcrit1*se1
ul1 <- est + tcrit1*se1
se2 <- sqrt(v1/n1 + v2/n2)
t2 <- est/se2
df2 <- (se2^4)/(v1^2/(n1^3 - n1^2) + v2^2/(n2^3 - n2^2))
p2 <- 2*(1 - pt(abs(t2),df2))
tcrit2 <- qt(1 - alpha/2, df2)
ll2 <- est - tcrit2*se2
ul2 <- est + tcrit2*se2
out1 <- t(c(est, se1, df1, ll1, ul1))
out2 <- t(c(est, se2, df2, ll2, ul2))
out <- rbind(out1, out2)
colnames(out) <- c("Estimate", "SE", "df", "LL", "UL")
rownames(out) <- c("Equal Variances Assumed:", "Equal Variances Not Assumed:")
return(out)
}
ci.mean.is <- function(alpha, m1, m2, sd1, sd2, n1, n2) {
# Computes confidence interval and test statistic for a
# difference in population means in a 2-group design
# Arguments:
# alpha: alpha level for 1-alpha confidence
# mj: sample mean in group j
# sdj: sample standard deviation in group j
# nj: sample size in group j
# Values:
# estimate, SE, df, t-value, p-value, lower limit, upper limit
# for both equal variance and unequal variance methods
df1 <- n1 + n2 - 2
est <- m1 - m2
v1 <- sd1^2
v2 <- sd2^2
vp <- ((n1 - 1)*v1 + (n2 - 1)*v2)/df1
se1 <- sqrt(vp/n1 + vp/n2)
t1 <- est/se1
p1 <- 2*(1 - pt(abs(t1),df1))
tcrit1 <- qt(1 - alpha/2, df1)
ll1 <- est - tcrit1*se1
ul1 <- est + tcrit1*se1
se2 <- sqrt(v1/n1 + v2/n2)
t2 <- est/se2
df2 <- (se2^4)/(v1^2/(n1^3 - n1^2) + v2^2/(n2^3 - n2^2))
p2 <- 2*(1 - pt(abs(t2),df2))
tcrit2 <- qt(1 - alpha/2, df2)
ll2 <- est - tcrit2*se2
ul2 <- est + tcrit2*se2
out1 <- t(c(est, se1, t1, df1, p1, ll1, ul1))
out2 <- t(c(est, se2, t2, df2, p2, ll2, ul2))
out <- rbind(out1, out2)
colnames(out) <- c("Estimate", "SE", "t", "df", "p-value", "LL", "UL")
rownames(out) <- c("Equal Variances Assumed:", "Equal Variances Not Assumed:")
return(out)
}
size.ci.mean.is <- function(alpha, var, w, r) {
# Computes sample size required to estimate a population mean
# difference with desired precision in a 2-group design
# Arguments:
# alpha: alpha level for 1-alpha confidence
# var: planning value of average within-group DV variance
# w: desired confidence interval width
# r: desired n2/n1 ratio
# Values:
# required sample size per group (or n1 when r not equal to 1)
z <- qnorm(1 - alpha/2)
n <- ceiling(4*var*(1 + 1/r)*(z/w)^2 + z^2/4)
return(n)
}
size.test.mean.is <- function(alpha, var, pow, es, r) {
# Computes sample size required to test a difference in
# population means with desired power in a 2-group design
# Arguments:
# alpha: alpha level for test
# var: planning value of average within-group DV variance
# pow: desired power
# es: planning value of mean difference
# r: desired n2/n1 ratio
# Values:
# required sample size per group (or n1 when r not equal to 1)
za <- qnorm(1 - alpha/2)
zb <- qnorm(pow)
n <- ceiling(var*(1 + 1/r)*(za + zb)^2/es^2 + za^2/4)
return(n)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.