【问题标题】:Multiple paired permutation t-tests using perm.t.test使用 perm.t.test 的多对排列 t 检验
【发布时间】:2021-08-16 11:34:48
【问题描述】:

我有一些实验数据可以用 R 分析,但我遇到了一个问题,经过几天的搜索,我找不到解决方案。

我需要对我的数据运行多个配对排列 t 检验。这是我的数据集的简化版本:

treat = c("C","C","C","C","C","C","C","C","C","C","C","C","C",
         "C","C","C","C","C","C","C","T","T","T","T","T","T",
         "T","T","T","T","T","T","T","T","T","T","T","T","T","T")
subj = c("B16","B17","B18","B19","B20","B16","B17","B18","B19",
        "B20","B16","B17","B18","B19","B20","B16","B17","B18",
        "B19","B20","B1","B2","B3","B4","B5","B1","B2","B3","B4"
        ,"B5","B1","B2","B3","B4","B5","B1","B2","B3","B4","B5")
t = c("T0","T0","T0","T0","T0","T1","T1","T1","T1","T1","T2",
      "T2","T2","T2","T2","T3","T3","T3","T3","T3","T0","T0",
      "T0","T0","T0","T1","T1","T1","T1","T1","T2","T2","T2",
      "T2","T2","T3","T3","T3","T3","T3")
exparat = c(0.11,0.27,0.04,0.47,-0.11,-0.05,-0.05,0.33,-0.11,
            0.47,-0.01,0.43,0.47,0.33,-0.11,-0.09,0.20,-0.11,
                0.47,0.33,0.19,0.02,0.33,0.47,-0.11,0.42,0.13,0.47,
                -0.11,0.33,0.42,0.19,-0.11,0.33,0.47,0.42,0.17,
                0.33,0.47,-0.11)

data = data.frame(treat, subj, t, exparat)

head(data)

  treat subj  t exparat
1     C  B16 T0    0.11
2     C  B17 T0    0.27
3     C  B18 T0    0.04
4     C  B19 T0    0.47
5     C  B20 T0   -0.11
6     C  B16 T1   -0.05

例如,我不得不说,我的响应变量 (respvar) 在每次治疗 (treat) 的独立时间 (t) 组合之间是否存在差异。如果我必须使用参数 t 检验,我会使用 dplyr 管道和函数 group_by:

stat.test <- data %>%
  group_by(treat) %>%
  t_test(exparat ~ t, paired = TRUE)

但我不能对置换 t 检验(perm.t.test,包:RVAideMemoire)做同样的事情,因为它只允许对具有两个级别的因子进行测试。而我的因子时间 (t) 有 4 个级别。一种解决方案是对每对时间 (t) 的数据进行子集化,如下所示:

perm.t.test(exparat~t,data = subset(data, t == "T1" | t == "T2"), nperm=999, paired = T)
perm.t.test(exparat~t,data = subset(data, t == "T1" | t == "T3"), nperm=999, paired = T)
perm.t.test(exparat~t,data = subset(data, t == "T2" | t == "T3"), nperm=999, paired = T)
perm.t.test(exparat~t,data = subset(data, t == "T1" | t == "T2"), nperm=999, paired = T)
perm.t.test(exparat~t,data = subset(data, t == "T1" | t == "T3"), nperm=999, paired = T)
perm.t.test(exparat~t,data = subset(data, t == "T2" | t == "T3"), nperm=999, paired = T)
    
#and so on

但这似乎是一种非常低效且耗时的方法。而在我的真实数据集中,我确实有更多的因子 t 级别,因此设置所有这些需要很长时间。

谁能帮我设置一个循环来执行此操作?

提前谢谢你。

【问题讨论】:

  • 你能解释一下你想要执行的 t 检验吗? t 检验仅比较两组,但您的预测变量中有 14 个水平。那么你想比较什么?
  • 我想在时间之间进行测试,例如 T1 与 T2、T2 与 T3、T3 与 T4 等等。我已经修改了帖子以澄清它。

标签: r dplyr permutation t-test


【解决方案1】:

您可以使用combn获取data$t值的所有组合。

combn(levels(data$t), 2, function(x) {
  perm.t.test(exparat~t,data = subset(data, t %in% x), nperm=999, paired = T)
}, simplify = FALSE) -> result

result

【讨论】:

  • 谢谢你,Ronak,但它似乎不起作用。我收到此错误:“perm.t.test.formula 中的错误(exparat ~ t, data = subset(data, t %in% x), : t is not a 2-levels factor”
  • 您好 Ronak,如果有帮助,我已经修改了帖子并添加了代码以重现我的数据集的简化版本。
  • 嗨 Valerio,如果我将您提供的数据与data = data.frame(treat, subj, t, exparat, stringsAsFactors = TRUE) 一起使用并使用MKinfer::perm.t.test,我不会收到任何错误。您是否在相同的数据上尝试过答案?
  • 对不起,我没有在评论中看到您的编辑。我在那里添加了一个答案。希望这会有所帮助。
  • 是的,这应该是可能的。我想你可以试试这样的 - by(data, data$treat, function(sub) combn(levels(sub$t), 2, function(x) { perm.t.test(exparat~t,data = subset(data, t %in% x), nperm=999, paired = T) }, simplify = FALSE))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多