函数`t.test()`在R中输入多个变量

时间:2018-02-21 06:14:24

标签: r function

我想知道是否有办法避免使用t.test() 3次来比较3个变量x1x2x3,而是使用{{1}一次输入任何两个变量一次?

例如,对于:t.test(),我现在正在使用:x1 = rnorm(20) ; x2 = rnorm(20) ; x3 = rnorm(20),但我可以只使用一次t.test(x1, x2) ; t.test(x1, x3) ; t.test(x2, x3)吗?

以下是我尝试过但没有成功的事情:

t.test()

4 个答案:

答案 0 :(得分:3)

与刚才cor上的问题类似,以下是处理成对计算的语法:

set.seed(21L)
x1 <- rnorm(20); x2 <- rnorm(20); x3 <- rnorm(20)

pcor <- function(...) {
    combn(list(...), 
        2,  
        function(y) cor(y[[1]], y[[2]]),
        simplify=FALSE)
}
pcor(x1, x2, x3)

pttest <- function(...) {
    combn(list(...), 
        2,  
        function(a) t.test(x=a[[1]], y=a[[2]]) #change this to whatever your want
        simplify=FALSE)
}
pttest(x1, x2, x3)

答案 1 :(得分:2)

我们可以使用pairwise.t.test

library(dplyr)
library(magrittr)
data(airquality)
airquality %>% 
    mutate(Month = factor(Month, labels = month.abb[5:9])) %>% 
    summarise(pval = list(pairwise.t.test(Ozone, Month, p.adj = "bonf")$p.value)) %>%
    pull(pval) %>%
    extract2(1)
#             May        Jun         Jul         Aug
#Jun 1.0000000000         NA          NA          NA
#Jul 0.0002931151 0.10225483          NA          NA
#Aug 0.0001949061 0.08312222 1.000000000          NA
#Sep 1.0000000000 1.00000000 0.006969712 0.004847635

使用OP的例子

pairwise.t.test(c(x1, x2, x3), rep(paste0("x", 1:3), each = 20), p.adj = "bonf")

#     Pairwise comparisons using t tests with pooled SD 

#data:  c(x1, x2, x3) and rep(paste0("x", 1:3), each = 20) 

#     x1    x2    
# x2 0.486 -    
# x3 1.000 0.095

数据

set.seed(24)
x1 <- rnorm(20) 
x2 <- rnorm(20) 
x3 <- rnorm(20)

答案 2 :(得分:1)

如果你想随机使用任何变量,试试这个:

wsdl.exe [path To Your WSDL File] //in visual studio command line

答案 3 :(得分:0)

通过使用成对t检验,必须调整alpha值。 Bonferroni校正通常用于农业,Holm有时用于医学。如果没有这样的纠正,就会产生比应有的更大的差异。