使用 R 中的应用函数进行 2 个样本 t 检验

2 sample t test using apply function in R

我想知道是否可以使用 R 对使用 apply 函数的模拟数据进行双样本 t 检验。我知道这可以使用 for 循环来完成。但我正在尝试使用应用功能。

这是到目前为止的内容,

set.seed(26581) 

data.simu1 = replicate(n=2, rnorm(20,mean=10,sd=2))
data.simu2 = replicate(n=2, rnorm(10,mean=10,sd=2))

apply(data.simu1, 2, function(data.simu1) 
      t.test(data.simu1, data.simu2, var.equal = T)$p.value)

虽然这不会给出任何错误,但我知道这是错误的,因为我从下面的代码中得到的答案与上面得到的不同。

t.test(data.simu2[,1],data.simu1[,1],alternative="two.sided",var.equal = T)$p.value

t.test(data.simu2[,2],data.simu1[,2],alternative="two.sided",var.equal = T)$p.value

谁能帮我找出区别?

目前,您的 apply 调用正在将 data.simu1 的每一列与 all 列配对]data.simu2 或整个矩阵。请参阅下面的等效 non-looped,长格式:

apply(data.simu1, 2, function(data.simu1) 
  t.test(data.simu1, data.simu2, var.equal = T)$p.value)
# [1] 0.2521314 0.1958193

t.test(data.simu1[,1], data.simu2, var.equal = T)$p.value
# [1] 0.2521314

t.test(data.simu1[,2], data.simu2, var.equal = T)$p.value
# [1] 0.1958193

由于您需要按元素对矩阵的每一列进行配对,因此使用mapplym多元变量apply函数遍历列:

mapply(function(i, j) 
  t.test(data.simu1[,i], data.simu2[,j], var.equal = T)$p.value, 
  1:ncol(data.simu1), 1:ncol(data.simu2))
# [1] 0.5674294 0.5132492

相当于您发布的长格式:

t.test(data.simu2[,1],data.simu1[,1],alternative="two.sided",var.equal = T)$p.value
# [1] 0.5674294

t.test(data.simu2[,2],data.simu1[,2],alternative="two.sided",var.equal = T)$p.value
# [1] 0.5132492