<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="/minkakaku/feed.xml" rel="self" type="application/atom+xml" /><link href="/minkakaku/" rel="alternate" type="text/html" /><updated>2025-06-13T16:08:57+08:00</updated><id>/minkakaku/feed.xml</id><title type="html">Hi!Bioinfo</title><subtitle>生物信息学学习笔记
</subtitle><author><name>Hongfan</name><email>hongfanst@outllok.com</email></author><entry><title type="html">RNA-seq质控</title><link href="/minkakaku/2025/06/13/RNA-seq%E8%B4%A8%E6%8E%A7.html" rel="alternate" type="text/html" title="RNA-seq质控" /><published>2025-06-13T00:00:00+08:00</published><updated>2025-06-13T00:00:00+08:00</updated><id>/minkakaku/2025/06/13/RNA-seq%E8%B4%A8%E6%8E%A7</id><content type="html" xml:base="/minkakaku/2025/06/13/RNA-seq%E8%B4%A8%E6%8E%A7.html"><![CDATA[<h1 id="rna-seq-qc">RNA-seq QC</h1>

<h2 id="rawdata质控">Rawdata质控</h2>

<table>
  <thead>
    <tr>
      <th>Parameters</th>
      <th>Description</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>CleanData(%)</td>
      <td> </td>
      <td>&gt;90%</td>
    </tr>
    <tr>
      <td>Adapter(%)</td>
      <td> </td>
      <td>&lt;6%</td>
    </tr>
    <tr>
      <td>LowQuality(%)</td>
      <td> </td>
      <td>&lt;10%</td>
    </tr>
    <tr>
      <td>polyA(%)</td>
      <td> </td>
      <td>&lt;0.01%</td>
    </tr>
    <tr>
      <td>N(%)</td>
      <td> </td>
      <td>&lt;10%</td>
    </tr>
    <tr>
      <td>AF_Q20(%)</td>
      <td> </td>
      <td>&gt;90%</td>
    </tr>
    <tr>
      <td>AF_Q30(%)</td>
      <td> </td>
      <td>&gt;80%</td>
    </tr>
    <tr>
      <td>sample rawdata(bp)</td>
      <td> </td>
      <td>&gt;5400000000</td>
    </tr>
    <tr>
      <td>ATCG pos|(i+1)-i|</td>
      <td> </td>
      <td>&lt;0.05</td>
    </tr>
    <tr>
      <td>pos i |A-T|(|C-G|)</td>
      <td> </td>
      <td>&lt;0.04</td>
    </tr>
    <tr>
      <td>Mapped_Reads(%)</td>
      <td> </td>
      <td>&lt;50%</td>
    </tr>
    <tr>
      <td>Total_Mapped(%)</td>
      <td>人鼠：参考基因组比对率低于85%给与警示；其他物种：参考基因组比对率低于60%给与警示</td>
      <td>&gt;80%</td>
    </tr>
    <tr>
      <td>Multiple_Mapped(%)</td>
      <td>Multiple map&gt;20%给与警示，阈值调整为35%</td>
      <td>&lt;35%</td>
    </tr>
    <tr>
      <td>Total_Mapped(%) max-min</td>
      <td> </td>
      <td>&lt;10</td>
    </tr>
    <tr>
      <td>sequenced_Total_Genes(%)</td>
      <td>基因检出率低于40%</td>
      <td>&gt;40%</td>
    </tr>
    <tr>
      <td>sequenced_Total_Genes(%)max-min</td>
      <td> </td>
      <td>&lt;10</td>
    </tr>
    <tr>
      <td>Annot [Pathway]</td>
      <td> </td>
      <td>&gt;8%</td>
    </tr>
    <tr>
      <td>Annot [Description]</td>
      <td> </td>
      <td>&gt;70%</td>
    </tr>
    <tr>
      <td>Annot [GO]</td>
      <td> </td>
      <td>&gt;35%</td>
    </tr>
    <tr>
      <td>pair all diff</td>
      <td> </td>
      <td>&gt;100</td>
    </tr>
    <tr>
      <td>newgene/allgene</td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td>pearson</td>
      <td>计算样本之间的pearson相关系数,对表达值采用 log2(TPM+1)处理，再计算相关系数</td>
      <td>&gt;0.8</td>
    </tr>
    <tr>
      <td>Top 3 gene max-min ratio</td>
      <td>样本间Top3基因count占总count的比例差值&gt;15%给与警示</td>
      <td>&gt;15%</td>
    </tr>
    <tr>
      <td>updown ratio</td>
      <td>上调基因数目/下调基因数目&lt;0.05或上调基因数目/下调基因数目&gt;20时给与警示</td>
      <td>&gt;=0.05, &lt;20</td>
    </tr>
    <tr>
      <td>AF_GC</td>
      <td>各个样本GC%含量差值&gt;4%给与警示</td>
      <td>&gt;4%</td>
    </tr>
    <tr>
      <td>rawdata</td>
      <td>每个样本 6 G数据，并考虑到生物学实验的不确定性，合同承诺最终各样本平均数据量不低于目标数据量的90%，每个样本数据量不低于目标数据量的70%，平均Q20≥90%，平均Q30≥80%。</td>
      <td>mean&gt;90%</td>
    </tr>
    <tr>
      <td>log10(median)</td>
      <td>比较同组样本中生物学重复样本的log10（FPKM）的中位数值，当生物学重复样本中log10（FPKM）的中位数极大值-极小值&gt;0.32时，给与警示</td>
      <td>&gt;0.32</td>
    </tr>
    <tr>
      <td>base pos</td>
      <td>碱基分布曲线中，A,G,C,T四条线，横坐标相邻位置的两个点差值不超过5%</td>
      <td>&gt;0.5%</td>
    </tr>
    <tr>
      <td>A-T</td>
      <td>碱基分布曲线中|A%-T%|&gt;4%给与警示（不考虑reads的前20bp）</td>
      <td>&gt;4%</td>
    </tr>
    <tr>
      <td>exon</td>
      <td>与exon比对率低于50%时给与警示</td>
      <td>&lt;50%</td>
    </tr>
    <tr>
      <td>C-G</td>
      <td>碱基分布曲线中|G%-C%|&gt;4%给与警示（不考虑reads的前20bp）</td>
      <td>&gt;4%</td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>]]></content><author><name>Hongfan</name><email>hongfanst@outllok.com</email></author><category term="RNA-seq" /><category term="QC" /><summary type="html"><![CDATA[RNA-seq QC Rawdata质控 Parameters Description Value CleanData(%)   &gt;90% Adapter(%)   &lt;6% LowQuality(%)   &lt;10% polyA(%)   &lt;0.01% N(%)   &lt;10% AF_Q20(%)   &gt;90% AF_Q30(%)   &gt;80% sample rawdata(bp)   &gt;5400000000 ATCG pos|(i+1)-i|   &lt;0.05 pos i |A-T|(|C-G|)   &lt;0.04 Mapped_Reads(%)   &lt;50% Total_Mapped(%) 人鼠：参考基因组比对率低于85%给与警示；其他物种：参考基因组比对率低于60%给与警示 &gt;80% Multiple_Mapped(%) Multiple map&gt;20%给与警示，阈值调整为35% &lt;35% Total_Mapped(%) max-min   &lt;10 sequenced_Total_Genes(%) 基因检出率低于40% &gt;40% sequenced_Total_Genes(%)max-min   &lt;10 Annot [Pathway]   &gt;8% Annot [Description]   &gt;70% Annot [GO]   &gt;35% pair all diff   &gt;100 newgene/allgene     pearson 计算样本之间的pearson相关系数,对表达值采用 log2(TPM+1)处理，再计算相关系数 &gt;0.8 Top 3 gene max-min ratio 样本间Top3基因count占总count的比例差值&gt;15%给与警示 &gt;15% updown ratio 上调基因数目/下调基因数目&lt;0.05或上调基因数目/下调基因数目&gt;20时给与警示 &gt;=0.05, &lt;20 AF_GC 各个样本GC%含量差值&gt;4%给与警示 &gt;4% rawdata 每个样本 6 G数据，并考虑到生物学实验的不确定性，合同承诺最终各样本平均数据量不低于目标数据量的90%，每个样本数据量不低于目标数据量的70%，平均Q20≥90%，平均Q30≥80%。 mean&gt;90% log10(median) 比较同组样本中生物学重复样本的log10（FPKM）的中位数值，当生物学重复样本中log10（FPKM）的中位数极大值-极小值&gt;0.32时，给与警示 &gt;0.32 base pos 碱基分布曲线中，A,G,C,T四条线，横坐标相邻位置的两个点差值不超过5% &gt;0.5% A-T 碱基分布曲线中|A%-T%|&gt;4%给与警示（不考虑reads的前20bp） &gt;4% exon 与exon比对率低于50%时给与警示 &lt;50% C-G 碱基分布曲线中|G%-C%|&gt;4%给与警示（不考虑reads的前20bp） &gt;4%                                                ]]></summary></entry><entry><title type="html">修正差异基因中上下调基因数目失衡</title><link href="/minkakaku/2025/06/13/%E4%BF%AE%E6%AD%A3%E5%B7%AE%E5%BC%82%E5%9F%BA%E5%9B%A0%E4%B8%AD%E4%B8%8A%E4%B8%8B%E8%B0%83%E5%9F%BA%E5%9B%A0%E6%95%B0%E7%9B%AE%E5%A4%B1%E8%A1%A1.html" rel="alternate" type="text/html" title="修正差异基因中上下调基因数目失衡" /><published>2025-06-13T00:00:00+08:00</published><updated>2025-06-13T00:00:00+08:00</updated><id>/minkakaku/2025/06/13/%E4%BF%AE%E6%AD%A3%E5%B7%AE%E5%BC%82%E5%9F%BA%E5%9B%A0%E4%B8%AD%E4%B8%8A%E4%B8%8B%E8%B0%83%E5%9F%BA%E5%9B%A0%E6%95%B0%E7%9B%AE%E5%A4%B1%E8%A1%A1</id><content type="html" xml:base="/minkakaku/2025/06/13/%E4%BF%AE%E6%AD%A3%E5%B7%AE%E5%BC%82%E5%9F%BA%E5%9B%A0%E4%B8%AD%E4%B8%8A%E4%B8%8B%E8%B0%83%E5%9F%BA%E5%9B%A0%E6%95%B0%E7%9B%AE%E5%A4%B1%E8%A1%A1.html"><![CDATA[<h1 id="修正差异基因中上下调基因数目失衡">修正差异基因中上下调基因数目失衡</h1>

<h3 id="1-实验设计"><strong>1. 实验设计</strong></h3>

<ul>
  <li><strong>固定实验组（EBVa）样本量</strong>：始终使用27例EBVaGC样本。</li>
  <li><strong>逐步增加对照组（EBVn）样本量</strong>：从50例逐步增加到250例（每次增加50例），每次随机抽取对应数量的EBVn样本，重复进行差异表达分析。</li>
  <li><strong>观察指标</strong>：记录不同样本量下DEGs的<strong>总数量</strong>及<strong>上下调比例</strong>。</li>
</ul>

<h3 id="2-验证逻辑"><strong>2. 验证逻辑</strong></h3>

<ul>
  <li><strong>假设1：若样本量差异导致不平衡</strong>
    <ul>
      <li>当EBVn样本量增加时，统计功效（检测差异基因的能力）会增强，可能检测到更多DEGs，且上下调比例可能趋于均衡。</li>
      <li>预期结果：上调基因数量随EBVn样本量增加而显著增加，上下调比例逐渐接近。</li>
    </ul>
  </li>
  <li><strong>假设2：若生物学本质导致不平衡</strong>
    <ul>
      <li>无论EBVn样本量如何变化，DEGs的上下调比例保持稳定（下调显著多于上调）。</li>
      <li>预期结果：即使EBVn样本量增加，DEGs数量及上下调比例仍无明显变化。</li>
    </ul>
  </li>
</ul>

<h3 id="3-代码设计">3. 代码设计</h3>

<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># sample distribution</span><span class="w">
</span><span class="n">index</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">seq</span><span class="p">(</span><span class="m">28</span><span class="p">,</span><span class="m">277</span><span class="p">)</span><span class="w">
</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">test</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">seq</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="m">5</span><span class="p">)){</span><span class="w">
  </span><span class="c1"># EBVn 50 50 .. 50 50</span><span class="w">
  </span><span class="c1"># 选小一点，这样可以把样本异质性凸显出来</span><span class="w">
  </span><span class="c1"># print(sample_size)</span><span class="w">
  </span><span class="n">sample_size</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">50</span><span class="w">
  </span><span class="n">cur_mat</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">EBV_dat_num</span><span class="p">[,</span><span class="nf">c</span><span class="p">(</span><span class="n">seq</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="m">27</span><span class="p">),</span><span class="n">sample</span><span class="p">(</span><span class="n">index</span><span class="p">,</span><span class="w"> </span><span class="n">sample_size</span><span class="p">))]</span><span class="w">
  </span><span class="n">degs_analysis_draw</span><span class="p">(</span><span class="n">cur_mat</span><span class="p">,</span><span class="w"> </span><span class="n">d</span><span class="p">)</span><span class="w">
  </span><span class="c1"># break</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1"># 散点图</span><span class="w">
</span><span class="n">num_degs</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">data.frame</span><span class="p">(</span><span class="w">
  </span><span class="n">down</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2939</span><span class="p">,</span><span class="m">2932</span><span class="p">,</span><span class="m">2996</span><span class="p">,</span><span class="m">3609</span><span class="p">,</span><span class="m">3396</span><span class="p">),</span><span class="w">
  </span><span class="n">up</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1199</span><span class="p">,</span><span class="m">1197</span><span class="p">,</span><span class="m">1217</span><span class="p">,</span><span class="m">1329</span><span class="p">,</span><span class="m">1234</span><span class="p">)</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="c1"># basic scatterplot</span><span class="w">
