【问题标题】:How to perform t-tests for each level of a factor with tapply如何使用 tapply 对因子的每个级别执行 t 检验
【发布时间】:2015-07-31 16:50:43
【问题描述】:

我的数据和代码是这样的:

my_vector <- rnorm(150)
my_factor1 <- gl(3,50)
my_factor2 <- gl(2,75)

tapply(my_vector, my_factor1, function(x)
  t.test(my_vector~my_factor2, paired=T))

我想对 my_factor1 的每个级别进行单独的 t 检验,以测试 my_vector 对 my_factor2 的两个级别。

但是,在我的代码中,t-test 不会拆分 my_factor1 的级别,并且每个级别的结果都相同,因为 my_vector 完全包含在每个 t.test 中。

这是我的代码的输出:

$`1`

Paired t-test

data:  my_vector by my_factor2
t = 0.2448, df = 74, p-value = 0.8073
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.2866512  0.3669667
sample estimates:
mean of the differences 
         0.04015775 


$`2`

Paired t-test

data:  my_vector by my_factor2
t = 0.2448, df = 74, p-value = 0.8073
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.2866512  0.3669667
sample estimates:
mean of the differences 
         0.04015775 


$`3`

Paired t-test

data:  my_vector by my_factor2
t = 0.2448, df = 74, p-value = 0.8073
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.2866512  0.3669667
sample estimates:
mean of the differences 
         0.04015775 

我错过了什么或做错了什么?

【问题讨论】:

  • 你说function(x) 但公式中的x 在哪里?还有函数中的~是什么?
  • lapply(X = split(my_vector, my_factor1), FUN = function(z) {lapply(X = split(my_vector, my_factor2), FUN = function(y, z, ...) t.test(y, z), z, paired = T)}) 这以通用方式执行您想要的操作,并且可以处理因子向量中的1:n 因子,但它不使用tapply

标签: r tapply


【解决方案1】:

你的例子有点问题,因为如果你设置:

df <- data.frame(my_vector = rnorm(150),
                 my_factor1 = gl(3,50),
                 my_factor2 = gl(2,75)
                )

my_factor1 = 1 或 3 时,my_factor2 将只有一个唯一值,因为您的重复如何重叠。见?gl。这样做:

df <- data.frame(my_vector = rnorm(150),
                 my_factor1 = gl(3,1,150),
                 my_factor2 = gl(2,1,150)
                )
with(df,
       by(df, my_factor1,
          function(x) t.test(my_vector ~ my_factor2, data=x)
       )
     )

这似乎产生了您想要的输出。

附带说明 - 考虑对多重比较进行更正:https://stats.stackexchange.com/questions/16779/when-is-multiple-comparison-correction-necessary

【讨论】:

  • 嗨 C8H10N4O2,很好的答案,我怎么能用多列做到这一点?
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 2017-07-25
  • 1970-01-01
  • 2013-06-02
  • 2019-11-15
  • 2016-11-23
相关资源
最近更新 更多