在 R 中计算 p 值的 t.test 中出错

Error in t.test for p-value calculation in R

提问人:beginner 提问时间:11/5/2023 最后编辑:jpsmithbeginner 更新时间:11/6/2023 访问量:49

问:

我有一个包含信息的数据帧mat

mat <- structure(list(ids = c("id1", "id2", "id3", "id4", "id5", "id6", 
"id7", "id8", "id9", "id10", "id11", "id12", "id13", "id14", 
"id15", "id16", "id17", "id18", "id19", "id20"), Group = c("A", 
"A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "C", "C", "C", 
"C", "C", "C", "A", "A", "B"), number = c(2L, 2L, 3L, 2L, 2L, 
44L, 172L, 34L, 78L, 27L, 31L, 55L, 23L, 34L, 14L, 18L, 25L, 
2L, 2L, 12L)), class = "data.frame", row.names = c(NA, -20L))

我正在尝试计算组之间的差异。尝试使用如下所示,但我最终出现错误:t.test

t.test(Group, number, data=mat)

它说错误t.test(Group, number, data = mat) : object 'Group' not found

并且还尝试过:

t.test(Group ~ number, data=mat)

Error in t.test.formula(Group ~ number, data = mat) : 
  grouping factor must have exactly 2 levels

可能是什么问题,如何从 t.test 中获取 p 值?

R 统计量 分组 因子 t.test

评论

3赞 jay.sf 11/5/2023
显然,您的组有两个以上的水平,但 t 检验比较了两个均值,即正好两个水平。
0赞 beginner 11/5/2023
你是说我应该只有两组?
1赞 Rui Barradas 11/6/2023
是的,对于 t 检验,您不能有两组以上。请尝试方差分析:。aov(number ~ Group, mat) |> summary()
4赞 Andrew Gustar 11/6/2023
你不是说你所拥有的吗?number ~ Group
0赞 beginner 11/6/2023
哦,是的,非常感谢!

答:

1赞 Anderson N. Barbosa 11/6/2023 #1

如果您的目标是计算学生的 t 检验,则 @jay.sf 是正确的。该测试比较两个组之间的均值,并且您尝试使用的分组列具有两个以上的组。

因此,如果您只想对两个特定组(例如 A 和 B)执行学生的 t 检验,则可以使用以下示例作为基础:

# Create filtered dataframes for the groups of interest
mat_group_A <- subset(mat, Group == "A")
mat_group_B <- subset(mat, Group == "B")
    
# Perform the t-test only for the groups you've specified (in pairs)
t.test(mat_group_A$number, mat_group_B$number)

现在,如果您打算比较所有组之间的所有均值,那么使用方差分析更明智。这将减少分析中的错误。请记住,方差分析会告知您在比较中是否存在显着差异。要确定这些差异在哪里,您需要进行事后测试,例如Tukey测试。下面的脚本完成了我提到的:

# Calculate ANOVA
anova.result <- aov(number ~ Group, data = mat)
    
# Display the ANOVA result
summary(anova.result)
    
# Compare means between the groups (Tukey Post-hoc Test)
TukeyHSD(anova.result)

评论

1赞 thelatemail 11/6/2023
如果您使用 formula 方法,也可以将参数直接传递给 -subset=t.test()t.test(number ~ Group, data=mat, subset=(Group %in% c("A","B")))