我试图比较GOstats的两个结果列表。这样做的原因是我做了一个蛋白质组学实验,我们在其中建立了一个新的样品制备方案,我现在想要表明,使用这种新方法,我们不会富集/消耗某些蛋白质/蛋白质功能。显而易见的是,比较蛋白质列表并检查重叠并不是很有说服力,因为蛋白质组中存在冗余,即蛋白质X在两组中不一定具有相同的ID,而且,两组都包含不同数量的条目。所以我想做一个GO浓缩分析来检查某个类别是否在一个列表中被丰富而另一个列表是合适的。
所以现在我有两组的清单,我想做一个简单的统计测试来比较GO术语GO术语。由于这是一个基于计数的列表,我想使用GTest(或Chi square)。但由于输入列表具有不同的大小,我自然期望较小的数据集(GO.list.1)中的每个GO项的计数与较大的列表(GO.list.2)相比较少,这意味着简单的GTest:< / p>
>GO.list<-merge(GO.list.1, GO.list.2, by=2, all=F)
>colnames(GO.list)
[1] "GOMFID" "Pvalue.x" "OddsRatio.x" "ExpCount.x" "Count.x" "Size.x"
[7] "Term.x" "test.x" "ontology.x" "subset.x" "Pvalue.y" "OddsRatio.y"
[13] "ExpCount.y" "Count.y" "Size.y" "Term.y" "test.y" "ontology.y"
[19] "subset.y"
>GO.list$pvalue<-sapply(1:nrow(GO.list),
function(i) GTest(x=as.numeric(unlist(GO.list[i,c(5,14)]))))$pvalue)
会使我的结果偏向,因为它假设的比例相等。
由于GOstats结果文件为您提供了所有类型的信息(基于输入数据),我认为我会使用这些信息来计算我的预期比例。我现在的第一个想法是将每个GO术语的计数标准化为GOstats结果文件中给出的ExpCounts的相对比例,即合并结果文件的第4和第13列。
>GO.list<-merge(GO.list.1, GO.list.2, by=2, all=F)
>colnames(GO.list)
[1] "GOMFID" "Pvalue.x" "OddsRatio.x" "ExpCount.x" "Count.x" "Size.x"
[7] "Term.x" "test.x" "ontology.x" "subset.x" "Pvalue.y" "OddsRatio.y"
[13] "ExpCount.y" "Count.y" "Size.y" "Term.y" "test.y" "ontology.y"
[19] "subset.y"
>p1<-GO.list$ExpCount.x/(GO.list$ExpCount.y+GO.list$ExpCount.x)
>p2<-GO.list$ExpCount.y/(GO.list$ExpCount.y+GO.list$ExpCount.x)
>GO.list$pvalue<-sapply(1:nrow(GO.list),
function(i) GTest(x=as.numeric(unlist(GO.list[i,c(5,14)]))), p=c(p1,p2))$pvalue)
但我不认为这是正确的方法,因为如果我在合并列表上运行GOstats(即将我的两个蛋白质合并到put列表中),那么ExpCounts(有些预期)不是总和两个输入列表。
所以我想知道我是否可以使用Count列作为计算预期比例的代理:
>GO.list<-merge(GO.list.1, GO.list.2, by=2, all=F)
>colnames(GO.list)
[1] "GOMFID" "Pvalue.x" "OddsRatio.x" "ExpCount.x" "Count.x" "Size.x"
[7] "Term.x" "test.x" "ontology.x" "subset.x" "Pvalue.y" "OddsRatio.y"
[13] "ExpCount.y" "Count.y" "Size.y" "Term.y" "test.y" "ontology.y"
[19] "subset.y"
>p1<-((sum(GO.list$Count.x)/sum(GO.list$Count.y))*0.5)/(((sum(GO.list$Count.x)/sum(GO.list$Count.y))*0.5)+0.5)
>p2<-((sum(GO.list$Count.y)/sum(GO.list$Count.x))*0.5)/(((sum(GO.list$Count.y)/sum(GO.list$Count.x))*0.5)+0.5)
#in my case: p1: 0.4176183
#p2: 0.5823817
>GO.list$pvalue<-sapply(1:nrow(GO.list),
function(i) GTest(x=as.numeric(unlist(GO.list[i,c(5,14)]))), p=c(p1,p2))$pvalue)
如果这是正确的,或者我应该做一些完全不同的事情,是否有人有任何建议?
干杯
斯文