<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>生信菜鸟团 &#187; 超几何分布</title>
	<atom:link href="http://www.bio-info-trainee.com/tag/%e8%b6%85%e5%87%a0%e4%bd%95%e5%88%86%e5%b8%83/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bio-info-trainee.com</link>
	<description>欢迎去论坛biotrainee.com留言参与讨论，或者关注同名微信公众号biotrainee</description>
	<lastBuildDate>Sat, 28 Jun 2025 14:30:13 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.33</generator>
	<item>
		<title>用超几何分布检验做富集分析</title>
		<link>http://www.bio-info-trainee.com/1225.html</link>
		<comments>http://www.bio-info-trainee.com/1225.html#comments</comments>
		<pubDate>Tue, 15 Dec 2015 13:07:09 +0000</pubDate>
		<dc:creator><![CDATA[ulwvfje]]></dc:creator>
				<category><![CDATA[R]]></category>
		<category><![CDATA[杂谈-随笔]]></category>
		<category><![CDATA[富集分析]]></category>
		<category><![CDATA[统计]]></category>
		<category><![CDATA[超几何分布]]></category>

		<guid isPermaLink="false">http://www.bio-info-trainee.com/?p=1225</guid>
		<description><![CDATA[我们可以直接使用R的bioconductor里面的一个包，GOstats里面的函 &#8230; <a href="http://www.bio-info-trainee.com/1225.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>我们可以直接使用R的bioconductor里面的一个包，GOstats里面的函数来做超几何分布检验，看看每条pathway是否会富集</p>
<p>我们直接读取用limma包做好的差异分析结果</p>
<p>setwd("D:\\my_tutorial\\补\\用limma包对芯片数据做差异分析")</p>
<p>DEG=read.table("GSE63067.diffexp.NASH-normal.txt",stringsAsFactors = F)</p>
<p>View(DEG)</p>
<p><a href="http://www.bio-info-trainee.com/wp-content/uploads/2015/12/image0015.png"><img class="alignnone size-full wp-image-1227" src="http://www.bio-info-trainee.com/wp-content/uploads/2015/12/image0015.png" alt="image001" width="552" height="319" /></a></p>
<p>我们挑选logFC的绝对值大于0.5，并且P-value小雨0.05的基因作为差异基因，并且转换成entrezID</p>
<p>probeset=rownames(DEG[abs(DEG[,1])&gt;0.5 &amp; DEG[,4]&lt;0.05,])</p>
<p>library(hgu133plus2.db)</p>
<p>library(annotate)</p>
<p>platformDB="hgu133plus2.db";</p>
<p>EGID &lt;- as.numeric(lookUp(probeset, platformDB, "ENTREZID"))</p>
<p>length(unique(EGID))</p>
<p>#[1] 775</p>
<p>diff_gene_list &lt;- unique(EGID)</p>
<p>这样我们的到来775个差异基因的一个list</p>
<p>首先我们直接使用R的bioconductor里面的一个包，GOstats里面的函数来做超几何分布检验，看看每条pathway是否会富集</p>
<p>library(GOstats)</p>
<p>library(org.Hs.eg.db)</p>
<p>#then do kegg pathway enrichment !</p>
<p>hyperG.params = new("KEGGHyperGParams", geneIds=diff_gene_list, universeGeneIds=NULL, annotation="org.Hs.eg.db",</p>
<p>categoryName="KEGG", pvalueCutoff=1, testDirection = "over")</p>
<p>KEGG.hyperG.results = hyperGTest(hyperG.params);</p>
<p>htmlReport(KEGG.hyperG.results, file="kegg.enrichment.html", summary.args=list("htmlLinks"=TRUE))</p>
<p>结果如下：</p>
<p><a href="http://www.bio-info-trainee.com/wp-content/uploads/2015/12/image0025.png"><img class="alignnone size-full wp-image-1228" src="http://www.bio-info-trainee.com/wp-content/uploads/2015/12/image0025.png" alt="image002" width="858" height="395" /></a></p>
<p>但是这样我们就忽略了其中的原理，我们不知道这些数据是如何算出来的，只是由别人写好的包得到了结果罢了。</p>
<p>事实上，这个包的这个hyperGTest函数无法就是包装了一个超几何分布检验而已。</p>
<p>如果我们了解了其中的统计学原理，我们完全可以写成一个自建的函数来实现同样的功能。</p>
<div>超几何分布很简单，球分成黑白两色，数量已知，那么你随机抽有限个球，应该抽多少白球的问题！</div>
<div>公式就是 exp_count=n*M/N</div>
<div>然后你实际上抽了多少白球，就可以计算一个概率值！</div>
<div>换算成通路的富集概念就是，总共有多少基因，你的通路有多少基因，你的通路被抽中了多少基因（在差异基因里面属于你的通路的基因），这样的数据就足够算出上面表格里面所有的数据啦！</div>
<div></div>
<div><span style="font-family: Tahoma;">tmp=toTable(org.Hs.egPATH)</span></div>
<div>GeneID2Path=tapply(tmp[,2],as.factor(tmp[,1]),function(x) x)</div>
<div><span style="font-family: Tahoma;">Path2GeneID=tapply(tmp[,1],as.factor(tmp[,2]),function(x) x)</span></div>
<div><span style="font-family: Tahoma;">#phyper(k-1,M, N-M, n, lower.tail=F)</span></div>
<div><span style="font-family: Tahoma;">#n*M/N</span></div>
<div><span style="font-family: Tahoma;">diff_gene_has_path=intersect(diff_gene_list,names(GeneID2Path))</span></div>
<div><span style="font-family: Tahoma;">n=length(diff_gene_has_path) #321 # 这里算出你总共抽取了多少个球</span></div>
<div><span style="font-family: Tahoma;">N=length(GeneID2Path) #5870  ##这里算出你总共有多少个球<span style="color: #ff0000;"><strong><span style="text-decoration: underline;">（这里是错的，有多少个球取决于背景基因！一般是两万个）</span></strong></span></span></div>
<div><span style="font-family: Tahoma;">options(digits = 4)</span></div>
<div><span style="font-family: Tahoma;">for (i in names(Path2GeneID)){</span></div>
<div><span style="font-family: Tahoma;"> M=length(Path2GeneID[[i]])  ##这个算出你的所有的球里面，白球有多少个</span></div>
<div><span style="font-family: Tahoma;"> exp_count=n*M/N  ###这里算出你抽取的球里面应该多多少个是白色</span></div>
<div><span style="font-family: Tahoma;"> k=0         ##这个k是你实际上抽取了多少个白球</span></div>
<div><span style="font-family: Tahoma;"> for (j in diff_gene_has_path){</span></div>
<div><span style="font-family: Tahoma;"> if (i %in% GeneID2Path[[j]]) k=k+1</span></div>
<div><span style="font-family: Tahoma;"> }</span></div>
<div><span style="font-family: Tahoma;"> OddsRatio=k/exp_count</span></div>
<div><span style="font-family: Tahoma;"> p=phyper(k-1,M, N-M, n, lower.tail=F)  ##根据你实际上抽取的白球个数，就能算出富集概率啦！</span></div>
<div><span style="font-family: Tahoma;"> print(paste(i,p,OddsRatio,exp_count,k,M,sep="    "))</span></div>
<div><span style="font-family: Tahoma;">}</span></div>
<div>随便检查一下，就知道结果是一模一样的！</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bio-info-trainee.com/1225.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
