簡體   English   中英

如何使用相同的參考向量在R中執行多個成對的t.test?

[英]How can I perform multiple pairwise t.test in R using the same reference vector?

讓我們考慮數據幀中的以下向量:

ctrl <- rnorm(50)
x1 <- rnorm(30, mean=0.2)
x2 <- rnorm(100,mean=0.1)
x3 <- rnorm(100,mean=0.4)

x <- data.frame(data=c(ctrl,x1,x2,x3),
            Group=c(
              rep("ctrl", length(ctrl)),
              rep("x1", length(x1)),
              rep("x2", length(x2)),
              rep("x3", length(x3))) )

我知道我可以用

pairwise.t.test(x$data,
            x$Group,
            pool.sd=FALSE)

得到像成對的比較

 Pairwise comparisons using t tests with non-pooled SD 

data:  x$data and x$Group 

   ctrl    x1      x2     
x1 0.08522 -       -      
x2 0.99678 0.10469 -      
x3 0.00065 0.99678 2.8e-05

P value adjustment method: holm 

但是,我對矢量的每種可能組合都不感興趣。 我正在尋找一種方法,可以將ctrl矢量與其他所有矢量進行比較,並考慮到alpha膨脹。 我想避免

t.test((x$data[x$Group=='ctrl']), (x$data[x$Group=='x1']), var.equal=T)
t.test((x$data[x$Group=='ctrl']), (x$data[x$Group=='x2']), var.equal=T)
t.test((x$data[x$Group=='ctrl']), (x$data[x$Group=='x3']), var.equal=T)

然后對多個比較執行手動校正。 最好的方法是什么?

您可以使用p.adjust獲得對多個p值的Bonferroni調整。 您不應將不等長的向量捆綁到數據幀中,而應使用列表。

ctrl <- rnorm(50)
x1 <- rnorm(30, mean=0.2)
x2 <- rnorm(100,mean=0.1)
x3 <- rnorm(100,mean=0.4)

> lapply( list(x1,x2,x3), function(x) t.test(x,ctrl)$p.value)
[[1]]
[1] 0.2464039

[[2]]
[1] 0.8576423

[[3]]
[1] 0.0144275

> p.adjust( .Last.value)
[1] 0.4928077 0.8576423 0.0432825

@BondedDust的答案看起來不錯。 如果您確實需要使用數據框,則我提供了更為復雜的解決方案。

library(dplyr)

ctrl <- rnorm(50)
x1 <- rnorm(30, mean=0.2)
x2 <- rnorm(100,mean=0.1)
x3 <- rnorm(100,mean=0.4)

x <- data.frame(data=c(ctrl,x1,x2,x3),
                Group=c(
                  rep("ctrl", length(ctrl)),
                  rep("x1", length(x1)),
                  rep("x2", length(x2)),
                  rep("x3", length(x3))), stringsAsFactors = F )

# provide the combinations you want
# set1 with all from set2
set1 = c("ctrl")
set2 = c("x1","x2","x3")

dt_res =
      data.frame(expand.grid(set1,set2)) %>%  # create combinations 
        mutate(test_id = row_number()) %>%    # create a test id
        group_by(test_id) %>%              # group by test id, so everything from now on is performed for each test separately
        do({x_temp = x[(x$Group==.$Var1 | x$Group==.$Var2),]    # for each test id keep groups of interest
            x_temp = data.frame(x_temp)}) %>%
        do(test = t.test(data~Group, data=.))     # perform the test and save it

# you create a dataset that has the test id and a column with t.tests results as elements
dt_res

# Source: local data frame [3 x 2]
# Groups: <by row>
#   
#     test_id       test
#   1       1 <S3:htest>
#   2       2 <S3:htest>
#   3       3 <S3:htest>


# get all tests as a list
dt_res$test

# [[1]]
# 
# Welch Two Sample t-test
# 
# data:  data by Group
# t = -1.9776, df = 58.36, p-value = 0.05271
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
#   -0.894829477  0.005371207
# sample estimates:
#   mean in group ctrl   mean in group x1 
# -0.447213560       -0.002484425 
# 
# 
# [[2]]
# 
# Welch Two Sample t-test
# 
# data:  data by Group
# t = -2.3549, df = 100.68, p-value = 0.02047
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
#   -0.71174095 -0.06087081
# sample estimates:
#   mean in group ctrl   mean in group x2 
# -0.44721356        -0.06090768 
# 
# 
# [[3]]
# 
# Welch Two Sample t-test
# 
# data:  data by Group
# t = -5.4235, df = 101.12, p-value = 4.001e-07
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
#   -1.2171386 -0.5652189
# sample estimates:
#   mean in group ctrl   mean in group x3 
# -0.4472136          0.4439652

PS:使用p值和alpha校正總是很有趣。 如何解決這個問題有點哲學上的問題,有些人同意而另一些人不同意。 就我個人而言,我傾向於根據實驗后可能進行的所有比較來校正Alpha,因為您永遠不知道何時會回來調查其他對。 想象一下,如果將來人們決定您必須回過頭來將獲勝組(假設x1)與x2和x3進行比較,會發生什么。 您將專注於這些對,然后再次基於這些比較來更正Alpha。 但是總的來說,除了x2與x3之外,您還進行了所有可能的比較! 您可以編寫報告或發布對alpha校正應該更嚴格一些的發現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM