我尝试复制以下简单的 t 检验,计算出 t = -3.5985:
t.test(gktlists ~ 小,data=star,var.equal=FALSE)
这是我所做的:
mean_small <- mean(star$gktlists[star$small == 1], na.rm = TRUE)
mean_large <- mean(star$gktlists[star$small == 0], na.rm = TRUE)
print(mean_small - mean_large)
var_small <- var(star$gktlists[star$small == 1], na.rm=TRUE)
var_large <- var(star$gktlists[star$small == 0], na.rm=TRUE)
len_small <- length(star$gktlists[star$small == 1])
len_large <- length(star$gktlists[star$small == 0])
(mean_large - mean_small) / sqrt(var_small / len_small + var_large / len_large)
但我得到了不同的 t 统计量,t = -3.746202。这只是由于舍入错误还是 t.test() 所做的事情与我的预期不同。我做错了什么?
最佳答案
这是 R 代码中的教科书计算。
# to get the groups in two vectors simplifies the code below
A <- sleep$extra[sleep$group == 1]
B <- sleep$extra[sleep$group == 2]
# different variances, Welch test
var(A)
#> [1] 3.200556
var(B)
#> [1] 4.009
# compute group means, variances, etc
Abar <- mean(A); Bbar <- mean(B)
vA <- var(A); vB <- var(B)
nA <- length(A); nB <- length(B)
sA <- vA/nA; sB <- vB/nB
seA <- sqrt(vA/nA); seB <- sqrt(vB/nB)
se <- sqrt(seA^2 + seB^2)
# with Welch degrees of freedom
df <- se^4/(seA^4/(nA - 1) + seB^4/(nB - 1))
# test statistic
t.stat <- (Abar - Bbar)/sqrt(sA + sB)
# and p-value
pval <- 2*pt(abs(t.stat), df = df, lower.tail = FALSE)
# these values are exactly R's t.test results
t.stat
#> [1] -1.860813
df
#> [1] 17.77647
pval
#> [1] 0.07939414
(tt <- t.test(extra ~ group, data = sleep))
#>
#> Welch Two Sample t-test
#>
#> data: extra by group
#> t = -1.8608, df = 17.776, p-value = 0.07939
#> alternative hypothesis: true difference in means between group 1 and group 2 is not equal to 0
#> 95 percent confidence interval:
#> -3.3654832 0.2054832
#> sample estimates:
#> mean in group 1 mean in group 2
#> 0.75 2.33
创建于 2023 年 11 月 5 日 reprex v2.0.2
关于在 R 中复制 T 检验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77425086/