</span><span class="n">scatter_plot</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">ggplot</span><span class="p">(</span><span class="n">num_degs</span><span class="p">,</span><span class="w"> </span><span class="n">aes</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">down</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="o">=</span><span class="n">up</span><span class="p">))</span><span class="w"> </span><span class="o">+</span><span class="w"> 
  </span><span class="n">geom_point</span><span class="p">()</span><span class="w">
</span><span class="n">scatter_plot</span><span class="w">
</span></code></pre></div></div>

<p>` # sample distribution `</p>

<p><code class="language-plaintext highlighter-rouge">index &lt;- seq(28,277) for (test in seq(1,5)){  # EBVn 50 50 .. 50 50  # 选小一点，这样可以把样本异质性凸显出来  # print(sample_size)  sample_size &lt;- 50  cur_mat &lt;- EBV_dat_num[,c(seq(1,27),sample(index, sample_size))]  degs_analysis_draw(cur_mat, d)  # break } # 散点图 num_degs &lt;- data.frame(  down = c(2939,2932,2996,3609,3396),  up = c(1199,1197,1217,1329,1234) ) # basic scatterplot scatter_plot &lt;- ggplot(num_degs, aes(x=down, y=up)) +   geom_point() scatter_plot</code></p>

<h3 id="4-实际结果"><strong>4. 实际结果</strong></h3>

<p>通过抽样测试发现：</p>

<ul>
  <li>
    <p><strong>DEGs总数稳定</strong>：</p>

    <table>
      <thead>
        <tr>
          <th style="text-align: center">EBVn样本量</th>
          <th style="text-align: center">下调基因数</th>
          <th style="text-align: center">上调基因数</th>
          <th style="text-align: center">总DEGs数</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td style="text-align: center">50</td>
          <td style="text-align: center">3823</td>
          <td style="text-align: center">1357</td>
          <td style="text-align: center">5180</td>
        </tr>
        <tr>
          <td style="text-align: center">100</td>
          <td style="text-align: center">4005</td>
          <td style="text-align: center">1411</td>
          <td style="text-align: center">5416</td>
        </tr>
        <tr>
          <td style="text-align: center">150</td>
          <td style="text-align: center">4400</td>
          <td style="text-align: center">1355</td>
          <td style="text-align: center">5755</td>
        </tr>
        <tr>
          <td style="text-align: center">200</td>
          <td style="text-align: center">4320</td>
          <td style="text-align: center">1387</td>
          <td style="text-align: center">5707</td>
        </tr>
        <tr>
          <td style="text-align: center">250</td>
          <td style="text-align: center">4416</td>
          <td style="text-align: center">1340</td>
          <td style="text-align: center">5756</td>
        </tr>
      </tbody>
    </table>
  </li>
  <li>
    <p><strong>上下调比例始终失衡</strong>：</p>

    <ul>
      <li>下调基因占比稳定在 <strong>75%~80%</strong>，上调基因占比 <strong>20%~25%</strong>。</li>
      <li>即使EBVn样本量从50增至250，上调基因数量未显著增加，反而波动较小。</li>
    </ul>
  </li>
</ul>

<h3 id="5-关键结论"><strong>5. 关键结论</strong></h3>

<ul>
  <li>样本量差异不主导结果：
    <ul>
      <li>若技术因素（如样本量不足）是主因，EBVn样本量增加应显著提高检测能力，使更多潜在上调基因被识别，但实际结果未支持这一预期。</li>
    </ul>
  </li>
  <li>生物学机制更可能解释失衡：
    <ul>
      <li>下调基因占优的现象在不同样本量下均稳定存在，提示EBV感染可能通过<strong>表观沉默（如DNA甲基化）</strong>或<strong>病毒-宿主互作</strong>导致广泛基因抑制。</li>
    </ul>
  </li>
</ul>

<hr />

<h3 id="6-补充验证"><strong>6. 补充验证</strong></h3>

<ul>
  <li><strong>个体异质性测试</strong>：
固定EBVn样本量为50，多次随机抽取不同样本组合，发现上下调基因数量波动范围小（如下调基因数2900~3600），证明结果受个体差异影响有限。</li>
  <li><strong>火山图一致性</strong>：
不同样本量下，火山图的分布模式高度相似（大量基因集中于左侧“下调区”）。</li>
</ul>

<h3 id="7-总结">7. 总结</h3>

<ul>
  <li>在差异表达分析中，需通过抽样、批次校正等方法排除技术干扰。</li>
  <li>当技术因素被排除后，应优先从分子机制（如病毒效应、免疫编辑）中寻找答案。</li>
</ul>

<h1 id="2-高表达基因对差异分析的影响">2. 高表达基因对差异分析的影响</h1>

<h3 id="1-异常值检测">1. 异常值检测</h3>

<ul>
  <li>箱线图法（IQR）：若基因表达量超过Q3 + 1.5×IQR或低于Q1 - 1.5×IQR，可判定为异常值。</li>
  <li>Z-score法：计算基因表达量的Z-score（标准化值），超过±3的视为异常值。</li>
</ul>

<h3 id="2-实验设计">2. 实验设计</h3>

<ul>
  <li>假设1：实验批次导致的高表达
    <ul>
      <li>使用Combat来对基因进行批次效应的去除</li>
    </ul>
  </li>
  <li>假设2：Keep genes的高表达
    <ul>
      <li>使用 <strong>DESeq2</strong> 或 <strong>EdgeR</strong> 时，通过<code class="language-plaintext highlighter-rouge">lfcShrink</code>函数收缩log2倍数变化值，减少高表达基因对差异倍数的影响</li>
      <li>采用 <strong>VST（方差稳定化变换）</strong> 或 <strong>rlog（正则化对数变换）</strong> 替代原始计数，降低高表达基因的方差权重</li>
    </ul>
  </li>
</ul>]]></content><author><name>Hongfan</name><email>hongfanst@outllok.com</email></author><category term="RNA-seq" /><category term="QC" /><summary type="html"><![CDATA[修正差异基因中上下调基因数目失衡 1. 实验设计 固定实验组（EBVa）样本量：始终使用27例EBVaGC样本。 逐步增加对照组（EBVn）样本量：从50例逐步增加到250例（每次增加50例），每次随机抽取对应数量的EBVn样本，重复进行差异表达分析。 观察指标：记录不同样本量下DEGs的总数量及上下调比例。 2. 验证逻辑 假设1：若样本量差异导致不平衡 当EBVn样本量增加时，统计功效（检测差异基因的能力）会增强，可能检测到更多DEGs，且上下调比例可能趋于均衡。 预期结果：上调基因数量随EBVn样本量增加而显著增加，上下调比例逐渐接近。 假设2：若生物学本质导致不平衡 无论EBVn样本量如何变化，DEGs的上下调比例保持稳定（下调显著多于上调）。 预期结果：即使EBVn样本量增加，DEGs数量及上下调比例仍无明显变化。 3. 代码设计 # sample distribution index &lt;- seq(28,277) for (test in seq(1,5)){ # EBVn 50 50 .. 50 50 # 选小一点，这样可以把样本异质性凸显出来 # print(sample_size) sample_size &lt;- 50 cur_mat &lt;- EBV_dat_num[,c(seq(1,27),sample(index, sample_size))] degs_analysis_draw(cur_mat, d) # break } # 散点图 num_degs &lt;- data.frame( down = c(2939,2932,2996,3609,3396), up = c(1199,1197,1217,1329,1234) ) # basic scatterplot scatter_plot &lt;- ggplot(num_degs, aes(x=down, y=up)) + geom_point() scatter_plot ` # sample distribution ` index &lt;- seq(28,277) for (test in seq(1,5)){ # EBVn 50 50 .. 50 50 # 选小一点，这样可以把样本异质性凸显出来 # print(sample_size) sample_size &lt;- 50 cur_mat &lt;- EBV_dat_num[,c(seq(1,27),sample(index, sample_size))] degs_analysis_draw(cur_mat, d) # break } # 散点图 num_degs &lt;- data.frame( down = c(2939,2932,2996,3609,3396), up = c(1199,1197,1217,1329,1234) ) # basic scatterplot scatter_plot &lt;- ggplot(num_degs, aes(x=down, y=up)) + geom_point() scatter_plot 4. 实际结果 通过抽样测试发现： DEGs总数稳定： EBVn样本量 下调基因数 上调基因数 总DEGs数 50 3823 1357 5180 100 4005 1411 5416 150 4400 1355 5755 200 4320 1387 5707 250 4416 1340 5756 上下调比例始终失衡： 下调基因占比稳定在 75%~80%，上调基因占比 20%~25%。 即使EBVn样本量从50增至250，上调基因数量未显著增加，反而波动较小。 5. 关键结论 样本量差异不主导结果： 若技术因素（如样本量不足）是主因，EBVn样本量增加应显著提高检测能力，使更多潜在上调基因被识别，但实际结果未支持这一预期。 生物学机制更可能解释失衡： 下调基因占优的现象在不同样本量下均稳定存在，提示EBV感染可能通过表观沉默（如DNA甲基化）或病毒-宿主互作导致广泛基因抑制。 6. 补充验证 个体异质性测试： 固定EBVn样本量为50，多次随机抽取不同样本组合，发现上下调基因数量波动范围小（如下调基因数2900~3600），证明结果受个体差异影响有限。 火山图一致性： 不同样本量下，火山图的分布模式高度相似（大量基因集中于左侧“下调区”）。 7. 总结 在差异表达分析中，需通过抽样、批次校正等方法排除技术干扰。 当技术因素被排除后，应优先从分子机制（如病毒效应、免疫编辑）中寻找答案。 2. 高表达基因对差异分析的影响 1. 异常值检测 箱线图法（IQR）：若基因表达量超过Q3 + 1.5×IQR或低于Q1 - 1.5×IQR，可判定为异常值。 Z-score法：计算基因表达量的Z-score（标准化值），超过±3的视为异常值。 2. 实验设计 假设1：实验批次导致的高表达 使用Combat来对基因进行批次效应的去除 假设2：Keep genes的高表达 使用 DESeq2 或 EdgeR 时，通过lfcShrink函数收缩log2倍数变化值，减少高表达基因对差异倍数的影响 采用 VST（方差稳定化变换） 或 rlog（正则化对数变换） 替代原始计数，降低高表达基因的方差权重]]></summary></entry><entry><title type="html">PCA降维原理以及用R绘制PCA图</title><link href="/minkakaku/2024/12/23/PCA%E9%99%8D%E7%BB%B4%E5%8E%9F%E7%90%86%E4%BB%A5%E5%8F%8A%E7%94%A8R%E7%BB%98%E5%88%B6PCA%E5%9B%BE.html" rel="alternate" type="text/html" title="PCA降维原理以及用R绘制PCA图" /><published>2024-12-23T00:00:00+08:00</published><updated>2024-12-23T00:00:00+08:00</updated><id>/minkakaku/2024/12/23/PCA%E9%99%8D%E7%BB%B4%E5%8E%9F%E7%90%86%E4%BB%A5%E5%8F%8A%E7%94%A8R%E7%BB%98%E5%88%B6PCA%E5%9B%BE</id><content type="html" xml:base="/minkakaku/2024/12/23/PCA%E9%99%8D%E7%BB%B4%E5%8E%9F%E7%90%86%E4%BB%A5%E5%8F%8A%E7%94%A8R%E7%BB%98%E5%88%B6PCA%E5%9B%BE.html"><![CDATA[<h2 id="pca图的原理">PCA图的原理</h2>

<ol>
  <li>
    <p><strong>基本概念</strong>   - PCA（Principal Component Analysis）即主成分分析，是一种常用的数据分析方法。它的主要目的是通过线性变换将原始数据转换为一组新的变量，这些新变量被称为主成分。主成分是原始变量的线性组合，并且它们是按照方差大小依次排列的。   - 比如，假设有一组二维数据点$(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)$，PCA的目标就是找到两个新的变量（主成分），使得这些数据点在新的变量表示下能够最大程度地保留数据的方差信息。</p>
  </li>
  <li><strong>原理推导</strong>
    <ul>
      <li><strong>协方差矩阵</strong>
        <ul>
          <li>首先考虑数据的协方差矩阵。对于有 $m$ 个特征（变量）的数据集$X$（$n$个样本），其协方差矩阵$\Sigma$的元素$\sigma_{ij}$表示第$i$个特征和第$j$个特征之间的协方差，计算公式为$\sigma_{ij}=\frac{1}{n - 1}\sum_{k = 1}^{n}(x_{ki}-\overline{x}<em>i)(x</em>{kj}-\overline{x}_j) \(，其中\)$\overline{x}_i$$是第$i$个特征的均值。</li>
          <li>协方差矩阵是一个对称矩阵，它衡量了不同特征之间的相关性。例如，如果两个特征的协方差为正，表示它们正相关；协方差为负，表示负相关；协方差为0，表示不相关。</li>
        </ul>
      </li>
      <li><strong>特征值和特征向量</strong>
        <ul>
          <li>PCA的核心是求解协方差矩阵的特征值和特征向量。对于一个$m\times m$的协方差矩阵$\Sigma$，如果存在一个非零向量$v$和一个标量$\lambda$，使得$\Sigma v=\lambda v$，那么$\lambda$就是协方差矩阵的特征值，$v$就是对应的特征向量。</li>
          <li>特征向量代表了数据的方向，而特征值代表了数据在该方向上的方差大小。例如，较大的特征值对应的特征向量所指向的方向是数据方差较大的方向。</li>
        </ul>
      </li>
      <li><strong>主成分的选取</strong>
        <ul>
          <li>在求出协方差矩阵的所有特征值和特征向量后，将特征值从大到小排序。选择前$k$个最大特征值对应的特征向量，这些特征向量构成了一个$m\times k$ 的矩阵$W$。</li>
          <li>原始数据$X$（$n\times m$）通过线性变换$Y = XW$得到新的数据$Y$（$n\times k$），这里的$Y$就是数据在主成分空间中的表示。新的数据$Y$的每个维度（主成分）是相互正交（不相关）的，并且按照方差大小依次排列，前几个主成分包含了原始数据的大部分方差信息。</li>
        </ul>
      </li>
    </ul>
  </li>
  <li><strong>降维应用原理</strong>
    <ul>
      <li>假设原始数据有10个特征，但通过PCA分析发现，前3个主成分已经能够解释原始数据80%以上的方差。那么就可以将原始数据从10维降到3维。</li>
      <li>这是因为在实际应用中，高维数据可能存在很多冗余信息，通过PCA降维可以去除这些冗余，同时保留数据的主要结构信息。例如，在图像识别中，图像数据可能有很高的维度（很多像素点），PCA可以帮助提取图像的主要特征，减少后续处理的数据量，提高计算效率。</li>
    </ul>
  </li>
  <li><strong>可视化应用原理</strong>
    <ul>
      <li>当数据维度大于3时，很难直接可视化。但如果通过PCA将数据降到2维或3维，就可以将数据点绘制在平面或三维空间中。</li>
      <li>例如，在基因表达数据分析中，有成千上万个基因（特征），通过PCA将其降到2维或3维后，可以直观地观察不同样本（数据点）之间的关系，如不同疾病组和健康组样本是否能够在PCA图中明显区分开来，从而帮助分析疾病相关的基因表达模式。</li>
    </ul>
  </li>
</ol>

<h2 id="pca图在区分转录组样本时的简单判断依据">PCA图在区分转录组样本时的简单判断依据</h2>

<p>PCA图主要用来降维和分类，PC1 和 PC2 实际上是基于这些计算得到的特征向量所确定的新的坐标轴方向，它们分别代表了数据在不同维度上的最大方差方向，也就是能最大程度地区分样本的方向。通俗一点的理解就是，PCA 的作用就是找到一些新的坐标轴，将这些原本在高维空间的样本点投影到这个由 PC1 和 PC2 构成的二维平面上，这样我们就可以通过观察这些样本点在这个二维平面上的分布情况，比如它们之间的距离远近等，来判断样本之间的相似程度或者是否能分成不同的类别等。</p>

<p>所以问题来了：<strong>怎么利用PCA去除离群样本？PCA不好要不要重测？</strong></p>

<ol>
  <li>首先观察PC1和PC2占比多少，PC1+PC2之和最好大于80%比较有说服力。
    <ul>
      <li>情景1：PC1（大于90%）远大于PC2。这时候主要观察样本在PC1（横坐标的距离），PC1距离接近，但是PC2距离较远，样本之间的相似度还是比较接近的。反之，PC1距离较远，不管PC2多接近，样本之间的相似度可能是比较远的。</li>
      <li>情景2：PC1和PC2接近。通过两点之间的最短距离来判断相似度。</li>
    </ul>
  </li>
</ol>

<p><strong>注意注意！</strong>PCA只能用来相对地看样本之间的差异，如果没有对照，只有重复的三个处理样本，PCA可能会放大不重要的差异！</p>

<h2 id="在r中简单绘制pca基于prcomp">在R中简单绘制PCA（基于prcomp）</h2>

<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># 清除当前环境中的所有对象，确保没有残留变量干扰</span><span class="w">
</span><span class="n">rm</span><span class="p">(</span><span class="n">list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ls</span><span class="p">())</span><span class="w">

</span><span class="c1"># 加载必要的包</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">ggplot2</span><span class="p">)</span><span class="w">

</span><span class="c1"># 读取 data.csv 文件，添加错误处理</span><span class="w">
</span><span class="n">data</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">read.csv</span><span class="p">(</span><span class="s2">"data.csv"</span><span class="p">,</span><span class="w"> </span><span class="n">row.names</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">1</span><span class="p">)</span><span class="w">
</span><span class="n">head</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="w">
</span><span class="c1">#               wt1   wt2   wt3   ko1   ko2   ko3   kd1   kd2   kd3</span><span class="w">
</span><span class="c1"># MSTRG.10004 2.639 1.849 2.087 0.149 0.506 0.816 0.382 0.571 0.736</span><span class="w">
</span><span class="c1"># MSTRG.10008 1.420 1.341 1.350 0.564 0.390 0.682 0.248 0.540 0.637</span><span class="w">
</span><span class="c1"># MSTRG.10158 1.470 1.655 1.081 0.000 0.771 0.528 0.136 0.000 0.787</span><span class="w">
</span><span class="c1"># MSTRG.10160 0.699 0.611 0.483 1.014 0.724 0.478 0.219 0.307 0.580</span><span class="w">
</span><span class="c1"># MSTRG.10171 0.558 1.025 0.221 0.896 0.790 0.649 1.983 2.475 2.239</span><span class="w">
</span><span class="c1"># MSTRG.10179 0.565 0.545 0.573 1.392 1.717 1.368 1.334 0.831 1.215</span><span class="w">
</span><span class="n">data_t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">t</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="w">
</span><span class="nf">dim</span><span class="p">(</span><span class="n">data_t</span><span class="p">)</span><span class="w">

</span><span class="c1"># 过滤掉全为0的行和列</span><span class="w">
</span><span class="n">data_t</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">data_t</span><span class="p">[,</span><span class="n">colSums</span><span class="p">(</span><span class="n">data_t</span><span class="p">)</span><span class="o">&gt;</span><span class="m">0</span><span class="p">]</span><span class="w">
</span><span class="n">data_t</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">data_t</span><span class="p">[,</span><span class="n">apply</span><span class="p">(</span><span class="n">data_t</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="n">var</span><span class="p">)</span><span class="o">!=</span><span class="m">0</span><span class="p">]</span><span class="w">

</span><span class="c1"># 执行主成分分析</span><span class="w">
</span><span class="n">pca_result</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">prcomp</span><span class="p">(</span><span class="n">data_t</span><span class="p">,</span><span class="w"> </span><span class="n">scale.</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">TRUE</span><span class="p">)</span><span class="w">

