R语言t_test报错‘not enough y observations’排查求助
错误原因与解决方法
核心原因
- 配对样本不完整:你要做配对t检验,但数据中存在个体在部分
timepoint分组无记录的情况。当t_test做两两配对比较时,这类个体被剔除后,某组配对样本量可能变为0或1,触发not enough 'y' observations错误。 - 未显式指定配对参数:
rstatix包的t_test默认执行独立样本t检验,若要配对检验必须显式设置paired = TRUE;若timepoint分组数>2,函数会自动做两两配对比较,此时只要任意一对的配对样本量不足就会报错。 - (次要可能)
timepoint因子存在空水平或隐藏的小样本分组,比如某个因子水平只有1个样本。
解决步骤
1. 检查数据完整性
先确认每个个体在所有timepoint都有记录(假设个体标识列为subject_id):
# 查看每个个体的timepoint覆盖情况 table(data$subject_id, data$timepoint) # 统计每组样本量,确认无小样本分组 data %>% group_by(timepoint) %>% summarise(sample_size = n())
2. 过滤完整配对样本
只保留在所有timepoint都有数据的个体:
# 获取所有timepoint都有记录的个体ID complete_ids <- data %>% group_by(subject_id) %>% filter(n_distinct(timepoint) == nlevels(data$timepoint)) %>% pull(subject_id) %>% unique() # 过滤数据集 clean_data <- data %>% filter(subject_id %in% complete_ids)
3. 正确执行配对t检验
显式指定paired = TRUE,对过滤后的数据集执行检验:
clean_data %>% t_test(cag ~ timepoint, paired = TRUE)
4. 其他排查项
如果不需要配对检验,而是独立样本检验:
- 确认所有
timepoint分组样本量≥2,删除或合并小样本分组 - 清理
timepoint的空因子水平:data$timepoint <- droplevels(data$timepoint)
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

