【问题标题】:Performing a 2 sample t test in R with replicates在 R 中执行 2 个样本 t 检验并进行重复
【发布时间】:2018-04-17 00:35:59
【问题描述】:

我在 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 值只有 0.4。

我觉得我在这里遗漏了一些非常明显的东西,但我一直在努力解决它的时间比我想要的要长得多。任何帮助将不胜感激。

【问题讨论】:

  • 寻求帮助时,您应该包含一个simple reproducible 示例,其中包含可用于测试和验证可能解决方案的示例输入和所需输出。您是否尝试使用 dplyr::filter 或 stats::filter 或 base::Filter?你加载了什么?
  • 这是一项研究设计,需要与 t 检验不同的东西。您需要统计建议。 (有了明智的计划后,您应该学习基本的 R 编码并通过基本示例了解括号是用于函数调用,而不是用于索引。)

标签: r statistics apply


【解决方案1】:

您的代码不正确。我实际上不明白为什么它不返回错误。这部分特别是: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 &lt;- c(13.587632, 22.225083, 15.074230, 58.187465, 79, 82.287573),这意味着您希望将前三个值由x[1:3] 子集,然后是最后三个x[4:6] 并将t.test 应用于它们。

使用apply 之前的一个好主意是手动测试该函数,这样如果您确实得到类似这样的奇怪结果,您就知道您的代码出了问题。

【讨论】:

    【解决方案2】:

    所以第一行的双尾 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
    

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

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 2020-06-25
      • 2018-10-09
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2015-09-17
      相关资源
      最近更新 更多