使用 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
由于您需要按元素对矩阵的每一列进行配对,因此使用mapply
,m多元变量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
我想知道是否可以使用 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
由于您需要按元素对矩阵的每一列进行配对,因此使用mapply
,m多元变量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