HISAT2 - StringTie - DESeq2 pipeline 进行bulk RNA-seq

2023-05-16

软件官网:

Hisat2: Manual | HISAT2

StringTie:StringTie

文章:Transcript-level expression analysis of RNA-seq experiments with HISAT, StringTie and Ballgown | Nature Protocols

建议看保姆级教程:

1. RNA-seq : Hisat2+Stringtie+DESeq2 – 恒诺新知

2. RNA-seq用hisat2、stringtie、DESeq2分析 - 简书

基本用法:

1. 构建参考基因组索引

# 提取剪接位点和外显子信息
extract_splice_sites.py Mus_musculus.GRCm39.104.gtf > Mus_musculus.ss
extract_exons.py Mus_musculus.GRCm39.104.gtf > Mus_musculus.exon
# 建立索引
# 最后的 Mus_musculus.GRCm39_tran 为索引文件前缀
hisat2-build --ss Mus_musculus.ss --exon Mus_musculus.exon              Mus_musculus.GRCm39.dna.primary_assembly.fa \
               Mus_musculus.GRCm39_tran
# 时间超长,大于12h,建议晚上跑

2. 参考基因组比对

# -x跟索引名前缀,-1,-2跟双端测序文件,-U跟单端测序文件,-S输出为sam格式的文件,-p线程数量
# 我们直接输出为排序好的bam文件
# --dta输出为转录本组装的reads,--summary-file输出比对信息
hisat2 -p 10 --dta -x path/to/Mus_musculus.GRCm39_tran 
         --summary-file test1_summary.txt 
         -1 1.fastq-data/test1_R1_rep1.fq.gz 
         -2 1.fastq-data/test1_R2_rep1.fq.gz 
         -S test1.sam

3. samtools 对输出 sam 文件排序并转为 bam 文件

# -@为samtools的线程数
samtools sort -@ 10 -o test1.sorted.bam test.sam

4. 转录本组装

# 组装转录本,-p为线程数,-G为组装参考注释文件,-l为输出文件名前缀
# 单个样本运行
stringtie -p 10 -G Mus_musculus.GRCm38.102.gtf 
                -l test1 
                -o test1.gtf 
                test1.sorted.bam

5. 注释文件合并

# 创建 mergelist.txt 文件,指明组装后注释文件的路径
path/to/test1.gtf
path/to/test2.gtf
path/to/test3.gtf

# 合并gtf文件
$ stringtie --merge -p 10 -G ./Mus_musculus.GRCm38.102.gtf 
                    -o stringtie_merged.gtf 
                    mergelist.txt

6. 利用生成的注释文件对转录本进行定量

# 创建一个新的 test1 文件夹,转录本定量结果保存到文件夹中
mkdir test1/
stringtie  -p 10 -e -G ./stringtie_merged.gtf 
             -o test1/test1.gtf 
             -A test1/gene_abundances.tsv 
             test1.sorted.bam
# 相应文件夹下生成样本名.gtf和gene_abundances.tsv的两个文件,对应每个样本的 count 值定量结果,我们需要合并到一个文件里。

7. 提取基因定量结果

prepDE.py 需要一个 sample_list,第一列为样本名,第二列为 gtf 文件路径

# sample_list.txt 文件内容如下
test1 path/to/test1/test1.gtf
test2 path/to/test1/test2.gtf
test3 path/to/test1/test3.gtf
test4 path/to/test1/test4.gtf

# 提取合并count结果,-i为输入sample_list
prepDE.py -i sample_list.txt

# 生成gene_count_matrix.csv和transcript_count_matrix.csv文件

8. 选做:提取 FPKM/TPM 或 coverage 结果

需要用到stringtie_expression_matrix.pl,下载地址如下:

rnaseq_tutorial/stringtie_expression_matrix.pl at master · griffithlab/rnaseq_tutorial · GitHub

# 提取TPM
$ ./stringtie_expression_matrix.pl --expression_metric=TPM 
                                   --result_dirs='test1_rep1,test1_rep2,test2_rep1,test2_rep2' 
                                   --transcript_matrix_file=transcript_tpms_all_samples.tsv 
                                   --gene_matrix_file=gene_tpms_all_samples.tsv

