在R中将t.test结果输出到数据框架

4

我有一个包含个人与小组值相关联的数据框。我想要识别那些平均值大于整个数据集均值加一倍标准差的小组。为了做到这一点,我先计算整个数据框的均值和标准差,然后运行成对的t检验来比较每个组的均值。我在输出结果时遇到了困难。

> head(df)

  individual  group  value
1 11559638    75     0.371
2 11559641    75     0.367
3 11559648    75     0.410
4 11559650    75     0.417
5 11559652    75     0.440
6 11559654    75     0.395

> allvalues <- data.frame(mean=rep(mean(df$value), length(df$individual)), sd=rep(sd(df$value),  length(df$individual)))

> valueplus <- with(df, by(df, df$individual, function(x) t.test(allvalues$mean + allvalues$sd, df$value, data=x)))

> tmpplus

-------------------------------------------------------------------------- 
df$individuals: 10
NULL
-------------------------------------------------------------------------- 
df$individuals: 20
NULL
-------------------------------------------------------------------------- 
df$individuals: 21

    Welch Two Sample t-test

data:  allvalues$mean + allvalues$sd and df$value 
t = 84.5217, df = 4999, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval:
 0.04676957 0.04899068 
sample estimates:
mean of x mean of y 
0.4719964 0.4241162 

我该如何将结果存入数据框中?我期望的输出应该类似于这样:
      groups  t        df     p-value  mean.x    mean.y
    1 10      NULL     NULL   NULL     NULL      NULL
    2 20      NULL     NULL   NULL     NULL      NULL 
    3 21      84.5217  4999   2.2e-16  0.4719964 0.4241162

从统计学的角度来看,这看起来非常可疑。运行一次ANOVA然后报告已经针对多重比较进行了调整的p值的结果不是更明智吗? - IRTFM
@DWin 先我一步了。你将会遇到严重的问题,因为你正在执行多个比较。如果你不调整显著性水平(例如使用 Bonferroni 调整),你会增加出现第一类错误的几率。 - TARehman
2
在向我们询问编程问题之前,您可以尝试前往CrossValidated解决您的方法论问题,如何? - TARehman
@coffeinjunky 您对于将t检验应用于多个组的回答是错误的。由于您使用了 mtcars$mpg,因此测试应用于整个数据集而不是特定id(组)的值。由于声望较低,我无法发表评论,但只是想指出这一点。如果可能,请提供替代方案。 - Priyesh Mehta
1个回答

9

纯编程角度来看,您正在询问如何将 t.test 的输出结果转换成一个 data.frame。请尝试以下操作,使用 mtcars 数据集:

library(broom)
tidy(t.test(mtcars$mpg))
  estimate statistic      p.value parameter conf.low conf.high
1 20.09062  18.85693 1.526151e-18        31 17.91768  22.26357

或者对于多个组:
library(dplyr)
mtcars %>% group_by(vs) %>% do(tidy(t.test(.$mpg)))
# A tibble: 2 x 9
# Groups:   vs [2]
     vs estimate statistic  p.value parameter conf.low conf.high method            alternative
  <dbl>    <dbl>     <dbl>    <dbl>     <dbl>    <dbl>     <dbl> <chr>             <chr>      
1     0     16.6      18.3 1.32e-12        17     14.7      18.5 One Sample t-test two.sided  
2     1     24.6      17.1 2.75e-10        13     21.5      27.7 One Sample t-test two.sided  

不用说,你需要根据自己的具体设置调整代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接