生信喵 发表于 2025-4-2 14:42:04

fpkm2tpm

<h1>背景</h1>
<p>把TCGA的RNA-seq FPKM转换成TPM。</p>
<h1>应用场景</h1>
<p>RNA-seq基因表达量是FPKM,想转变成TPM。不仅限于TCGA数据。</p>
<p>FPKM跟TPM的计算都考虑了基因长度,因此相对于read count转TPM来说,从FPKM转TPM最方便快捷。</p>
<h1>下载TCGA RNA-seq的FPKM数据</h1>
<p>如果你自己的RNA-seq数据已经保存成 <code>easy_input.txt</code>的格式,就跳过这步,直接进入“输入数据”<br />
<code>easy_input.txt</code>文件源自改版前的tcgabiolinks下载的 workflow.type = &quot;HTSeq - FPKM&quot; 。仅作此次笔记fpkm2tpm演示用。</p>
<p>新版本直接下载count或tpm即可后续使用。参考:<br />
<a href="https://bioinfoer.com/forum.php?mod=viewthread&amp;tid=548&amp;extra=page%3D1">https://bioinfoer.com/forum.php?mod=viewthread&amp;tid=548&amp;extra=page%3D1</a></p>
<h1>输入数据</h1>
<p>第一列是基因ID,第一行是sample ID。</p>
<p>一个单元格内是一个基因在一个sample中的read count。</p>
<pre><code class="language-{r}">expMatrix&lt;-read.table(&quot;easy_input.txt&quot;,header = T,row.names = 1)
#查看前三个基因的FPKM值
expMatrix
</code></pre>
<h1>FPKM转TPM</h1>
<p>rsem作者Bo Li的文字描述:<br />
https://groups.google.com/forum/#!topic/rsem-users/uajT7gnTj-0</p>
<p><code>It is very easy to convert FPKM/RPKMs to TPMs. You first normalize your FPKMs from all genes so that their sum is equal to 1. Then you product 1e6 to each normalized value and you will obtain TPMs. </code></p>
<p>先写个函数</p>
<pre><code class="language-{r}">fpkmToTpm &lt;- function(fpkm)
{
    exp(log(fpkm) - log(sum(fpkm)) + log(1e6))
}
</code></pre>
<p>计算TPM值,保存到tpms里</p>
<pre><code class="language-{r}">tpms &lt;- apply(expMatrix,2,fpkmToTpm)

#查看前三个基因的TPM值
tpms

#检查一下,是不是每列的总和都是1M
colSums(tpms)

#把TPM值保存到文件
write.table(tpms,&quot;TCGA_FPKM2TPM.genes.txt&quot;,quote = F)
</code></pre>
页: [1]
查看完整版本: fpkm2tpm