在多列上应用 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函数单向精确检验结论不同时置换法更可信收集数据继续测试

MATLAB中t检验怎么做

单细胞数据分析中的秩和检验与t检验

【原创】用python做Permutation Test置换检验

T检验在项目上的具体实施

spsst检验怎么做