</span><span class="c1"># 计算主成分的百分比解释方差</span><span class="w">
</span><span class="n">pca_percentage</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="p">(</span><span class="n">pca_result</span><span class="o">$</span><span class="n">sdev</span><span class="o">^</span><span class="m">2</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nf">sum</span><span class="p">(</span><span class="n">pca_result</span><span class="o">$</span><span class="n">sdev</span><span class="o">^</span><span class="m">2</span><span class="p">))</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="m">100</span><span class="w">

</span><span class="c1"># 可视化</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">factoextra</span><span class="p">)</span><span class="w">
</span><span class="n">fviz_eig</span><span class="p">(</span><span class="n">pca_result</span><span class="p">,</span><span class="w"> </span><span class="n">addlabels</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">TRUE</span><span class="p">)</span><span class="w">
</span><span class="n">fviz_pca_ind</span><span class="p">(</span><span class="n">pca_result</span><span class="p">,</span><span class="w">
  </span><span class="n">col.ind</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rownames</span><span class="p">(</span><span class="n">data_t</span><span class="p">),</span><span class="w"> </span><span class="n">mean.point</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">F</span><span class="p">,</span><span class="w">
  </span><span class="n">addEllipses</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">T</span><span class="p">,</span><span class="w"> </span><span class="n">legend.title</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Groups"</span><span class="w">
</span><span class="p">)</span><span class="w">

</span><span class="c1"># 或者ggplot2</span><span class="w">
</span><span class="n">p</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">ggplot</span><span class="p">(</span><span class="w">
  </span><span class="n">pca_result</span><span class="o">$</span><span class="n">x</span><span class="p">,</span><span class="w">
  </span><span class="n">aes</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PC1</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">PC2</span><span class="p">,</span><span class="w"> </span><span class="n">color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rownames</span><span class="p">(</span><span class="n">data_t</span><span class="p">))</span><span class="w">
</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w">
  </span><span class="n">geom_point</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w">
  </span><span class="n">labs</span><span class="p">(</span><span class="w">
    </span><span class="n">title</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"PCA Plot"</span><span class="p">,</span><span class="w">
    </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Principal Component 1"</span><span class="p">,</span><span class="w">
    </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Principal Component 2"</span><span class="p">,</span><span class="w">
    </span><span class="n">color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Group"</span><span class="w">
  </span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w">
  </span><span class="c1"># 添加坐标轴</span><span class="w">
  </span><span class="n">xlab</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"PC1 ("</span><span class="p">,</span><span class="w"> </span><span class="nf">round</span><span class="p">(</span><span class="n">pca_percentage</span><span class="p">[</span><span class="m">1</span><span class="p">],</span><span class="w"> </span><span class="m">2</span><span class="p">),</span><span class="w"> </span><span class="s2">"%)"</span><span class="p">))</span><span class="w"> </span><span class="o">+</span><span class="w">
  </span><span class="n">ylab</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"PC2 ("</span><span class="p">,</span><span class="w"> </span><span class="nf">round</span><span class="p">(</span><span class="n">pca_percentage</span><span class="p">[</span><span class="m">2</span><span class="p">],</span><span class="w"> </span><span class="m">2</span><span class="p">),</span><span class="w"> </span><span class="s2">"%)"</span><span class="p">))</span><span class="w">
