【问题标题】:t.test for all combinations of a grouping factor first by subsettingt.首先通过子集测试分组因子的所有组合
【发布时间】:2016-09-26 20:10:40
【问题描述】:

我正在尝试对我的分组因素的所有组合进行 t.test,首先仅根据另一列的选择标准选择和子集数据。

我的数据结构: str(我的数据)

'data.frame':   240 obs. of  6 variables:
 $ Group   : chr  "G1" "G1" "G1" "G1" ...
 $ Category: chr  "Cat1" "Cat1" "Cat1" "Cat1" ...
 $ Subgroup: chr  "SG1" "SG1" "SG1" "SG1" ...
 $ Score   : num  0.156 0.131 0.092 0.319 0.179 ...
 $ SD      : num  0.0768 0.0768 0.0768 0.0768 0.0768 ...
 $ SE      : num  0.0172 0.0172 0.0172 0.0172 0.0172 ...

Group 列中有三个组:G1G2G3
我在Category 列中有四个类别:Cat1Cat2Cat3Cat4
我有 12 个子组:SG1SG2,直到 SG12

目前,我首先通过根据组 ID 对数据进行子集化,为子组名称创建所有组合的列表,因此在本示例中为 G1 和 G3:

combinations <- combn(unique(mydata[mydata$Group %in% c("G1", "G3"),]$Subgroup),2, simplify = FALSE)

然后对这些组合中的每一个进行 t.test,referring to the answer here

results <- lapply(seq_along(combinations), function (n) {
  mydatatemp <- mydata[rownames(mydata$Subgroup) %in% unlist(combinations[n]),]
  result <- t.test(mydatatemp[,1], mydatatemp[,2], alternative="two.sided", var.equal=TRUE)
  return(result)})
results

我得到的错误如下:

Error in t.test.default(mydatatemp[, 1], mydatatemp[, 2], alternative = "two.sided",  : 
  not enough 'x' observations In addition: Warning message:
In mean.default(x) : argument is not numeric or logical: returning NA

有没有更有效的方法来做到这一点?否则,如何纠正这个错误?

更新

其实问题是如何调用t.test公式中Score列的值?

【问题讨论】:

  • @coffeinjunky 不,这些组的大小相同,完全相同。
  • @coffeinjunky 是的,我认为这不是问题所在。问题出在公式上,有问题,我找不到。
  • @coffeinjunky 我用另一个软件试过,t 检验适用于相同的数据。但我想在 R 中做到这一点
  • @coffeinjunky 我不明白你的意思,你能在答案中发表你的评论并提供一个示例代码吗?谢谢

标签: r


【解决方案1】:

解决 cmets 中的讨论:如果问题出在某个子组中,那么以下内容可能有助于确定是哪一个:

首先,让我们重新创建错误:

smalln <- data.frame(a=1, b=2)
t.test(smalln$a, smalln$b)
> Error in t.test.default(smalln$a, smalln$b) : not enough 'x' observations

好的,我们可以重新创建错误。现在,让我们在它中断其他调用(例如执行它的 sapply 调用)之前捕获它:

failproof.t <- failwith(default="I need coffee", t.test, quiet = T)
failproof.t(smalln$a, smalln$b)
[1] "I need coffee"

如果您在调用sapply 时使用failproof.tsapply 将执行所有测试直到结束。通常,当生成错误时,您的代码将停止。使用此方法,它仍然可以继续工作,并且会吐出预定义的默认值而不是错误消息。使用这种方法,您将能够查看您的results 列表,以查看发生错误的组组合。

【讨论】:

    【解决方案2】:

    您的代码应如下所示:

    results <- lapply(seq_along(combinations), function (n) {
      mydatatemp <- mydata[with(mydata, Subgroup %in% unlist(combinations2[n]) & Group %in% c("G1", "G3")),]
      result <- t.test(mydatatemp[
                       mydatatemp$Subgroup == sapply(combinations[n], "[",1),4],
                       mydatatemp[mydatatemp$Subgroup == sapply(combinations[n], "[", 2),4],
                       alternative="two.sided", var.equal=TRUE)
                 return(result)})
    results
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 2021-01-26
      • 2015-04-05
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      相关资源
      最近更新 更多