在R中执行2个样本t检验并重复

时间:2018-04-17 00:35:59

标签: r statistics apply

我在R中有一个数据帧名称R_alltemp,有6列,2组数据,每组3个重复。我正在尝试对前三个值和后三个值之间的每一行执行t检验,并使用apply(),以便它可以通过一行遍历所有行。这是我到目前为止使用的代码。

R_alltemp$p.value<-apply(R_all3,1, function (x) t.test(x(R_alltemp[,1:3]), x(R_alltemp[,4:6]))$p.value)

这是表格的快照

    R1.HCC827  R2.HCC827  R3.HCC827 R1.nci.h1975 R2.nci.h1975 R3.nci.h1975  p.value
1  13.587632  22.225083  15.074230    58.187465           79    82.287573 0.4391160
2   2.717526   1.778007   1.773439     1.763257            2     1.679338 0.4186339
3 203.814478 191.135711 232.320487   253.908939          263   263.656100 0.4904493
4  44.386264  45.339169  54.089884     3.526513            3     5.877684 0.3095634

它起作用了,但是从眼球看来它的p值似乎是错误的。例如,在第一行中,第一组的平均值低于第二组,但我的p值仅为.4。

我觉得我在这里错过了一些非常明显的东西,但是我一直在努力争取它比我想要的更长。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您的代码不正确。我实际上不明白为什么它不会返回错误。特别是这一部分:x(R_alltemp[,1:3])应为x[1:3]

这应该是你的代码:

R_alltemp$p.value2 <- apply(R_alltemp, 1, function(x) t.test(x[1:3], x[4:6])$p.value)

   R1.HCC827  R2.HCC827  R3.HCC827 R1.nci.h1975 R2.nci.h1975 R3.nci.h1975   p.value    p.value2
1  13.587632  22.225083  15.074230    58.187465           79    82.287573 0.4391160 0.010595829
2   2.717526   1.778007   1.773439     1.763257            2     1.679338 0.4186339 0.477533387
3 203.814478 191.135711 232.320487   253.908939          263   263.656100 0.4904493 0.044883436
4  44.386264  45.339169  54.089884     3.526513            3     5.877684 0.3095634 0.002853154

请记住,通过指定1,您正在告诉申请获取列。因此,function(x)会返回与此相同的内容:x <- c(13.587632, 22.225083, 15.074230, 58.187465, 79, 82.287573),这意味着您要将前三个值按x[1:3]进行子集,然后将最后三个值x[4:6]进行对,并应用t.test给他们。

使用apply之前的一个好主意是手动测试该功能,所以如果你得到这些奇怪的结果,你就会知道你的代码出了问题。

答案 1 :(得分:1)

因此第一行的双尾p值应为:

> g1 <- c(13.587632,  22.225083,  15.074230)
> g2 <- c(58.187465, 79, 82.287573)
> t.test(g1,g2)$p.value
[1] 0.01059583

在所有行中应用该函数(我在最后添加了新的p-val pval

> tt$pval <- apply(tt,1,function(x) t.test(x[1:3],x[4:6])$p.value)
> tt
   R1.HCC827  R2.HCC827  R3.HCC827 R1.nci.h1975 R2.nci.h1975 R3.nci.h1975   p.value        pval
1  13.587632  22.225083  15.074230    58.187465           79    82.287573 0.4391160 0.010595829
2   2.717526   1.778007   1.773439     1.763257            2     1.679338 0.4186339 0.477533387
3 203.814478 191.135711 232.320487   253.908939          263   263.656100 0.4904493 0.044883436
4  44.386264  45.339169  54.089884     3.526513            3     5.877684 0.3095634 0.002853154

也许是在函数中重复使用数据框名称(你不需要)?