R中的p值分布

时间:2013-08-21 12:44:17

标签: r data-visualization

我的基因具有以下形式的相应p值:

Gene   p-value
gene1  0.01 
gene2  0.02
gene3  0.06
gene4  0.05
gene5  0.09
gene6  0.01
gene7  0.05
gene8  0.09
gene9  0.01
gene10 0.06

我想创建一个框图,如下例所示:

enter image description here

而不是几个月,我希望这是基因的数量(基因的频率)。根据我所拥有的庞大数据集,x轴应该是属于特定p值类别(在y轴上)的基因数量。因此,y轴将是p值,从0.01到1。

我用过

boxplot(gene ~ p-value, col=rainbow(12))

但它不起作用。

1 个答案:

答案 0 :(得分:1)

我在这里使用了cutaggregate这两个函数。您可以在R控制台中运行?cut?aggregate来了解有关它们的更多信息。我们的想法是将您的数据框架中的基因和p值以及cut p值放入箱中。如果您想要更多或更少的垃圾箱,可以更改breaks功能中的cut参数。然后,您可以使用boxplot绘制其bin的p值分布。

我将xaxt=FALSE参数添加到boxplot,这样我们就可以定义自己的自定义轴 - 在这种情况下,是每个bin中的基因数量。我使用aggregate函数和length计算了基因数,然后添加了轴。

set.seed(1)
example <- data.frame(gene=sample(paste("gene",1:10),size=500,replace=TRUE),pval=sample(seq(0.01,1,0.01),500,replace=TRUE))
example$bin <- cut(example$pval,breaks=10)
boxplot(example$pval~example$bin,xaxt="n",ylab="p value",xlab="number of genes")
ngenes <- aggregate(example$gene,by=list("bin"=example$bin),length)
axis(side=1,labels=ngenes$x,at=1:10)

enter image description here