# 提取FPKM
./stringtie_expression_matrix.pl --expression_metric=FPKM 
                                   --result_dirs='test1_rep1,test1_rep2,test2_rep1,test2_rep2' 
                                   --transcript_matrix_file=transcript_fpkms_all_samples.tsv 
                                   --gene_matrix_file=gene_fpkms_all_samples.tsv

# 提取coverage
./stringtie_expression_matrix.pl --expression_metric=coverage 
                                   --result_dirs='test1_rep1,test1_rep2,test2_rep1,test2_rep2' 
                                   --transcript_matrix_file=transcript_coverage_all_samples.tsv 
                                   --gene_matrix_file=gene_coverage_all_samples.tsv
# 在当前目录就会生成相应的基因和转录本的tpm、fpkm、coverage 结果

9. DESeq2 差异分析

# 安装DESeq2包
BiocManager::install('DESeq2')
# 加载包
library(DESeq2)
# 设置工作路径
setwd('D:rnaseq')
# 读入counts矩阵
gene_count_matrix <- read.csv("D:/rnaseq/gene_count_matrix.csv",row.names = 1)
count <- gene_count_matrix[rowSums(gene_count_matrix)>0,]
# 构建表型矩阵
colData <- data.frame(row.names = colnames(count),
                      condition = factor(c(rep('control',2),rep('treat',2)),
                                           levels=c('control','treat'))
                      )
# 查看
colData
#            condition
# test1_rep1   control
# test1_rep2   control
# test2_rep1     treat
# test2_rep2     treat

