执行双样本t检验并输出R中两组矩阵的t,p值

时间:2018-04-29 21:52:38

标签: r

我正在尝试像这样进行双样本t检验

enter image description here

wt1wt2wt3mut1mut2mut3是3x3矩阵。运行t检验后,我想获得t.statp.value矩阵,其中

t.stat[i,j] <- the t value from t.test(c(wt1[i,j],wt2[i,j],wt3[i,j]),c(mut1[i,j],mut2[i,j],mut3[i,j]))
p.value[i,j] <- the p-value from t.test(c(wt1[i,j],wt2[i,j],wt3[i,j]),c(mut1[i,j],mut2[i,j],mut3[i,j]))

ij表示行和列索引。

是否有一种有效的方法可以在没有循环的情况下实现这一目标?

非常感谢您的帮助,它的确有效!

现在我发现对角线方向的数据都是1,这会产生Error in t.test.default(c(wt1[x], wt2[x], wt3[x]), c(mut1[x], mut2[x], : data are essentially constant

为了传递这些错误,我想在N/At.stat中输出p.value。如果矩阵必须包含相同类型的值,则01可分别用于t.statp.value。似乎tryCatch可以完成这项工作,但我不确定如何使用sapply处理它?<​​/ p>

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以这样做:

test<- sapply(1:9, function(x) t.test(c(wt1[x], wt2[x], wt3[x]), 
                                      c(mut1[x], mut2[x], mut3[x])))
t.stat<- matrix(test["statistic", ], nrow = 3)
p.value<- matrix(test["p.value", ], nrow = 3)

对于问题的第二部分,我认为在tryCatch中使用sapply会有所帮助。不幸的是,我想不出预先分配test然后在使用tryCatch时创建2个矩阵的方法。为了做到这一点,我正在调整Aaron's answer.

t.stat<- matrix(sapply(1:9, function(x) 
                                  tryCatch({t.test(c(wt1[x], wt2[x], wt3[x]), 
                                                 c(mut1[x], mut2[x], mut3[x]))$statistic},
                             error = function(err) {return(NA)})), nrow = 3)

p.value<- matrix(sapply(1:9, function(x) 
                                  tryCatch({t.test(c(wt1[x], wt2[x], wt3[x]), 
                                                 c(mut1[x], mut2[x], mut3[x]))$p.value},
                             error = function(err) {return(NA)})), nrow = 3)