代码之家  ›  专栏  ›  技术社区  ›  Ryan D

在R中进行2样本t检验,重复

  •  0
  • Ryan D  · 技术社区  · 7 年前

    我在R中有一个数据帧名称R\u 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 回复  |  直到 7 年前
        1
  •  2
  •   Amar    7 年前

    您的代码不正确。我真的不明白为什么它不返回错误。本部分尤其是: 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 您正在告诉apply获取列。所以 function(x) 返回此值的等效值: x <- c(13.587632, 22.225083, 15.074230, 58.187465, 79, 82.287573) 这意味着您要将前三个值子集为 x【1:3】 然后是最后三个 x[4:6] 并应用 t.test 对他们来说。

    使用前的好主意 apply 就是手动测试函数,这样如果你得到像这样的奇怪结果,你就知道你的代码出了问题。

        2
  •  1
  •   mysteRious    7 年前

    因此,第一行的双尾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
    

    可能是函数中重复使用了数据帧名称(您不需要)?