</span><span class="n">p</span><span class="w">

</span></code></pre></div></div>]]></content><author><name>Hongfan</name><email>hongfanst@outllok.com</email></author><summary type="html"><![CDATA[PCA图的原理 基本概念 - PCA（Principal Component Analysis）即主成分分析，是一种常用的数据分析方法。它的主要目的是通过线性变换将原始数据转换为一组新的变量，这些新变量被称为主成分。主成分是原始变量的线性组合，并且它们是按照方差大小依次排列的。 - 比如，假设有一组二维数据点$(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)$，PCA的目标就是找到两个新的变量（主成分），使得这些数据点在新的变量表示下能够最大程度地保留数据的方差信息。 原理推导 协方差矩阵 首先考虑数据的协方差矩阵。对于有 $m$ 个特征（变量）的数据集$X$（$n$个样本），其协方差矩阵$\Sigma$的元素$\sigma_{ij}$表示第$i$个特征和第$j$个特征之间的协方差，计算公式为$\sigma_{ij}=\frac{1}{n - 1}\sum_{k = 1}^{n}(x_{ki}-\overline{x}i)(x{kj}-\overline{x}_j) \(，其中\)$\overline{x}_i$$是第$i$个特征的均值。 协方差矩阵是一个对称矩阵，它衡量了不同特征之间的相关性。例如，如果两个特征的协方差为正，表示它们正相关；协方差为负，表示负相关；协方差为0，表示不相关。 特征值和特征向量 PCA的核心是求解协方差矩阵的特征值和特征向量。对于一个$m\times m$的协方差矩阵$\Sigma$，如果存在一个非零向量$v$和一个标量$\lambda$，使得$\Sigma v=\lambda v$，那么$\lambda$就是协方差矩阵的特征值，$v$就是对应的特征向量。 特征向量代表了数据的方向，而特征值代表了数据在该方向上的方差大小。例如，较大的特征值对应的特征向量所指向的方向是数据方差较大的方向。 主成分的选取 在求出协方差矩阵的所有特征值和特征向量后，将特征值从大到小排序。选择前$k$个最大特征值对应的特征向量，这些特征向量构成了一个$m\times k$ 的矩阵$W$。 原始数据$X$（$n\times m$）通过线性变换$Y = XW$得到新的数据$Y$（$n\times k$），这里的$Y$就是数据在主成分空间中的表示。新的数据$Y$的每个维度（主成分）是相互正交（不相关）的，并且按照方差大小依次排列，前几个主成分包含了原始数据的大部分方差信息。 降维应用原理 假设原始数据有10个特征，但通过PCA分析发现，前3个主成分已经能够解释原始数据80%以上的方差。那么就可以将原始数据从10维降到3维。 这是因为在实际应用中，高维数据可能存在很多冗余信息，通过PCA降维可以去除这些冗余，同时保留数据的主要结构信息。例如，在图像识别中，图像数据可能有很高的维度（很多像素点），PCA可以帮助提取图像的主要特征，减少后续处理的数据量，提高计算效率。 可视化应用原理 当数据维度大于3时，很难直接可视化。但如果通过PCA将数据降到2维或3维，就可以将数据点绘制在平面或三维空间中。 例如，在基因表达数据分析中，有成千上万个基因（特征），通过PCA将其降到2维或3维后，可以直观地观察不同样本（数据点）之间的关系，如不同疾病组和健康组样本是否能够在PCA图中明显区分开来，从而帮助分析疾病相关的基因表达模式。 PCA图在区分转录组样本时的简单判断依据 PCA图主要用来降维和分类，PC1 和 PC2 实际上是基于这些计算得到的特征向量所确定的新的坐标轴方向，它们分别代表了数据在不同维度上的最大方差方向，也就是能最大程度地区分样本的方向。通俗一点的理解就是，PCA 的作用就是找到一些新的坐标轴，将这些原本在高维空间的样本点投影到这个由 PC1 和 PC2 构成的二维平面上，这样我们就可以通过观察这些样本点在这个二维平面上的分布情况，比如它们之间的距离远近等，来判断样本之间的相似程度或者是否能分成不同的类别等。 所以问题来了：怎么利用PCA去除离群样本？PCA不好要不要重测？ 首先观察PC1和PC2占比多少，PC1+PC2之和最好大于80%比较有说服力。 情景1：PC1（大于90%）远大于PC2。这时候主要观察样本在PC1（横坐标的距离），PC1距离接近，但是PC2距离较远，样本之间的相似度还是比较接近的。反之，PC1距离较远，不管PC2多接近，样本之间的相似度可能是比较远的。 情景2：PC1和PC2接近。通过两点之间的最短距离来判断相似度。 注意注意！PCA只能用来相对地看样本之间的差异，如果没有对照，只有重复的三个处理样本，PCA可能会放大不重要的差异！ 在R中简单绘制PCA（基于prcomp） # 清除当前环境中的所有对象，确保没有残留变量干扰 rm(list = ls()) # 加载必要的包 library(ggplot2) # 读取 data.csv 文件，添加错误处理 data &lt;- read.csv("data.csv", row.names = 1) head(data) # wt1 wt2 wt3 ko1 ko2 ko3 kd1 kd2 kd3 # MSTRG.10004 2.639 1.849 2.087 0.149 0.506 0.816 0.382 0.571 0.736 # MSTRG.10008 1.420 1.341 1.350 0.564 0.390 0.682 0.248 0.540 0.637 # MSTRG.10158 1.470 1.655 1.081 0.000 0.771 0.528 0.136 0.000 0.787 # MSTRG.10160 0.699 0.611 0.483 1.014 0.724 0.478 0.219 0.307 0.580 # MSTRG.10171 0.558 1.025 0.221 0.896 0.790 0.649 1.983 2.475 2.239 # MSTRG.10179 0.565 0.545 0.573 1.392 1.717 1.368 1.334 0.831 1.215 data_t = t(data) dim(data_t) # 过滤掉全为0的行和列 data_t &lt;- data_t[,colSums(data_t)&gt;0] data_t &lt;- data_t[,apply(data_t, 1, var)!=0] # 执行主成分分析 pca_result &lt;- prcomp(data_t, scale. = TRUE) # 计算主成分的百分比解释方差 pca_percentage &lt;- (pca_result$sdev^2 / sum(pca_result$sdev^2)) * 100 # 可视化 library(factoextra) fviz_eig(pca_result, addlabels = TRUE) fviz_pca_ind(pca_result, col.ind = rownames(data_t), mean.point = F, addEllipses = T, legend.title = "Groups" ) # 或者ggplot2 p &lt;- ggplot( pca_result$x, aes(x = PC1, y = PC2, color = rownames(data_t)) ) + geom_point() + labs( title = "PCA Plot", x = "Principal Component 1", y = "Principal Component 2", color = "Group" ) + # 添加坐标轴 xlab(paste0("PC1 (", round(pca_percentage[1], 2), "%)")) + ylab(paste0("PC2 (", round(pca_percentage[2], 2), "%)")) p]]></summary></entry><entry><title type="html">Upset图的原理以及在富集分析中简单的应用</title><link href="/minkakaku/2024/12/23/Upset%E5%9B%BE%E7%9A%84%E5%8E%9F%E7%90%86%E4%BB%A5%E5%8F%8A%E5%9C%A8%E5%AF%8C%E9%9B%86%E5%88%86%E6%9E%90%E4%B8%AD%E7%AE%80%E5%8D%95%E7%9A%84%E5%BA%94%E7%94%A8.html" rel="alternate" type="text/html" title="Upset图的原理以及在富集分析中简单的应用" /><published>2024-12-23T00:00:00+08:00</published><updated>2024-12-23T00:00:00+08:00</updated><id>/minkakaku/2024/12/23/Upset%E5%9B%BE%E7%9A%84%E5%8E%9F%E7%90%86%E4%BB%A5%E5%8F%8A%E5%9C%A8%E5%AF%8C%E9%9B%86%E5%88%86%E6%9E%90%E4%B8%AD%E7%AE%80%E5%8D%95%E7%9A%84%E5%BA%94%E7%94%A8</id><content type="html" xml:base="/minkakaku/2024/12/23/Upset%E5%9B%BE%E7%9A%84%E5%8E%9F%E7%90%86%E4%BB%A5%E5%8F%8A%E5%9C%A8%E5%AF%8C%E9%9B%86%E5%88%86%E6%9E%90%E4%B8%AD%E7%AE%80%E5%8D%95%E7%9A%84%E5%BA%94%E7%94%A8.html"><![CDATA[<h2 id="upset图的原理">Upset图的原理</h2>

<ol>
  <li>基本概念
    <ul>
      <li>Upset 图是一种用于可视化集合之间交集情况的工具，它主要用于展示多个集合之间的相交关系和元素的分布。这种图在分析基因集合、物品集合等多种数据场景下非常有用，尤其是当你需要同时考虑多个集合组合的交集情况时。</li>
      <li>例如，假设有四个不同的基因集合，分别代表在不同实验条件下差异表达的基因。Upset 图可以清晰地展示这些基因集合之间的交集，如哪些基因是在所有四个条件下都差异表达的，哪些基因是仅在其中两个条件下差异表达的等。</li>
    </ul>
  </li>
  <li>原理细节
    <ul>
      <li>集合的表示与转换
        <ul>
          <li>Upset 图将多个集合的数据转换为一种适合可视化交集的格式。首先，每个集合中的元素（如基因、物品等）被视为独立的个体。对于多个集合，通过计算它们的交集矩阵来描述集合之间的相交关系。</li>
          <li>交集矩阵的行代表不同的交集组合，列代表各个原始集合。矩阵中的元素表示相应交集组合是否包含某个原始集合中的元素。例如，如果有三个集合 A、B、C，交集矩阵的一行可能表示 “A 和 B 的交集但不包含 C”，该行对应于集合 A 和集合 B 列的元素为 1，对应集合 C 列的元素为 0。</li>
        </ul>
      </li>
      <li>可视化布局
        <ul>
          <li>在 Upset 图的布局中，最上面通常是一个条形图，用于展示每个交集组合中元素的数量。条形的长度与交集中元素的数量成正比，这使得用户可以直观地比较不同交集组合的大小。</li>
          <li>下方是一个矩阵或类似的结构，用于展示交集组合与原始集合之间的关系。这个矩阵通过点或其他标记来表示交集组合是否包含原始集合中的元素。例如，如果一个交集组合包含某个原始集合中的元素，就在对应的位置显示一个点。</li>
          <li>此外，为了方便用户理解，Upset 图还会对集合和交集组合进行标注，标注通常包括集合的名称和交集组合所包含的集合列表等信息。</li>
        </ul>
      </li>
    </ul>
  </li>
</ol>

<p>Upset图不仅可以展示差异基因，也能展示富集通路。</p>

<h2 id="upset图对kegg结果取交集">Upset图对KEGG结果取交集</h2>

<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Remove all objects from the workspace</span><span class="w">
</span><span class="n">rm</span><span class="p">(</span><span class="n">list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ls</span><span class="p">())</span><span class="w">
</span><span class="c1"># Load the UpSetR library</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">UpSetR</span><span class="p">)</span><span class="w">

</span><span class="c1"># Read the data from the files. Make sure the file paths are correct.</span><span class="w">
</span><span class="c1"># Also, consider using read.table if the files are not tab-delimited.</span><span class="w">
</span><span class="n">k1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">read.delim</span><span class="p">(</span><span class="s2">"CS-vs-CT.path.xls"</span><span class="p">,</span><span class="w"> </span><span class="n">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">T</span><span class="p">)</span><span class="w">
</span><span class="n">k2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">read.delim</span><span class="p">(</span><span class="s2">"FS-vs-FT.path.xls"</span><span class="p">,</span><span class="w"> </span><span class="n">header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">T</span><span class="p">)</span><span class="w">