dds <- DESeqDataSetFromMatrix(countData = count, colData = colData,design = ~ condition)
dds <- DESeq(dds)
res <- results(dds)
diff_res <- as.data.frame(res)
diff_res$gene_name <- rownames(diff_res)
# 输出差异结果
write.table(diff_res,file = 'DESeq2_diff_results.csv',quote = F,sep = ',',row.names = F,col.names = T)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HISAT2 - StringTie - DESeq2 pipeline 进行bulk RNA-seq 的相关文章

  • Powershell Get-ChildItem 进度问题

    所以 我在一个文件夹中有一组目录 00 99 每个目录都有 100 个子目录 00 99 每个子目录都有数千张图像 我想做的基本上是在计算平均文件大小时获得进度报告 但我无法让它发挥作用 这是我当前的查询 get childitem
  • 如何使用 write() 或 fwrite() 将数据写入终端(stdout)?

    我正在尝试加快我的 C 程序的速度 以便更快地输出数据 目前我正在使用printf 向外界提供一些数据 它是连续的数据流 因此我无法使用 return data 我该如何使用write or fwrite 将数据提供给console而不是文
  • Reasonml 中 -> 和 |> 有什么区别?

    经过一段时间的激烈谷歌搜索 我得到了一些例子 人们在一个代码中使用两种类型的运算符 但通常它们看起来就像做一件事的两种方式 它们甚至具有相同的名称 tl dr 决定性的区别在于 gt 管道到第一个参数 同时 gt 管道到最后 那是 x gt
  • 管道中何时进行路由?

    ASP NET MVC 管道中何时进行路由 IIS 7 0 的 ASP NET 应用程序生命周期概述 http msdn microsoft com en us library bb470252 aspx 是否在第 2 步 执行 URL 映
  • Gitlab CI:仅在工件存在时运行作业

    我有 monorepo 我想根据已更改的目录内容运行子管道 在工作中prepare config我检查最新更改在哪里 我创建子配置 yml 并在下一阶段的工作中run child我从 运行子管道 问题是 如果model gitlab ci
  • 如何修复“kex_exchange_identification:读取:对等方重置连接”?

    我想复制数据scp在使用 PRIVATE KEY 的 GitLab 管道中 错误是 kex exchange identification read Connection reset by peer Connection reset by
  • 如何在 Powershell cmdlet 中将 CSV 文件的内容处理为管道输入

    我想使用 CSV 文件来提供 powershell cmdlet 的参数 Role email fname lname Admin email protected cdn cgi l email protection John Smith
  • 为什么 du 或 echo 流水线不起作用?

    我正在尝试对当前目录中的每个目录使用 du 命令 所以我尝试使用这样的代码 ls du sb 但它没有按预期工作 它仅输出当前 的大小目录仅此而已 echo 也是同样的情况 ls echo 输出空行 为什么会发生这种情况 使用管道发送输出
  • 如何从标准输入中提取 tar 存档?

    我有一个很大的 tar 文件split 是否有可能cat并使用管道解压文件 就像是 cat largefile tgz aa largefile tgz ab tar xz 代替 cat largefile tgz aa largfile
  • 使用 Batchblock.Triggerbatch() 在 TPL 数据流管道中进行数据传播

    在我的生产者 消费者场景中 我有多个消费者 每个消费者都向外部硬件发送一个操作 这可能需要一些时间 我的管道看起来有点像这样 BatchBlock gt TransformBlock gt BufferBlock gt 几个 ActionB
  • 如何在 Python 中创建迭代器管道?

    是否有库或推荐的方法在 Python 中创建迭代器管道 例如 gt gt gt all items get created by location surrounding cities 我还希望能够访问迭代器中对象的属性 在上面的例子中 a
  • MongoDB 中的批量更新/更新插入?

    是否可以在 MongoDB 中进行批量更新 更新插入 而不是插入 如果是 请指出与此相关的任何文档 Thanks 您可以使用命令行程序蒙戈进口公司它应该在你的 MongoDB bin 目录中 您需要考虑使用两个选项upsert upsert
  • 通知所有组成员 GitLab 中失败的管道

    目标是让每个人都能收到每个失败管道的通知 由他们自行决定 目前 我们任何人都可以在这个项目分支上运行管道 并且管道的创建者会收到一封电子邮件 而其他人则不会 我尝试将通知级别设置为watch and custom with failed p
  • 我们可以使用 nlmrt 包中的 nlxb 进行预测吗?

    我问这个问题是因为我不明白为什么nlxb拟合函数不能与 Predict 函数一起使用 我一直在寻找解决这个问题的方法 但到目前为止还没有运气 I use dplyr对数据进行分组并使用do适合每个组使用nlxb from nlmrt包裹 这
  • IIS、Asp.NET 管道和并发性

    我想知道 Web 应用程序中的并发实际上是如何工作的 我读过几篇文章 据我了解 HttpApplication 的多个实例将同时工作 现在 我创建了一个简单的 Web 应用程序来测试并发性 并将以下内容放入 global asax prot
  • IIS7 集成与经典管道 - 哪个使用更多 ASP.NET 线程?

    通过集成管道 所有请求都通过 ASP NET 传递 包括图像 CSS 而在经典管道中 默认情况下仅通过 ASP NET 传递对 ASPX 页面的请求 集成管道会对线程使用产生负面影响吗 假设我从 IIS 服务器请求 500 MB 二进制文件
  • C# - 管道式事件模型

    在 ASP NET Web 应用程序中 事件按特定顺序触发 为了简单起见加载 gt 验证 gt 回发 gt 渲染 假设我想开发这样的管道式事件 例子 活动1 观众正在聚集 各位 活动2和活动3请等待 直到我发出信号 事件 1 完成任务后 活
  • 在获得响应之前发出多个请求

    当并行发送多个请求时 在获得响应之前 我无法理解 HTTP 的工作原理 有两种情况 1 With Connection Keep Alive 根据HTTP规范 http www w3 org Protocols rfc2616 rfc261
  • 属性错误:未找到下层;在 scikit-learn 中使用带有 CountVectorizer 的 Pipeline

    我有一个这样的语料库 X train this is an dummy example in reality this line is very long here is a last text in the training set 和一
  • 从 azure pipeline.yml 将变量组参数传递到模板时出现问题

    我已经声明了一个变量组Agile Connections 如下所示 该组对任何管道没有任何限制 我正在使用另一个名为 vars yml 的模板来存储一些其他变量 variables group Agile Connections name

随机推荐