在多列上应用 t 检验
Posted
技术标签:
【中文标题】在多列上应用 t 检验【英文标题】:Applying a t-test over multiple columns 【发布时间】:2021-12-28 22:52:37 【问题描述】:我想对具有不同列长度的数据框应用 t 检验。
我有两个数据框:
DF1:
Group | Name | Weight |
---|---|---|
A | Max | 435 |
B | Jake | 657 |
A | Sarah | 99 |
DF2:
Group | Name | Weight | bmi |
---|---|---|---|
A | Mat | 435 | 16 |
B | Amy | 657 | 35 |
A | John | 99 | 25 |
实际上,我的数据框要长得多,相差约 100 列,但组织结构相同。
我想按组查看每列的差异。例如,我想应用 t 检验比较 DF1 中 A 组的权重与 B 组的权重。
当呈现 DF2 时,我希望 t.test 比较 A 组和 B 组之间的权重,并比较 A 组和 B 组之间的 bmi。
这是我目前所拥有的:
lapply(DF2[-2], function(x) t.test(x ~ DF2$Group))
我收到此错误:
if (stderr
有没有办法避免指定确切的列名,而是告诉 t.test 函数在第二个之后的每一列上应用统计测试?
【问题讨论】:
lapply(names(DF2)[3:4], function(x) t.test(reformulate('Group', x), DF2))
@Onyambu 我希望它在第二列之后迭代几列,而不仅仅是第三和第四列。我希望能够在第二个之后为其提供几个列数不同的数据帧。
【参考方案1】:
要添加Onyambu 的答案,您可以使用
df <- data.frame(
group = c("A", "A", "A", "B", "B", "B"),
name = paste0("name", 1:6),
weight = c(1, 4, 2, 3, 5, 2),
bmmi = c(20, 14, 32, 55, 42, 12)
)
df
#> group name weight bmmi
#> 1 A name1 1 20
#> 2 A name2 4 14
#> 3 A name3 2 32
#> 4 B name4 3 55
#> 5 B name5 5 42
#> 6 B name6 2 12
variables <- names(df)[-c(1, 2)] # don't use first the two names
variables
#> [1] "weight" "bmmi"
ttests <- lapply(variables, function(x) t.test(reformulate("group", x), data = df))
ttests[[1]] # view the first
#>
#> Welch Two Sample t-test
#>
#> data: weight by group
#> t = -0.80178, df = 4, p-value = 0.4676
#> alternative hypothesis: true difference in means between group A and group B is not equal to 0
#> 95 percent confidence interval:
#> -4.462835 2.462835
#> sample estimates:
#> mean in group A mean in group B
#> 2.333333 3.333333
variables
向量将包含数据框中除前两个之外的所有变量名称,lapply()
将遍历variables
中的每个元素。
【讨论】:
【参考方案2】:您需要删除前两列。此外,t.test 需要至少两个 x 和 y 值。我在下面克隆了您的 DF2 数据框:
df2 = structure(list(Group = c("A", "B", "A"), Name = c("Mat", "Amy",
"John"), Weight = c(435L, 657L, 99L), bmi = c(16L, 35L, 25L)), class =
"data.frame", row.names = c(NA, -3L))
df3 = rbind(df2, df2)
lapply(df3[c(-1,-2)], function(x) t.test(x ~ Group, data=df3))
# Welch Two Sample t-test
#
# data: x by Group
# t = -4, df = 3, p-value = 0.03
# alternative hypothesis: true difference in means between group A and group B is
# not equal to 0
# 95 percent confidence interval:
# -699 -81
# sample estimates:
# mean in group A mean in group B
# 267 657
#
#
# $bmi
#
# Welch Two Sample t-test
#
# data: x by Group
# t = -6, df = 3, p-value = 0.01
# alternative hypothesis: true difference in means between group A and group B is
# not equal to 0
# 95 percent confidence interval:
# -22.8 -6.2
# sample estimates:
# mean in group A mean in group B
# 20 35
【讨论】:
为了更好地响应 OP,已编辑以指示删除 df3 数据帧的前两列,而不是选择第 3 列和第 4 列。以上是关于在多列上应用 t 检验的主要内容,如果未能解决你的问题,请参考以下文章
R语言coin包应用于独立性问题的置换检验(permutation tests)同一数据集使用独立样本t检验与置换检验oneway_test函数单向精确检验结论不同时置换法更可信收集数据继续测试