</span><span class="c1"># Check the column names of k1</span><span class="w">
</span><span class="n">head</span><span class="p">(</span><span class="n">k1</span><span class="p">)</span><span class="w">
</span><span class="c1">#                           KEGG_A_class                        KEGG_B_class</span><span class="w">
</span><span class="c1"># 1 Environmental Information Processing Signaling molecules and interaction</span><span class="w">
</span><span class="c1"># 2                   Organismal Systems        Development and regeneration</span><span class="w">
</span><span class="c1"># 3                   Organismal Systems                       Immune system</span><span class="w">
</span><span class="c1"># 4 Environmental Information Processing                 Signal transduction</span><span class="w">
</span><span class="c1"># 5 Environmental Information Processing Signaling molecules and interaction</span><span class="w">
</span><span class="c1"># 6                       Human Diseases       Infectious disease: parasitic</span><span class="w">
</span><span class="c1">#                                                         Pathway</span><span class="w">
</span><span class="c1"># 1                        Cytokine-cytokine receptor interaction</span><span class="w">
</span><span class="c1"># 2                                    Osteoclast differentiation</span><span class="w">
</span><span class="c1"># 3                                       IL-17 signaling pathway</span><span class="w">
</span><span class="c1"># 4                                         TNF signaling pathway</span><span class="w">
</span><span class="c1"># 5 Viral protein interaction with cytokine and cytokine receptor</span><span class="w">
</span><span class="c1"># 6                                                       Malaria</span><span class="w">
</span><span class="c1"># Create a list of the Pathway columns from k1 and k2</span><span class="w">
</span><span class="n">k</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="n">k1_Pathway</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">k1</span><span class="o">$</span><span class="n">Pathway</span><span class="p">,</span><span class="w"> </span><span class="n">k2_Pathway</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">k2</span><span class="o">$</span><span class="n">Pathway</span><span class="p">)</span><span class="w">
</span><span class="c1"># Create the UpSet plot with more customization</span><span class="w">
</span><span class="n">upset</span><span class="p">(</span><span class="n">fromList</span><span class="p">(</span><span class="n">k</span><span class="p">),</span><span class="w">
     </span><span class="n">order.by</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"freq"</span><span class="p">,</span><span class="w"> 
     </span><span class="n">main.bar.color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"gray"</span><span class="p">,</span><span class="w">
     </span><span class="n">matrix.color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"black"</span><span class="p">,</span><span class="w">
     </span><span class="n">mainbar.y.label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Intersection Size"</span><span class="p">,</span><span class="w">
     </span><span class="n">sets.bar.color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"lightblue"</span><span class="p">,</span><span class="w">
     </span><span class="n">text.scale</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1.3</span><span class="p">,</span><span class="w"> </span><span class="m">1.3</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="m">0.75</span><span class="p">),</span><span class="w">
     </span><span class="n">number.angles</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">30</span><span class="p">,</span><span class="w">
     </span><span class="n">point.size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3.5</span><span class="p">,</span><span class="w">
     </span><span class="n">line.size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">2</span><span class="w">
</span><span class="p">)</span><span class="w">

</span></code></pre></div></div>

<h2 id="对差异基因进行上下调区分后分别进行富集分析or所有差异基因进行富集分析">对差异基因进行上下调区分后分别进行富集分析or所有差异基因进行富集分析</h2>

