R语言rstatix包输入数据格式要求及配对t-test报错求助
解决rstatix包
t_test配对检验的数据格式问题 核心要求:必须使用长格式数据
rstatix的t_test()执行配对t检验时,要求数据为长格式(long format),结构必须包含:
- 1列存储所有观测数值(比如你的pre/post测量值)
- 1列存储分组标识(比如"pre"和"post")
- 1列存储配对个体的ID(确保每组配对关系一一对应)
你的两次尝试都不符合该要求:
- 第一次用的是宽格式(pre和post各占一列),公式写法完全错误——配对检验的公式逻辑是「观测值 ~ 分组标识」,而非两列数值直接对比
- 第二次的格式混乱,分组和数值拆分错误,且缺少配对ID,导致函数无法识别配对关系
正确数据格式转换示例
先构建带个体ID的宽格式数据,再转换为符合要求的长格式:
# 带个体ID的宽格式数据 df_wide <- data.frame( id = 1:5, # 配对个体的唯一标识 pre = 1:5, post = 2:6 ) # 用tidyr转换成rstatix要求的长格式(rstatix与tidyverse生态兼容) library(tidyr) df_long <- pivot_longer(df_wide, cols = c(pre, post), names_to = "group", values_to = "value")
转换后的长格式数据如下:
# A tibble: 10 × 3 id group value <int> <chr> <int> 1 1 pre 1 2 1 post 2 3 2 pre 2 4 2 post 3 5 3 pre 3 6 3 post 4 7 4 pre 4 8 4 post 5 9 5 pre 5 10 5 post 6
正确调用t_test的方式
使用长格式数据,指定公式、配对参数及配对ID:
library(rstatix) # 配对t检验:观测值value按group分组,基于id配对 t_test(df_long, formula = value ~ group, paired = TRUE, pair = id)
执行后会输出正确的检验结果:
# A tibble: 1 × 8 .y. group1 group2 n1 n2 statistic df p * <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> 1 value pre post 5 5 -11.2 4 0.000269
关于官方ToothGrowth示例的说明
你提到的ToothGrowth示例中,t_test(ToothGrowth, formula = len~dose, paired=T)能运行,是因为函数默认按行位置配对,但这并非严谨的配对检验用法——实际场景中必须通过pair参数指定明确的配对ID,否则配对关系会混乱。
rstatix通用数据格式总结
rstatix多数统计函数(t检验、方差分析等)的通用格式要求:
- 配对检验:长格式数据,需包含「观测值列」「分组列」「配对ID列」,公式为
观测值列 ~ 分组列,并指定paired=TRUE和pair=配对ID列 - 独立样本/单样本检验:长格式数据,仅需「观测值列」「分组列」(单样本可省略分组列)
内容的提问来源于stack exchange,提问作者TPL
相关产品推荐
相关产品推荐

