R 数据子集内的方差分析
我的数据集由3个时间点上记录的基因表达值组成 我正在尝试应用一个带有tukey校正的方差分析测试来寻找一个基因在不同时间点上的差异表达。因此,对于每个基因,我希望进行如下比较: 基因a时间点1对2 基因a时间点2对3 基因a时间点3对1 我的数据格式如下:R 数据子集内的方差分析,r,statistics,subset,anova,R,Statistics,Subset,Anova,我的数据集由3个时间点上记录的基因表达值组成 我正在尝试应用一个带有tukey校正的方差分析测试来寻找一个基因在不同时间点上的差异表达。因此,对于每个基因,我希望进行如下比较: 基因a时间点1对2 基因a时间点2对3 基因a时间点3对1 我的数据格式如下: > head(rf) gene expn timepoint rep 2 EG620009 // EG620009 8.428851 x0hr 0 3
> head(rf)
gene expn timepoint rep
2 EG620009 // EG620009 8.428851 x0hr 0
3 LYPLA1 10.386500 x0hr 0
21 EG620009 // EG620009 8.582346 x0hr 1
31 LYPLA1 10.379710 x0hr 1
22 EG620009 // EG620009 8.566248 x0hr 2
32 LYPLA1 10.399080 x0hr 2
> tail(rf)
gene expn timepoint rep
23 EG620009 // EG620009 8.561409 x24hr 0
33 LYPLA1 10.233400 x24hr 0
24 EG620009 // EG620009 8.750639 x24hr 1
34 LYPLA1 10.023780 x24hr 1
25 EG620009 // EG620009 8.560267 x24hr 2
35 LYPLA1 10.025980 x24hr 2
如果我要做:
TukeyHSD(aov(rf$expn ~ rf$timepoint * rf$gene))
这会让我比较所有基因的每个时间点
包括比较,例如
基因a时间点1与基因b时间点2
我一直在努力研究如何将aov函数应用于按基因划分的数据子集。我定义了一个函数,该函数将p值作为输出,并尝试使用下面的by函数将其分别应用于每个基因
> gene.aov = function(x) {TukeyHSD(aov(expn ~ timepoint, data = x))}
> aov.pval = function(y) {y$timepoint[,4]}
> gene.pval = function(z) {aov.pval(gene.aov(z))}
> pvals = by(rf$expn,list(rf$gene),gene.pval)
> Error in eval(predvars, data, env) :
numeric 'envir' arg not of length one
有没有任何提示说明为什么这不起作用?或者我应该以完全不同的方式来处理这个问题?
谢谢 它不起作用,因为
by
希望它的第一个参数是data.frame或matrix,您要传递的是rf$exp
,它是一个数值
向量。您可以这样做,它会很好地工作(为了可读性,我放弃了多个函数)
by(rf, rf$gene, function(x) {TukeyHSD(aov(expn ~ timepoint, data = x))}, simplify = F)
rf$gene: EG620009
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = expn ~ timepoint, data = x)
$timepoint
diff lwr upr p adj
x24hr-x0hr 0.09829 -0.123391 0.319971 0.2857424
---------------------------------------------------------------------------
rf$gene: LYPLA1
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = expn ~ timepoint, data = x)
$timepoint
diff lwr upr p adj
x24hr-x0hr -0.2940433 -0.4876756 -0.100411 0.0135193