<p>将差异基因分为上调和下调基因后分别进行富集分析，可以更清晰地揭示生物过程在不同调节方向上的变化。分开的富集分析结果在解释时更加直观。对于我们来说，能够直接聚焦于上调或下调基因所涉及的特定生物学过程和通路，便于发现关键的基因集和功能变化。单独分析上调和下调基因可能会忽略它们之间的协同作用。在许多生物学过程中，基因的上调和下调是相互关联的，共同调节细胞功能或生物体的表型。将所有差异基因一起进行富集分析则可以考虑基因表达变化的整体情况。这种方法适用于研究基因表达变化的总体趋势和对生物系统的综合影响。</p>]]></content><author><name>Hongfan</name><email>hongfanst@outllok.com</email></author><category term="图形介绍" /><summary type="html"><![CDATA[Upset图的原理 基本概念 Upset 图是一种用于可视化集合之间交集情况的工具，它主要用于展示多个集合之间的相交关系和元素的分布。这种图在分析基因集合、物品集合等多种数据场景下非常有用，尤其是当你需要同时考虑多个集合组合的交集情况时。 例如，假设有四个不同的基因集合，分别代表在不同实验条件下差异表达的基因。Upset 图可以清晰地展示这些基因集合之间的交集，如哪些基因是在所有四个条件下都差异表达的，哪些基因是仅在其中两个条件下差异表达的等。 原理细节 集合的表示与转换 Upset 图将多个集合的数据转换为一种适合可视化交集的格式。首先，每个集合中的元素（如基因、物品等）被视为独立的个体。对于多个集合，通过计算它们的交集矩阵来描述集合之间的相交关系。 交集矩阵的行代表不同的交集组合，列代表各个原始集合。矩阵中的元素表示相应交集组合是否包含某个原始集合中的元素。例如，如果有三个集合 A、B、C，交集矩阵的一行可能表示 “A 和 B 的交集但不包含 C”，该行对应于集合 A 和集合 B 列的元素为 1，对应集合 C 列的元素为 0。 可视化布局 在 Upset 图的布局中，最上面通常是一个条形图，用于展示每个交集组合中元素的数量。条形的长度与交集中元素的数量成正比，这使得用户可以直观地比较不同交集组合的大小。 下方是一个矩阵或类似的结构，用于展示交集组合与原始集合之间的关系。这个矩阵通过点或其他标记来表示交集组合是否包含原始集合中的元素。例如，如果一个交集组合包含某个原始集合中的元素，就在对应的位置显示一个点。 此外，为了方便用户理解，Upset 图还会对集合和交集组合进行标注，标注通常包括集合的名称和交集组合所包含的集合列表等信息。 Upset图不仅可以展示差异基因，也能展示富集通路。 Upset图对KEGG结果取交集 # Remove all objects from the workspace rm(list = ls()) # Load the UpSetR library library(UpSetR) # Read the data from the files. Make sure the file paths are correct. # Also, consider using read.table if the files are not tab-delimited. k1 = read.delim("CS-vs-CT.path.xls", header = T) k2 = read.delim("FS-vs-FT.path.xls", header = T) # Check the column names of k1 head(k1) # KEGG_A_class KEGG_B_class # 1 Environmental Information Processing Signaling molecules and interaction # 2 Organismal Systems Development and regeneration # 3 Organismal Systems Immune system # 4 Environmental Information Processing Signal transduction # 5 Environmental Information Processing Signaling molecules and interaction # 6 Human Diseases Infectious disease: parasitic # Pathway # 1 Cytokine-cytokine receptor interaction # 2 Osteoclast differentiation # 3 IL-17 signaling pathway # 4 TNF signaling pathway # 5 Viral protein interaction with cytokine and cytokine receptor # 6 Malaria # Create a list of the Pathway columns from k1 and k2 k = list(k1_Pathway = k1$Pathway, k2_Pathway = k2$Pathway) # Create the UpSet plot with more customization upset(fromList(k), order.by = "freq", main.bar.color = "gray", matrix.color = "black", mainbar.y.label = "Intersection Size", sets.bar.color = "lightblue", text.scale = c(1.3, 1.3, 1, 1, 2, 0.75), number.angles = 30, point.size = 3.5, line.size = 2 ) 对差异基因进行上下调区分后分别进行富集分析or所有差异基因进行富集分析 将差异基因分为上调和下调基因后分别进行富集分析，可以更清晰地揭示生物过程在不同调节方向上的变化。分开的富集分析结果在解释时更加直观。对于我们来说，能够直接聚焦于上调或下调基因所涉及的特定生物学过程和通路，便于发现关键的基因集和功能变化。单独分析上调和下调基因可能会忽略它们之间的协同作用。在许多生物学过程中，基因的上调和下调是相互关联的，共同调节细胞功能或生物体的表型。将所有差异基因一起进行富集分析则可以考虑基因表达变化的整体情况。这种方法适用于研究基因表达变化的总体趋势和对生物系统的综合影响。]]></summary></entry><entry><title type="html">WGCNA的基本概念及简单应用</title><link href="/minkakaku/2024/12/23/WGCNA%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5%E5%8F%8A%E7%AE%80%E5%8D%95%E5%BA%94%E7%94%A8.html" rel="alternate" type="text/html" title="WGCNA的基本概念及简单应用" /><published>2024-12-23T00:00:00+08:00</published><updated>2024-12-23T00:00:00+08:00</updated><id>/minkakaku/2024/12/23/WGCNA%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5%E5%8F%8A%E7%AE%80%E5%8D%95%E5%BA%94%E7%94%A8</id><content type="html" xml:base="/minkakaku/2024/12/23/WGCNA%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5%E5%8F%8A%E7%AE%80%E5%8D%95%E5%BA%94%E7%94%A8.html"><![CDATA[<h1 id="一基本概念">一、基本概念</h1>

<p>WGCNA（ Weighted correlation network analysis）译为加权基因共表达网络分析，是一种经常用于基因组和系统生物学研究中的网络分析方法。WGCNA对不同样本中的基因关联模式进行描述，以鉴定出样本中和表型高度协同变化的基因集，或者说模块。</p>

<p>比如，可以研究不同组织或不同物种之间的模块保存程度（module preservation）。</p>

<p>模块保存程度统计信息（Preservation Statistic）旨在量化参考数据集和测试数据集之间模块保存情况。WGCNA R包中的函数modulePreservation用于计算不同数据集之间的模块保存统计信息。modulePreservation函数用法可以参考网页：<a href="https://links.jianshu.com/go?to=https%3A%2F%2Frdrr.io%2Fcran%2FWGCNA%2Fman%2FmodulePreservation.html">https://rdrr.io/cran/WGCNA/man/modulePreservation.html</a>。</p>

<p><strong>以往的模块保存程度统计信息可以分为四大类：</strong></p>
<ul>
  <li>交叉列表统计信息（Cross-tabulation）：会比较参考数据集和测试数据集中的聚类情况（即模块类别分配），因此它们需要将聚类过程也应用于测试数据。</li>
  <li>密度统计信息（Density）：不需要在测试数据集中分配模块标签。</li>
  <li>可分离性统计信息（separability）：不需要在测试数据集中分配模块标签。</li>
  <li>稳定性统计信息（ stability）：当将一定数量的人工噪声添加到数据中时，稳定性统计通常研究数据集的稳定性，很少用在量化模块保存程度。
<strong>在以往分类的基础上，基于量化模块保存度，目前又细分为以下五类：</strong></li>
  <li>交叉列表统计信息（Cross-tabulation）；</li>
  <li>密度统计信息（Density）；</li>
  <li>可分离性统计信息（separability）；</li>
  <li>连通性统计信息（Connectivity）：用于确定参考网络基因之间的连接模式是否类似于测试网络中的连接模式；</li>
  <li>综合统计信息（Composite）：整合密度统计信息与连通性统计信息，综合评估模块保存度。
这些统计数据通常通过每个数据集中相似对象（通常是基因）的数量或每个数据集之间不相似对象的数量来评估数据集。</li>
</ul>

<p>modulePreservation函数，一般会统计以下列表的统计信息，其中Type列为每类统计量的类别，Network列为每类统计量使用的网络类型，*input列表示需要输入的数据类型，输入数据需要以下类别：</p>
<ul>
  <li>Lbl：module label；</li>
  <li>Adj：general network adjacency；</li>
  <li>datX：numeric data from which a correlation network is constructed。
    <h1 id="二适用的场景">二、适用的场景</h1>
  </li>
</ul>

<p>转录组或芯片数据在数据库中存在大量类似的研究结果，那么这些结果之间的相容性如何？WGCNA中modulePreservation函数用于阐述不同实验结果的基因表达模式的关联；</p>

<p>不同物种之间基因表达模式的分析也是多数文章的研究方向，WGCNA中modulePreservation函数同样也适用于阐述不同物种的基因表达模式的关联，比如人与黑猩猩基因表达模块之间的基因保存性，类似的分析有很多，比如人与牛，人与猪等。</p>

<h1 id="三modulepreservation-函数实践">三、modulePreservation 函数实践</h1>

<p>以下命令用于演示在黑猩猩数据集中人脑共表达模块的保存情况。</p>

<h3 id="1-配置r运行环境">1. 配置R运行环境</h3>

<p>启动R之后，设置工作目录并加载所需的包。</p>
<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Display the current working directory</span><span class="w">
</span><span class="n">getwd</span><span class="p">()</span><span class="w">
</span><span class="c1"># If necessary, change the path below to the directory where the data files are stored.</span><span class="w">
</span><span class="c1"># "." means current directory. On Windows use a forward slash / instead of the usual </span><span class="w">
</span><span class="n">workingDir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"."</span><span class="w">
</span><span class="n">setwd</span><span class="p">(</span><span class="n">workingDir</span><span class="p">)</span><span class="w">
</span><span class="c1"># Load the package</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">WGCNA</span><span class="p">);</span><span class="w">
</span><span class="c1"># The following setting is important, do not omit.</span><span class="w">
</span><span class="n">options</span><span class="p">(</span><span class="n">stringsAsFactors</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">FALSE</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<h3 id="2-导入输入数据">2. 导入输入数据</h3>

<h5 id="21-输入表达矩阵">2.1 输入表达矩阵</h5>

<p>首先下载数据，存放在本地目录中，表达矩阵数据存放在在Dataset 1 (network construction).csv.bz2中。</p>
<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># data input</span><span class="w">
</span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bzfile</span><span class="p">(</span><span class="s2">"Dataset 1 (network construction).csv.bz2"</span><span class="p">)</span><span class="w">
</span><span class="n">dat1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">read.csv</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">header</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>
<p>表达矩阵包含36个样本，每一行对应一个基因/探针，每一列对应一个样本或辅助信息，我们需要删除辅助信息，并转置表达矩阵用于后续分析。我们只保留BrainvariantH列&gt;0的基因/探针。</p>
<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nf">dim</span><span class="p">(</span><span class="n">dat1</span><span class="p">)</span><span class="w">
</span><span class="nf">names</span><span class="p">(</span><span class="n">dat1</span><span class="p">)</span><span class="w">
</span><span class="n">datExpr</span><span class="o">=</span><span class="n">data.frame</span><span class="p">(</span><span class="n">t</span><span class="p">(</span><span class="n">dat1</span><span class="p">[</span><span class="n">dat1</span><span class="o">$</span><span class="n">Brain_variant_H</span><span class="o">&gt;</span><span class="m">0</span><span class="p">,</span><span class="m">2</span><span class="o">:</span><span class="m">39</span><span class="p">]))</span><span class="w">
</span><span class="n">indexHuman</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">19</span><span class="o">:</span><span class="m">36</span><span class="p">)</span><span class="w">
</span><span class="n">indexChimp</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="o">:</span><span class="m">18</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>
<p>现在我们设置多组表达数据和相应的模块颜色。</p>
<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Number of data sets that we work with</span><span class="w">
</span><span class="n">nSets</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">2</span><span class="w">
</span><span class="c1"># Object that will contain the expression data</span><span class="w">
</span><span class="n">multiExpr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">list</span><span class="p">()</span><span class="w">
</span><span class="n">multiExpr</span><span class="p">[[</span><span class="m">1</span><span class="p">]]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">datExpr</span><span class="p">[</span><span class="n">indexHuman</span><span class="p">,</span><span class="w"> </span><span class="p">])</span><span class="w">
</span><span class="n">multiExpr</span><span class="p">[[</span><span class="m">2</span><span class="p">]]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">datExpr</span><span class="p">[</span><span class="n">indexChimp</span><span class="p">,</span><span class="w"> </span><span class="p">])</span><span class="w">
</span><span class="c1"># Names for the two sets</span><span class="w">
</span><span class="n">setLabels</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"Human"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Chimp"</span><span class="p">)</span><span class="w">
</span><span class="c1"># Important: components of multiExpr must carry identificating names</span><span class="w">
</span><span class="nf">names</span><span class="p">(</span><span class="n">multiExpr</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">setLabels</span><span class="w">
</span><span class="c1"># Display the dimensions of the expression data (if you are confused by this construct, ignore it):</span><span class="w">
</span><span class="n">lapply</span><span class="p">(</span><span class="n">multiExpr</span><span class="p">,</span><span class="w"> </span><span class="n">lapply</span><span class="p">,</span><span class="w"> </span><span class="n">dim</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>
<p>最后一条命令的输出确认有两个表达数据集，每个数据集包含18个样本中4000个基因的表达测量值。</p>

<p>注意multiExpr的结构：它是一个列表，每个输入数据集必须包含一个称为data的组件并且包含表达数据。外部列表必须具有适当的名称，以便表达式数据可以与我们接下来创建的模块标签匹配。</p>

<h5 id="22-加载模块标签">2.2 加载模块标签</h5>

<p>WGCNA分析中，通过构建共表达矩阵，计算基因间的相似性，确定基因模块，通常用不同的颜色来代表模块，即每个模块中的基因对应同一种color，方便后续的模块可视化。后续会分享该部分的相关内容。</p>

<p>HumanChimp-OldhamAnalysis-colorHuman-colorChimp-inNetwork.RData中包含黑猩猩表达矩阵中每个基因的模块颜色信息（colorChimp）以及人表达矩阵中每个基因的模块颜色信息（colorHuman）。</p>
<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># 加载从网络分析获得的模块标签，并创建一个列表。</span><span class="w">
</span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">load</span><span class="p">(</span><span class="s2">"HumanChimp-OldhamAnalysis-colorHuman-colorChimp-inNetwork.RData"</span><span class="p">)</span><span class="w"> </span><span class="c1"># Create an object (list) holding the module labels for each set:</span><span class="w">
</span><span class="n">colorList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="n">colorHuman</span><span class="p">,</span><span class="w"> </span><span class="n">colorChimp</span><span class="p">)</span><span class="w">
</span><span class="c1"># Components of the list must be named so that the names can be matched to the names of multiExpr</span><span class="w">
</span><span class="nf">names</span><span class="p">(</span><span class="n">colorList</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">setLabel</span><span class="w">
</span></code></pre></div></div>
<p>注意，multiExpr的名称和multiColor（即这里的colorList）的名称必须对应。</p>

<h3 id="3-对模块保存程度进行统计分析">3. 对模块保存程度进行统计分析</h3>

<p>这里使用modulePreservation进行模块保存性计算，运行后将结果保存为Rdata，下次可直接加载，节省时间。</p>
<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">system.time</span><span class="p">(</span><span class="w"> </span><span class="p">{</span><span class="w">
 </span><span class="n">mp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">modulePreservation</span><span class="p">(</span><span class="n">multiExpr</span><span class="p">,</span><span class="w"> </span><span class="n">colorList</span><span class="p">,</span><span class="w">
             </span><span class="n">referenceNetworks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="o">:</span><span class="m">2</span><span class="p">),</span><span class="w">
             </span><span class="n">loadPermutedStatistics</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">FALSE</span><span class="p">,</span><span class="w">
             </span><span class="n">nPermutations</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">200</span><span class="p">,</span><span class="w">
             </span><span class="n">verbose</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3</span><span class="p">)</span><span class="w">
</span><span class="p">}</span><span class="w"> </span><span class="p">)</span><span class="w">

</span><span class="n">save</span><span class="p">(</span><span class="n">mp</span><span class="p">,</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"HumanChimp-HumanSpecific-modulePreservation.RData"</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>
<p>该函数输出的是一个嵌套列表，包括quality，preservation，accracy，permutationDetails，referenceSeparability和testSeparability，每个列表分别包含4或5个组成部分，包含：</p>

<ul>
  <li>observed（观察值）；</li>
  <li>Z（Z得分）；</li>
  <li>log.p（以10为底的p值的对数）；</li>
  <li>log.pBonf（Bonferoni校正后的p值的以10为底的对数）；</li>
  <li>q（可选，q值）。</li>
</ul>

<p>每个列表包含Z，log.p，log.pBonf（可选的q值），accuracy中包含的observedOverlapCounts和observedFisherPvalues被构造为2级列表，其中外部组件对应于参考集，内部组件对应于测试集。例如，preservation$observed[[1]] [[2]]包含用于保存测试集中参考集的密度和保存性等保存统计信息，1是参考集，2是测试集。</p>

<h3 id="4-对模块保存程度进行结果展示">4. 对模块保存程度进行结果展示</h3>
<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">ref</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="c1"># Select the human data as reference</span><span class="w">
</span><span class="n">test</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">2</span><span class="w"> </span><span class="c1"># Select the chimp data as test</span><span class="w">
</span><span class="n">statsObs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cbind</span><span class="p">(</span><span class="n">mp</span><span class="o">$</span><span class="n">quality</span><span class="o">$</span><span class="n">observed</span><span class="p">[[</span><span class="n">ref</span><span class="p">]][[</span><span class="n">test</span><span class="p">]][,</span><span class="w"> </span><span class="m">-1</span><span class="p">],</span><span class="w"> </span><span class="n">mp</span><span class="o">$</span><span class="n">preservation</span><span class="o">$</span><span class="n">observed</span><span class="p">[[</span><span class="n">ref</span><span class="p">]][[</span><span class="n">test</span><span class="p">]][,</span><span class="w"> </span><span class="m">-1</span><span class="p">])</span><span class="w">
</span><span class="n">statsZ</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cbind</span><span class="p">(</span><span class="n">mp</span><span class="o">$</span><span class="n">quality</span><span class="o">$</span><span class="n">Z</span><span class="p">[[</span><span class="n">ref</span><span class="p">]][[</span><span class="n">test</span><span class="p">]][,</span><span class="w"> </span><span class="m">-1</span><span class="p">],</span><span class="w"> </span><span class="n">mp</span><span class="o">$</span><span class="n">preservation</span><span class="o">$</span><span class="n">Z</span><span class="p">[[</span><span class="n">ref</span><span class="p">]][[</span><span class="n">test</span><span class="p">]][,</span><span class="w"> </span><span class="m">-1</span><span class="p">])</span><span class="w">
</span></code></pre></div></div>
<p>我们看主要输出Zsummary评分。</p>
<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">print</span><span class="p">(</span><span class="nf">signif</span><span class="p">(</span><span class="n">statsZ</span><span class="p">[,</span><span class="w"> </span><span class="s2">"Zsummary.pres"</span><span class="p">,</span><span class="w"> </span><span class="n">drop</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">FALSE</span><span class="p">],</span><span class="m">2</span><span class="p">))</span><span class="w">
</span></code></pre></div></div>
<p>一般文献中认为：</p>

