我正在尝试使用 Raj Jain 的计算机系统性能分析艺术中第 211 页中的示例来重现 t 检验的工作原理。
计算如下:
# system A sample and statistics
a <- c(5.36, 16.57, 0.62, 1.41, 0.64, 7.26)
x_a <- mean(a)
s2_a <- var(a)
n_a <- length(a)
# system B sample and statistics
b <- c(19.12, 3.52, 3.38, 2.5, 3.6, 1.74)
x_b <- mean(b)
s2_b <- var(b)
n_b <- length(b)
# computation of t-test
s <- (s2_a/n_a + s2_b/n_b)^(1/2)
v <- ((s2_a/n_a + s2_b/n_b)^2)/((1/(n_a - 1))*((s2_a/n_a)^2) + (1/(n_b - 1))*((s2_b/n_b)^2)) - 2
# 90% confidence interval
(x_a - x_b) + c(1, -1) * qt(c(0.95), v) * s
最后一次计算的输出是 (6.55, -7.22),它与书中给出的结果相匹配(请参阅此处的勘误表:https ://www.cse.wustl.edu/~jain/books/ftp/errors_all.pdf )。
但是,内置的 t 检验给出了不同的结果:
> t.test(a, b, conf.level = 0.9)
Welch Two Sample t-test
data: a and b
t = -0.09015, df = 9.9434, p-value = 0.93
alternative hypothesis: true difference in means is not equal to 0
90 percent confidence interval:
-7.038828 6.372161
sample estimates:
mean of x mean of y
5.310000 5.643333
内置函数给出的置信区间为 (-7.04, 6.37)。我无法重现此间隔。造成差异的原因是什么?我的计算错了吗?
更新:不同的结果是由于的值不同,表示自由度。正如 Ben Bolker 指出的那样,R 使用 9.94,而书中的手动计算使用。这本书没有说明为什么要减去 2。它只是假设观察结果是独立且不成对的,但对方差保持沉默。
Neeraj 的答案重现了维基百科文章中对Welch 的 t 检验给出的自由度计算。