在 R 中复制 T 检验

标签 r t-test

我尝试复制以下简单的 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/

相关文章:

r - 使用 `st_write` 标记 kml 特征

python - 在 Pandas 数据帧上使用 ttest_ind 时遇到问题

python - 使用一个 DataFrame 中的列作为另一个 DataFrame 中的多索引进行 t 检验

R:对 2 个数据帧的行进行 t 测试

r - 如何在 R Markdown 文档中嵌入和转义 R Markdown 代码

r - 从数据框中绘制多条平滑线

r - R 列中前几行的总和

r - R (arulesSequences) 中的 cSPADE 带大数据的奇怪结果。我可以强制 numpart 为 1 吗?有风险吗?

r - 如何在 Base 中生成 "Unbalanced"(不等)因子水平?

python - 如何对存储在 pandas DataFrame 中的数据执行 t 检验