我想在组内按性别进行 t 检验。我有两个组变量(group_1 和 group_2)和多个结果变量(var1 和 var2 - 尽管在我的数据集中我有很多变量)。
#Packages
library(dplyr)
library(reshape2)
library(rstatix)
##Dataset
group_1 <-c(rep("Group X", 40), rep("Group Y", 40),
rep("Group Z", 60), rep("Group Y", 20),
rep("Group Z", 50), rep("Group Y", 10))
group_2 <- c(rep("A", 100), rep("B", 20), rep("C", 50), rep("A", 20), rep("B", 30))
var1 <- rnorm(n=220, mean=0, sd=1)
var2 <- rnorm(n = 220, mean = 1, sd=1.3)
gender <- c(rep("M", 30), rep("F", 30), rep("M", 40) , rep("F", 50), rep("M", 20),
rep("F", 20), rep("M", 30))
data <- as.data.frame(cbind(group_1, group_2, var1, var2, gender))
##Groupings
table(data$group_1, data$group_2, data$gender)
#Long format
g_long <- gather(data, variable, value, var1:var2)
g_long$value <- as.numeric(g_long$value)
#T-tests for each variable within groups
g_test <- g_long %>%
group_by(variable, group_1, group_2) %>%
t_test(value ~ gender, p.adjust.method = "holm", paired=FALSE)
上面的代码给了我以下错误:
Error: Problem with `mutate()` input `data`.
x not enough 'y' observations
i Input `data` is `map(.data$data, .f, ...)`.
此代码仅适用于一组,或者如果我删除了正确的数据:
#this works
g_test <- g_long %>%
group_by(variable, group_1) %>%
t_test(value ~ gender, p.adjust.method = "holm", paired=FALSE)
#Manually remove category where I cannot calculate gender diff - this works
g_long1 <- g_long[!(g_long$group_1 == "Group Y" & g_long$group_2 == "B"),]
g_test <- g_long1 %>%
group_by(variable, group_1, group_2) %>%
t_test(value ~ gender, p.adjust.method = "holm", paired=FALSE)
Y 组和 B 组类别中没有女性,所以如果我手动删除它们,代码就可以工作。我尝试了类似下面的方法来自动检测和删除这些类别,但这无济于事,因为如果每个类别没有男性或没有女性,它就无法删除数据。
g_long<- g_long %>%
group_by(group_1, group_2, variable, gender) %>%
filter(n() >= 5)
如何自动删除无法运行 t 检验的类别?我的数据集中的每个组都有超过 3 个类别,因此手动选择每个组会很困难。