如何 运行 对分类变量的不同水平进行配对 t 检验?

How to run a paired t-test on different levels of a categorical variable?

我正在尝试 运行 对三种干预类型的干预前和 post 干预结果进行配对 t 检验。我正在尝试 运行 在 t.test 函数中使用 "subset" 分别对每个干预进行测试,但它保持对整个样本的测试 运行。我无法手动分离干预级别,因为这是一个大型数据库,而且我无权访问 excel 文件。有人有什么建议吗?

这是我使用的代码:

治疗(干预)级别:"Passive" "Pro" "Peer"

"Post"和"Pre"是连续变量。

t.test(data$Post, data$Pre, paired=T, subset=data$Treatment=="Peer")
t.test(data$Post, data$Pre, paired=T, subset=data$Treatment=="Pro")
t.test(data$Post, data$Pre, paired=T, subset=data$Treatment=="Passive")

使用 default 方法时,t.test 函数没有 subset 参数(也没有 data 参数):

> args(stats:::t.test.default)
function (x, y = NULL, alternative = c("two.sided", "less", 
    "greater"), mu = 0, paired = FALSE, var.equal = FALSE, 
    conf.level = 0.95, ...)

你必须先进行子集化,

with(subset(data, subset=Treatment=="Peer"),
         t.test(Post, Pre, paired=TRUE)
    )

还有一种使用 dplyr 和 broom 的更简单的方法...

library(dplyr)
library(broom)

data %>%
  group_by(Treatment) %>%
  do(tidy(t.test(.$Pre, .$Post, paired=TRUE)))

可重现的例子

set.seed(123)
data <- tibble(id=1:63, Pre=rnorm(21*3,10,5), Post=rnorm(21*3,13,5), 
                   Treatment=sample(c("Peer","Pro","Passive"), 63, TRUE))
data
# A tibble: 63 x 4
      id   Pre  Post Treatment
   <int> <dbl> <dbl> <chr>    
 1     1  7.20  7.91 Pro      
 2     2  8.85  7.64 Peer     
 3     3 17.8  14.5  Peer     
 4     4 10.4  15.2  Peer     
 5     5 10.6  13.3  Passive  
 6     6 18.6  17.6  Passive  
 7     7 12.3  23.3  Pro      
 8     8  3.67 10.5  Peer     
 9     9  6.57  1.45 Pro      
10    10  7.77 18.0  Passive  
# ... with 53 more rows

输出:

# A tibble: 3 x 9
# Groups:   Treatment [3]
  Treatment estimate statistic p.value parameter conf.low conf.high method     alternative
  <chr>        <dbl>     <dbl>   <dbl>     <dbl>    <dbl>     <dbl> <chr>      <chr>      
1 Passive      -2.41    -1.72  0.107          14    -5.42     0.592 Paired t-~ two.sided  
2 Peer         -3.61    -2.96  0.00636        27    -6.11    -1.10  Paired t-~ two.sided  
3 Pro          -1.22    -0.907 0.376          19    -4.03     1.59  Paired t-~ two.sided