我有一个名为“ 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软件包,但似乎无法弄清楚。任何帮助,将不胜感激。
答案 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