Two-sample t-test

Application context

Listening experiment

  • Task of each participant is to repeatedly adjust the frequency of a comparison tone to sound equal in pitch to a 1000-Hz standard tone
  • Mean adjustment estimates the point of subjective equality \(\mu\)
  • Two participants will take part in the experiment providing adjustments \(X\) and \(Y\)
  • Goal is to detect a difference between their points of subjective equality \(\mu_x\) and \(\mu_y\) of 4 Hz

Model

Assumptions

  • \(X_1, \ldots, X_n \sim N(\mu_x, \sigma_x^2)\) i.i.d.
  • \(Y_1, \ldots, Y_m \sim N(\mu_y, \sigma_y^2)\) i.i.d.
  • both samples independent
  • \(\sigma_x^2 = \sigma_y^2\) but unknown

Hypothesis

  • H\(_0\colon~ \mu_x - \mu_y = \delta = 0\)

Power simulation

n <- 110; m <- 110
pval <- replicate(2000, {
  x <- rnorm(n, mean = 1000 + 4, sd = 10)         # Participant 1 responses
  y <- rnorm(m, mean = 1000,     sd = 10)         # Participant 2 responses
  t.test(x, y, mu = 0, var.equal = TRUE)$p.value
})
mean(pval < 0.05)
## [1] 0.8345

Power curves

Turn into a function of n and effect size

pwrFun <- function(n = 30, d = 4, sd = 10,
                   nrep = 50) {
  n <- n; m <- n
  pval <- replicate(nrep, {
    x <- rnorm(n, mean = 1000 + d, sd = sd)
    y <- rnorm(m, mean = 1000,     sd = sd)
    t.test(x, y, mu = 0, var.equal = TRUE)$p.value
  })
  mean(pval < 0.05)
}

Set up conditions and call power function

cond <- expand.grid(d = 0:5,
                    n = c(50, 75, 100, 125))
system.time(
  cond$pwr <- mapply(pwrFun, n = cond$n, d = cond$d,
                     MoreArgs = list(nrep = 500))
)
##        User      System verstrichen 
##       1.435       0.007       1.441
## Plot results
lattice::xyplot(pwr ~ d, cond, groups = n, type = c("g", "b"),
                auto.key = list(corner = c(0, 1)))

Parameter recovery

n <- 100

out <- replicate(2000, {
  x <- rnorm(n, mean = 1000 + 4, sd = 10)
  y <- rnorm(n, mean = 1000,     sd = 10)
  t <- t.test(x, y, mu = 0, var.equal = TRUE)
  c(
    effect = -as.numeric(diff(t$estimate)),
    sd.pool = t$stderr * sqrt(2*n) / 2
  )
})

rowMeans(out)
##   effect  sd.pool 
## 3.981564 9.997941
boxplot(t(out))

Two-by-two ANOVA

Application context

Effect of fertilizers

In an experiment, two fertilizers (A and B, each either low or high dose) will be combined and the yield of peas (Y) in kg be observed. Goal is to detect an increase of the Fertilizer-A effect by an additional 12 kg when combined with a high dose of Fertilizer B (interaction effect).

Model

Assumptions

  • \(Y_{ijk} = \mu + \alpha_i + \beta_j + (\alpha\beta)_{ij} + \varepsilon_{ijk}\)
  • \(\varepsilon_{ijk} \sim N(0, \sigma^2) \text{ i.i.d.}\)
  • \(i = 1, \dots, I\); \(j = 1, \dots, J\); \(k = 1, \dots, K\)
  • \(\alpha_1 = \beta_1 := 0\)

Hypothesis

  • H\(_0^{AB}\colon~ (\alpha\beta)_{ij} = 0 \text{ for all } i,j\)

Setup

set.seed(1704)
n <- 96
dat <- data.frame(
  A = factor(rep(1:2, each = n/2), labels = c("low", "high")),
  B = factor(rep(rep(1:2, each = n/4), 2), labels = c("low", "high"))
)
X <- model.matrix(~ A*B, dat)
unique(X)
##    (Intercept) Ahigh Bhigh Ahigh:Bhigh
## 1            1     0     0           0
## 25           1     0     1           0
## 49           1     1     0           0
## 73           1     1     1           1
beta <- c(mu = 30, a2 = 30, b2 = 5, ab22 = 12)
means <- X %*% beta