<ul>
  <li>Zsummary&gt;10：高度保存；</li>
  <li>2&lt;Zsummary&lt;10：弱保存；</li>
  <li>Zsummary&lt;2：无保存证据。</li>
</ul>

<p>查看不同物种的不同模块之间的overlap基因数与overlap pvalue。</p>
<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">overlap</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cbind</span><span class="p">(</span><span class="n">mp</span><span class="o">$</span><span class="n">accuracy</span><span class="o">$</span><span class="n">observedCounts</span><span class="p">[[</span><span class="m">1</span><span class="p">]][[</span><span class="m">2</span><span class="p">]],</span><span class="w"> </span><span class="n">mp</span><span class="o">$</span><span class="n">accuracy</span><span class="o">$</span><span class="n">observedFisherPvalues</span><span class="p">[[</span><span class="m">1</span><span class="p">]][[</span><span class="m">2</span><span class="p">]])</span><span class="w">
</span><span class="n">print</span><span class="p">(</span><span class="n">overlap</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>
<p>输出结果的前8列为overlap基因数，后8列为 overlap pvalue。</p>

<h3 id="参考文献">参考文献</h3>

<ul>
  <li>Jiang Z, Sun J, Dong H, Luo O, Zheng X, Obergfell C, Tang Y, Bi J, O’Neill R, Ruan Y, Chen J, Tian XC. Transcriptional profiles of bovine in vivo pre-implantation development. BMC Genomics. 2014 Sep 4;15(1):756. doi: 10.1186/1471-2164-15-756. PMID: 25185836; PMCID: PMC4162962.</li>
  <li>Langfelder P, Luo R, Oldham MC, Horvath S. Is my network module preserved and reproducible? PLoS Comput Biol. 2011 Jan 20;7(1):e1001057. doi: 10.1371/journal.pcbi.1001057. PMID: 21283776; PMCID: PMC3024255.</li>
  <li>Khan FA, Liu H, Zhou H, Wang K, Qamar MTU, Pandupuspitasari NS, Shujun Z. Analysis of Bos taurus and Sus scrofa X and Y chromosome transcriptome highlights reproductive driver genes. Oncotarget. 2017 Apr 13;8(33):54416-54433. doi: 10.18632/oncotarget.17081. PMID: 28903352; PMCID: PMC5589591.</li>
  <li>Li Y, Sun J, Ling Y, Ming H, Chen Z, Fang F, Liu Y, Cao H, Ding J, Cao Z, Zhang X, Bondioli K, Jiang Z, Zhang Y. Transcription profiles of oocytes during maturation and embryos during preimplantation development in vivo in the goat. Reprod Fertil Dev. 2020 Apr;32(7):714-725. doi: 10.1071/RD19391. PMID: 32317096.</li>
  <li>Xue Z, Huang K, Cai C, Cai L, Jiang CY, Feng Y, Liu Z, Zeng Q, Cheng L, Sun YE, Liu JY, Horvath S, Fan G. Genetic programs in human and mouse early embryos revealed by single-cell RNA sequencing. Nature. 2013 Aug 29;500(7464):593-7. doi: 10.1038/nature12364. Epub 2013 Jul 28. PMID: 23892778; PMCID: PMC4950944.</li>
  <li>Miller JA, Horvath S, Geschwind DH. Divergence of human and mouse brain transcriptome highlights Alzheimer disease pathways. Proc Natl Acad Sci U S A. 2010 Jul * 13;107(28):12698-703. doi: 10.1073/pnas.0914257107. Epub 2010 Jun 25. PMID: 20616000; PMCID: PMC2906579.</li>
</ul>]]></content><author><name>Hongfan</name><email>hongfanst@outllok.com</email></author><category term="WGCNA" /><summary type="html"><![CDATA[一、基本概念 WGCNA（ Weighted correlation network analysis）译为加权基因共表达网络分析，是一种经常用于基因组和系统生物学研究中的网络分析方法。WGCNA对不同样本中的基因关联模式进行描述，以鉴定出样本中和表型高度协同变化的基因集，或者说模块。 比如，可以研究不同组织或不同物种之间的模块保存程度（module preservation）。 模块保存程度统计信息（Preservation Statistic）旨在量化参考数据集和测试数据集之间模块保存情况。WGCNA R包中的函数modulePreservation用于计算不同数据集之间的模块保存统计信息。modulePreservation函数用法可以参考网页：https://rdrr.io/cran/WGCNA/man/modulePreservation.html。 以往的模块保存程度统计信息可以分为四大类： 交叉列表统计信息（Cross-tabulation）：会比较参考数据集和测试数据集中的聚类情况（即模块类别分配），因此它们需要将聚类过程也应用于测试数据。 密度统计信息（Density）：不需要在测试数据集中分配模块标签。 可分离性统计信息（separability）：不需要在测试数据集中分配模块标签。 稳定性统计信息（ stability）：当将一定数量的人工噪声添加到数据中时，稳定性统计通常研究数据集的稳定性，很少用在量化模块保存程度。 在以往分类的基础上，基于量化模块保存度，目前又细分为以下五类： 交叉列表统计信息（Cross-tabulation）； 密度统计信息（Density）； 可分离性统计信息（separability）； 连通性统计信息（Connectivity）：用于确定参考网络基因之间的连接模式是否类似于测试网络中的连接模式； 综合统计信息（Composite）：整合密度统计信息与连通性统计信息，综合评估模块保存度。 这些统计数据通常通过每个数据集中相似对象（通常是基因）的数量或每个数据集之间不相似对象的数量来评估数据集。 modulePreservation函数，一般会统计以下列表的统计信息，其中Type列为每类统计量的类别，Network列为每类统计量使用的网络类型，*input列表示需要输入的数据类型，输入数据需要以下类别： Lbl：module label； Adj：general network adjacency； datX：numeric data from which a correlation network is constructed。 二、适用的场景 转录组或芯片数据在数据库中存在大量类似的研究结果，那么这些结果之间的相容性如何？WGCNA中modulePreservation函数用于阐述不同实验结果的基因表达模式的关联； 不同物种之间基因表达模式的分析也是多数文章的研究方向，WGCNA中modulePreservation函数同样也适用于阐述不同物种的基因表达模式的关联，比如人与黑猩猩基因表达模块之间的基因保存性，类似的分析有很多，比如人与牛，人与猪等。 三、modulePreservation 函数实践 以下命令用于演示在黑猩猩数据集中人脑共表达模块的保存情况。 1. 配置R运行环境 启动R之后，设置工作目录并加载所需的包。 # Display the current working directory getwd() # If necessary, change the path below to the directory where the data files are stored. # "." means current directory. On Windows use a forward slash / instead of the usual workingDir = "." setwd(workingDir) # Load the package library(WGCNA); # The following setting is important, do not omit. options(stringsAsFactors = FALSE) 2. 导入输入数据 2.1 输入表达矩阵 首先下载数据，存放在本地目录中，表达矩阵数据存放在在Dataset 1 (network construction).csv.bz2中。 # data input file = bzfile("Dataset 1 (network construction).csv.bz2") dat1 = read.csv(file, header=T) 表达矩阵包含36个样本，每一行对应一个基因/探针，每一列对应一个样本或辅助信息，我们需要删除辅助信息，并转置表达矩阵用于后续分析。我们只保留BrainvariantH列&gt;0的基因/探针。 dim(dat1) names(dat1) datExpr=data.frame(t(dat1[dat1$Brain_variant_H&gt;0,2:39])) indexHuman=c(19:36) indexChimp=c(1:18) 现在我们设置多组表达数据和相应的模块颜色。 # Number of data sets that we work with nSets = 2 # Object that will contain the expression data multiExpr = list() multiExpr[[1]] = list(data = datExpr[indexHuman, ]) multiExpr[[2]] = list(data = datExpr[indexChimp, ]) # Names for the two sets setLabels = c("Human", "Chimp") # Important: components of multiExpr must carry identificating names names(multiExpr) = setLabels # Display the dimensions of the expression data (if you are confused by this construct, ignore it): lapply(multiExpr, lapply, dim) 最后一条命令的输出确认有两个表达数据集，每个数据集包含18个样本中4000个基因的表达测量值。 注意multiExpr的结构：它是一个列表，每个输入数据集必须包含一个称为data的组件并且包含表达数据。外部列表必须具有适当的名称，以便表达式数据可以与我们接下来创建的模块标签匹配。 2.2 加载模块标签 WGCNA分析中，通过构建共表达矩阵，计算基因间的相似性，确定基因模块，通常用不同的颜色来代表模块，即每个模块中的基因对应同一种color，方便后续的模块可视化。后续会分享该部分的相关内容。 HumanChimp-OldhamAnalysis-colorHuman-colorChimp-inNetwork.RData中包含黑猩猩表达矩阵中每个基因的模块颜色信息（colorChimp）以及人表达矩阵中每个基因的模块颜色信息（colorHuman）。 # 加载从网络分析获得的模块标签，并创建一个列表。 x = load("HumanChimp-OldhamAnalysis-colorHuman-colorChimp-inNetwork.RData") # Create an object (list) holding the module labels for each set: colorList = list(colorHuman, colorChimp) # Components of the list must be named so that the names can be matched to the names of multiExpr names(colorList) = setLabel 注意，multiExpr的名称和multiColor（即这里的colorList）的名称必须对应。 3. 对模块保存程度进行统计分析 这里使用modulePreservation进行模块保存性计算，运行后将结果保存为Rdata，下次可直接加载，节省时间。 system.time( { mp = modulePreservation(multiExpr, colorList, referenceNetworks = c(1:2), loadPermutedStatistics = FALSE, nPermutations = 200, verbose = 3) } ) save(mp, file = "HumanChimp-HumanSpecific-modulePreservation.RData") 该函数输出的是一个嵌套列表，包括quality，preservation，accracy，permutationDetails，referenceSeparability和testSeparability，每个列表分别包含4或5个组成部分，包含： observed（观察值）； Z（Z得分）； log.p（以10为底的p值的对数）； log.pBonf（Bonferoni校正后的p值的以10为底的对数）； q（可选，q值）。 每个列表包含Z，log.p，log.pBonf（可选的q值），accuracy中包含的observedOverlapCounts和observedFisherPvalues被构造为2级列表，其中外部组件对应于参考集，内部组件对应于测试集。例如，preservation$observed[[1]] [[2]]包含用于保存测试集中参考集的密度和保存性等保存统计信息，1是参考集，2是测试集。 4. 对模块保存程度进行结果展示 ref = 1 # Select the human data as reference test = 2 # Select the chimp data as test statsObs = cbind(mp$quality$observed[[ref]][[test]][, -1], mp$preservation$observed[[ref]][[test]][, -1]) statsZ = cbind(mp$quality$Z[[ref]][[test]][, -1], mp$preservation$Z[[ref]][[test]][, -1]) 我们看主要输出Zsummary评分。 print(signif(statsZ[, "Zsummary.pres", drop = FALSE],2)) 一般文献中认为： Zsummary&gt;10：高度保存； 2&lt;Zsummary&lt;10：弱保存； Zsummary&lt;2：无保存证据。 查看不同物种的不同模块之间的overlap基因数与overlap pvalue。 overlap = cbind(mp$accuracy$observedCounts[[1]][[2]], mp$accuracy$observedFisherPvalues[[1]][[2]]) print(overlap) 输出结果的前8列为overlap基因数，后8列为 overlap pvalue。 参考文献 Jiang Z, Sun J, Dong H, Luo O, Zheng X, Obergfell C, Tang Y, Bi J, O’Neill R, Ruan Y, Chen J, Tian XC. Transcriptional profiles of bovine in vivo pre-implantation development. BMC Genomics. 2014 Sep 4;15(1):756. doi: 10.1186/1471-2164-15-756. PMID: 25185836; PMCID: PMC4162962. Langfelder P, Luo R, Oldham MC, Horvath S. Is my network module preserved and reproducible? PLoS Comput Biol. 2011 Jan 20;7(1):e1001057. doi: 10.1371/journal.pcbi.1001057. PMID: 21283776; PMCID: PMC3024255. Khan FA, Liu H, Zhou H, Wang K, Qamar MTU, Pandupuspitasari NS, Shujun Z. Analysis of Bos taurus and Sus scrofa X and Y chromosome transcriptome highlights reproductive driver genes. Oncotarget. 2017 Apr 13;8(33):54416-54433. doi: 10.18632/oncotarget.17081. PMID: 28903352; PMCID: PMC5589591. Li Y, Sun J, Ling Y, Ming H, Chen Z, Fang F, Liu Y, Cao H, Ding J, Cao Z, Zhang X, Bondioli K, Jiang Z, Zhang Y. Transcription profiles of oocytes during maturation and embryos during preimplantation development in vivo in the goat. Reprod Fertil Dev. 2020 Apr;32(7):714-725. doi: 10.1071/RD19391. PMID: 32317096. Xue Z, Huang K, Cai C, Cai L, Jiang CY, Feng Y, Liu Z, Zeng Q, Cheng L, Sun YE, Liu JY, Horvath S, Fan G. Genetic programs in human and mouse early embryos revealed by single-cell RNA sequencing. Nature. 2013 Aug 29;500(7464):593-7. doi: 10.1038/nature12364. Epub 2013 Jul 28. PMID: 23892778; PMCID: PMC4950944. Miller JA, Horvath S, Geschwind DH. Divergence of human and mouse brain transcriptome highlights Alzheimer disease pathways. Proc Natl Acad Sci U S A. 2010 Jul * 13;107(28):12698-703. doi: 10.1073/pnas.0914257107. Epub 2010 Jun 25. PMID: 20616000; PMCID: PMC2906579.]]></summary></entry></feed>