通过列索引和使用apply或loop在R中进行t.test
有没有一种方法可以通过使用列作为索引在R中进行多个t测试? 我想通过索引x$Cross到1F,对x$savity进行t检验。因此,将1M、2M等与1F进行比较。我知道我可以单独做这件事,但有没有办法做一个循环或应用于此? 以下是数据通过列索引和使用apply或loop在R中进行t.test,r,for-loop,statistics,apply,R,For Loop,Statistics,Apply,有没有一种方法可以通过使用列作为索引在R中进行多个t测试? 我想通过索引x$Cross到1F,对x$savity进行t检验。因此,将1M、2M等与1F进行比较。我知道我可以单独做这件事,但有没有办法做一个循环或应用于此? 以下是数据 X; Cross Rep Block Viability 1F 1 1 0.8333333 1F 2 1 0.8333333 1F 3 1 0.8 1M 1 1 0.8333333 1M 2 1 0.866
X;
Cross Rep Block Viability
1F 1 1 0.8333333
1F 2 1 0.8333333
1F 3 1 0.8
1M 1 1 0.8333333
1M 2 1 0.8666667
1M 3 1 1
2M 1 1 0.9333333
2M 2 1 0.8666667
2M 3 1 0.8333333
3M 1 1 0.9333333
3M 2 1 0.9
3M 3 1 0.9
4M 1 1 0.8333333
4M 2 1 0.9666667
4M 3 1 0.9333333
5M 1 1 0.9666667
5M 2 1 0.9666667
5M 3 1 0.9
我们可以使用任何一个分组操作
library(data.table)
setDT(X)[, t.test(Viability)$p.value, by = Cross]
# Cross V1
#1: 1F 0.0001825647
#2: 1M 0.0031854465
#3: 2M 0.0011197313
#4: 3M 0.0001486875
#5: 4M 0.0019277856
#6: 5M 0.0005531744
我们可以对更新后的问题进行pairwise.t.test
res <- with(X, pairwise.t.test(Viability, Cross))
res$p.value
# 1F 1M 2M 3M 4M
# 1M 1.0000000 NA NA NA NA
# 2M 1.0000000 1 NA NA NA
# 3M 0.9260886 1 1 NA NA
# 4M 0.9260886 1 1 1 NA
# 5M 0.2501720 1 1 1 1
使用pairwise.t.test
with(X, pairwise.t.test(Viability, Cross, p.adj='none',
paired=FALSE, pool.sd=FALSE))$p.value
# 1F 1M 2M 3M 4M
#1M 0.263693796 NA NA NA NA
#...
注意:仍然存在一些舍入差异(如果可以的话)很抱歉,这不适用于我需要的内容,但请参见新编辑。基于这个答案,我还不够清楚。@Akrun为什么我在使用你的方法时得到不同的p值,而不是单独使用它们?即,当我取所有三个1F值(生存能力)并与所有1M值进行比较时。我用这个etDT(Nicdata)[,pairwise.t.test(Viability,Cross,p.adj=“none”,paired=FALSE)]得到了0.102的p值,但当我做一个正常的t.test时,我得到了p值=0.2099。@Genetics有一个多重比较的调整@akrun,我看到了,但我没有关闭这个p.adj=“none”?这很有效,谢谢。在这一点上,四舍五入是由于一个简单的两样本t检验与韦尔奇t检验。这是可以解释的。干杯
with(X, pairwise.t.test(Viability, Cross, p.adj='none',
paired=FALSE, pool.sd=FALSE))$p.value
# 1F 1M 2M 3M 4M
#1M 0.263693796 NA NA NA NA
#...