【问题标题】:Running multiple "PAIRED" t.tests to compare pairs of column values in a data frame in R运行多个“配对”t.tests 以比较 R 中数据框中的列值对
【发布时间】:2020-10-26 11:21:22
【问题描述】:

我有一个包含 60 个参与者的许多数字变量的数据框。每个参与者都有每个变量的两个值(干预前和干预期间)。我想在这个数据框中的每个变量上运行配对 t.test

####data frame look like

Log.Name     fat     protein    carbs 
before R     19      32         134   
during R     21      43         167    
before R     32      14         322
during R     25      32         213
before R     42      34         201  
during R     34      23         305

我尝试了不同的方法

qw<- matrix(lapply(names(new.averages)[-1], function(x){
  t.test(new.averages[new.averages$Log.Name =="before R", x], 
         new.averages[new.averages$Log.Name=="during R", x], mu=0, alt="two.sided", paired = F)$p.value}))

这不起作用,但如果我将配对更改为 False,它会起作用!但如果 Paired=True 则会出现以下错误

( t.test.default 中的错误(new.averages[new.averages$Log.Name == "before R", : 没有足够的'x'观察)

lapply(new.averages[-1], function(x) t.test(x ~ new.averages$Log.Name, paired=F)$p.value)

当paired=F时这个也可以,但是当paired=F时,它会出现以下错误

complete.cases(x, y) 中的错误:并非所有参数的长度都相同

当我运行个人配对 t.test 时,它可以工作,但是我会花几个小时做很多测试,而我应该一键完成!!

有什么想法吗?

【问题讨论】:

  • 欢迎来到 SO。您能否格式化您的代码以使其更具可读性?这将有助于其他人理解您的问题。内联代码使用反引号,代码块使用三重反引号。

标签: r


【解决方案1】:

可以使用公式界面,然后lapplymap

library(purrr)

# first a single case
t.test(fat ~ Log.Name, data = df,  paired = TRUE)
#> 
#>  Paired t-test
#> 
#> data:  fat by Log.Name
#> t = 1.3628, df = 2, p-value = 0.3061
#> alternative hypothesis: true difference in means is not equal to 0
#> 95 percent confidence interval:
#>  -9.34823 18.01490
#> sample estimates:
#> mean of the differences 
#>                4.333333

# then build a named vector of all the variables you want to test

tobetested <- names(df[-1])
names(tobetested) <- names(df[-1])

# you can use paste to build the formula on the fly

map(tobetested, 
    ~ t.test(as.formula(paste(.,  "~ Log.Name")), 
             data = df,  
             paired = TRUE))
#> $fat
#> 
#>  Paired t-test
#> 
#> data:  fat by Log.Name
#> t = 1.3628, df = 2, p-value = 0.3061
#> alternative hypothesis: true difference in means is not equal to 0
#> 95 percent confidence interval:
#>  -9.34823 18.01490
#> sample estimates:
#> mean of the differences 
#>                4.333333 
#> 
#> 
#> $protein
#> 
#>  Paired t-test
#> 
#> data:  protein by Log.Name
#> t = -0.68674, df = 2, p-value = 0.5632
#> alternative hypothesis: true difference in means is not equal to 0
#> 95 percent confidence interval:
#>  -43.59182  31.59182
#> sample estimates:
#> mean of the differences 
#>                      -6 
#> 
#> 
#> $carbs
#> 
#>  Paired t-test
#> 
#> data:  carbs by Log.Name
#> t = -0.14906, df = 2, p-value = 0.8952
#> alternative hypothesis: true difference in means is not equal to 0
#> 95 percent confidence interval:
#>  -278.7487  260.0821
#> sample estimates:
#> mean of the differences 
#>               -9.333333

您的数据

library(readr)

df <- read_table("Log.Name     fat     protein    carbs
before R     19      32         134
during R     21      43         167
before R     32      14         322
during R     25      32         213
before R     42      34         201
during R     34      23         305")

【讨论】:

    【解决方案2】:

    您可以将感兴趣的每一列从数据框中拉出,并将具有奇数索引的元素与具有偶数索引的元素进行比较,如果这是您的数据布局方式:

    lapply(new.averages[-1], function(x) {
     t.test(x[seq_along(x) %% 2 == 1], 
            x[seq_along(x) %% 2 == 0], paired = TRUE)$p.value
    })
    
    #> $fat
    #> [1] 0.3061113
    #> 
    #> $protein
    #> [1] 0.5631788
    #> 
    #> $carbs
    #> [1] 0.8951818
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多