我对R还是很陌生,需要一些帮助来完成我想要的分析(我在GraphPad Prism中一直在进行的分析,但这不能处理大型数据集)。我有一个这样的数据框(简化):
Gene Seq RBP Sites.length
1 Short A 0.26
1 Short B 0.13
1 Short C 0.65
1 Long A 0.00
1 Long B 0.39
1 Long C 1.82
2 Short A 0.13
2 Short B 0.00
2 Short C 0.00
2 Long A 0.89
...etc...
Run Code Online (Sandbox Code Playgroud)
我想知道每个RBP的“短”序列和“长”序列的平均“ Sites.length”值之间是否存在显着差异。我已经执行了方差分析和TukeyHSD:
> aov_migr <- aov (Sites.length ~ Seq * RBP, data = my_data)
> migr_hsd <- TukeyHSD (aov_migr)
Run Code Online (Sandbox Code Playgroud)
结果如下:
> summary(aov_migr)
Df Sum Sq Mean Sq F value Pr(>F)
Seq 1 0.03 0.031 0.434 0.51
RBP 34 206.86 6.084 86.264 <2e-16 ***
Seq:RBP 34 0.84 0.025 0.351 1.00
Residuals 910 64.18 0.071
> migr_hsd
diff lwr upr p adj
Short:A-Long:A -0.012 -0.430 0.406 1
Long:B-Long:A -0.039 -.0.457 0.379 1
Short:B-Long:A -0.043 -0.460 0.375 1
Long:C-Long:A 0.556 0.138 0.974 8.909e-05
...etc...
Run Code Online (Sandbox Code Playgroud)
问题是我需要TukeyHSD仅比较同一RBP的“长”和“短”(即,仅长:A v短:A,长:B v短:B等),因为其他比较无意义。将它们相互比较会增加调整后的p值,因为它正在校正我不希望执行的无意义的比较。
是否有办法告诉TukeyHSD,每个RBP的数据应具有“长”和“短”分组/仅比较同一RBP的“长”和“短”?
还是有另一个测试可以做到这一点?
更新:我已经尝试了许多其他测试以查看是否可以从R-lme,manova,HSD.test(agricolae),glht(multcomp),因子图,SidakSD,Sidak,重复测量方差分析(带有将基因,Seq和RBP设置为因子):
RM_aov <- aov(Sites.length ~ Seq * RBP + Error(Gene), data = mydata)
Run Code Online (Sandbox Code Playgroud)
但是没有什么可以复制分析,因此我需要使用Graphpad Prism无法处理的较大数据集来重复此分析。最接近的是aov / TukeyHSD(上述问题除外)和带t.test的for循环(如下所述;但是Prism分析中的一个比较给出了显着的结果,与此进行的所有比较都没有显着性):
# separate long and short into separate data frames where the column headers are the RBP names and each row is the Sites.length for a Gene
result <- data.frame()
for (rbp in colnames (short)) {
test.result <- t.test (long [, rbp] - short [, rbp])
result [rbp, 'p'] <- test.result$p.value
}
result$p.adjusted <- p.adjust (result$p, method="bonferroni")
Run Code Online (Sandbox Code Playgroud)
我执行的Graphpad Prism分析是:
重复测量双向ANOVA(告诉给定基因的'long'和'short'值匹配)
Sidak的多重比较测试(但Bonferroni和Holm-Sidak多重比较测试的显着比较也很重要)。
有人可以帮忙吗?