lattice::xyplot(I(means + rnorm(n, sd = 10)) ~ A, dat, groups = B,
                type = c("g", "p", "a"), auto.key = TRUE, ylab = "Yield (kg)")

Parameter recovery

out <- replicate(2000, {
  y <- means + rnorm(n, sd = 10)   # y = mu + a + b + ab + e
  m <- aov(y ~ A*B, dat)
  c(coef(m), sigma = sigma(m))
})
boxplot(t(out))

Power simulation

pval <- replicate(2000, {
  y <- means + rnorm(n, sd = 10)
  m <- aov(y ~ A*B, dat)
  summary(m)[[1]]$"Pr(>F)"[3]      # test of interaction
})
mean(pval < 0.05)
## [1] 0.817
IycgLS0tCiMnIHRpdGxlOiAiVHdvLXNhbXBsZSB0LXRlc3QgYW5kIHR3by1ieS10d28gQU5PVkEiCiMnIHN1YnRpdGxlOiAiUG93ZXIgc2ltdWxhdGlvbiBhbmQgcG93ZXIgY3VydmVzIgojJyBhdXRob3I6ICIiCiMnIGRhdGU6ICJMYXN0IG1vZGlmaWVkOiAyMDI2LTAzLTA5IgojJyAtLS0KCgojJyAjIFR3by1zYW1wbGUgdC10ZXN0CgojJyAjIyBBcHBsaWNhdGlvbiBjb250ZXh0CgojJwojJyBMaXN0ZW5pbmcgZXhwZXJpbWVudAojJwojJyAtIFRhc2sgb2YgZWFjaCBwYXJ0aWNpcGFudCBpcyB0byByZXBlYXRlZGx5IGFkanVzdCB0aGUgZnJlcXVlbmN5IG9mIGEKIycgICBjb21wYXJpc29uIHRvbmUgdG8gc291bmQgZXF1YWwgaW4gcGl0Y2ggdG8gYSAxMDAwLUh6IHN0YW5kYXJkIHRvbmUKIycgLSBNZWFuIGFkanVzdG1lbnQgZXN0aW1hdGVzIHRoZSBwb2ludCBvZiBzdWJqZWN0aXZlIGVxdWFsaXR5ICRcbXUkCiMnIC0gVHdvIHBhcnRpY2lwYW50cyB3aWxsIHRha2UgcGFydCBpbiB0aGUgZXhwZXJpbWVudCBwcm92aWRpbmcgYWRqdXN0bWVudHMKIycgICAkWCQgYW5kICRZJAojJyAtIEdvYWwgaXMgdG8gZGV0ZWN0IGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZWlyIHBvaW50cyBvZiBzdWJqZWN0aXZlCiMnICAgZXF1YWxpdHkgJFxtdV94JCBhbmQgJFxtdV95JCBvZiA0IEh6CiMnCgojJyAjIyBNb2RlbAoKIycKIycgQXNzdW1wdGlvbnMKIycgCiMnIC0gJFhfMSwgXGxkb3RzLCBYX24gXHNpbSBOKFxtdV94LCBcc2lnbWFfeF4yKSQgaS5pLmQuCiMnIC0gJFlfMSwgXGxkb3RzLCBZX20gXHNpbSBOKFxtdV95LCBcc2lnbWFfeV4yKSQgaS5pLmQuCiMnIC0gYm90aCBzYW1wbGVzIGluZGVwZW5kZW50CiMnIC0gJFxzaWdtYV94XjIgPSBcc2lnbWFfeV4yJCBidXQgdW5rbm93bgojJyAKIycgSHlwb3RoZXNpcwojJyAKIycgLSBIJF8wXGNvbG9ufiBcbXVfeCAtIFxtdV95ID0gXGRlbHRhID0gMCQKIycKCiMnICMjIFBvd2VyIHNpbXVsYXRpb24KIysgY2FjaGUgPSBUUlVFCgpuIDwtIDExMDsgbSA8LSAxMTAKcHZhbCA8LSByZXBsaWNhdGUoMjAwMCwgewogIHggPC0gcm5vcm0obiwgbWVhbiA9IDEwMDAgKyA0LCBzZCA9IDEwKSAgICAgICAgICMgUGFydGljaXBhbnQgMSByZXNwb25zZXMKICB5IDwtIHJub3JtKG0sIG1lYW4gPSAxMDAwLCAgICAgc2QgPSAxMCkgICAgICAgICAjIFBhcnRpY2lwYW50IDIgcmVzcG9uc2VzCiAgdC50ZXN0KHgsIHksIG11ID0gMCwgdmFyLmVxdWFsID0gVFJVRSkkcC52YWx1ZQp9KQptZWFuKHB2YWwgPCAwLjA1KQoKIycgIyMgUG93ZXIgY3VydmVzCgojJwojJyBUdXJuIGludG8gYSBmdW5jdGlvbiBvZiBuIGFuZCBlZmZlY3Qgc2l6ZQoKcHdyRnVuIDwtIGZ1bmN0aW9uKG4gPSAzMCwgZCA9IDQsIHNkID0gMTAsCiAgICAgICAgICAgICAgICAgICBucmVwID0gNTApIHsKICBuIDwtIG47IG0gPC0gbgogIHB2YWwgPC0gcmVwbGljYXRlKG5yZXAsIHsKICAgIHggPC0gcm5vcm0obiwgbWVhbiA9IDEwMDAgKyBkLCBzZCA9IHNkKQogICAgeSA8LSBybm9ybShtLCBtZWFuID0gMTAwMCwgICAgIHNkID0gc2QpCiAgICB0LnRlc3QoeCwgeSwgbXUgPSAwLCB2YXIuZXF1YWwgPSBUUlVFKSRwLnZhbHVlCiAgfSkKICBtZWFuKHB2YWwgPCAwLjA1KQp9CgojJwojJyBTZXQgdXAgY29uZGl0aW9ucyBhbmQgY2FsbCBwb3dlciBmdW5jdGlvbgojKyBjYWNoZSA9IFRSVUUKCmNvbmQgPC0gZXhwYW5kLmdyaWQoZCA9IDA6NSwKICAgICAgICAgICAgICAgICAgICBuID0gYyg1MCwgNzUsIDEwMCwgMTI1KSkKc3lzdGVtLnRpbWUoCiAgY29uZCRwd3IgPC0gbWFwcGx5KHB3ckZ1biwgbiA9IGNvbmQkbiwgZCA9IGNvbmQkZCwKICAgICAgICAgICAgICAgICAgICAgTW9yZUFyZ3MgPSBsaXN0KG5yZXAgPSA1MDApKQopCgojIyBQbG90IHJlc3VsdHMKbGF0dGljZTo6eHlwbG90KHB3ciB+IGQsIGNvbmQsIGdyb3VwcyA9IG4sIHR5cGUgPSBjKCJnIiwgImIiKSwKICAgICAgICAgICAgICAgIGF1dG8ua2V5ID0gbGlzdChjb3JuZXIgPSBjKDAsIDEpKSkKCiMnICMjIFBhcmFtZXRlciByZWNvdmVyeQoKbiA8LSAxMDAKCm91dCA8LSByZXBsaWNhdGUoMjAwMCwgewogIHggPC0gcm5vcm0obiwgbWVhbiA9IDEwMDAgKyA0LCBzZCA9IDEwKQogIHkgPC0gcm5vcm0obiwgbWVhbiA9IDEwMDAsICAgICBzZCA9IDEwKQogIHQgPC0gdC50ZXN0KHgsIHksIG11ID0gMCwgdmFyLmVxdWFsID0gVFJVRSkKICBjKAogICAgZWZmZWN0ID0gLWFzLm51bWVyaWMoZGlmZih0JGVzdGltYXRlKSksCiAgICBzZC5wb29sID0gdCRzdGRlcnIgKiBzcXJ0KDIqbikgLyAyCiAgKQp9KQoKcm93TWVhbnMob3V0KQpib3hwbG90KHQob3V0KSkKCgojJyAjIFR3by1ieS10d28gQU5PVkEKCiMnICMjIEFwcGxpY2F0aW9uIGNvbnRleHQKCiMnCiMnIEVmZmVjdCBvZiBmZXJ0aWxpemVycwojJwojJyBJbiBhbiBleHBlcmltZW50LCB0d28gZmVydGlsaXplcnMgKEEgYW5kIEIsIGVhY2ggZWl0aGVyIGxvdyBvciBoaWdoIGRvc2UpCiMnIHdpbGwgYmUgY29tYmluZWQgYW5kIHRoZSB5aWVsZCBvZiBwZWFzIChZKSBpbiBrZyBiZSBvYnNlcnZlZC4gR29hbCBpcyB0bwojJyBkZXRlY3QgYW4gaW5jcmVhc2Ugb2YgdGhlIEZlcnRpbGl6ZXItQSBlZmZlY3QgYnkgYW4gYWRkaXRpb25hbCAxMiBrZyB3aGVuCiMnIGNvbWJpbmVkIHdpdGggYSBoaWdoIGRvc2Ugb2YgRmVydGlsaXplciBCIChpbnRlcmFjdGlvbiBlZmZlY3QpLgojJwoKIysgZWNobyA9IEZBTFNFCmRhdCA8LSBkYXRhLmZyYW1lKAogIEEgPSByZXAoMToyLCBlYWNoID0gMiksCiAgQiA9IHJlcCgxOjIsIHRpbWVzID0gMiksCiAgeSA9IGMoMzAsIDMwICsgNSwgMzAgKyAzMCwgMzAgKyAzMCArIDUgKyAxMikKKQpwYXIobWFpID0gYyguNiwgLjYsIC4xLCAuMSksIG1ncCA9IGMoMiwgLjcsIDApKQpwbG90KHkgfiBBLCBkYXQsIHR5cGUgPSAibiIsIHhsaW0gPSBjKDAuOCwgMi4yKSwgeWxpbSA9IGMoMjAsIDgwKSwKICAgICB4bGFiID0gIkZlcnRpbGl6ZXIgQSIsIHlsYWIgPSAiWWllbGQgKGtnKSIsIHhheHQgPSAibiIpCmxpbmVzKHkgfiBBLCBkYXRbZGF0JEIgPT0gMSwgXSwgY29sID0gImRhcmtibHVlIikKbGluZXMoeSB+IEEsIGRhdFtkYXQkQiA9PSAyLCBdLCBjb2wgPSAiZGFya2JsdWUiKQpsaW5lcygxOjIsIGMoMzAgKyA1LCAzMCArIDMwICsgNSksIGx0eSA9IDIsIGNvbCA9ICJkYXJrYmx1ZSIpCmF4aXMoMSwgMToyLCBjKCJsb3ciLCAiaGlnaCIpKQphcnJvd3MoMiwgMzAgKyAzMCArIDYsIDIsIDMwICsgMzAgKyA1ICsgMTEsIGNvZGUgPSAzLCBsZW5ndGggPSAwLjEsCiAgICAgICBjb2wgPSAiZGFya2dyYXkiKQp0ZXh0KGMoMSwgMiwgMSwgMiwgMi4wNyksIGMoMjcsIDU1LCA0MCwgODAsIDY1ICsgNiksCiAgICAgYyhleHByZXNzaW9uKG11KSwgZXhwcmVzc2lvbihtdSArIGFscGhhWzJdKSwKICAgICAgIGV4cHJlc3Npb24obXUgKyBiZXRhWzJdKSwKICAgICAgIGV4cHJlc3Npb24obXUgKyBhbHBoYVsyXSArIGJldGFbMl0gKyAoYWxwaGEgKiBiZXRhKVsyMl0pLAogICAgICAgIjEyIGtnIikKKQp0ZXh0KDEuNSwgMjcgKyAzMC8yLCAiRmVydGlsaXplciBCOiBsb3ciLCBzcnQgPSAyMSwgY29sID0gImRhcmtncmF5IikKdGV4dCgxLjUsIDM4ICsgKDMwICsgMTIpLzIsICJGZXJ0aWxpemVyIEI6IGhpZ2giLCBzcnQgPSAzMiwgY29sID0gImRhcmtncmF5IikKCiMnICMjIE1vZGVsCgojJwojJyBBc3N1bXB0aW9ucwojJyAKIycgLSAkWV97aWprfSA9IFxtdSArIFxhbHBoYV9pICsgXGJldGFfaiArIChcYWxwaGFcYmV0YSlfe2lqfSArCiMnICAgICAgICAgICAgICBcdmFyZXBzaWxvbl97aWprfSQKIycgLSAkXHZhcmVwc2lsb25fe2lqa30gXHNpbSBOKDAsIFxzaWdtYV4yKSBcdGV4dHsgaS5pLmQufSQKIycgLSAkaSA9IDEsIFxkb3RzLCBJJDsgJGogPSAxLCBcZG90cywgSiQ7ICRrID0gMSwgXGRvdHMsIEskCiMnIC0gJFxhbHBoYV8xID0gXGJldGFfMSA6PSAwJAojJyAKIycgSHlwb3RoZXNpcwojJyAKIycgLSBIJF8wXntBQn1cY29sb25+IChcYWxwaGFcYmV0YSlfe2lqfSA9IDAgXHRleHR7IGZvciBhbGwgfSBpLGokCiMnIAoKIycgIyMgU2V0dXAKCnNldC5zZWVkKDE3MDQpCm4gPC0gOTYKZGF0IDwtIGRhdGEuZnJhbWUoCiAgQSA9IGZhY3RvcihyZXAoMToyLCBlYWNoID0gbi8yKSwgbGFiZWxzID0gYygibG93IiwgImhpZ2giKSksCiAgQiA9IGZhY3RvcihyZXAocmVwKDE6MiwgZWFjaCA9IG4vNCksIDIpLCBsYWJlbHMgPSBjKCJsb3ciLCAiaGlnaCIpKQopClggPC0gbW9kZWwubWF0cml4KH4gQSpCLCBkYXQpCnVuaXF1ZShYKQpiZXRhIDwtIGMobXUgPSAzMCwgYTIgPSAzMCwgYjIgPSA1LCBhYjIyID0gMTIpCm1lYW5zIDwtIFggJSolIGJldGEKCmxhdHRpY2U6Onh5cGxvdChJKG1lYW5zICsgcm5vcm0obiwgc2QgPSAxMCkpIH4gQSwgZGF0LCBncm91cHMgPSBCLAogICAgICAgICAgICAgICAgdHlwZSA9IGMoImciLCAicCIsICJhIiksIGF1dG8ua2V5ID0gVFJVRSwgeWxhYiA9ICJZaWVsZCAoa2cpIikKCiMnICMjIFBhcmFtZXRlciByZWNvdmVyeQojKyBjYWNoZSA9IFRSVUUKCm91dCA8LSByZXBsaWNhdGUoMjAwMCwgewogIHkgPC0gbWVhbnMgKyBybm9ybShuLCBzZCA9IDEwKSAgICMgeSA9IG11ICsgYSArIGIgKyBhYiArIGUKICBtIDwtIGFvdih5IH4gQSpCLCBkYXQpCiAgYyhjb2VmKG0pLCBzaWdtYSA9IHNpZ21hKG0pKQp9KQpib3hwbG90KHQob3V0KSkKCiMnICMjIFBvd2VyIHNpbXVsYXRpb24KIysgY2FjaGUgPSBUUlVFCgpwdmFsIDwtIHJlcGxpY2F0ZSgyMDAwLCB7CiAgeSA8LSBtZWFucyArIHJub3JtKG4sIHNkID0gMTApCiAgbSA8LSBhb3YoeSB+IEEqQiwgZGF0KQogIHN1bW1hcnkobSlbWzFdXSQiUHIoPkYpIlszXSAgICAgICMgdGVzdCBvZiBpbnRlcmFjdGlvbgp9KQptZWFuKHB2YWwgPCAwLjA1KQoK