R:按组进行的多项独立t检验

时间:2018-09-20 01:11:47

标签: r dataframe statistics t-test

我有一个名为“ dat”的数据集,其中有5列:月;均值0; sd0; 1 sd1。看起来如下(但有数字):

每月平均值0 sd0平均值1 sd1

1
2
3
..
48

我想使用一个独立的(不成对的)t检验来比较1到48之间每个月的mean0和mean1。理想情况下,输出将放在另一个名为'dat1'的数据框中,其列用于: t统计量,自由度(DF);和p值。像这样:

月t统计量DF p值
1
2
3
..
48

我曾尝试使用dplyr和broom软件包,但似乎无法弄清楚。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

同时需要两个sd的n个值。 BSDA软件包中的tsum.test函数将帮助您进行t检验,而无需编写自己的函数。

以这种方式进行大量比较的可取性仍然存在更大的问题。 link提供了有关此信息。

有了这个警告,下面是处理任意数据的方法:

dat <- data.frame(m1=c(24,11,34),
                  sd1=c(1.3,4.2,2.3),
                  n1=c(30, 31, 30),
                  m2=c(18,8,22), 
                  sd2=c(1.8, 3.4, 1.8),
                  n2=c(30,31,30))

# user function to do t-test and return desired values
do.tsum <- function(x) {
    # tsum.test is quirky, so you have to break out each column's value
    results <- tsum.test(x[1],x[2],x[3],x[4],x[5],x[6],alternative='two.sided')
    return(c(results$statistic, results$parameters, results$p.value))
}

# use apply to do the tsum.test on each row (1 for rows, 2 for cols)
# then, transpose the resulting matrix and use the data.frame function
t.results <- data.frame(t(apply, 1, do.tsum))s

# unfortunately the p-value is returned without no column name (it returns 'm1')
# use the names function to change the third column name.
names(t.results)[3] <- 'p.value'

输出如下:

          t       df      p.value
1 14.800910 52.78253 1.982944e-20
2  3.091083 57.50678 3.072783e-03
3 22.504396 54.83298 2.277676e-29